Contract 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38

Contract Overview

Balance:
0.22 BNB

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6dc0e02dedc0f208c6820f346f746ddd654da481b92f68cb64bf4d2007f30a5eLeave Guild Memb...124164102021-09-16 12:35:268 days 13 hrs ago0x0640434e5feb1b30de55960067e163ba84ad5172 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00032323
0xd974badd8cf69003840f36a804fa9f687346fa36472c78120daa16a36f1ce498Leave Guild Memb...124110492021-09-16 8:06:518 days 17 hrs ago0x0640434e5feb1b30de55960067e163ba84ad5172 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00069248
0x29cb752f451c70a76d652dbb59eccebcc181fa1aba05c0dc87762d34e2486479Join Guild123956642021-09-15 19:17:319 days 6 hrs ago0xbc83cf78db656ed25cd927acb1f291c90c6a004b IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00143801
0xc751b1b0d7879813352e6a526ec8236e4f25cd2758194e3ef8e517b1d6765246List NFT123955962021-09-15 19:14:079 days 6 hrs ago0x2b509adb76dd35f3b6be623f190011f15be22968 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.0030284
0x6876da9597de8274e4bd1899f2a7ba6f0254c4715b7fac229acf29fe2a68b45dList NFT123955502021-09-15 19:11:499 days 6 hrs ago0x2b509adb76dd35f3b6be623f190011f15be22968 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.00291758
0xd41855fd4ff9428b3d14c7cd1b55d28c601c825b2715308465fdb67083908dd7List NFT123954412021-09-15 19:06:229 days 6 hrs ago0x2b509adb76dd35f3b6be623f190011f15be22968 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.00302852
0x4a54e0dd23e60b8372a2e79121c326fbc41b8a368db6e4eb4fcbbeb8b18d807dList NFT123953492021-09-15 19:01:469 days 6 hrs ago0x2b509adb76dd35f3b6be623f190011f15be22968 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.00291758
0xda5b1e455c812e1975a7088be83ab5ebe7c1748998c26fc2b1e27d887a71927eList NFT123952592021-09-15 18:57:169 days 6 hrs ago0x2b509adb76dd35f3b6be623f190011f15be22968 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.0030284
0x4fae5990430f8dffae60d923e78b346d32ea638ed93774d9261e5f756c3c1612List NFT123952432021-09-15 18:56:289 days 6 hrs ago0x0640434e5feb1b30de55960067e163ba84ad5172 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.00291758
0x216e36e89bd960d404a3263bff78e89dbb919a4b3338aadd310223d6e429a693List NFT123952342021-09-15 18:56:019 days 6 hrs ago0x572a49442b8b7e47bae73d6ec783eac3b827aa1b IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.00291758
0xe74f57e73e4a2a746c7bd042067cdb779be295e61de241e3e322c8d2572c9b7eList NFT123951752021-09-15 18:53:049 days 6 hrs ago0x2b509adb76dd35f3b6be623f190011f15be22968 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.0030284
0x2f9cb6f05948ef8d47c46551de733e0ca57ce83328324ef45dcd30c212cde4e2Rent NFT123951342021-09-15 18:51:019 days 6 hrs ago0x572a49442b8b7e47bae73d6ec783eac3b827aa1b IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00060027
0x5258ee656171514e8521580100fc5f9aebea38930c576ffcbaec0b620ffeb7e3List NFT123951172021-09-15 18:50:109 days 6 hrs ago0x2b509adb76dd35f3b6be623f190011f15be22968 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.0030284
0x29b94d97eec4b8edaf399320a5f916ca4302ab1499b421e27dbb1c1f6af24f27List NFT123951082021-09-15 18:49:439 days 6 hrs ago0x2b509adb76dd35f3b6be623f190011f15be22968 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.0030284
0xaaead08cffcdadee3aab40a56e47efdc5514c41e26468aea2fb913bb26303558Approve Guild Me...123950972021-09-15 18:49:109 days 6 hrs ago0x572a49442b8b7e47bae73d6ec783eac3b827aa1b IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00089413
0x6099d3b4ac845a75a8a4927fa2756793b74b126ea132389b5ff8b66412816b41Join Guild123950822021-09-15 18:48:259 days 6 hrs ago0x2b509adb76dd35f3b6be623f190011f15be22968 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00158801
0x498ee0ea6930255d2c9d458fffb7799b92f0fba904f07b9c4a068f2439c0fb38Set Duration123950272021-09-15 18:45:409 days 6 hrs ago0xdf83d232effdcbbd181c77f3e4ca872c4bcdfd8d IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00027494
0x6a8e90b72d0a55734261e111b9641184d4a335dbe1309aab9c216329919b5d35Rent NFT123949652021-09-15 18:42:349 days 6 hrs ago0x572a49442b8b7e47bae73d6ec783eac3b827aa1b IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00060027
0xc2c727830746d31bb0ea6ab8f9c8e0c8f2af30494cc28f0684a37d658db5ad7eList NFT123948242021-09-15 18:35:319 days 7 hrs ago0x0640434e5feb1b30de55960067e163ba84ad5172 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.00291758
0x007e7ac97609a7e2184f97823393184160ec4d981804bcb0b89a1558b2de99baList NFT123947942021-09-15 18:34:019 days 7 hrs ago0x0640434e5feb1b30de55960067e163ba84ad5172 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.00291758
0x098e1dd2da01a91641c68bc843e8b7dbfa9e22890fe2b57bad8557f1c1c2d48aRent NFT123947612021-09-15 18:32:229 days 7 hrs ago0x572a49442b8b7e47bae73d6ec783eac3b827aa1b IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00060027
0x367bb8c9ddad5bf996c2f7724c5ff7e0845da285f946a2c5768fb75614092835Rent NFT123945432021-09-15 18:21:289 days 7 hrs ago0x0640434e5feb1b30de55960067e163ba84ad5172 IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00060027
0xcb380aa5add5ffaacef7db8b0f2516586cba5285f701957a018b6da78aab10a8List NFT123944342021-09-15 18:16:019 days 7 hrs ago0xdf83d232effdcbbd181c77f3e4ca872c4bcdfd8d IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB0.00291758
0x93a873262ba80330f90ddeba06e6f01660057a641144a6381cfcacff0b4ce607Leave Guild Memb...123942302021-09-15 18:05:499 days 7 hrs ago0xbc83cf78db656ed25cd927acb1f291c90c6a004b IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00069248
0x2030cb22f924a3d19ecf80a93be21e3a6bb33534a9183429bb2528d865f6d9aeRent NFT123942272021-09-15 18:05:409 days 7 hrs ago0x572a49442b8b7e47bae73d6ec783eac3b827aa1b IN  0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB0.00060027
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6dc0e02dedc0f208c6820f346f746ddd654da481b92f68cb64bf4d2007f30a5e124164102021-09-16 12:35:268 days 13 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x6379a0a44c53640c8da395bdd36733dcba7475320 BNB
0x6dc0e02dedc0f208c6820f346f746ddd654da481b92f68cb64bf4d2007f30a5e124164102021-09-16 12:35:268 days 13 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x6379a0a44c53640c8da395bdd36733dcba7475320 BNB
0xd974badd8cf69003840f36a804fa9f687346fa36472c78120daa16a36f1ce498124110492021-09-16 8:06:518 days 17 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x6379a0a44c53640c8da395bdd36733dcba7475320 BNB
0xd974badd8cf69003840f36a804fa9f687346fa36472c78120daa16a36f1ce498124110492021-09-16 8:06:518 days 17 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x6379a0a44c53640c8da395bdd36733dcba7475320 BNB
0xd974badd8cf69003840f36a804fa9f687346fa36472c78120daa16a36f1ce498124110492021-09-16 8:06:518 days 17 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x6379a0a44c53640c8da395bdd36733dcba7475320 BNB
0x29cb752f451c70a76d652dbb59eccebcc181fa1aba05c0dc87762d34e2486479123956642021-09-15 19:17:319 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x6379a0a44c53640c8da395bdd36733dcba7475320 BNB
0x29cb752f451c70a76d652dbb59eccebcc181fa1aba05c0dc87762d34e2486479123956642021-09-15 19:17:319 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x6379a0a44c53640c8da395bdd36733dcba7475320 BNB
0x29cb752f451c70a76d652dbb59eccebcc181fa1aba05c0dc87762d34e2486479123956642021-09-15 19:17:319 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x6379a0a44c53640c8da395bdd36733dcba7475320 BNB
0xc751b1b0d7879813352e6a526ec8236e4f25cd2758194e3ef8e517b1d6765246123955962021-09-15 19:14:079 days 6 hrs ago 0x7cc4b72c4d0f516b9d510a1d363222a93f7de058 0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB
0xc751b1b0d7879813352e6a526ec8236e4f25cd2758194e3ef8e517b1d6765246123955962021-09-15 19:14:079 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
0xc751b1b0d7879813352e6a526ec8236e4f25cd2758194e3ef8e517b1d6765246123955962021-09-15 19:14:079 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB
0xc751b1b0d7879813352e6a526ec8236e4f25cd2758194e3ef8e517b1d6765246123955962021-09-15 19:14:079 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
0xc751b1b0d7879813352e6a526ec8236e4f25cd2758194e3ef8e517b1d6765246123955962021-09-15 19:14:079 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
0x6876da9597de8274e4bd1899f2a7ba6f0254c4715b7fac229acf29fe2a68b45d123955502021-09-15 19:11:499 days 6 hrs ago 0x7cc4b72c4d0f516b9d510a1d363222a93f7de058 0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB
0x6876da9597de8274e4bd1899f2a7ba6f0254c4715b7fac229acf29fe2a68b45d123955502021-09-15 19:11:499 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
0x6876da9597de8274e4bd1899f2a7ba6f0254c4715b7fac229acf29fe2a68b45d123955502021-09-15 19:11:499 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB
0x6876da9597de8274e4bd1899f2a7ba6f0254c4715b7fac229acf29fe2a68b45d123955502021-09-15 19:11:499 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
0x6876da9597de8274e4bd1899f2a7ba6f0254c4715b7fac229acf29fe2a68b45d123955502021-09-15 19:11:499 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
0xd41855fd4ff9428b3d14c7cd1b55d28c601c825b2715308465fdb67083908dd7123954412021-09-15 19:06:229 days 6 hrs ago 0x7cc4b72c4d0f516b9d510a1d363222a93f7de058 0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB
0xd41855fd4ff9428b3d14c7cd1b55d28c601c825b2715308465fdb67083908dd7123954412021-09-15 19:06:229 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
0xd41855fd4ff9428b3d14c7cd1b55d28c601c825b2715308465fdb67083908dd7123954412021-09-15 19:06:229 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0xf040a634ceb762bd43c8fedde5b16f59d51ebe380.01 BNB
0xd41855fd4ff9428b3d14c7cd1b55d28c601c825b2715308465fdb67083908dd7123954412021-09-15 19:06:229 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
0xd41855fd4ff9428b3d14c7cd1b55d28c601c825b2715308465fdb67083908dd7123954412021-09-15 19:06:229 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
0x4a54e0dd23e60b8372a2e79121c326fbc41b8a368db6e4eb4fcbbeb8b18d807d123953492021-09-15 19:01:469 days 6 hrs ago 0x7cc4b72c4d0f516b9d510a1d363222a93f7de058 0xf040a634ceb762bd43c8fedde5b16f59d51ebe380 BNB
0x4a54e0dd23e60b8372a2e79121c326fbc41b8a368db6e4eb4fcbbeb8b18d807d123953492021-09-15 19:01:469 days 6 hrs ago 0xf040a634ceb762bd43c8fedde5b16f59d51ebe38 0x7cc4b72c4d0f516b9d510a1d363222a93f7de0580 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xa389171a823751f5ef500742ad22e91229764d24

Contract Name:
GuildRentalContract

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-09-15
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721Holder is IERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract TokenRecover is Ownable {
    function recoverERC20(address tokenAddress, uint256 tokenAmount) public virtual onlyOwner {
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }
}

interface IERC721 {
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
}

contract GuildRentalContract is Ownable, TokenRecover, ERC721Holder {

    using SafeERC20 for IERC20;

    IERC20 public Token;
    IERC721 public Factory;

    uint256 public Guild_Creation_Fee = 5 * 1E18;
    uint256 public Guild_Utility_Fee = 1 * 1E18;

    struct Guild {
        string guild_id;
        uint role;
    }

    struct Listing {
        address owner;
        address borrower;
        uint256 nftId;
        uint256 timestamp;
        uint256 listingId;
        string guildId;
        uint256 o_reward;
        uint256 b_reward;
    }

    mapping (address => Guild) public guilds;

    Listing[] public _listings;
    uint256 public totalListing = 0;

    mapping (address => bool) private gameMaster;
    mapping (address => uint) public rentals;

    uint public ownerShare = 40;
    uint public borrowerShare = 60;
    uint public duration = 43200 minutes; // 30 days
    uint256 public LIST_FEE = 0.01 * 1E18;

    event GuildCreation(address indexed account, uint256 fee, string guildId);

    event Listed(address indexed account, uint256 id, string guildId, uint256 listId, uint256 totalListing);
    event RewardClaimed(address indexed account, uint256 reward);
    event Rent(address indexed account, uint256 listId);
    event Restaked(address indexed account, uint256 id, uint256 listId);
    event Withdrawn(address indexed account, uint256 id, uint256 listId);
    event Harvest(address indexed account, uint256 id, uint256 listId, uint256 reward);

    constructor(address _token, address _factory) {
        Token = IERC20(_token);
        Factory = IERC721(_factory);
        gameMaster[msg.sender] = true;
    }

    function setFee(uint256 _creation, uint256 _utility) external onlyOwner {
        Guild_Creation_Fee = _creation;
        Guild_Utility_Fee = _utility;
    }

    function createGuild(string calldata _guild_id) external {
        require(Token.balanceOf(msg.sender) >= Guild_Creation_Fee , "Insufficient balance.");
        require(Token.allowance(msg.sender, address(this)) >= Guild_Creation_Fee , "Insufficient allowance.");  

        string memory empty = "";
        require(keccak256(bytes(guilds[msg.sender].guild_id)) == keccak256(bytes(empty)), "Caller already joined a guild.");

        guilds[msg.sender].guild_id = _guild_id;
        guilds[msg.sender].role = 0;  

        Token.safeTransferFrom(msg.sender, address(this), Guild_Creation_Fee);
        emit GuildCreation(msg.sender, Guild_Creation_Fee, _guild_id);
    }

    function joinGuild(string calldata _guild_id) external {
        require(Token.balanceOf(msg.sender) >= Guild_Utility_Fee , "Insufficient balance.");
        require(Token.allowance(msg.sender, address(this)) >= Guild_Utility_Fee , "Insufficient allowance.");  

        string memory empty = "";
        require(keccak256(bytes(guilds[msg.sender].guild_id)) == keccak256(bytes(empty)), "Caller already joined a guild.");
        
        guilds[msg.sender].guild_id = _guild_id;
        guilds[msg.sender].role = 3;

        Token.safeTransferFrom(msg.sender, address(this), Guild_Creation_Fee);
    }

    function approveGuildMember(address _account, string calldata _guild_id) external {
        require(Token.balanceOf(msg.sender) >= Guild_Utility_Fee  , "Insufficient balance.");   
        require(Token.allowance(msg.sender, address(this)) >= Guild_Utility_Fee , "Insufficient allowance.");    

        require(keccak256(bytes(guilds[msg.sender].guild_id)) == keccak256(bytes(_guild_id)), "Wrong guild.");        
        require(guilds[msg.sender].role <= 1, "Leader or co-leader permission required.");

        guilds[_account].guild_id = _guild_id;
        guilds[_account].role = 2;

        Token.safeTransferFrom(msg.sender, address(this), Guild_Utility_Fee);
    }

    function promoteGuildMember(address _account, string calldata _guild_id) external {
        require(Token.balanceOf(msg.sender) >= Guild_Utility_Fee  , "Insufficient balance.");   
        require(Token.allowance(msg.sender, address(this)) >= Guild_Utility_Fee , "Insufficient allowance.");    
        require(keccak256(bytes(guilds[msg.sender].guild_id)) == keccak256(bytes(_guild_id)), "Wrong guild.");  
        
        require(guilds[msg.sender].role <= 1, "Leader or co-leader permission required.");
        require(guilds[msg.sender].role < guilds[_account].role, "Higher role required.");

        if (guilds[_account].role > 0) {
            guilds[_account].role = guilds[_account].role - 1;
        }

        Token.safeTransferFrom(msg.sender, address(this), Guild_Utility_Fee);
    }


    function demoteGuildMember(address _account, string calldata _guild_id) external {
        require(Token.balanceOf(msg.sender) >= Guild_Utility_Fee  , "Insufficient balance.");   
        require(Token.allowance(msg.sender, address(this)) >= Guild_Utility_Fee , "Insufficient allowance.");    
        require(keccak256(bytes(guilds[msg.sender].guild_id)) == keccak256(bytes(_guild_id)), "Wrong guild.");  
        require(guilds[msg.sender].role <= 1, "Leader or co-leader permission required.");
        require(guilds[msg.sender].role < guilds[_account].role, "Higher role required.");

        if (guilds[_account].role < 2) {
            guilds[_account].role = guilds[_account].role + 1;
        }

        Token.safeTransferFrom(msg.sender, address(this), Guild_Utility_Fee);
    }

    function kickGuildMember(address _account, string calldata _guild_id) external {
        require(Token.balanceOf(msg.sender) >= Guild_Utility_Fee  , "Insufficient balance.");   
        require(Token.allowance(msg.sender, address(this)) >= Guild_Utility_Fee , "Insufficient allowance.");    
        require(keccak256(bytes(guilds[msg.sender].guild_id)) == keccak256(bytes(_guild_id)), "Wrong guild.");  
        require(guilds[msg.sender].role <= 1, "Leader or co-leader permission required.");
        require(guilds[msg.sender].role < guilds[_account].role, "Higher role required.");

        guilds[_account].guild_id = "";
        guilds[_account].role = 4;

        Token.safeTransferFrom(msg.sender, address(this), Guild_Utility_Fee);
    }

    function leaveGuildMember() external {
        require(Token.balanceOf(msg.sender) >= Guild_Utility_Fee  , "Insufficient balance.");   
        require(Token.allowance(msg.sender, address(this)) >= Guild_Utility_Fee , "Insufficient allowance.");   

        string memory empty = "";
        require(keccak256(bytes(guilds[msg.sender].guild_id)) != keccak256(bytes(empty)), "Wrong guild.");  

        guilds[msg.sender].guild_id = "";
        guilds[msg.sender].role = 4;

        Token.safeTransferFrom(msg.sender, address(this), Guild_Utility_Fee);
    }

    receive() external payable { }

    function withdrawBNB(address _account) external onlyOwner {
        (bool success,) = _account.call{value: address(this).balance}("");
        require(success, "Failed to send Ether");
    }




    function listNFT(uint256 _id) payable external {
        require(Factory.ownerOf(_id) == msg.sender, "Insufficient balance");
        require(Factory.isApprovedForAll(msg.sender, address(this)), "Insufficient allowance");
        require(msg.value >= LIST_FEE, "Insufficient fee.");
        
        string memory empty = "";
        require(keccak256(bytes(guilds[msg.sender].guild_id)) != keccak256(bytes(empty)), "Guild required.");  

        uint listId = _listings.length;
        _listings.push();
        Listing storage lis = _listings[listId];

        lis.owner = msg.sender;
        lis.nftId = _id;
        lis.timestamp = block.timestamp;
        lis.listingId = listId;
        lis.guildId = guilds[msg.sender].guild_id;
        lis.borrower = address(0);
        lis.o_reward = 0;
        lis.b_reward = 0;

        totalListing += 1;

        (bool success,) = address(this).call{value: msg.value}("");
        require(success, "Failed to send Ether");

        Factory.safeTransferFrom(msg.sender, address(this), _id);
        emit Listed(msg.sender, _id, guilds[msg.sender].guild_id, listId, totalListing);
    }

    function withdrawNFT(uint256 _listId) external {
        Listing storage lis = _listings[_listId];
        require( (lis.timestamp + duration) < block.timestamp, "Listing locked.");
        require(msg.sender == lis.owner, "Caller is not owner.");

        Token.safeTransferFrom(address(this), lis.owner, lis.o_reward);
        Token.safeTransferFrom(address(this), lis.borrower, lis.b_reward);
        emit Withdrawn(msg.sender, lis.nftId, _listId);

        lis.o_reward = 0;
        lis.b_reward = 0;

        totalListing -= 1;
        Factory.safeTransferFrom(address(this), msg.sender, lis.nftId);
        emit Withdrawn(msg.sender, lis.nftId, _listId);
    }


    function rentNFT(uint256 _listId) external {
        Listing storage lis = _listings[_listId];
        require( (lis.timestamp + duration) > block.timestamp, "Listing is not available.");
        require(lis.borrower == address(0), "Listing occupied.");
        require(lis.owner != msg.sender, "Caller is listing owner.");

        require(keccak256(bytes(lis.guildId)) == keccak256(bytes(guilds[msg.sender].guild_id)), "Guild required."); 

        lis.borrower = msg.sender;
        rentals[msg.sender] += 1;

        emit Rent(msg.sender, _listId);
    }

    function rentalsOf(address _borrower) public view returns (Listing[] memory) {
        Listing[] memory lis = new Listing[](rentals[_borrower]);
        uint counter;
        for(uint i = 0; i < _listings.length; i++) {
            if (_listings[i].borrower != _borrower) continue;
                lis[counter] = _listings[i];
                counter++;
        }
        return lis;
    }

    function getGuildOpenListingCount(string calldata _guild_id) public view returns (uint) {
        uint counter;
        for(uint i = 0; i < _listings.length; i++) {
            if ( (_listings[i].timestamp + duration) < block.timestamp || keccak256(bytes( _listings[i].guildId)) != keccak256(bytes(_guild_id)) || _listings[i].borrower != address(0) ) continue;
            counter++;
        }
        return counter;
    }

    function getGuildRentedListingCount(string calldata _guild_id) public view returns (uint) {
        uint counter;
        for(uint i = 0; i < _listings.length; i++) {
            if ( (_listings[i].timestamp + duration) < block.timestamp || keccak256(bytes( _listings[i].guildId)) != keccak256(bytes(_guild_id)) || _listings[i].borrower == address(0) ) continue;
            counter++;
        }
        return counter;
    }

    function getGuildExpiredListingCount(string calldata _guild_id, address _account) public view returns (uint) {
        uint counter;
        for(uint i = 0; i < _listings.length; i++) {
            if ( (_listings[i].timestamp + duration) > block.timestamp || keccak256(bytes( _listings[i].guildId)) != keccak256(bytes(_guild_id)) || ( _listings[i].borrower != _account && _listings[i].owner != _account ) ) continue;
            counter++;
        }
        return counter;
    }


    function openListing(string calldata _guild_id) public view returns (Listing[] memory) {
        Listing[] memory lis = new Listing[](getGuildOpenListingCount(_guild_id));
        uint counter;
        for(uint i = 0; i < _listings.length; i++) {
            if ( (_listings[i].timestamp + duration) < block.timestamp || keccak256(bytes( _listings[i].guildId)) != keccak256(bytes(_guild_id)) || _listings[i].borrower != address(0) ) continue;
            lis[counter] = _listings[i];
            counter++;
        }
        return lis;
    }

    function rentedListing(string calldata _guild_id) public view returns (Listing[] memory) {
        Listing[] memory lis = new Listing[](getGuildRentedListingCount(_guild_id));
        uint counter;
        for(uint i = 0; i < _listings.length; i++) {
            if ( (_listings[i].timestamp + duration) < block.timestamp || keccak256(bytes( _listings[i].guildId)) != keccak256(bytes(_guild_id)) || _listings[i].borrower == address(0) ) continue;
            lis[counter] = _listings[i];
            counter++;
        }
        return lis;
    }

    function expiredListing(string calldata _guild_id, address _account) public view returns (Listing[] memory) {
        Listing[] memory lis = new Listing[](getGuildExpiredListingCount(_guild_id,_account));
        uint counter;
        for(uint i = 0; i < _listings.length; i++) {
            if ( (_listings[i].timestamp + duration) > block.timestamp || keccak256(bytes( _listings[i].guildId)) != keccak256(bytes(_guild_id)) || ( _listings[i].borrower != _account && _listings[i].owner != _account ) || ( _listings[i].o_reward == 0 && _listings[i].b_reward == 0 ) ) continue;
            lis[counter] = _listings[i];
            counter++;
        }
        return lis;
    }

    function claimReward(uint256 _listId, bool _restake) payable external {
        Listing storage lis = _listings[_listId];
        require( lis.owner == msg.sender || lis.borrower == msg.sender, "Caller is not owner or borrower");
        require( (lis.timestamp + duration) < block.timestamp, "Listing locked.");
        require( lis.o_reward > 0 || lis.b_reward > 0, "Nothing to claim.");

        if(msg.sender == lis.owner) {
            require( lis.o_reward > 0, "No reward to owner.");
            uint256 amount = lis.o_reward;
            lis.o_reward = 0;
            Token.safeTransferFrom(address(this), msg.sender, amount);
            emit RewardClaimed(msg.sender, amount);
            totalListing -= 1;

            if(_restake) {

                require(msg.value >= LIST_FEE, "Insufficient fee.");

                string memory empty = "";
                require(keccak256(bytes(guilds[msg.sender].guild_id)) != keccak256(bytes(empty)), "Guild required.");  

                uint NlistId = _listings.length;
                _listings.push();
                Listing storage Nlis = _listings[NlistId];

                Nlis.owner = msg.sender;
                Nlis.nftId = lis.nftId;
                Nlis.timestamp = block.timestamp;
                Nlis.listingId = NlistId;
                Nlis.guildId = guilds[msg.sender].guild_id;
                Nlis.borrower = address(0);
                Nlis.o_reward = 0;
                Nlis.b_reward = 0;

                totalListing += 1;

                (bool success,) = address(this).call{value: msg.value}("");
                require(success, "Failed to send Ether");

                emit Listed(msg.sender, lis.nftId, guilds[msg.sender].guild_id, NlistId, totalListing);
            } else {
                Factory.safeTransferFrom(address(this), msg.sender, lis.nftId);
                emit Withdrawn(msg.sender, lis.nftId, _listId);
            }

        } else if(msg.sender == lis.borrower) {
            require( lis.b_reward > 0, "No reward to borrower.");
            uint256 amount = lis.b_reward;
            lis.b_reward = 0;
            Token.safeTransferFrom(address(this), msg.sender, amount);
            emit RewardClaimed(msg.sender, amount);
        }

    }

    function setGameMaster(address _gm, bool _allow) external onlyOwner {
        gameMaster[_gm] = _allow;
    }

    function isGameMaster(address _address) public view returns (bool) {
        return gameMaster[_address];
    }

    function setShare(uint _ownerShare, uint _borrowerShare) external onlyOwner {
        borrowerShare = _borrowerShare;
        ownerShare = _ownerShare;
    }

    function distributeReward(uint256 _listId, uint256 _amount) external {
        Listing storage lis = _listings[_listId];
        require(isGameMaster(msg.sender), "Caller is not game master.");

        uint256 total = _amount;
        uint256 tOwener = total * ownerShare / 100;
        uint256 tBorrower = total * borrowerShare / 100;

        lis.o_reward += tOwener;
        lis.b_reward += tBorrower;
    }

    function setDuration(uint _duration) external onlyOwner {
        duration = _duration * 1 minutes;
    }

    function setListFee(uint256 _fee) external onlyOwner {
        LIST_FEE = _fee;
    }

    function harvestReward(uint256 _listId) external {
        Listing storage lis = _listings[_listId];
        require(msg.sender == lis.owner || msg.sender == lis.borrower, "Caller not owner or borrower.");
        uint256 reward = 0;
        if (msg.sender == lis.owner) {
            require(lis.o_reward > 0, "Owner has 0 reward to harvest.");
            reward = lis.o_reward;
            lis.o_reward = 0;
        }

        if  (msg.sender == lis.borrower) {
            require(lis.b_reward > 0, "Borrower has 0 reward to harvest.");
            reward = lis.b_reward;
            lis.b_reward = 0;
        }

        Token.safeTransferFrom(address(this), msg.sender, reward);
        emit Harvest(msg.sender, lis.nftId, _listId, reward);
    }

    function insertNewGuildWithMember(address[] calldata _address, string[] calldata _guilds, uint[] calldata _roles) external onlyOwner {
        for(uint i=0; i<_address.length; i++) {
            guilds[_address[i]].role = _roles[i];
            guilds[_address[i]].guild_id = _guilds[i];
        }
    }

    function sendRentalReward(uint256 _listId, uint256 _amount) external {
        require(Token.balanceOf(address(this)) >= _amount, "Insufficient fund in contract");
        Listing storage lis = _listings[_listId];
        require(isGameMaster(msg.sender), "Caller is not game master.");
        uint256 owner_reward = _amount * ownerShare / 100;
        uint256 borrower_reward = _amount * borrowerShare / 100;
        
        Token.safeTransfer(lis.owner,owner_reward);
        Token.safeTransfer(lis.borrower,borrower_reward);
    }

    function sendReward(address _receiver, uint256 _amount) external {
        require(Token.balanceOf(address(this)) >= _amount, "Insufficient fund in contract");
        require(isGameMaster(msg.sender), "Caller is not game master.");
        Token.safeTransfer(_receiver, _amount);
    }


}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"string","name":"guildId","type":"string"}],"name":"GuildCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"listId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"string","name":"guildId","type":"string"},{"indexed":false,"internalType":"uint256","name":"listId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalListing","type":"uint256"}],"name":"Listed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"listId","type":"uint256"}],"name":"Rent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"listId","type":"uint256"}],"name":"Restaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"listId","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"Factory","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Guild_Creation_Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Guild_Utility_Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIST_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_listings","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"listingId","type":"uint256"},{"internalType":"string","name":"guildId","type":"string"},{"internalType":"uint256","name":"o_reward","type":"uint256"},{"internalType":"uint256","name":"b_reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_guild_id","type":"string"}],"name":"approveGuildMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"borrowerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_listId","type":"uint256"},{"internalType":"bool","name":"_restake","type":"bool"}],"name":"claimReward","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_guild_id","type":"string"}],"name":"createGuild","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_guild_id","type":"string"}],"name":"demoteGuildMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_listId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"distributeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_guild_id","type":"string"},{"internalType":"address","name":"_account","type":"address"}],"name":"expiredListing","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"listingId","type":"uint256"},{"internalType":"string","name":"guildId","type":"string"},{"internalType":"uint256","name":"o_reward","type":"uint256"},{"internalType":"uint256","name":"b_reward","type":"uint256"}],"internalType":"struct GuildRentalContract.Listing[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_guild_id","type":"string"},{"internalType":"address","name":"_account","type":"address"}],"name":"getGuildExpiredListingCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_guild_id","type":"string"}],"name":"getGuildOpenListingCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_guild_id","type":"string"}],"name":"getGuildRentedListingCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"guilds","outputs":[{"internalType":"string","name":"guild_id","type":"string"},{"internalType":"uint256","name":"role","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_listId","type":"uint256"}],"name":"harvestReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"string[]","name":"_guilds","type":"string[]"},{"internalType":"uint256[]","name":"_roles","type":"uint256[]"}],"name":"insertNewGuildWithMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isGameMaster","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_guild_id","type":"string"}],"name":"joinGuild","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_guild_id","type":"string"}],"name":"kickGuildMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"leaveGuildMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"listNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_guild_id","type":"string"}],"name":"openListing","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"listingId","type":"uint256"},{"internalType":"string","name":"guildId","type":"string"},{"internalType":"uint256","name":"o_reward","type":"uint256"},{"internalType":"uint256","name":"b_reward","type":"uint256"}],"internalType":"struct GuildRentalContract.Listing[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_guild_id","type":"string"}],"name":"promoteGuildMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_listId","type":"uint256"}],"name":"rentNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rentals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_borrower","type":"address"}],"name":"rentalsOf","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"listingId","type":"uint256"},{"internalType":"string","name":"guildId","type":"string"},{"internalType":"uint256","name":"o_reward","type":"uint256"},{"internalType":"uint256","name":"b_reward","type":"uint256"}],"internalType":"struct GuildRentalContract.Listing[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_guild_id","type":"string"}],"name":"rentedListing","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"listingId","type":"uint256"},{"internalType":"string","name":"guildId","type":"string"},{"internalType":"uint256","name":"o_reward","type":"uint256"},{"internalType":"uint256","name":"b_reward","type":"uint256"}],"internalType":"struct GuildRentalContract.Listing[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_listId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendRentalReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_creation","type":"uint256"},{"internalType":"uint256","name":"_utility","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gm","type":"address"},{"internalType":"bool","name":"_allow","type":"bool"}],"name":"setGameMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setListFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ownerShare","type":"uint256"},{"internalType":"uint256","name":"_borrowerShare","type":"uint256"}],"name":"setShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalListing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"withdrawBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_listId","type":"uint256"}],"name":"withdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052674563918244f40000600355670de0b6b3a764000060045560006007556028600a55603c600b5562278d00600c55662386f26fc10000600d553480156200004a57600080fd5b5060405162005226380380620052268339810160408190526200006d9162000134565b6200007833620000c7565b600180546001600160a01b039384166001600160a01b03199182161782556002805493909416921691909117909155336000908152600860205260409020805460ff191690911790556200016c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200012f57600080fd5b919050565b600080604083850312156200014857600080fd5b620001538362000117565b9150620001636020840162000117565b90509250929050565b6150aa806200017c6000396000f3fe60806040526004361061028b5760003560e01c80638108752e1161015a578063c2412676116100c1578063eb768ff61161007a578063eb768ff614610805578063f2fde38b1461081b578063f43163ac1461083b578063f669c44f1461085b578063f6be71d11461087b578063ff7164be1461089b57600080fd5b8063c24126761461073e578063c83dd2311461075e578063d076f13f1461077e578063df76dbc914610791578063e3bcd27c146107c5578063e551ba4b146107e557600080fd5b80638ff874a8116101135780638ff874a81461067d5780639983f40f1461069d5780639d49a31f146106bd578063a5dee369146106dd578063a75859e1146106fd578063bd42e3641461072b57600080fd5b80638108752e1461059657806387cac475146105b65780638980f11f146105cc5780638da5cb5b146105ec5780638deddd8f1461061e5780638f1c31511461066757600080fd5b80631d048860116101fe57806363d93ed0116101b757806363d93ed0146104d457806365de1b5b146104f45780636ba85eb4146105145780636bf8e9cc14610541578063715018a614610561578063726094711461057657600080fd5b80631d048860146104295780631d7ec36b146104495780631e86b1941461046957806330a709f41461047f578063319c895b1461049f57806352f7c988146104b457600080fd5b806312cdcfca1161025057806312cdcfca1461034257806314364f1d14610362578063150b7a021461038257806317284c31146103c6578063187f026f146103f35780631c0e61dc1461040957600080fd5b80622fd19614610297578063023245d7146102b957806305a63b89146102d957806307420a411461030c5780630fb5a6b41461032c57600080fd5b3661029257005b600080fd5b3480156102a357600080fd5b506102b76102b236600461477e565b6108b1565b005b3480156102c557600080fd5b506102b76102d436600461494f565b610b3f565b3480156102e557600080fd5b506102f96102f43660046148b6565b610d66565b6040519081526020015b60405180910390f35b34801561031857600080fd5b506102b76103273660046147d3565b610e7a565b34801561033857600080fd5b506102f9600c5481565b34801561034e57600080fd5b506102b761035d3660046147ff565b610f8d565b34801561036e57600080fd5b506102b761037d36600461494f565b6110b2565b34801561038e57600080fd5b506103ad61039d366004614665565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610303565b3480156103d257600080fd5b506103e66103e13660046148b6565b6112a8565b6040516103039190614b2a565b3480156103ff57600080fd5b506102f9600d5481565b34801561041557600080fd5b506102b76104243660046148b6565b611554565b34801561043557600080fd5b506102b761044436600461494f565b6117bc565b34801561045557600080fd5b506102b761046436600461477e565b6117eb565b34801561047557600080fd5b506102f960045481565b34801561048b57600080fd5b506102b761049a36600461477e565b611a8b565b3480156104ab57600080fd5b506102b7611cb6565b3480156104c057600080fd5b506102b76104cf3660046149a6565b611eb9565b3480156104e057600080fd5b506102b76104ef36600461494f565b611eee565b34801561050057600080fd5b506102b761050f366004614745565b6120d8565b34801561052057600080fd5b506102f961052f36600461462b565b60096020526000908152604090205481565b34801561054d57600080fd5b506102b761055c3660046149a6565b61212d565b34801561056d57600080fd5b506102b761215f565b34801561058257600080fd5b506102b761059136600461462b565b612195565b3480156105a257600080fd5b506103e66105b13660046148f8565b612232565b3480156105c257600080fd5b506102f960075481565b3480156105d857600080fd5b506102b76105e73660046147d3565b61257f565b3480156105f857600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610303565b34801561062a57600080fd5b5061065761063936600461462b565b6001600160a01b031660009081526008602052604090205460ff1690565b6040519015158152602001610303565b34801561067357600080fd5b506102f9600a5481565b34801561068957600080fd5b506102b761069836600461477e565b61264a565b3480156106a957600080fd5b506102b76106b83660046149a6565b6128ac565b3480156106c957600080fd5b506102f96106d83660046148b6565b612a57565b3480156106e957600080fd5b506103e66106f83660046148b6565b612b62565b34801561070957600080fd5b5061071d61071836600461462b565b612e03565b604051610303929190614c01565b6102b7610739366004614981565b612ea7565b34801561074a57600080fd5b50600154610606906001600160a01b031681565b34801561076a57600080fd5b50600254610606906001600160a01b031681565b6102b761078c36600461494f565b61344f565b34801561079d57600080fd5b506107b16107ac36600461494f565b613867565b604051610303989796959493929190614ad0565b3480156107d157600080fd5b506102b76107e03660046149a6565b613954565b3480156107f157600080fd5b506102b76108003660046148b6565b613a32565b34801561081157600080fd5b506102f9600b5481565b34801561082757600080fd5b506102b761083636600461462b565b613c53565b34801561084757600080fd5b506103e661085636600461462b565b613ceb565b34801561086757600080fd5b506102f96108763660046148f8565b613f0d565b34801561088757600080fd5b506102b761089636600461494f565b614061565b3480156108a757600080fd5b506102f960035481565b600480546001546040516370a0823160e01b8152339381019390935290916001600160a01b03909116906370a082319060240160206040518083038186803b1580156108fc57600080fd5b505afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190614968565b101561095b5760405162461bcd60e51b815260040161095290614cf1565b60405180910390fd5b60048054600154604051636eb1769f60e11b815291926001600160a01b039091169163dd62ed3e91610991913391309101614a92565b60206040518083038186803b1580156109a957600080fd5b505afa1580156109bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e19190614968565b10156109ff5760405162461bcd60e51b815260040161095290614db2565b8181604051610a0f9291906149f4565b604080519182900382203360009081526005602052919091209091610a349190614a20565b604051809103902014610a595760405162461bcd60e51b815260040161095290614d8c565b3360009081526005602052604090206001908101541115610a8c5760405162461bcd60e51b815260040161095290614c7a565b6001600160a01b038316600090815260056020526040808220600190810154338452919092209091015410610ad35760405162461bcd60e51b815260040161095290614cc2565b60408051602080820180845260008084526001600160a01b038816815260059092529290209051610b0492906143be565b506001600160a01b03808416600090815260056020526040902060046001918201819055549054610b3a9216903390309061409c565b505050565b600060068281548110610b5457610b54615005565b9060005260206000209060080201905042600c548260030154610b779190614efd565b10610bb65760405162461bcd60e51b815260206004820152600f60248201526e2634b9ba34b733903637b1b5b2b21760891b6044820152606401610952565b80546001600160a01b03163314610c065760405162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba1037bbb732b91760611b6044820152606401610952565b80546006820154600154610c2b926001600160a01b039182169230929091169061409c565b60018082015460078301549154610c51926001600160a01b03918216923092169061409c565b6002810154604080519182526020820184905233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6910160405180910390a26000600682018190556007808301829055805460019290610cb3908490614f56565b90915550506002805490820154604051632142170760e11b81526001600160a01b03909216916342842e0e91610cef9130913391600401614aac565b600060405180830381600087803b158015610d0957600080fd5b505af1158015610d1d573d6000803e3d6000fd5b505050506002810154604080519182526020820184905233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc691015b60405180910390a25050565b60008060005b600654811015610e725742600c5460068381548110610d8d57610d8d615005565b906000526020600020906008020160030154610da99190614efd565b1080610e0457508484604051610dc09291906149f4565b604051809103902060068281548110610ddb57610ddb615005565b9060005260206000209060080201600501604051610df99190614a20565b604051809103902014155b80610e48575060006001600160a01b031660068281548110610e2857610e28615005565b60009182526020909120600160089092020101546001600160a01b031614155b15610e5257610e60565b81610e5c81614fd4565b9250505b80610e6a81614fd4565b915050610d6c565b509392505050565b6001546040516370a0823160e01b815230600482015282916001600160a01b0316906370a082319060240160206040518083038186803b158015610ebd57600080fd5b505afa158015610ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef59190614968565b1015610f435760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742066756e6420696e20636f6e74726163740000006044820152606401610952565b3360009081526008602052604090205460ff16610f725760405162461bcd60e51b815260040161095290614d20565b600154610f89906001600160a01b031683836140f4565b5050565b6000546001600160a01b03163314610fb75760405162461bcd60e51b815260040161095290614d57565b60005b858110156110a957828282818110610fd457610fd4615005565b9050602002013560056000898985818110610ff157610ff1615005565b9050602002016020810190611006919061462b565b6001600160a01b0316815260208101919091526040016000206001015584848281811061103557611035615005565b90506020028101906110479190614eb6565b600560008a8a8681811061105d5761105d615005565b9050602002016020810190611072919061462b565b6001600160a01b031681526020810191909152604001600020611096929091614442565b50806110a181614fd4565b915050610fba565b50505050505050565b6000600682815481106110c7576110c7615005565b9060005260206000209060080201905042600c5482600301546110ea9190614efd565b116111375760405162461bcd60e51b815260206004820152601960248201527f4c697374696e67206973206e6f7420617661696c61626c652e000000000000006044820152606401610952565b60018101546001600160a01b0316156111865760405162461bcd60e51b81526020600482015260116024820152702634b9ba34b7339037b1b1bab834b2b21760791b6044820152606401610952565b80546001600160a01b03163314156111e05760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206c697374696e67206f776e65722e00000000000000006044820152606401610952565b336000908152600560205260409081902090516111fd9190614a20565b6040518091039020816005016040516112169190614a20565b60405180910390201461123b5760405162461bcd60e51b815260040161095290614c23565b600180820180546001600160a01b0319163390811790915560009081526009602052604081208054909190611271908490614efd565b909155505060405182815233907f57a7e13d790d598bb62701531a159865fb0e418d4e460477512186f9f310bc5990602001610d5a565b606060006112b68484610d66565b67ffffffffffffffff8111156112ce576112ce61501b565b60405190808252806020026020018201604052801561130757816020015b6112f46144b6565b8152602001906001900390816112ec5790505b5090506000805b60065481101561154a5742600c546006838154811061132f5761132f615005565b90600052602060002090600802016003015461134b9190614efd565b10806113a6575085856040516113629291906149f4565b60405180910390206006828154811061137d5761137d615005565b906000526020600020906008020160050160405161139b9190614a20565b604051809103902014155b806113ea575060006001600160a01b0316600682815481106113ca576113ca615005565b60009182526020909120600160089092020101546001600160a01b031614155b156113f457611538565b6006818154811061140757611407615005565b60009182526020918290206040805161010081018252600890930290910180546001600160a01b03908116845260018201541693830193909352600283015490820152600382015460608201526004820154608082015260058201805491929160a08401919061147690614f99565b80601f01602080910402602001604051908101604052809291908181526020018280546114a290614f99565b80156114ef5780601f106114c4576101008083540402835291602001916114ef565b820191906000526020600020905b8154815290600101906020018083116114d257829003601f168201915b505050505081526020016006820154815260200160078201548152505083838151811061151e5761151e615005565b6020026020010181905250818061153490614fd4565b9250505b8061154281614fd4565b91505061130e565b5090949350505050565b6003546001546040516370a0823160e01b81523360048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561159a57600080fd5b505afa1580156115ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d29190614968565b10156115f05760405162461bcd60e51b815260040161095290614cf1565b600354600154604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e906116259033903090600401614a92565b60206040518083038186803b15801561163d57600080fd5b505afa158015611651573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116759190614968565b10156116935760405162461bcd60e51b815260040161095290614db2565b60408051602080820183526000808352338152600590915282902091519091600080516020615055833981519152916116cc9190614a20565b6040518091039020146117215760405162461bcd60e51b815260206004820152601e60248201527f43616c6c657220616c7265616479206a6f696e65642061206775696c642e00006044820152606401610952565b33600090815260056020526040902061173b908484614442565b503360008181526005602052604081206001908101919091556003549054611770926001600160a01b0390911691309061409c565b336001600160a01b03167f372936c9f673750a6c4e74598c08c4ff0a5818d7060838e8d55fa8a2b6cb6bd060035485856040516117af93929190614de9565b60405180910390a2505050565b6000546001600160a01b031633146117e65760405162461bcd60e51b815260040161095290614d57565b600d55565b600480546001546040516370a0823160e01b8152339381019390935290916001600160a01b03909116906370a082319060240160206040518083038186803b15801561183657600080fd5b505afa15801561184a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186e9190614968565b101561188c5760405162461bcd60e51b815260040161095290614cf1565b60048054600154604051636eb1769f60e11b815291926001600160a01b039091169163dd62ed3e916118c2913391309101614a92565b60206040518083038186803b1580156118da57600080fd5b505afa1580156118ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119129190614968565b10156119305760405162461bcd60e51b815260040161095290614db2565b81816040516119409291906149f4565b6040805191829003822033600090815260056020529190912090916119659190614a20565b60405180910390201461198a5760405162461bcd60e51b815260040161095290614d8c565b33600090815260056020526040902060019081015411156119bd5760405162461bcd60e51b815260040161095290614c7a565b6001600160a01b038316600090815260056020526040808220600190810154338452919092209091015410611a045760405162461bcd60e51b815260040161095290614cc2565b6001600160a01b03831660009081526005602052604090206001015460021115611a6c576001600160a01b0383166000908152600560205260409020600190810154611a4f91614efd565b6001600160a01b0384166000908152600560205260409020600101555b600454600154610b3a916001600160a01b03909116903390309061409c565b600480546001546040516370a0823160e01b8152339381019390935290916001600160a01b03909116906370a082319060240160206040518083038186803b158015611ad657600080fd5b505afa158015611aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0e9190614968565b1015611b2c5760405162461bcd60e51b815260040161095290614cf1565b60048054600154604051636eb1769f60e11b815291926001600160a01b039091169163dd62ed3e91611b62913391309101614a92565b60206040518083038186803b158015611b7a57600080fd5b505afa158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb29190614968565b1015611bd05760405162461bcd60e51b815260040161095290614db2565b8181604051611be09291906149f4565b604080519182900382203360009081526005602052919091209091611c059190614a20565b604051809103902014611c2a5760405162461bcd60e51b815260040161095290614d8c565b3360009081526005602052604090206001908101541115611c5d5760405162461bcd60e51b815260040161095290614c7a565b6001600160a01b0383166000908152600560205260409020611c80908383614442565b506001600160a01b03808416600090815260056020526040902060026001918201556004549054610b3a9216903390309061409c565b600480546001546040516370a0823160e01b8152339381019390935290916001600160a01b03909116906370a082319060240160206040518083038186803b158015611d0157600080fd5b505afa158015611d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d399190614968565b1015611d575760405162461bcd60e51b815260040161095290614cf1565b60048054600154604051636eb1769f60e11b815291926001600160a01b039091169163dd62ed3e91611d8d913391309101614a92565b60206040518083038186803b158015611da557600080fd5b505afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190614968565b1015611dfb5760405162461bcd60e51b815260040161095290614db2565b6040805160208082018352600080835233815260059091528290209151909160008051602061505583398151915291611e349190614a20565b60405180910390201415611e5a5760405162461bcd60e51b815260040161095290614d8c565b604080516020808201808452600080845233815260059092529290209051611e8292906143be565b5033600081815260056020526040902060046001918201819055549054611eb6926001600160a01b0390911691309061409c565b50565b6000546001600160a01b03163314611ee35760405162461bcd60e51b815260040161095290614d57565b600391909155600455565b600060068281548110611f0357611f03615005565b6000918252602090912060089091020180549091506001600160a01b0316331480611f3a575060018101546001600160a01b031633145b611f865760405162461bcd60e51b815260206004820152601d60248201527f43616c6c6572206e6f74206f776e6572206f7220626f72726f7765722e0000006044820152606401610952565b80546000906001600160a01b0316331415611ffc576000826006015411611fef5760405162461bcd60e51b815260206004820152601e60248201527f4f776e65722068617320302072657761726420746f20686172766573742e00006044820152606401610952565b5060068101805460009091555b60018201546001600160a01b031633141561207c57600082600701541161206f5760405162461bcd60e51b815260206004820152602160248201527f426f72726f7765722068617320302072657761726420746f20686172766573746044820152601760f91b6064820152608401610952565b5060078101805460009091555b600154612094906001600160a01b031630338461409c565b60028201546040805191825260208201859052810182905233907f4534f107610758c3931de9ad1e176476fcfb8c74adf920167e1d54ee84fcfe76906060016117af565b6000546001600160a01b031633146121025760405162461bcd60e51b815260040161095290614d57565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146121575760405162461bcd60e51b815260040161095290614d57565b600b55600a55565b6000546001600160a01b031633146121895760405162461bcd60e51b815260040161095290614d57565b6121936000614124565b565b6000546001600160a01b031633146121bf5760405162461bcd60e51b815260040161095290614d57565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461220c576040519150601f19603f3d011682016040523d82523d6000602084013e612211565b606091505b5050905080610f895760405162461bcd60e51b815260040161095290614c4c565b60606000612241858585613f0d565b67ffffffffffffffff8111156122595761225961501b565b60405190808252806020026020018201604052801561229257816020015b61227f6144b6565b8152602001906001900390816122775790505b5090506000805b6006548110156125725742600c54600683815481106122ba576122ba615005565b9060005260206000209060080201600301546122d69190614efd565b1180612331575086866040516122ed9291906149f4565b60405180910390206006828154811061230857612308615005565b90600052602060002090600802016005016040516123269190614a20565b604051809103902014155b806123b45750846001600160a01b03166006828154811061235457612354615005565b60009182526020909120600160089092020101546001600160a01b0316148015906123b45750846001600160a01b03166006828154811061239757612397615005565b60009182526020909120600890910201546001600160a01b031614155b806124125750600681815481106123cd576123cd615005565b90600052602060002090600802016006015460001480156124125750600681815481106123fc576123fc615005565b9060005260206000209060080201600701546000145b1561241c57612560565b6006818154811061242f5761242f615005565b60009182526020918290206040805161010081018252600890930290910180546001600160a01b03908116845260018201541693830193909352600283015490820152600382015460608201526004820154608082015260058201805491929160a08401919061249e90614f99565b80601f01602080910402602001604051908101604052809291908181526020018280546124ca90614f99565b80156125175780601f106124ec57610100808354040283529160200191612517565b820191906000526020600020905b8154815290600101906020018083116124fa57829003601f168201915b505050505081526020016006820154815260200160078201548152505083838151811061254657612546615005565b6020026020010181905250818061255c90614fd4565b9250505b8061256a81614fd4565b915050612299565b50909150505b9392505050565b6000546001600160a01b031633146125a95760405162461bcd60e51b815260040161095290614d57565b816001600160a01b031663a9059cbb6125ca6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614899565b600480546001546040516370a0823160e01b8152339381019390935290916001600160a01b03909116906370a082319060240160206040518083038186803b15801561269557600080fd5b505afa1580156126a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cd9190614968565b10156126eb5760405162461bcd60e51b815260040161095290614cf1565b60048054600154604051636eb1769f60e11b815291926001600160a01b039091169163dd62ed3e91612721913391309101614a92565b60206040518083038186803b15801561273957600080fd5b505afa15801561274d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127719190614968565b101561278f5760405162461bcd60e51b815260040161095290614db2565b818160405161279f9291906149f4565b6040805191829003822033600090815260056020529190912090916127c49190614a20565b6040518091039020146127e95760405162461bcd60e51b815260040161095290614d8c565b336000908152600560205260409020600190810154111561281c5760405162461bcd60e51b815260040161095290614c7a565b6001600160a01b0383166000908152600560205260408082206001908101543384529190922090910154106128635760405162461bcd60e51b815260040161095290614cc2565b6001600160a01b03831660009081526005602052604090206001015415611a6c576001600160a01b0383166000908152600560205260409020600190810154611a4f9190614f56565b6001546040516370a0823160e01b815230600482015282916001600160a01b0316906370a082319060240160206040518083038186803b1580156128ef57600080fd5b505afa158015612903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129279190614968565b10156129755760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742066756e6420696e20636f6e74726163740000006044820152606401610952565b60006006838154811061298a5761298a615005565b906000526020600020906008020190506129bc336001600160a01b031660009081526008602052604090205460ff1690565b6129d85760405162461bcd60e51b815260040161095290614d20565b60006064600a54846129ea9190614f37565b6129f49190614f15565b905060006064600b5485612a089190614f37565b612a129190614f15565b8354600154919250612a31916001600160a01b039081169116846140f4565b6001808401549054612a50916001600160a01b039182169116836140f4565b5050505050565b60008060005b600654811015610e725742600c5460068381548110612a7e57612a7e615005565b906000526020600020906008020160030154612a9a9190614efd565b1080612af557508484604051612ab19291906149f4565b604051809103902060068281548110612acc57612acc615005565b9060005260206000209060080201600501604051612aea9190614a20565b604051809103902014155b80612b38575060006001600160a01b031660068281548110612b1957612b19615005565b60009182526020909120600160089092020101546001600160a01b0316145b15612b4257612b50565b81612b4c81614fd4565b9250505b80612b5a81614fd4565b915050612a5d565b60606000612b708484612a57565b67ffffffffffffffff811115612b8857612b8861501b565b604051908082528060200260200182016040528015612bc157816020015b612bae6144b6565b815260200190600190039081612ba65790505b5090506000805b60065481101561154a5742600c5460068381548110612be957612be9615005565b906000526020600020906008020160030154612c059190614efd565b1080612c6057508585604051612c1c9291906149f4565b604051809103902060068281548110612c3757612c37615005565b9060005260206000209060080201600501604051612c559190614a20565b604051809103902014155b80612ca3575060006001600160a01b031660068281548110612c8457612c84615005565b60009182526020909120600160089092020101546001600160a01b0316145b15612cad57612df1565b60068181548110612cc057612cc0615005565b60009182526020918290206040805161010081018252600890930290910180546001600160a01b03908116845260018201541693830193909352600283015490820152600382015460608201526004820154608082015260058201805491929160a084019190612d2f90614f99565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5b90614f99565b8015612da85780601f10612d7d57610100808354040283529160200191612da8565b820191906000526020600020905b815481529060010190602001808311612d8b57829003601f168201915b5050505050815260200160068201548152602001600782015481525050838381518110612dd757612dd7615005565b60200260200101819052508180612ded90614fd4565b9250505b80612dfb81614fd4565b915050612bc8565b600560205260009081526040902080548190612e1e90614f99565b80601f0160208091040260200160405190810160405280929190818152602001828054612e4a90614f99565b8015612e975780601f10612e6c57610100808354040283529160200191612e97565b820191906000526020600020905b815481529060010190602001808311612e7a57829003601f168201915b5050505050908060010154905082565b600060068381548110612ebc57612ebc615005565b6000918252602090912060089091020180549091506001600160a01b0316331480612ef3575060018101546001600160a01b031633145b612f3f5760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74206f776e6572206f7220626f72726f776572006044820152606401610952565b42600c548260030154612f529190614efd565b10612f915760405162461bcd60e51b815260206004820152600f60248201526e2634b9ba34b733903637b1b5b2b21760891b6044820152606401610952565b600081600601541180612fa8575060008160070154115b612fe85760405162461bcd60e51b81526020600482015260116024820152702737ba3434b733903a379031b630b4b69760791b6044820152606401610952565b80546001600160a01b03163314156133985760008160060154116130445760405162461bcd60e51b81526020600482015260136024820152722737903932bbb0b932103a379037bbb732b91760691b6044820152606401610952565b6006810180546000909155600154613067906001600160a01b031630338461409c565b60405181815233907f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72419060200160405180910390a26001600760008282546130af9190614f56565b909155505082156132e757600d543410156131005760405162461bcd60e51b815260206004820152601160248201527024b739bab33334b1b4b2b73a103332b29760791b6044820152606401610952565b60408051602080820183526000808352338152600590915282902091519091600080516020615055833981519152916131399190614a20565b6040518091039020141561315f5760405162461bcd60e51b815260040161095290614c23565b600680546001810180835560008381529192908390811061318257613182615005565b60009182526020808320600890920290910180546001600160a01b0319163390811782556002808a01549083015542600383015560048201869055835260059182905260409092208054929350908301916131dc90614f99565b6131e792919061450d565b50600180820180546001600160a01b03191690556000600683018190556007808401829055805490919061321c908490614efd565b9091555050604051600090309034908381818185875af1925050503d8060008114613263576040519150601f19603f3d011682016040523d82523d6000602084013e613268565b606091505b50509050806132895760405162461bcd60e51b815260040161095290614c4c565b60028601543360008181526005602052604090819020600754915192937f4f116690ec51afae38f5765fa59328a9e899b362dac6a5f0114a7c56d878916f936132d6939192918991614e1f565b60405180910390a250505050613392565b6002805490830154604051632142170760e11b81526001600160a01b03909216916342842e0e9161331e9130913391600401614aac565b600060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b505050506002820154604080519182526020820186905233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc691015b60405180910390a25b50505050565b60018101546001600160a01b0316331415610b3a5760008160070154116133fa5760405162461bcd60e51b81526020600482015260166024820152752737903932bbb0b932103a37903137b93937bbb2b91760511b6044820152606401610952565b600781018054600090915560015461341d906001600160a01b031630338461409c565b60405181815233907f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724190602001613389565b6002546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b15801561349357600080fd5b505afa1580156134a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cb9190614648565b6001600160a01b0316146135185760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610952565b60025460405163e985e9c560e01b81526001600160a01b039091169063e985e9c59061354a9033903090600401614a92565b60206040518083038186803b15801561356257600080fd5b505afa158015613576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359a9190614899565b6135df5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b6044820152606401610952565b600d543410156136255760405162461bcd60e51b815260206004820152601160248201527024b739bab33334b1b4b2b73a103332b29760791b6044820152606401610952565b604080516020808201835260008083523381526005909152829020915190916000805160206150558339815191529161365e9190614a20565b604051809103902014156136845760405162461bcd60e51b815260040161095290614c23565b60068054600181018083556000838152919290839081106136a7576136a7615005565b60009182526020808320600890920290910180546001600160a01b0319163390811782556002820188905542600383015560048201869055835260059182905260409092208054929350908301916136fe90614f99565b61370992919061450d565b50600180820180546001600160a01b03191690556000600683018190556007808401829055805490919061373e908490614efd565b9091555050604051600090309034908381818185875af1925050503d8060008114613785576040519150601f19603f3d011682016040523d82523d6000602084013e61378a565b606091505b50509050806137ab5760405162461bcd60e51b815260040161095290614c4c565b600254604051632142170760e11b81526001600160a01b03909116906342842e0e906137df90339030908a90600401614aac565b600060405180830381600087803b1580156137f957600080fd5b505af115801561380d573d6000803e3d6000fd5b5050336000818152600560205260409081902060075491519294507f4f116690ec51afae38f5765fa59328a9e899b362dac6a5f0114a7c56d878916f9350613858928a928991614e1f565b60405180910390a25050505050565b6006818154811061387757600080fd5b60009182526020909120600890910201805460018201546002830154600384015460048501546005860180546001600160a01b0396871698509590941695929491939092916138c590614f99565b80601f01602080910402602001604051908101604052809291908181526020018280546138f190614f99565b801561393e5780601f106139135761010080835404028352916020019161393e565b820191906000526020600020905b81548152906001019060200180831161392157829003601f168201915b5050505050908060060154908060070154905088565b60006006838154811061396957613969615005565b9060005260206000209060080201905061399b336001600160a01b031660009081526008602052604090205460ff1690565b6139b75760405162461bcd60e51b815260040161095290614d20565b600a5482906000906064906139cc9084614f37565b6139d69190614f15565b905060006064600b54846139ea9190614f37565b6139f49190614f15565b905081846006016000828254613a0a9190614efd565b9250508190555080846007016000828254613a259190614efd565b9091555050505050505050565b600480546001546040516370a0823160e01b8152339381019390935290916001600160a01b03909116906370a082319060240160206040518083038186803b158015613a7d57600080fd5b505afa158015613a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab59190614968565b1015613ad35760405162461bcd60e51b815260040161095290614cf1565b60048054600154604051636eb1769f60e11b815291926001600160a01b039091169163dd62ed3e91613b09913391309101614a92565b60206040518083038186803b158015613b2157600080fd5b505afa158015613b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b599190614968565b1015613b775760405162461bcd60e51b815260040161095290614db2565b6040805160208082018352600080835233815260059091528290209151909160008051602061505583398151915291613bb09190614a20565b604051809103902014613c055760405162461bcd60e51b815260206004820152601e60248201527f43616c6c657220616c7265616479206a6f696e65642061206775696c642e00006044820152606401610952565b336000908152600560205260409020613c1f908484614442565b5033600081815260056020526040902060036001918201819055549054610b3a926001600160a01b0390911691309061409c565b6000546001600160a01b03163314613c7d5760405162461bcd60e51b815260040161095290614d57565b6001600160a01b038116613ce25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610952565b611eb681614124565b6001600160a01b0381166000908152600960205260408120546060919067ffffffffffffffff811115613d2057613d2061501b565b604051908082528060200260200182016040528015613d5957816020015b613d466144b6565b815260200190600190039081613d3e5790505b5090506000805b600654811015613f0457846001600160a01b031660068281548110613d8757613d87615005565b60009182526020909120600160089092020101546001600160a01b031614613dae57613ef2565b60068181548110613dc157613dc1615005565b60009182526020918290206040805161010081018252600890930290910180546001600160a01b03908116845260018201541693830193909352600283015490820152600382015460608201526004820154608082015260058201805491929160a084019190613e3090614f99565b80601f0160208091040260200160405190810160405280929190818152602001828054613e5c90614f99565b8015613ea95780601f10613e7e57610100808354040283529160200191613ea9565b820191906000526020600020905b815481529060010190602001808311613e8c57829003601f168201915b5050505050815260200160068201548152602001600782015481525050838381518110613ed857613ed8615005565b60200260200101819052508180613eee90614fd4565b9250505b80613efc81614fd4565b915050613d60565b50909392505050565b60008060005b6006548110156140585742600c5460068381548110613f3457613f34615005565b906000526020600020906008020160030154613f509190614efd565b1180613fab57508585604051613f679291906149f4565b604051809103902060068281548110613f8257613f82615005565b9060005260206000209060080201600501604051613fa09190614a20565b604051809103902014155b8061402e5750836001600160a01b031660068281548110613fce57613fce615005565b60009182526020909120600160089092020101546001600160a01b03161480159061402e5750836001600160a01b03166006828154811061401157614011615005565b60009182526020909120600890910201546001600160a01b031614155b1561403857614046565b8161404281614fd4565b9250505b8061405081614fd4565b915050613f13565b50949350505050565b6000546001600160a01b0316331461408b5760405162461bcd60e51b815260040161095290614d57565b61409681603c614f37565b600c5550565b613392846323b872dd60e01b8585856040516024016140bd93929190614aac565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614174565b6040516001600160a01b038316602482015260448101829052610b3a90849063a9059cbb60e01b906064016140bd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006141c9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166142469092919063ffffffff16565b805190915015610b3a57808060200190518101906141e79190614899565b610b3a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610952565b6060614255848460008561425d565b949350505050565b6060824710156142be5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610952565b843b61430c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610952565b600080866001600160a01b031685876040516143289190614a04565b60006040518083038185875af1925050503d8060008114614365576040519150601f19603f3d011682016040523d82523d6000602084013e61436a565b606091505b509150915061437a828286614385565b979650505050505050565b60608315614394575081612578565b8251156143a45782518084602001fd5b8160405162461bcd60e51b81526004016109529190614bee565b8280546143ca90614f99565b90600052602060002090601f0160209004810192826143ec5760008555614432565b82601f1061440557805160ff1916838001178555614432565b82800160010185558215614432579182015b82811115614432578251825591602001919060010190614417565b5061443e929150614588565b5090565b82805461444e90614f99565b90600052602060002090601f0160209004810192826144705760008555614432565b82601f106144895782800160ff19823516178555614432565b82800160010185558215614432579182015b8281111561443257823582559160200191906001019061449b565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016060815260200160008152602001600081525090565b82805461451990614f99565b90600052602060002090601f01602090048101928261453b5760008555614432565b82601f1061454c5780548555614432565b8280016001018555821561443257600052602060002091601f016020900482015b8281111561443257825482559160010191906001019061456d565b5b8082111561443e5760008155600101614589565b60008083601f8401126145af57600080fd5b50813567ffffffffffffffff8111156145c757600080fd5b6020830191508360208260051b85010111156145e257600080fd5b9250929050565b60008083601f8401126145fb57600080fd5b50813567ffffffffffffffff81111561461357600080fd5b6020830191508360208285010111156145e257600080fd5b60006020828403121561463d57600080fd5b813561257881615031565b60006020828403121561465a57600080fd5b815161257881615031565b6000806000806080858703121561467b57600080fd5b843561468681615031565b9350602085013561469681615031565b925060408501359150606085013567ffffffffffffffff808211156146ba57600080fd5b818701915087601f8301126146ce57600080fd5b8135818111156146e0576146e061501b565b604051601f8201601f19908116603f011681019083821181831017156147085761470861501b565b816040528281528a602084870101111561472157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561475857600080fd5b823561476381615031565b9150602083013561477381615046565b809150509250929050565b60008060006040848603121561479357600080fd5b833561479e81615031565b9250602084013567ffffffffffffffff8111156147ba57600080fd5b6147c6868287016145e9565b9497909650939450505050565b600080604083850312156147e657600080fd5b82356147f181615031565b946020939093013593505050565b6000806000806000806060878903121561481857600080fd5b863567ffffffffffffffff8082111561483057600080fd5b61483c8a838b0161459d565b9098509650602089013591508082111561485557600080fd5b6148618a838b0161459d565b9096509450604089013591508082111561487a57600080fd5b5061488789828a0161459d565b979a9699509497509295939492505050565b6000602082840312156148ab57600080fd5b815161257881615046565b600080602083850312156148c957600080fd5b823567ffffffffffffffff8111156148e057600080fd5b6148ec858286016145e9565b90969095509350505050565b60008060006040848603121561490d57600080fd5b833567ffffffffffffffff81111561492457600080fd5b614930868287016145e9565b909450925050602084013561494481615031565b809150509250925092565b60006020828403121561496157600080fd5b5035919050565b60006020828403121561497a57600080fd5b5051919050565b6000806040838503121561499457600080fd5b82359150602083013561477381615046565b600080604083850312156149b957600080fd5b50508035926020909101359150565b600081518084526149e0816020860160208601614f6d565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251614a16818460208701614f6d565b9190910192915050565b6000808354614a2e81614f99565b60018281168015614a465760018114614a5757614a86565b60ff19841687528287019450614a86565b8760005260208060002060005b85811015614a7d5781548a820152908401908201614a64565b50505082870194505b50929695505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0389811682528816602082015260408101879052606081018690526080810185905261010060a08201819052600090614b12838201876149c8565b60c0840195909552505060e001529695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614be057888303603f19018552815180516001600160a01b0390811685528882015116888501528681015187850152606080820151908501526080808201519085015260a0808201516101008287018190529190614bb5838801826149c8565b60c0858101519089015260e09485015194909701939093525050509386019390860190600101614b51565b509098975050505050505050565b60208152600061257860208301846149c8565b604081526000614c1460408301856149c8565b90508260208301529392505050565b6020808252600f908201526e23bab4b632103932b8bab4b932b21760891b604082015260600190565b6020808252601490820152732330b4b632b2103a379039b2b7321022ba3432b960611b604082015260600190565b60208082526028908201527f4c6561646572206f7220636f2d6c6561646572207065726d697373696f6e207260408201526732b8bab4b932b21760c11b606082015260800190565b6020808252601590820152742434b3b432b9103937b632903932b8bab4b932b21760591b604082015260600190565b60208082526015908201527424b739bab33334b1b4b2b73a103130b630b731b29760591b604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742067616d65206d61737465722e000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b2bb937b7339033bab4b6321760a11b604082015260600190565b60208082526017908201527f496e73756666696369656e7420616c6c6f77616e63652e000000000000000000604082015260600190565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b8481526000602060808184015260008654614e3981614f99565b80608087015260a0600180841660008114614e5b5760018114614e6f57614e9d565b60ff1985168984015260c089019550614e9d565b8b6000528660002060005b85811015614e955781548b8201860152908301908801614e7a565b8a0184019650505b5050505050604084019590955250506060015292915050565b6000808335601e19843603018112614ecd57600080fd5b83018035915067ffffffffffffffff821115614ee857600080fd5b6020019150368190038213156145e257600080fd5b60008219821115614f1057614f10614fef565b500190565b600082614f3257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614f5157614f51614fef565b500290565b600082821015614f6857614f68614fef565b500390565b60005b83811015614f88578181015183820152602001614f70565b838111156133925750506000910152565b600181811c90821680614fad57607f821691505b60208210811415614fce57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614fe857614fe8614fef565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611eb657600080fd5b8015158114611eb657600080fdfec5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470a264697066735822122005449c6a23daaa00a67f3632f80c4092dc5799a6b86d06dac5efc3b663e7b1d864736f6c634300080700330000000000000000000000006379a0a44c53640c8da395bdd36733dcba7475320000000000000000000000007cc4b72c4d0f516b9d510a1d363222a93f7de058

Deployed ByteCode Sourcemap

14870:18433:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20382:758;;;;;;;;;;-1:-1:-1;20382:758:0;;;;;:::i;:::-;;:::i;:::-;;23136:681;;;;;;;;;;-1:-1:-1;23136:681:0;;;;;:::i;:::-;;:::i;24811:430::-;;;;;;;;;;-1:-1:-1;24811:430:0;;;;;:::i;:::-;;:::i;:::-;;;24831:25:1;;;24819:2;24804:18;24811:430:0;;;;;;;;33006:290;;;;;;;;;;-1:-1:-1;33006:290:0;;;;;:::i;:::-;;:::i;15751:36::-;;;;;;;;;;;;;;;;32138:308;;;;;;;;;;-1:-1:-1;32138:308:0;;;;;:::i;:::-;;:::i;23827:570::-;;;;;;;;;;-1:-1:-1;23827:570:0;;;;;:::i;:::-;;:::i;2377:207::-;;;;;;;;;;-1:-1:-1;2377:207:0;;;;;:::i;:::-;-1:-1:-1;;;2377:207:0;;;;;;;;;;-1:-1:-1;;;;;;12847:33:1;;;12829:52;;12817:2;12802:18;2377:207:0;12685:202:1;26186:551:0;;;;;;;;;;-1:-1:-1;26186:551:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15805:37::-;;;;;;;;;;;;;;;;16749:683;;;;;;;;;;-1:-1:-1;16749:683:0;;;;;:::i;:::-;;:::i;31266:87::-;;;;;;;;;;-1:-1:-1;31266:87:0;;;;;:::i;:::-;;:::i;19574:800::-;;;;;;;;;;-1:-1:-1;19574:800:0;;;;;:::i;:::-;;:::i;15090:43::-;;;;;;;;;;;;;;;;18061:684;;;;;;;;;;-1:-1:-1;18061:684:0;;;;;:::i;:::-;;:::i;21148:568::-;;;;;;;;;;;;;:::i;16581:160::-;;;;;;;;;;-1:-1:-1;16581:160:0;;;;;:::i;:::-;;:::i;31361:769::-;;;;;;;;;;-1:-1:-1;31361:769:0;;;;;:::i;:::-;;:::i;30314:111::-;;;;;;;;;;-1:-1:-1;30314:111:0;;;;;:::i;:::-;;:::i;15631:40::-;;;;;;;;;;-1:-1:-1;15631:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;30554:160;;;;;;;;;;-1:-1:-1;30554:160:0;;;;;:::i;:::-;;:::i;1495:94::-;;;;;;;;;;;;;:::i;21762:193::-;;;;;;;;;;-1:-1:-1;21762:193:0;;;;;:::i;:::-;;:::i;27308:684::-;;;;;;;;;;-1:-1:-1;27308:684:0;;;;;:::i;:::-;;:::i;15540:31::-;;;;;;;;;;;;;;;;14387:160;;;;;;;;;;-1:-1:-1;14387:160:0;;;;;:::i;:::-;;:::i;844:87::-;;;;;;;;;;-1:-1:-1;890:7:0;917:6;-1:-1:-1;;;;;917:6:0;844:87;;;-1:-1:-1;;;;;9051:32:1;;;9033:51;;9021:2;9006:18;844:87:0;8887:203:1;30433:113:0;;;;;;;;;;-1:-1:-1;30433:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;30518:20:0;30494:4;30518:20;;;:10;:20;;;;;;;;;30433:113;;;;12658:14:1;;12651:22;12633:41;;12621:2;12606:18;30433:113:0;12493:187:1;15680:27:0;;;;;;;;;;;;;;;;18753:811;;;;;;;;;;-1:-1:-1;18753:811:0;;;;;:::i;:::-;;:::i;32454:544::-;;;;;;;;;;-1:-1:-1;32454:544:0;;;;;:::i;:::-;;:::i;25249:432::-;;;;;;;;;;-1:-1:-1;25249:432:0;;;;;:::i;:::-;;:::i;26745:555::-;;;;;;;;;;-1:-1:-1;26745:555:0;;;;;:::i;:::-;;:::i;15458:40::-;;;;;;;;;;-1:-1:-1;15458:40:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;28000:2306::-;;;;;;:::i;:::-;;:::i;14982:19::-;;;;;;;;;;-1:-1:-1;14982:19:0;;;;-1:-1:-1;;;;;14982:19:0;;;15008:22;;;;;;;;;;-1:-1:-1;15008:22:0;;;;-1:-1:-1;;;;;15008:22:0;;;21969:1159;;;;;;:::i;:::-;;:::i;15507:26::-;;;;;;;;;;-1:-1:-1;15507:26:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;30722:421::-;;;;;;;;;;-1:-1:-1;30722:421:0;;;;;:::i;:::-;;:::i;17440:613::-;;;;;;;;;;-1:-1:-1;17440:613:0;;;;;:::i;:::-;;:::i;15714:30::-;;;;;;;;;;;;;;;;1744:192;;;;;;;;;;-1:-1:-1;1744:192:0;;;;;:::i;:::-;;:::i;24405:398::-;;;;;;;;;;-1:-1:-1;24405:398:0;;;;;:::i;:::-;;:::i;25689:487::-;;;;;;;;;;-1:-1:-1;25689:487:0;;;;;:::i;:::-;;:::i;31151:107::-;;;;;;;;;;-1:-1:-1;31151:107:0;;;;;:::i;:::-;;:::i;15039:44::-;;;;;;;;;;;;;;;;20382:758;20511:17;;;20480:5;;:27;;-1:-1:-1;;;20480:27:0;;20496:10;20480:27;;;9033:51:1;;;;20511:17:0;;-1:-1:-1;;;;;20480:5:0;;;;:15;;9006:18:1;;20480:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;20472:84;;;;-1:-1:-1;;;20472:84:0;;;;;;;:::i;:::-;;;;;;;;;20624:17;;;20578:5;;:42;;-1:-1:-1;;;20578:42:0;;20624:17;;-1:-1:-1;;;;;20578:5:0;;;;:15;;:42;;20594:10;;20614:4;;20578:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;20570:100;;;;-1:-1:-1;;;20570:100:0;;;;;;;:::i;:::-;20758:9;;20742:27;;;;;;;:::i;:::-;;;;;;;;;;20716:10;20709:18;;;;:6;:18;;;;;;20742:27;;20693:45;;20709:18;20693:45;:::i;:::-;;;;;;;;:76;20685:101;;;;-1:-1:-1;;;20685:101:0;;;;;;;:::i;:::-;20814:10;20807:18;;;;:6;:18;;;;;20834:1;20807:23;;;;:28;;20799:81;;;;-1:-1:-1;;;20799:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20925:16:0;;;;;;:6;:16;;;;;;:21;;;;;20906:10;20899:18;;;;;;:23;;;;:47;20891:81;;;;-1:-1:-1;;;20891:81:0;;;;;;;:::i;:::-;20985:30;;;;;;;;;;-1:-1:-1;20985:30:0;;;-1:-1:-1;;;;;20985:16:0;;;;:6;:16;;;;;;:30;;;;;;:::i;:::-;-1:-1:-1;;;;;;21026:16:0;;;;;;;:6;:16;;;;;21050:1;21026:21;;;;:25;;;21114:17;21064:5;;:68;;:5;;21087:10;;21107:4;;21064:22;:68::i;:::-;20382:758;;;:::o;23136:681::-;23194:19;23216:9;23226:7;23216:18;;;;;;;;:::i;:::-;;;;;;;;;;;23194:40;;23283:15;23271:8;;23255:3;:13;;;:24;;;;:::i;:::-;23254:44;23245:73;;;;-1:-1:-1;;;23245:73:0;;21629:2:1;23245:73:0;;;21611:21:1;21668:2;21648:18;;;21641:30;-1:-1:-1;;;21687:18:1;;;21680:45;21742:18;;23245:73:0;21427:339:1;23245:73:0;23351:9;;-1:-1:-1;;;;;23351:9:0;23337:10;:23;23329:56;;;;-1:-1:-1;;;23329:56:0;;16240:2:1;23329:56:0;;;16222:21:1;16279:2;16259:18;;;16252:30;-1:-1:-1;;;16298:18:1;;;16291:50;16358:18;;23329:56:0;16038:344:1;23329:56:0;23436:9;;23447:12;;;;23436:9;23398:5;:62;;-1:-1:-1;;;;;23398:5:0;;;;23429:4;;23436:9;;;;23398:22;:62::i;:::-;23509:12;;;;;23523;;;;23471:5;;:65;;-1:-1:-1;;;;;23471:5:0;;;;23502:4;;23509:12;;23471:22;:65::i;:::-;23574:9;;;;23552:41;;;26655:25:1;;;26711:2;26696:18;;26689:34;;;23562:10:0;;23552:41;;26628:18:1;23552:41:0;;;;;;;23621:1;23606:12;;;:16;;;23633:12;;;;:16;;;23662:17;;23678:1;;23621;23662:17;;23678:1;;23662:17;:::i;:::-;;;;-1:-1:-1;;23690:7:0;;;23742:9;;;;23690:62;;-1:-1:-1;;;23690:62:0;;-1:-1:-1;;;;;23690:7:0;;;;:24;;:62;;23723:4;;23730:10;;23690:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;23790:9:0;;;;23768:41;;;26655:25:1;;;26711:2;26696:18;;26689:34;;;23778:10:0;;23768:41;;26628:18:1;23768:41:0;;;;;;;;23183:634;23136:681;:::o;24811:430::-;24893:4;24910:12;24937:6;24933:276;24953:9;:16;24949:20;;24933:276;;;25034:15;25022:8;;24997:9;25007:1;24997:12;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;:33;;;;:::i;:::-;24996:53;:127;;;;25112:9;;25096:27;;;;;;;:::i;:::-;;;;;;;;25070:9;25080:1;25070:12;;;;;;;;:::i;:::-;;;;;;;;;;;:20;;25053:39;;;;;;:::i;:::-;;;;;;;;:70;;24996:127;:166;;;;25160:1;-1:-1:-1;;;;;25127:35:0;:9;25137:1;25127:12;;;;;;;;:::i;:::-;;;;;;;;;:21;:12;;;;;:21;;-1:-1:-1;;;;;25127:21:0;:35;;24996:166;24991:182;;;25165:8;;24991:182;25188:9;;;;:::i;:::-;;;;24933:276;24971:3;;;;:::i;:::-;;;;24933:276;;;-1:-1:-1;25226:7:0;24811:430;-1:-1:-1;;;24811:430:0:o;33006:290::-;33090:5;;:30;;-1:-1:-1;;;33090:30:0;;33114:4;33090:30;;;9033:51:1;33124:7:0;;-1:-1:-1;;;;;33090:5:0;;:15;;9006:18:1;;33090:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;33082:83;;;;-1:-1:-1;;;33082:83:0;;15131:2:1;33082:83:0;;;15113:21:1;15170:2;15150:18;;;15143:30;15209:31;15189:18;;;15182:59;15258:18;;33082:83:0;14929:353:1;33082:83:0;33197:10;30494:4;30518:20;;;:10;:20;;;;;;;;33176:63;;;;-1:-1:-1;;;33176:63:0;;;;;;;:::i;:::-;33250:5;;:38;;-1:-1:-1;;;;;33250:5:0;33269:9;33280:7;33250:18;:38::i;:::-;33006:290;;:::o;32138:308::-;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;32286:6:::1;32282:157;32296:17:::0;;::::1;32282:157;;;32362:6;;32369:1;32362:9;;;;;;;:::i;:::-;;;;;;;32335:6;:19;32342:8;;32351:1;32342:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32335:19:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32335:19:0;:24:::1;;:36:::0;32417:7;;32425:1;32417:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;32386:6;:19;32393:8;;32402:1;32393:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32386:19:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32386:19:0;:41:::1;::::0;:19;;:41:::1;:::i;:::-;-1:-1:-1::0;32315:3:0;::::1;::::0;::::1;:::i;:::-;;;;32282:157;;;;32138:308:::0;;;;;;:::o;23827:570::-;23881:19;23903:9;23913:7;23903:18;;;;;;;;:::i;:::-;;;;;;;;;;;23881:40;;23970:15;23958:8;;23942:3;:13;;;:24;;;;:::i;:::-;23941:44;23932:83;;;;-1:-1:-1;;;23932:83:0;;14418:2:1;23932:83:0;;;14400:21:1;14457:2;14437:18;;;14430:30;14496:27;14476:18;;;14469:55;14541:18;;23932:83:0;14216:349:1;23932:83:0;24034:12;;;;-1:-1:-1;;;;;24034:12:0;:26;24026:56;;;;-1:-1:-1;;;24026:56:0;;22673:2:1;24026:56:0;;;22655:21:1;22712:2;22692:18;;;22685:30;-1:-1:-1;;;22731:18:1;;;22724:47;22788:18;;24026:56:0;22471:341:1;24026:56:0;24101:9;;-1:-1:-1;;;;;24101:9:0;24114:10;24101:23;;24093:60;;;;-1:-1:-1;;;24093:60:0;;19164:2:1;24093:60:0;;;19146:21:1;19203:2;19183:18;;;19176:30;19242:26;19222:18;;;19215:54;19286:18;;24093:60:0;18962:348:1;24093:60:0;24230:10;24223:18;;;;:6;:18;;;;;;;24207:45;;;;24223:18;24207:45;:::i;:::-;;;;;;;;24190:3;:11;;24174:29;;;;;;:::i;:::-;;;;;;;;:78;24166:106;;;;-1:-1:-1;;;24166:106:0;;;;;;;:::i;:::-;24286:12;;;;:25;;-1:-1:-1;;;;;;24286:25:0;24301:10;24286:25;;;;;;:12;24322:19;;;:7;:19;;;;;:24;;:19;;24286:12;24322:24;;24286:12;;24322:24;:::i;:::-;;;;-1:-1:-1;;24364:25:0;;24831::1;;;24369:10:0;;24364:25;;24819:2:1;24804:18;24364:25:0;24685:177:1;26186:551:0;26255:16;26284:20;26321:35;26346:9;;26321:24;:35::i;:::-;26307:50;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;26284:73:0;-1:-1:-1;26368:12:0;;26391:318;26411:9;:16;26407:20;;26391:318;;;26492:15;26480:8;;26455:9;26465:1;26455:12;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;:33;;;;:::i;:::-;26454:53;:127;;;;26570:9;;26554:27;;;;;;;:::i;:::-;;;;;;;;26528:9;26538:1;26528:12;;;;;;;;:::i;:::-;;;;;;;;;;;:20;;26511:39;;;;;;:::i;:::-;;;;;;;;:70;;26454:127;:166;;;;26618:1;-1:-1:-1;;;;;26585:35:0;:9;26595:1;26585:12;;;;;;;;:::i;:::-;;;;;;;;;:21;:12;;;;;:21;;-1:-1:-1;;;;;26585:21:0;:35;;26454:166;26449:182;;;26623:8;;26449:182;26661:9;26671:1;26661:12;;;;;;;;:::i;:::-;;;;;;;;;;26646:27;;;;;;;;26661:12;;;;;;;26646:27;;-1:-1:-1;;;;;26646:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26661:12;26646:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;26650:7;26646:12;;;;;;;;:::i;:::-;;;;;;:27;;;;26688:9;;;;;:::i;:::-;;;;26391:318;26429:3;;;;:::i;:::-;;;;26391:318;;;-1:-1:-1;26726:3:0;;26186:551;-1:-1:-1;;;;26186:551:0:o;16749:683::-;16856:18;;16825:5;;:27;;-1:-1:-1;;;16825:27:0;;16841:10;16825:27;;;9033:51:1;-1:-1:-1;;;;;16825:5:0;;;;:15;;9006:18:1;;16825:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;16817:84;;;;-1:-1:-1;;;16817:84:0;;;;;;;:::i;:::-;16966:18;;16920:5;;:42;;-1:-1:-1;;;16920:42:0;;-1:-1:-1;;;;;16920:5:0;;;;:15;;:42;;16936:10;;16956:4;;16920:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:64;;16912:101;;;;-1:-1:-1;;;16912:101:0;;;;;;;:::i;:::-;17028:24;;;;;;;;;:19;:24;;;17094:10;17087:18;;:6;:18;;;;;;17071:45;;17028:24;;-1:-1:-1;;;;;;;;;;;17120:23:0;17071:45;;17087:18;17071:45;:::i;:::-;;;;;;;;:72;17063:115;;;;-1:-1:-1;;;17063:115:0;;20568:2:1;17063:115:0;;;20550:21:1;20607:2;20587:18;;;20580:30;20646:32;20626:18;;;20619:60;20696:18;;17063:115:0;20366:354:1;17063:115:0;17198:10;17191:18;;;;:6;:18;;;;;:39;;17221:9;;17191:39;:::i;:::-;-1:-1:-1;17248:10:0;17267:1;17241:18;;;:6;:18;;;;;:23;;;;:27;;;;17333:18;;17283:5;;:69;;-1:-1:-1;;;;;17283:5:0;;;;17326:4;;17283:22;:69::i;:::-;17382:10;-1:-1:-1;;;;;17368:56:0;;17394:18;;17414:9;;17368:56;;;;;;;;:::i;:::-;;;;;;;;16806:626;16749:683;;:::o;31266:87::-;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;31330:8:::1;:15:::0;31266:87::o;19574:800::-;19705:17;;;19674:5;;:27;;-1:-1:-1;;;19674:27:0;;19690:10;19674:27;;;9033:51:1;;;;19705:17:0;;-1:-1:-1;;;;;19674:5:0;;;;:15;;9006:18:1;;19674:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;19666:84;;;;-1:-1:-1;;;19666:84:0;;;;;;;:::i;:::-;19818:17;;;19772:5;;:42;;-1:-1:-1;;;19772:42:0;;19818:17;;-1:-1:-1;;;;;19772:5:0;;;;:15;;:42;;19788:10;;19808:4;;19772:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;19764:100;;;;-1:-1:-1;;;19764:100:0;;;;;;;:::i;:::-;19952:9;;19936:27;;;;;;;:::i;:::-;;;;;;;;;;19910:10;19903:18;;;;:6;:18;;;;;;19936:27;;19887:45;;19903:18;19887:45;:::i;:::-;;;;;;;;:76;19879:101;;;;-1:-1:-1;;;19879:101:0;;;;;;;:::i;:::-;20008:10;20001:18;;;;:6;:18;;;;;20028:1;20001:23;;;;:28;;19993:81;;;;-1:-1:-1;;;19993:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20119:16:0;;;;;;:6;:16;;;;;;:21;;;;;20100:10;20093:18;;;;;;:23;;;;:47;20085:81;;;;-1:-1:-1;;;20085:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20183:16:0;;;;;;:6;:16;;;;;:21;;;20207:1;-1:-1:-1;20179:107:0;;;-1:-1:-1;;;;;20249:16:0;;;;;;:6;:16;;;;;:21;;;;;:25;;;:::i;:::-;-1:-1:-1;;;;;20225:16:0;;;;;;:6;:16;;;;;:21;;:49;20179:107;20348:17;;20298:5;;:68;;-1:-1:-1;;;;;20298:5:0;;;;20321:10;;20341:4;;20298:22;:68::i;18061:684::-;18193:17;;;18162:5;;:27;;-1:-1:-1;;;18162:27:0;;18178:10;18162:27;;;9033:51:1;;;;18193:17:0;;-1:-1:-1;;;;;18162:5:0;;;;:15;;9006:18:1;;18162:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;18154:84;;;;-1:-1:-1;;;18154:84:0;;;;;;;:::i;:::-;18306:17;;;18260:5;;:42;;-1:-1:-1;;;18260:42:0;;18306:17;;-1:-1:-1;;;;;18260:5:0;;;;:15;;:42;;18276:10;;18296:4;;18260:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;18252:100;;;;-1:-1:-1;;;18252:100:0;;;;;;;:::i;:::-;18442:9;;18426:27;;;;;;;:::i;:::-;;;;;;;;;;18400:10;18393:18;;;;:6;:18;;;;;;18426:27;;18377:45;;18393:18;18377:45;:::i;:::-;;;;;;;;:76;18369:101;;;;-1:-1:-1;;;18369:101:0;;;;;;;:::i;:::-;18504:10;18497:18;;;;:6;:18;;;;;18524:1;18497:23;;;;:28;;18489:81;;;;-1:-1:-1;;;18489:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18583:16:0;;;;;;:6;:16;;;;;:37;;18611:9;;18583:37;:::i;:::-;-1:-1:-1;;;;;;18631:16:0;;;;;;;:6;:16;;;;;18655:1;18631:21;;;;:25;18719:17;;18669:5;;:68;;:5;;18692:10;;18712:4;;18669:22;:68::i;21148:568::-;21235:17;;;21204:5;;:27;;-1:-1:-1;;;21204:27:0;;21220:10;21204:27;;;9033:51:1;;;;21235:17:0;;-1:-1:-1;;;;;21204:5:0;;;;:15;;9006:18:1;;21204:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;21196:84;;;;-1:-1:-1;;;21196:84:0;;;;;;;:::i;:::-;21348:17;;;21302:5;;:42;;-1:-1:-1;;;21302:42:0;;21348:17;;-1:-1:-1;;;;;21302:5:0;;;;:15;;:42;;21318:10;;21338:4;;21302:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;21294:100;;;;-1:-1:-1;;;21294:100:0;;;;;;;:::i;:::-;21410:24;;;;;;;;;:19;:24;;;21476:10;21469:18;;:6;:18;;;;;;21453:45;;21410:24;;-1:-1:-1;;;;;;;;;;;21502:23:0;21453:45;;21469:18;21453:45;:::i;:::-;;;;;;;;:72;;21445:97;;;;-1:-1:-1;;;21445:97:0;;;;;;;:::i;:::-;21557:32;;;;;;;;;;-1:-1:-1;21557:32:0;;;21564:10;21557:18;;:6;:18;;;;;;:32;;;;;;:::i;:::-;-1:-1:-1;21607:10:0;21600:18;;;;:6;:18;;;;;21626:1;21600:23;;;;:27;;;21690:17;21640:5;;:68;;-1:-1:-1;;;;;21640:5:0;;;;21683:4;;21640:22;:68::i;:::-;21185:531;21148:568::o;16581:160::-;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;16664:18:::1;:30:::0;;;;16705:17:::1;:28:::0;16581:160::o;31361:769::-;31421:19;31443:9;31453:7;31443:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;31494:9;;31443:18;;-1:-1:-1;;;;;;31494:9:0;31480:10;:23;;:53;;-1:-1:-1;31521:12:0;;;;-1:-1:-1;;;;;31521:12:0;31507:10;:26;31480:53;31472:95;;;;-1:-1:-1;;;31472:95:0;;14060:2:1;31472:95:0;;;14042:21:1;14099:2;14079:18;;;14072:30;14138:31;14118:18;;;14111:59;14187:18;;31472:95:0;13858:353:1;31472:95:0;31625:9;;31578:14;;-1:-1:-1;;;;;31625:9:0;31611:10;:23;31607:182;;;31674:1;31659:3;:12;;;:16;31651:59;;;;-1:-1:-1;;;31651:59:0;;14772:2:1;31651:59:0;;;14754:21:1;14811:2;14791:18;;;14784:30;14850:32;14830:18;;;14823:60;14900:18;;31651:59:0;14570:354:1;31651:59:0;-1:-1:-1;31734:12:0;;;;;31776:1;31761:16;;;31607:182;31820:12;;;;-1:-1:-1;;;;;31820:12:0;31806:10;:26;31801:189;;;31872:1;31857:3;:12;;;:16;31849:62;;;;-1:-1:-1;;;31849:62:0;;23723:2:1;31849:62:0;;;23705:21:1;23762:2;23742:18;;;23735:30;23801:34;23781:18;;;23774:62;-1:-1:-1;;;23852:18:1;;;23845:31;23893:19;;31849:62:0;23521:397:1;31849:62:0;-1:-1:-1;31935:12:0;;;;;31977:1;31962:16;;;31801:189;32002:5;;:57;;-1:-1:-1;;;;;32002:5:0;32033:4;32040:10;32052:6;32002:22;:57::i;:::-;32095:9;;;;32075:47;;;26936:25:1;;;26992:2;26977:18;;26970:34;;;27020:18;;27013:34;;;32083:10:0;;32075:47;;26924:2:1;26909:18;32075:47:0;26734:319:1;30314:111:0;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30393:15:0;;;::::1;;::::0;;;:10:::1;:15;::::0;;;;:24;;-1:-1:-1;;30393:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30314:111::o;30554:160::-;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;30641:13:::1;:30:::0;30682:10:::1;:24:::0;30554:160::o;1495:94::-;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;1560:21:::1;1578:1;1560:9;:21::i;:::-;1495:94::o:0;21762:193::-;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;21832:12:::1;21849:8;-1:-1:-1::0;;;;;21849:13:0::1;21870:21;21849:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21831:65;;;21915:7;21907:40;;;;-1:-1:-1::0;;;21907:40:0::1;;;;;;;:::i;27308:684::-:0;27398:16;27427:20;27464:47;27492:9;;27502:8;27464:27;:47::i;:::-;27450:62;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;27427:85:0;-1:-1:-1;27523:12:0;;27546:418;27566:9;:16;27562:20;;27546:418;;;27647:15;27635:8;;27610:9;27620:1;27610:12;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;:33;;;;:::i;:::-;27609:53;:127;;;;27725:9;;27709:27;;;;;;;:::i;:::-;;;;;;;;27683:9;27693:1;27683:12;;;;;;;;:::i;:::-;;;;;;;;;;;:20;;27666:39;;;;;;:::i;:::-;;;;;;;;:70;;27609:127;:202;;;;27767:8;-1:-1:-1;;;;;27742:33:0;:9;27752:1;27742:12;;;;;;;;:::i;:::-;;;;;;;;;:21;:12;;;;;:21;;-1:-1:-1;;;;;27742:21:0;:33;;;;:67;;;27801:8;-1:-1:-1;;;;;27779:30:0;:9;27789:1;27779:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:18;-1:-1:-1;;;;;27779:18:0;:30;;27742:67;27609:266;;;;27817:9;27827:1;27817:12;;;;;;;;:::i;:::-;;;;;;;;;;;:21;;;27842:1;27817:26;:56;;;;;27847:9;27857:1;27847:12;;;;;;;;:::i;:::-;;;;;;;;;;;:21;;;27872:1;27847:26;27817:56;27604:282;;;27878:8;;27604:282;27916:9;27926:1;27916:12;;;;;;;;:::i;:::-;;;;;;;;;;27901:27;;;;;;;;27916:12;;;;;;;27901:27;;-1:-1:-1;;;;;27901:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27916:12;27901:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;27905:7;27901:12;;;;;;;;:::i;:::-;;;;;;:27;;;;27943:9;;;;;:::i;:::-;;;;27546:418;27584:3;;;;:::i;:::-;;;;27546:418;;;-1:-1:-1;27981:3:0;;-1:-1:-1;;27308:684:0;;;;;;:::o;14387:160::-;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;14495:12:::1;-1:-1:-1::0;;;;;14488:29:0::1;;14518:7;890::::0;917:6;-1:-1:-1;;;;;917:6:0;;844:87;14518:7:::1;14488:51;::::0;-1:-1:-1;;;;;;14488:51:0::1;::::0;;;;;;-1:-1:-1;;;;;10780:32:1;;;14488:51:0::1;::::0;::::1;10762::1::0;10829:18;;;10822:34;;;10735:18;;14488:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18753:811::-:0;18885:17;;;18854:5;;:27;;-1:-1:-1;;;18854:27:0;;18870:10;18854:27;;;9033:51:1;;;;18885:17:0;;-1:-1:-1;;;;;18854:5:0;;;;:15;;9006:18:1;;18854:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;18846:84;;;;-1:-1:-1;;;18846:84:0;;;;;;;:::i;:::-;18998:17;;;18952:5;;:42;;-1:-1:-1;;;18952:42:0;;18998:17;;-1:-1:-1;;;;;18952:5:0;;;;:15;;:42;;18968:10;;18988:4;;18952:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;18944:100;;;;-1:-1:-1;;;18944:100:0;;;;;;;:::i;:::-;19132:9;;19116:27;;;;;;;:::i;:::-;;;;;;;;;;19090:10;19083:18;;;;:6;:18;;;;;;19116:27;;19067:45;;19083:18;19067:45;:::i;:::-;;;;;;;;:76;19059:101;;;;-1:-1:-1;;;19059:101:0;;;;;;;:::i;:::-;19198:10;19191:18;;;;:6;:18;;;;;19218:1;19191:23;;;;:28;;19183:81;;;;-1:-1:-1;;;19183:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19309:16:0;;;;;;:6;:16;;;;;;:21;;;;;19290:10;19283:18;;;;;;:23;;;;:47;19275:81;;;;-1:-1:-1;;;19275:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19373:16:0;;19397:1;19373:16;;;:6;:16;;;;;:21;;;:25;19369:107;;-1:-1:-1;;;;;19439:16:0;;;;;;:6;:16;;;;;19463:1;19439:21;;;;:25;;19463:1;19439:25;:::i;32454:544::-;32542:5;;:30;;-1:-1:-1;;;32542:30:0;;32566:4;32542:30;;;9033:51:1;32576:7:0;;-1:-1:-1;;;;;32542:5:0;;:15;;9006:18:1;;32542:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;32534:83;;;;-1:-1:-1;;;32534:83:0;;15131:2:1;32534:83:0;;;15113:21:1;15170:2;15150:18;;;15143:30;15209:31;15189:18;;;15182:59;15258:18;;32534:83:0;14929:353:1;32534:83:0;32628:19;32650:9;32660:7;32650:18;;;;;;;;:::i;:::-;;;;;;;;;;;32628:40;;32687:24;32700:10;-1:-1:-1;;;;;30518:20:0;30494:4;30518:20;;;:10;:20;;;;;;;;;30433:113;32687:24;32679:63;;;;-1:-1:-1;;;32679:63:0;;;;;;;:::i;:::-;32753:20;32799:3;32786:10;;32776:7;:20;;;;:::i;:::-;:26;;;;:::i;:::-;32753:49;;32813:23;32865:3;32849:13;;32839:7;:23;;;;:::i;:::-;:29;;;;:::i;:::-;32908:9;;;32889:5;32813:55;;-1:-1:-1;32889:42:0;;-1:-1:-1;;;;;32889:5:0;;;;32908:9;32918:12;32889:18;:42::i;:::-;32961:12;;;;;32942:5;;:48;;-1:-1:-1;;;;;32942:5:0;;;;32961:12;32974:15;32942:18;:48::i;:::-;32523:475;;;32454:544;;:::o;25249:432::-;25333:4;25350:12;25377:6;25373:276;25393:9;:16;25389:20;;25373:276;;;25474:15;25462:8;;25437:9;25447:1;25437:12;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;:33;;;;:::i;:::-;25436:53;:127;;;;25552:9;;25536:27;;;;;;;:::i;:::-;;;;;;;;25510:9;25520:1;25510:12;;;;;;;;:::i;:::-;;;;;;;;;;;:20;;25493:39;;;;;;:::i;:::-;;;;;;;;:70;;25436:127;:166;;;;25600:1;-1:-1:-1;;;;;25567:35:0;:9;25577:1;25567:12;;;;;;;;:::i;:::-;;;;;;;;;:21;:12;;;;;:21;;-1:-1:-1;;;;;25567:21:0;:35;25436:166;25431:182;;;25605:8;;25431:182;25628:9;;;;:::i;:::-;;;;25373:276;25411:3;;;;:::i;:::-;;;;25373:276;;26745:555;26816:16;26845:20;26882:37;26909:9;;26882:26;:37::i;:::-;26868:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;26845:75:0;-1:-1:-1;26931:12:0;;26954:318;26974:9;:16;26970:20;;26954:318;;;27055:15;27043:8;;27018:9;27028:1;27018:12;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;:33;;;;:::i;:::-;27017:53;:127;;;;27133:9;;27117:27;;;;;;;:::i;:::-;;;;;;;;27091:9;27101:1;27091:12;;;;;;;;:::i;:::-;;;;;;;;;;;:20;;27074:39;;;;;;:::i;:::-;;;;;;;;:70;;27017:127;:166;;;;27181:1;-1:-1:-1;;;;;27148:35:0;:9;27158:1;27148:12;;;;;;;;:::i;:::-;;;;;;;;;:21;:12;;;;;:21;;-1:-1:-1;;;;;27148:21:0;:35;27017:166;27012:182;;;27186:8;;27012:182;27224:9;27234:1;27224:12;;;;;;;;:::i;:::-;;;;;;;;;;27209:27;;;;;;;;27224:12;;;;;;;27209:27;;-1:-1:-1;;;;;27209:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27224:12;27209:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;27213:7;27209:12;;;;;;;;:::i;:::-;;;;;;:27;;;;27251:9;;;;;:::i;:::-;;;;26954:318;26992:3;;;;:::i;:::-;;;;26954:318;;15458:40;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28000:2306::-;28081:19;28103:9;28113:7;28103:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;28141:9;;28103:18;;-1:-1:-1;;;;;;28141:9:0;28154:10;28141:23;;:53;;-1:-1:-1;28168:12:0;;;;-1:-1:-1;;;;;28168:12:0;28184:10;28168:26;28141:53;28132:98;;;;-1:-1:-1;;;28132:98:0;;17638:2:1;28132:98:0;;;17620:21:1;17677:2;17657:18;;;17650:30;17716:33;17696:18;;;17689:61;17767:18;;28132:98:0;17436:355:1;28132:98:0;28279:15;28267:8;;28251:3;:13;;;:24;;;;:::i;:::-;28250:44;28241:73;;;;-1:-1:-1;;;28241:73:0;;21629:2:1;28241:73:0;;;21611:21:1;21668:2;21648:18;;;21641:30;-1:-1:-1;;;21687:18:1;;;21680:45;21742:18;;28241:73:0;21427:339:1;28241:73:0;28349:1;28334:3;:12;;;:16;:36;;;;28369:1;28354:3;:12;;;:16;28334:36;28325:67;;;;-1:-1:-1;;;28325:67:0;;20222:2:1;28325:67:0;;;20204:21:1;20261:2;20241:18;;;20234:30;-1:-1:-1;;;20280:18:1;;;20273:47;20337:18;;28325:67:0;20020:341:1;28325:67:0;28422:9;;-1:-1:-1;;;;;28422:9:0;28408:10;:23;28405:1892;;;28472:1;28457:3;:12;;;:16;28448:49;;;;-1:-1:-1;;;28448:49:0;;21973:2:1;28448:49:0;;;21955:21:1;22012:2;21992:18;;;21985:30;-1:-1:-1;;;22031:18:1;;;22024:49;22090:18;;28448:49:0;21771:343:1;28448:49:0;28529:12;;;;;28512:14;28556:16;;;-1:-1:-1;28587:5:0;:57;;-1:-1:-1;;;;;28587:5:0;28618:4;28625:10;28529:12;28587:22;:57::i;:::-;28664:33;;24831:25:1;;;28678:10:0;;28664:33;;24819:2:1;24804:18;28664:33:0;;;;;;;28728:1;28712:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;28746:1222:0;;;;28801:8;;28788:9;:21;;28780:51;;;;-1:-1:-1;;;28780:51:0;;23019:2:1;28780:51:0;;;23001:21:1;23058:2;23038:18;;;23031:30;-1:-1:-1;;;23077:18:1;;;23070:47;23134:18;;28780:51:0;22817:341:1;28780:51:0;28852:24;;;;;;;;;:19;:24;;;28926:10;28919:18;;:6;:18;;;;;;28903:45;;28852:24;;-1:-1:-1;;;;;;;;;;;28952:23:0;28903:45;;28919:18;28903:45;:::i;:::-;;;;;;;;:72;;28895:100;;;;-1:-1:-1;;;28895:100:0;;;;;;;:::i;:::-;29033:9;:16;;29068;;;;;;29018:12;29068:16;;;29033;;:9;:16;;29126:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29165:23;;-1:-1:-1;;;;;;29165:23:0;29178:10;29165:23;;;;;29220:9;;;;;29207:10;;;:22;29265:15;29248:14;;;:32;29299:14;;;:24;;;29357:18;;:6;:18;;;;;;;;29342:42;;29126:18;;-1:-1:-1;29342:12:0;;;;:42;;;:::i;:::-;;;;;;:::i;:::-;-1:-1:-1;29403:13:0;;;;:26;;-1:-1:-1;;;;;;29403:26:0;;;29427:1;29448:13;;;:17;;;29484:13;;;;:17;;;29522;;29484:13;;29427:1;29522:17;;29403:13;;29522:17;:::i;:::-;;;;-1:-1:-1;;29578:40:0;;29561:12;;29586:4;;29604:9;;29561:12;29578:40;29561:12;29578:40;29604:9;29586:4;29578:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29560:58;;;29645:7;29637:40;;;;-1:-1:-1;;;29637:40:0;;;;;;;:::i;:::-;29722:9;;;;29710:10;29733:18;;;;:6;:18;;;;;;;29771:12;;29703:81;;29710:10;;29703:81;;;;29722:9;;29733:18;29762:7;;29703:81;:::i;:::-;;;;;;;;28759:1041;;;;28746:1222;;;29825:7;;;29877:9;;;;29825:62;;-1:-1:-1;;;29825:62:0;;-1:-1:-1;;;;;29825:7:0;;;;:24;;:62;;29858:4;;29865:10;;29825:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;29933:9:0;;;;29911:41;;;26655:25:1;;;26711:2;26696:18;;26689:34;;;29921:10:0;;29911:41;;26628:18:1;29911:41:0;;;;;;;;28746:1222;28433:1548;20382:758;;;:::o;28405:1892::-;30004:12;;;;-1:-1:-1;;;;;30004:12:0;29990:10;:26;29987:310;;;30057:1;30042:3;:12;;;:16;30033:52;;;;-1:-1:-1;;;30033:52:0;;24536:2:1;30033:52:0;;;24518:21:1;24575:2;24555:18;;;24548:30;-1:-1:-1;;;24594:18:1;;;24587:52;24656:18;;30033:52:0;24334:346:1;30033:52:0;30117:12;;;;;30100:14;30144:16;;;-1:-1:-1;30175:5:0;:57;;-1:-1:-1;;;;;30175:5:0;30206:4;30213:10;30117:12;30175:22;:57::i;:::-;30252:33;;24831:25:1;;;30266:10:0;;30252:33;;24819:2:1;24804:18;30252:33:0;24685:177:1;21969:1159:0;22035:7;;:20;;-1:-1:-1;;;22035:20:0;;;;;24831:25:1;;;22059:10:0;;-1:-1:-1;;;;;22035:7:0;;:15;;24804:18:1;;22035:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22035:34:0;;22027:67;;;;-1:-1:-1;;;22027:67:0;;17289:2:1;22027:67:0;;;17271:21:1;17328:2;17308:18;;;17301:30;-1:-1:-1;;;17347:18:1;;;17340:50;17407:18;;22027:67:0;17087:344:1;22027:67:0;22113:7;;:51;;-1:-1:-1;;;22113:51:0;;-1:-1:-1;;;;;22113:7:0;;;;:24;;:51;;22138:10;;22158:4;;22113:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22105:86;;;;-1:-1:-1;;;22105:86:0;;16938:2:1;22105:86:0;;;16920:21:1;16977:2;16957:18;;;16950:30;-1:-1:-1;;;16996:18:1;;;16989:52;17058:18;;22105:86:0;16736:346:1;22105:86:0;22223:8;;22210:9;:21;;22202:51;;;;-1:-1:-1;;;22202:51:0;;23019:2:1;22202:51:0;;;23001:21:1;23058:2;23038:18;;;23031:30;-1:-1:-1;;;23077:18:1;;;23070:47;23134:18;;22202:51:0;22817:341:1;22202:51:0;22274:24;;;;;;;;;:19;:24;;;22340:10;22333:18;;:6;:18;;;;;;22317:45;;22274:24;;-1:-1:-1;;;;;;;;;;;22366:23:0;22317:45;;22333:18;22317:45;:::i;:::-;;;;;;;;:72;;22309:100;;;;-1:-1:-1;;;22309:100:0;;;;;;;:::i;:::-;22438:9;:16;;22465;;;;;;22424:11;22465:16;;;22438;;:9;:16;;22514:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22544:22;;-1:-1:-1;;;;;;22544:22:0;22556:10;22544:22;;;;;22577:9;;;:15;;;22619;22603:13;;;:31;22645:13;;;:22;;;22692:18;;:6;:18;;;;;;;;22678:41;;22514:17;;-1:-1:-1;22678:11:0;;;;:41;;;:::i;:::-;;;;;;:::i;:::-;-1:-1:-1;22730:12:0;;;;:25;;-1:-1:-1;;;;;;22730:25:0;;;22753:1;22766:12;;;:16;;;22793:12;;;;:16;;;22822:17;;22793:12;;22753:1;22822:17;;22730:12;;22822:17;:::i;:::-;;;;-1:-1:-1;;22870:40:0;;22853:12;;22878:4;;22896:9;;22853:12;22870:40;22853:12;22870:40;22896:9;22878:4;22870:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22852:58;;;22929:7;22921:40;;;;-1:-1:-1;;;22921:40:0;;;;;;;:::i;:::-;22974:7;;:56;;-1:-1:-1;;;22974:56:0;;-1:-1:-1;;;;;22974:7:0;;;;:24;;:56;;22999:10;;23019:4;;23026:3;;22974:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23053:10:0;23070:18;;;;:6;:18;;;;;;;23107:12;;23046:74;;23053:10;;-1:-1:-1;23046:74:0;;-1:-1:-1;23046:74:0;;23065:3;;23099:6;;23046:74;:::i;:::-;;;;;;;;22016:1112;;;;21969:1159;:::o;15507:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15507:26:0;;;;-1:-1:-1;15507:26:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30722:421::-;30802:19;30824:9;30834:7;30824:18;;;;;;;;:::i;:::-;;;;;;;;;;;30802:40;;30861:24;30874:10;-1:-1:-1;;;;;30518:20:0;30494:4;30518:20;;;:10;:20;;;;;;;;;30433:113;30861:24;30853:63;;;;-1:-1:-1;;;30853:63:0;;;;;;;:::i;:::-;30989:10;;30945:7;;30929:13;;31002:3;;30981:18;;30945:7;30981:18;:::i;:::-;:24;;;;:::i;:::-;30963:42;;31016:17;31060:3;31044:13;;31036:5;:21;;;;:::i;:::-;:27;;;;:::i;:::-;31016:47;;31092:7;31076:3;:12;;;:23;;;;;;;:::i;:::-;;;;;;;;31126:9;31110:3;:12;;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;30722:421:0:o;17440:613::-;17545:17;;;17514:5;;:27;;-1:-1:-1;;;17514:27:0;;17530:10;17514:27;;;9033:51:1;;;;17545:17:0;;-1:-1:-1;;;;;17514:5:0;;;;:15;;9006:18:1;;17514:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;17506:83;;;;-1:-1:-1;;;17506:83:0;;;;;;;:::i;:::-;17654:17;;;17608:5;;:42;;-1:-1:-1;;;17608:42:0;;17654:17;;-1:-1:-1;;;;;17608:5:0;;;;:15;;:42;;17624:10;;17644:4;;17608:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;17600:100;;;;-1:-1:-1;;;17600:100:0;;;;;;;:::i;:::-;17715:24;;;;;;;;;:19;:24;;;17781:10;17774:18;;:6;:18;;;;;;17758:45;;17715:24;;-1:-1:-1;;;;;;;;;;;17807:23:0;17758:45;;17774:18;17758:45;:::i;:::-;;;;;;;;:72;17750:115;;;;-1:-1:-1;;;17750:115:0;;20568:2:1;17750:115:0;;;20550:21:1;20607:2;20587:18;;;20580:30;20646:32;20626:18;;;20619:60;20696:18;;17750:115:0;20366:354:1;17750:115:0;17893:10;17886:18;;;;:6;:18;;;;;:39;;17916:9;;17886:39;:::i;:::-;-1:-1:-1;17943:10:0;17936:18;;;;:6;:18;;;;;17962:1;17936:23;;;;:27;;;18026:18;17976:5;;:69;;-1:-1:-1;;;;;17976:5:0;;;;18019:4;;17976:22;:69::i;1744:192::-;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1833:22:0;::::1;1825:73;;;::::0;-1:-1:-1;;;1825:73:0;;15833:2:1;1825:73:0::1;::::0;::::1;15815:21:1::0;15872:2;15852:18;;;15845:30;15911:34;15891:18;;;15884:62;-1:-1:-1;;;15962:18:1;;;15955:36;16008:19;;1825:73:0::1;15631:402:1::0;1825:73:0::1;1909:19;1919:8;1909:9;:19::i;24405:398::-:0;-1:-1:-1;;;;;24530:18:0;;24493:20;24530:18;;;:7;:18;;;;;;24464:16;;24493:20;24516:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;24493:56:0;-1:-1:-1;24560:12:0;;24583:192;24603:9;:16;24599:20;;24583:192;;;24670:9;-1:-1:-1;;;;;24645:34:0;:9;24655:1;24645:12;;;;;;;;:::i;:::-;;;;;;;;;:21;:12;;;;;:21;;-1:-1:-1;;;;;24645:21:0;:34;24641:48;;24681:8;;24641:48;24723:9;24733:1;24723:12;;;;;;;;:::i;:::-;;;;;;;;;;24708:27;;;;;;;;24723:12;;;;;;;24708:27;;-1:-1:-1;;;;;24708:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24723:12;24708:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;24712:7;24708:12;;;;;;;;:::i;:::-;;;;;;:27;;;;24754:9;;;;;:::i;:::-;;;;24583:192;24621:3;;;;:::i;:::-;;;;24583:192;;;-1:-1:-1;24792:3:0;;24405:398;-1:-1:-1;;;24405:398:0:o;25689:487::-;25792:4;25809:12;25836:6;25832:312;25852:9;:16;25848:20;;25832:312;;;25933:15;25921:8;;25896:9;25906:1;25896:12;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;:33;;;;:::i;:::-;25895:53;:127;;;;26011:9;;25995:27;;;;;;;:::i;:::-;;;;;;;;25969:9;25979:1;25969:12;;;;;;;;:::i;:::-;;;;;;;;;;;:20;;25952:39;;;;;;:::i;:::-;;;;;;;;:70;;25895:127;:202;;;;26053:8;-1:-1:-1;;;;;26028:33:0;:9;26038:1;26028:12;;;;;;;;:::i;:::-;;;;;;;;;:21;:12;;;;;:21;;-1:-1:-1;;;;;26028:21:0;:33;;;;:67;;;26087:8;-1:-1:-1;;;;;26065:30:0;:9;26075:1;26065:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:18;-1:-1:-1;;;;;26065:18:0;:30;;26028:67;25890:218;;;26100:8;;25890:218;26123:9;;;;:::i;:::-;;;;25832:312;25870:3;;;;:::i;:::-;;;;25832:312;;;-1:-1:-1;26161:7:0;25689:487;-1:-1:-1;;;;25689:487:0:o;31151:107::-;890:7;917:6;-1:-1:-1;;;;;917:6:0;173:10;1064:23;1056:68;;;;-1:-1:-1;;;1056:68:0;;;;;;;:::i;:::-;31229:21:::1;:9:::0;31241::::1;31229:21;:::i;:::-;31218:8;:32:::0;-1:-1:-1;31151:107:0:o;10593:248::-;10737:96;10757:5;10787:27;;;10816:4;10822:2;10826:5;10764:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;10764:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10764:68:0;-1:-1:-1;;;;;;10764:68:0;;;;;;;;;;10737:19;:96::i;10374:211::-;10518:58;;-1:-1:-1;;;;;10780:32:1;;10518:58:0;;;10762:51:1;10829:18;;;10822:34;;;10491:86:0;;10511:5;;-1:-1:-1;;;10541:23:0;10735:18:1;;10518:58:0;10588:274:1;1944:173:0;2000:16;2019:6;;-1:-1:-1;;;;;2036:17:0;;;-1:-1:-1;;;;;;2036:17:0;;;;;;2069:40;;2019:6;;;;;;;2069:40;;2000:16;2069:40;1989:128;1944:173;:::o;12947:716::-;13371:23;13397:69;13425:4;13397:69;;;;;;;;;;;;;;;;;13405:5;-1:-1:-1;;;;;13397:27:0;;;:69;;;;;:::i;:::-;13481:17;;13371:95;;-1:-1:-1;13481:21:0;13477:179;;13578:10;13567:30;;;;;;;;;;;;:::i;:::-;13559:85;;;;-1:-1:-1;;;13559:85:0;;24125:2:1;13559:85:0;;;24107:21:1;24164:2;24144:18;;;24137:30;24203:34;24183:18;;;24176:62;-1:-1:-1;;;24254:18:1;;;24247:40;24304:19;;13559:85:0;23923:406:1;6007:229:0;6144:12;6176:52;6198:6;6206:4;6212:1;6215:12;6176:21;:52::i;:::-;6169:59;6007:229;-1:-1:-1;;;;6007:229:0:o;7127:511::-;7297:12;7355:5;7330:21;:30;;7322:81;;;;-1:-1:-1;;;7322:81:0;;18407:2:1;7322:81:0;;;18389:21:1;18446:2;18426:18;;;18419:30;18485:34;18465:18;;;18458:62;-1:-1:-1;;;18536:18:1;;;18529:36;18582:19;;7322:81:0;18205:402:1;7322:81:0;3524:20;;7414:60;;;;-1:-1:-1;;;7414:60:0;;23365:2:1;7414:60:0;;;23347:21:1;23404:2;23384:18;;;23377:30;23443:31;23423:18;;;23416:59;23492:18;;7414:60:0;23163:353:1;7414:60:0;7488:12;7502:23;7529:6;-1:-1:-1;;;;;7529:11:0;7548:5;7555:4;7529:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7487:73;;;;7578:52;7596:7;7605:10;7617:12;7578:17;:52::i;:::-;7571:59;7127:511;-1:-1:-1;;;;;;;7127:511:0:o;9596:712::-;9746:12;9775:7;9771:530;;;-1:-1:-1;9806:10:0;9799:17;;9771:530;9920:17;;:21;9916:374;;10118:10;10112:17;10179:15;10166:10;10162:2;10158:19;10151:44;9916:374;10261:12;10254:20;;-1:-1:-1;;;10254:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:367:1;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:348::-;438:8;448:6;502:3;495:4;487:6;483:17;479:27;469:55;;520:1;517;510:12;469:55;-1:-1:-1;543:20:1;;586:18;575:30;;572:50;;;618:1;615;608:12;572:50;655:4;647:6;643:17;631:29;;707:3;700:4;691:6;683;679:19;675:30;672:39;669:59;;;724:1;721;714:12;739:247;798:6;851:2;839:9;830:7;826:23;822:32;819:52;;;867:1;864;857:12;819:52;906:9;893:23;925:31;950:5;925:31;:::i;991:251::-;1061:6;1114:2;1102:9;1093:7;1089:23;1085:32;1082:52;;;1130:1;1127;1120:12;1082:52;1162:9;1156:16;1181:31;1206:5;1181:31;:::i;1247:1266::-;1342:6;1350;1358;1366;1419:3;1407:9;1398:7;1394:23;1390:33;1387:53;;;1436:1;1433;1426:12;1387:53;1475:9;1462:23;1494:31;1519:5;1494:31;:::i;:::-;1544:5;-1:-1:-1;1601:2:1;1586:18;;1573:32;1614:33;1573:32;1614:33;:::i;:::-;1666:7;-1:-1:-1;1720:2:1;1705:18;;1692:32;;-1:-1:-1;1775:2:1;1760:18;;1747:32;1798:18;1828:14;;;1825:34;;;1855:1;1852;1845:12;1825:34;1893:6;1882:9;1878:22;1868:32;;1938:7;1931:4;1927:2;1923:13;1919:27;1909:55;;1960:1;1957;1950:12;1909:55;1996:2;1983:16;2018:2;2014;2011:10;2008:36;;;2024:18;;:::i;:::-;2099:2;2093:9;2067:2;2153:13;;-1:-1:-1;;2149:22:1;;;2173:2;2145:31;2141:40;2129:53;;;2197:18;;;2217:22;;;2194:46;2191:72;;;2243:18;;:::i;:::-;2283:10;2279:2;2272:22;2318:2;2310:6;2303:18;2358:7;2353:2;2348;2344;2340:11;2336:20;2333:33;2330:53;;;2379:1;2376;2369:12;2330:53;2435:2;2430;2426;2422:11;2417:2;2409:6;2405:15;2392:46;2480:1;2475:2;2470;2462:6;2458:15;2454:24;2447:35;2501:6;2491:16;;;;;;;1247:1266;;;;;;;:::o;2518:382::-;2583:6;2591;2644:2;2632:9;2623:7;2619:23;2615:32;2612:52;;;2660:1;2657;2650:12;2612:52;2699:9;2686:23;2718:31;2743:5;2718:31;:::i;:::-;2768:5;-1:-1:-1;2825:2:1;2810:18;;2797:32;2838:30;2797:32;2838:30;:::i;:::-;2887:7;2877:17;;;2518:382;;;;;:::o;2905:546::-;2985:6;2993;3001;3054:2;3042:9;3033:7;3029:23;3025:32;3022:52;;;3070:1;3067;3060:12;3022:52;3109:9;3096:23;3128:31;3153:5;3128:31;:::i;:::-;3178:5;-1:-1:-1;3234:2:1;3219:18;;3206:32;3261:18;3250:30;;3247:50;;;3293:1;3290;3283:12;3247:50;3332:59;3383:7;3374:6;3363:9;3359:22;3332:59;:::i;:::-;2905:546;;3410:8;;-1:-1:-1;3306:85:1;;-1:-1:-1;;;;2905:546:1:o;3456:315::-;3524:6;3532;3585:2;3573:9;3564:7;3560:23;3556:32;3553:52;;;3601:1;3598;3591:12;3553:52;3640:9;3627:23;3659:31;3684:5;3659:31;:::i;:::-;3709:5;3761:2;3746:18;;;;3733:32;;-1:-1:-1;;;3456:315:1:o;3776:1100::-;3946:6;3954;3962;3970;3978;3986;4039:2;4027:9;4018:7;4014:23;4010:32;4007:52;;;4055:1;4052;4045:12;4007:52;4095:9;4082:23;4124:18;4165:2;4157:6;4154:14;4151:34;;;4181:1;4178;4171:12;4151:34;4220:70;4282:7;4273:6;4262:9;4258:22;4220:70;:::i;:::-;4309:8;;-1:-1:-1;4194:96:1;-1:-1:-1;4397:2:1;4382:18;;4369:32;;-1:-1:-1;4413:16:1;;;4410:36;;;4442:1;4439;4432:12;4410:36;4481:72;4545:7;4534:8;4523:9;4519:24;4481:72;:::i;:::-;4572:8;;-1:-1:-1;4455:98:1;-1:-1:-1;4660:2:1;4645:18;;4632:32;;-1:-1:-1;4676:16:1;;;4673:36;;;4705:1;4702;4695:12;4673:36;;4744:72;4808:7;4797:8;4786:9;4782:24;4744:72;:::i;:::-;3776:1100;;;;-1:-1:-1;3776:1100:1;;-1:-1:-1;3776:1100:1;;4835:8;;3776:1100;-1:-1:-1;;;3776:1100:1:o;4881:245::-;4948:6;5001:2;4989:9;4980:7;4976:23;4972:32;4969:52;;;5017:1;5014;5007:12;4969:52;5049:9;5043:16;5068:28;5090:5;5068:28;:::i;5131:411::-;5202:6;5210;5263:2;5251:9;5242:7;5238:23;5234:32;5231:52;;;5279:1;5276;5269:12;5231:52;5319:9;5306:23;5352:18;5344:6;5341:30;5338:50;;;5384:1;5381;5374:12;5338:50;5423:59;5474:7;5465:6;5454:9;5450:22;5423:59;:::i;:::-;5501:8;;5397:85;;-1:-1:-1;5131:411:1;-1:-1:-1;;;;5131:411:1:o;5547:546::-;5627:6;5635;5643;5696:2;5684:9;5675:7;5671:23;5667:32;5664:52;;;5712:1;5709;5702:12;5664:52;5752:9;5739:23;5785:18;5777:6;5774:30;5771:50;;;5817:1;5814;5807:12;5771:50;5856:59;5907:7;5898:6;5887:9;5883:22;5856:59;:::i;:::-;5934:8;;-1:-1:-1;5830:85:1;-1:-1:-1;;6019:2:1;6004:18;;5991:32;6032:31;5991:32;6032:31;:::i;:::-;6082:5;6072:15;;;5547:546;;;;;:::o;6098:180::-;6157:6;6210:2;6198:9;6189:7;6185:23;6181:32;6178:52;;;6226:1;6223;6216:12;6178:52;-1:-1:-1;6249:23:1;;6098:180;-1:-1:-1;6098:180:1:o;6283:184::-;6353:6;6406:2;6394:9;6385:7;6381:23;6377:32;6374:52;;;6422:1;6419;6412:12;6374:52;-1:-1:-1;6445:16:1;;6283:184;-1:-1:-1;6283:184:1:o;6472:309::-;6537:6;6545;6598:2;6586:9;6577:7;6573:23;6569:32;6566:52;;;6614:1;6611;6604:12;6566:52;6650:9;6637:23;6627:33;;6710:2;6699:9;6695:18;6682:32;6723:28;6745:5;6723:28;:::i;6786:248::-;6854:6;6862;6915:2;6903:9;6894:7;6890:23;6886:32;6883:52;;;6931:1;6928;6921:12;6883:52;-1:-1:-1;;6954:23:1;;;7024:2;7009:18;;;6996:32;;-1:-1:-1;6786:248:1:o;7039:258::-;7081:3;7119:5;7113:12;7146:6;7141:3;7134:19;7162:63;7218:6;7211:4;7206:3;7202:14;7195:4;7188:5;7184:16;7162:63;:::i;:::-;7279:2;7258:15;-1:-1:-1;;7254:29:1;7245:39;;;;7286:4;7241:50;;7039:258;-1:-1:-1;;7039:258:1:o;7302:271::-;7485:6;7477;7472:3;7459:33;7441:3;7511:16;;7536:13;;;7511:16;7302:271;-1:-1:-1;7302:271:1:o;7578:274::-;7707:3;7745:6;7739:13;7761:53;7807:6;7802:3;7795:4;7787:6;7783:17;7761:53;:::i;:::-;7830:16;;;;;7578:274;-1:-1:-1;;7578:274:1:o;7857:815::-;7987:3;8016:1;8049:6;8043:13;8079:36;8105:9;8079:36;:::i;:::-;8134:1;8151:18;;;8178:104;;;;8296:1;8291:356;;;;8144:503;;8178:104;-1:-1:-1;;8211:24:1;;8199:37;;8256:16;;;;-1:-1:-1;8178:104:1;;8291:356;8322:6;8319:1;8312:17;8352:4;8397:2;8394:1;8384:16;8422:1;8436:165;8450:6;8447:1;8444:13;8436:165;;;8528:14;;8515:11;;;8508:35;8571:16;;;;8465:10;;8436:165;;;8440:3;;;8630:6;8625:3;8621:16;8614:23;;8144:503;-1:-1:-1;8663:3:1;;7857:815;-1:-1:-1;;;;;;7857:815:1:o;9095:304::-;-1:-1:-1;;;;;9325:15:1;;;9307:34;;9377:15;;9372:2;9357:18;;9350:43;9257:2;9242:18;;9095:304::o;9404:375::-;-1:-1:-1;;;;;9662:15:1;;;9644:34;;9714:15;;;;9709:2;9694:18;;9687:43;9761:2;9746:18;;9739:34;;;;9594:2;9579:18;;9404:375::o;9784:799::-;-1:-1:-1;;;;;10189:15:1;;;10171:34;;10241:15;;10236:2;10221:18;;10214:43;10288:2;10273:18;;10266:34;;;10331:2;10316:18;;10309:34;;;10374:3;10359:19;;10352:35;;;10121:3;10151;10403:19;;10396:31;;;10092:4;;10444:45;10470:18;;;10462:6;10444:45;:::i;:::-;10520:3;10505:19;;10498:35;;;;-1:-1:-1;;10564:3:1;10549:19;10542:35;10436:53;9784:799;-1:-1:-1;;;;;;9784:799:1:o;10867:1621::-;11057:4;11086:2;11126;11115:9;11111:18;11156:2;11145:9;11138:21;11179:6;11214;11208:13;11245:6;11237;11230:22;11271:2;11261:12;;11304:2;11293:9;11289:18;11282:25;;11366:2;11356:6;11353:1;11349:14;11338:9;11334:30;11330:39;11404:2;11396:6;11392:15;11425:1;11435:1024;11449:6;11446:1;11443:13;11435:1024;;;11514:22;;;-1:-1:-1;;11510:36:1;11498:49;;11570:13;;11686:9;;-1:-1:-1;;;;;11682:18:1;;;11667:34;;11748:11;;;11742:18;11738:27;11721:15;;;11714:52;11809:11;;;11803:18;11786:15;;;11779:43;11845:4;11892:11;;;11886:18;11869:15;;;11862:43;11928:4;11975:11;;;11969:18;11952:15;;;11945:43;11643:3;12054:11;;;12048:18;11606:6;12086:15;;;12079:27;;;11606:6;11643:3;12133:48;12165:15;;;12048:18;12133:48;:::i;:::-;12204:4;12251:11;;;12245:18;12228:15;;;12221:43;12288:4;12336:12;;;12330:19;12312:16;;;;12305:45;;;;-1:-1:-1;;;12437:12:1;;;;12402:15;;;;11471:1;11464:9;11435:1024;;;-1:-1:-1;12476:6:1;;10867:1621;-1:-1:-1;;;;;;;;10867:1621:1:o;13337:220::-;13486:2;13475:9;13468:21;13449:4;13506:45;13547:2;13536:9;13532:18;13524:6;13506:45;:::i;13562:291::-;13739:2;13728:9;13721:21;13702:4;13759:45;13800:2;13789:9;13785:18;13777:6;13759:45;:::i;:::-;13751:53;;13840:6;13835:2;13824:9;13820:18;13813:34;13562:291;;;;;:::o;15287:339::-;15489:2;15471:21;;;15528:2;15508:18;;;15501:30;-1:-1:-1;;;15562:2:1;15547:18;;15540:45;15617:2;15602:18;;15287:339::o;16387:344::-;16589:2;16571:21;;;16628:2;16608:18;;;16601:30;-1:-1:-1;;;16662:2:1;16647:18;;16640:50;16722:2;16707:18;;16387:344::o;17796:404::-;17998:2;17980:21;;;18037:2;18017:18;;;18010:30;18076:34;18071:2;18056:18;;18049:62;-1:-1:-1;;;18142:2:1;18127:18;;18120:38;18190:3;18175:19;;17796:404::o;18612:345::-;18814:2;18796:21;;;18853:2;18833:18;;;18826:30;-1:-1:-1;;;18887:2:1;18872:18;;18865:51;18948:2;18933:18;;18612:345::o;19315:::-;19517:2;19499:21;;;19556:2;19536:18;;;19529:30;-1:-1:-1;;;19590:2:1;19575:18;;19568:51;19651:2;19636:18;;19315:345::o;19665:350::-;19867:2;19849:21;;;19906:2;19886:18;;;19879:30;19945:28;19940:2;19925:18;;19918:56;20006:2;19991:18;;19665:350::o;20725:356::-;20927:2;20909:21;;;20946:18;;;20939:30;21005:34;21000:2;20985:18;;20978:62;21072:2;21057:18;;20725:356::o;21086:336::-;21288:2;21270:21;;;21327:2;21307:18;;;21300:30;-1:-1:-1;;;21361:2:1;21346:18;;21339:42;21413:2;21398:18;;21086:336::o;22119:347::-;22321:2;22303:21;;;22360:2;22340:18;;;22333:30;22399:25;22394:2;22379:18;;22372:53;22457:2;22442:18;;22119:347::o;24867:461::-;25054:6;25043:9;25036:25;25097:2;25092;25081:9;25077:18;25070:30;25136:6;25131:2;25120:9;25116:18;25109:34;25193:6;25185;25180:2;25169:9;25165:18;25152:48;25249:1;25220:22;;;25244:2;25216:31;;;25209:42;;;;25312:2;25291:15;;;-1:-1:-1;;25287:29:1;25272:45;25268:54;;24867:461;-1:-1:-1;;24867:461:1:o;25333:1143::-;25563:6;25552:9;25545:25;25526:4;25589:2;25627:3;25622:2;25611:9;25607:18;25600:31;25651:1;25684:6;25678:13;25714:36;25740:9;25714:36;:::i;:::-;25787:6;25781:3;25770:9;25766:19;25759:35;25813:3;25835:1;25867:2;25856:9;25852:18;25884:1;25879:122;;;;26015:1;26010:354;;;;25845:519;;25879:122;-1:-1:-1;;25927:24:1;;25907:18;;;25900:52;25987:3;25972:19;;;-1:-1:-1;25879:122:1;;26010:354;26041:6;26038:1;26031:17;26089:2;26086:1;26076:16;26114:1;26128:180;26142:6;26139:1;26136:13;26128:180;;;26235:14;;26211:17;;;26207:26;;26200:50;26278:16;;;;26157:10;;26128:180;;;26332:17;;26328:26;;;-1:-1:-1;;25845:519:1;-1:-1:-1;;;;;26415:2:1;26400:18;;26393:34;;;;-1:-1:-1;;26458:2:1;26443:18;26436:34;26381:3;25333:1143;-1:-1:-1;;25333:1143:1:o;27058:522::-;27136:4;27142:6;27202:11;27189:25;27296:2;27292:7;27281:8;27265:14;27261:29;27257:43;27237:18;27233:68;27223:96;;27315:1;27312;27305:12;27223:96;27342:33;;27394:20;;;-1:-1:-1;27437:18:1;27426:30;;27423:50;;;27469:1;27466;27459:12;27423:50;27502:4;27490:17;;-1:-1:-1;27533:14:1;27529:27;;;27519:38;;27516:58;;;27570:1;27567;27560:12;27585:128;27625:3;27656:1;27652:6;27649:1;27646:13;27643:39;;;27662:18;;:::i;:::-;-1:-1:-1;27698:9:1;;27585:128::o;27718:217::-;27758:1;27784;27774:132;;27828:10;27823:3;27819:20;27816:1;27809:31;27863:4;27860:1;27853:15;27891:4;27888:1;27881:15;27774:132;-1:-1:-1;27920:9:1;;27718:217::o;27940:168::-;27980:7;28046:1;28042;28038:6;28034:14;28031:1;28028:21;28023:1;28016:9;28009:17;28005:45;28002:71;;;28053:18;;:::i;:::-;-1:-1:-1;28093:9:1;;27940:168::o;28113:125::-;28153:4;28181:1;28178;28175:8;28172:34;;;28186:18;;:::i;:::-;-1:-1:-1;28223:9:1;;28113:125::o;28243:258::-;28315:1;28325:113;28339:6;28336:1;28333:13;28325:113;;;28415:11;;;28409:18;28396:11;;;28389:39;28361:2;28354:10;28325:113;;;28456:6;28453:1;28450:13;28447:48;;;-1:-1:-1;;28491:1:1;28473:16;;28466:27;28243:258::o;28506:380::-;28585:1;28581:12;;;;28628;;;28649:61;;28703:4;28695:6;28691:17;28681:27;;28649:61;28756:2;28748:6;28745:14;28725:18;28722:38;28719:161;;;28802:10;28797:3;28793:20;28790:1;28783:31;28837:4;28834:1;28827:15;28865:4;28862:1;28855:15;28719:161;;28506:380;;;:::o;28891:135::-;28930:3;-1:-1:-1;;28951:17:1;;28948:43;;;28971:18;;:::i;:::-;-1:-1:-1;29018:1:1;29007:13;;28891:135::o;29031:127::-;29092:10;29087:3;29083:20;29080:1;29073:31;29123:4;29120:1;29113:15;29147:4;29144:1;29137:15;29163:127;29224:10;29219:3;29215:20;29212:1;29205:31;29255:4;29252:1;29245:15;29279:4;29276:1;29269:15;29295:127;29356:10;29351:3;29347:20;29344:1;29337:31;29387:4;29384:1;29377:15;29411:4;29408:1;29401:15;29427:131;-1:-1:-1;;;;;29502:31:1;;29492:42;;29482:70;;29548:1;29545;29538:12;29563:118;29649:5;29642:13;29635:21;29628:5;29625:32;29615:60;;29671:1;29668;29661:12

Swarm Source

ipfs://05449c6a23daaa00a67f3632f80c4092dc5799a6b86d06dac5efc3b663e7b1d8
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading