ETH Price: $2,625.22 (+7.35%)
Gas: 25.7 Gwei

Token

ShoeVault (SHOE)
 

Overview

Max Total Supply

12 SHOE

Holders

10

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
tonybearbrick.eth
Balance
2 SHOE
0x17e566d94b9E9471eaAA1fd48fEd92666Fe0e6c0
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ShoeVault

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-26
*/

// SPDX-License-Identifier: MIT
/*
 * ##################################################
 * #                                                #
 * #   This Contract was created by Abolfazl Arab   #
 * #    ___                                         #
 * #   (._.)                                        #
 * #    <|>                     [email protected]   #
 * #   _/ \_        www.abolfazl.de                 #
 * #                                                #
 * ##################################################
 *
 * Author: Abolfazl Arab
*/

// File: @openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library CountersUpgradeable {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
    unchecked {
        counter._value += 1;
    }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
    unchecked {
        counter._value = value - 1;
    }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}
// File: @openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library StringsUpgradeable {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
// File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol



pragma solidity ^0.8.0;

/**
 * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
 * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an
 * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
 * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
 *
 * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
 * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
 *
 * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
 * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
 */
abstract contract Initializable {
    /**
     * @dev Indicates that the contract has been initialized.
     */
    bool private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Modifier to protect an initializer function from being invoked twice.
     */
    modifier initializer() {
        require(_initializing || !_initialized, "Initializable: contract is already initialized");

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }
}

// File: @openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol



pragma solidity ^0.8.0;


/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuardUpgradeable is Initializable {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    function __ReentrancyGuard_init() internal initializer {
        __ReentrancyGuard_init_unchained();
    }

    function __ReentrancyGuard_init_unchained() internal initializer {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
    uint256[49] private __gap;
}
// File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol



pragma solidity ^0.8.0;


/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract ContextUpgradeable is Initializable {
    function __Context_init() internal initializer {
        __Context_init_unchained();
    }

    function __Context_init_unchained() internal initializer {
    }
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
    uint256[50] private __gap;
}

// File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol



pragma solidity ^0.8.0;



/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    function __Ownable_init() internal initializer {
        __Context_init_unchained();
        __Ownable_init_unchained();
    }

    function __Ownable_init_unchained() internal initializer {
        _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);
    }
    uint256[49] private __gap;
}
// File: @openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165Upgradeable {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol



pragma solidity ^0.8.0;



/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {
    function __ERC165_init() internal initializer {
        __ERC165_init_unchained();
    }

    function __ERC165_init_unchained() internal initializer {
    }
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165Upgradeable).interfaceId;
    }
    uint256[50] private __gap;
}


// File: @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library AddressUpgradeable {
    /**
     * @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 Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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);
            }
        }
    }
}

// File: @openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721Upgradeable is IERC165Upgradeable {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721MetadataUpgradeable.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721MetadataUpgradeable is IERC721Upgradeable {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol



pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721ReceiverUpgradeable {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol



pragma solidity ^0.8.0;









/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {
    using AddressUpgradeable for address;
    using StringsUpgradeable for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    function __ERC721_init(string memory name_, string memory symbol_) internal initializer {
        __Context_init_unchained();
        __ERC165_init_unchained();
        __ERC721_init_unchained(name_, symbol_);
    }

    function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, IERC165Upgradeable) returns (bool) {
        return
        interfaceId == type(IERC721Upgradeable).interfaceId ||
        interfaceId == type(IERC721MetadataUpgradeable).interfaceId ||
        super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721Upgradeable.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721Upgradeable.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721Upgradeable.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721Upgradeable.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
    uint256[44] private __gap;
}

// File: ShoeVault.sol


pragma solidity >=0.4.22 <0.9.0;
pragma experimental ABIEncoderV2;


contract ShoeVault is ERC721Upgradeable, OwnableUpgradeable, ReentrancyGuardUpgradeable {
    using CountersUpgradeable for CountersUpgradeable.Counter;
    CountersUpgradeable.Counter private _tokenIds;
    mapping (uint256 => ShoeMeta) private _tokenMeta;

    mapping (uint256 => string) internal IPFS_CIDs;
    /**
    * Token Price
    */
    uint256 public tokenPrice ;
    /**
    * Token Size
    */
    uint256 public MAX_TOKENS;

    /**
    * Max Purchase Size
    */
    uint public MAX_PURCHASE ;
    /**
    * Max amount of token to Gift per time
    */
    uint public MAX_GIFT;
    /**
    * Events
    */
    event TokenMinted(uint256 tokenId, address owner);
    /**
    * Sale State
    */
    bool public saleIsActive;
    /**
    * Api
    */
    string baseURI;
    /**
    *
    */
    address developerAddress;

    struct ShoeMeta {
        uint256 id;
    }
    /**
    * Main Initializer
    */
    function initialize() public initializer {
        ERC721Upgradeable.__ERC721_init_unchained("ShoeVault", "SHOE");
        OwnableUpgradeable.__Ownable_init();
        ReentrancyGuardUpgradeable.__ReentrancyGuard_init();
        saleIsActive = false;
        MAX_TOKENS = 10000;
        tokenPrice = 60000000000000000; //0,06
        MAX_GIFT = 50;
        MAX_PURCHASE = 15;
        developerAddress = 0x42e98CdB46444c96B8fDc93Da2fcfd9a77FA9575;
        setBaseURI("http://api.shoevault.io/token/");
    }
    /**
    * Set max PURCHASE per Time
    */
    function setMaxPurchase(uint256 _maxGift) public onlyOwner {
        MAX_PURCHASE = _maxGift;
    }
    /**
    * Set max Gift per Time
    */
    function setMaxGifts(uint256 _maxGift) public onlyOwner {
        MAX_GIFT = _maxGift;
    }
    /**
    * Set max tokens
    */
    function setMaxItems(uint256 _maxItem) public onlyOwner {
        MAX_TOKENS = _maxItem;
    }
    /**
    * Pause Sale
    */
    function pauseSale() public onlyOwner {
        require(saleIsActive == true, "sale is already paused");
        saleIsActive = false;
    }
    /**
    * Start Sale
    */
    function startSale() public onlyOwner {
        require(saleIsActive == false, "sale is already active");
        saleIsActive = true;
    }
    /**
    * Get API
    */
    function _baseURI() internal view override virtual returns (string memory) {
        return baseURI;
    }
    /**
    * Change API
    */
    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }
    /**
    * Set the current token price
    */
    function changePrice(uint256 _newPrice) public onlyOwner {
        tokenPrice = _newPrice;
    }
    /**
    * setTokenMeta Function
    */
    function _setTokenMeta(uint256 _tokenId, ShoeMeta memory _meta) private {
        require(_exists(_tokenId));
        require(ownerOf(_tokenId) == _msgSender());
        _tokenMeta[_tokenId] = _meta;
    }
    /**
    * Total Tokens Supplyed
    */
    function totalSupply() public view returns (uint) {
        return _tokenIds.current();
    }
    /**
     * TokenCounter
     */
    function TokenCounter(uint _tokenNr) public view returns (uint) {
        return _tokenIds.current() + _tokenNr;
    }
    /**
    * Mint Shoe
    */
    function mintShoe(uint _TokensNr) public payable {
        require(saleIsActive, "Sale must be active to mint Tokens");
        require(_TokensNr <= MAX_PURCHASE, "Can only mint 15 tokens at a time");
        require(TokenCounter(_TokensNr)  <= MAX_TOKENS, "May supply of Shoe's");
        require(tokenPrice * _TokensNr   <= msg.value, "Value sent is not correct");
        uint ItemID;
        for(uint i = 1; i <= _TokensNr; i++) {
            _tokenIds.increment();
            ItemID = _tokenIds.current();
            if (ItemID <= MAX_TOKENS) {
                _safeMint(msg.sender, ItemID);
                ShoeMeta memory metaData = ShoeMeta(ItemID);
                _setTokenMeta(ItemID, metaData);
            }
        }
    }
    /**
    * Mint Gift Shoe
    */
    function mintGift(uint _GiftNr) public onlyOwner {
        require(saleIsActive, "Sale must be active to mint Tokens");
        require(_GiftNr <= MAX_GIFT, "Can only mint 50 gift at a time");
        require(TokenCounter(_GiftNr)  <= MAX_TOKENS, "Exceed max supply of Shoes");
        uint ItemID;
        for(uint i = 1; i <= _GiftNr; i++) {
            _tokenIds.increment();
            ItemID = _tokenIds.current();
            if (ItemID <= MAX_TOKENS) {
                _safeMint(msg.sender, ItemID);
                ShoeMeta memory metaData = ShoeMeta(ItemID);
                _setTokenMeta(ItemID, metaData);
            }
        }
    }

    /**
    * Withdraw
    */
    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function devDraw() public{
        if (msg.sender == developerAddress) {
            uint balance = address(this).balance;
            payable(developerAddress).transfer(balance);
        }
    }
    function tokenMeta(uint256 _tokenId) public view returns (ShoeMeta memory) {
        require(_exists(_tokenId));
        return _tokenMeta[_tokenId];

    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"TokenMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_GIFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PURCHASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenNr","type":"uint256"}],"name":"TokenCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devDraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_GiftNr","type":"uint256"}],"name":"mintGift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TokensNr","type":"uint256"}],"name":"mintShoe","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxGift","type":"uint256"}],"name":"setMaxGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxItem","type":"uint256"}],"name":"setMaxItems","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxGift","type":"uint256"}],"name":"setMaxPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenMeta","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ShoeVault.ShoeMeta","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50614934806100206000396000f3fe60806040526004361061020f5760003560e01c80637118974211610118578063b66a0e5d116100a0578063d6c29b4e1161006f578063d6c29b4e1461072a578063e985e9c514610755578063eb8d244414610792578063f2fde38b146107bd578063f47c84c5146107e65761020f565b8063b66a0e5d14610684578063b88d4fde1461069b578063c714e89c146106c4578063c87b56dd146106ed5761020f565b80638129fc1c116100e75780638129fc1c146105c55780638da5cb5b146105dc57806395d89b4114610607578063a22cb46514610632578063a2b40d191461065b5761020f565b8063711897421461052f5780637146bd0814610558578063715018a6146105835780637ff9b5961461059a5761020f565b806335b9ac0c1161019b57806355367ba91161016a57806355367ba91461044c57806355f804b3146104635780636352211e1461048c5780636cd5645f146104c957806370a08231146104f25761020f565b806335b9ac0c146103a65780633ccfd60b146103cf57806342842e0e146103e6578063527a844f1461040f5761020f565b8063095ea7b3116101e2578063095ea7b3146102d05780630ae7a310146102f957806318160ddd1461033657806319fe8b3b1461036157806323b872dd1461037d5761020f565b8063015749601461021457806301ffc9a71461022b57806306fdde0314610268578063081812fc14610293575b600080fd5b34801561022057600080fd5b50610229610811565b005b34801561023757600080fd5b50610252600480360381019061024d9190613491565b6108db565b60405161025f9190613a52565b60405180910390f35b34801561027457600080fd5b5061027d6109bd565b60405161028a9190613a6d565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190613534565b610a4f565b6040516102c791906139eb565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f29190613451565b610ad4565b005b34801561030557600080fd5b50610320600480360381019061031b9190613534565b610bec565b60405161032d9190613daf565b60405180910390f35b34801561034257600080fd5b5061034b610c35565b6040516103589190613dca565b60405180910390f35b61037b60048036038101906103769190613534565b610c46565b005b34801561038957600080fd5b506103a4600480360381019061039f919061333b565b610de8565b005b3480156103b257600080fd5b506103cd60048036038101906103c89190613534565b610e48565b005b3480156103db57600080fd5b506103e4610ecf565b005b3480156103f257600080fd5b5061040d6004803603810190610408919061333b565b610f9a565b005b34801561041b57600080fd5b5061043660048036038101906104319190613534565b610fba565b6040516104439190613dca565b60405180910390f35b34801561045857600080fd5b50610461610fd8565b005b34801561046f57600080fd5b5061048a600480360381019061048591906134eb565b6110c9565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613534565b611160565b6040516104c091906139eb565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190613534565b611212565b005b3480156104fe57600080fd5b50610519600480360381019061051491906132ce565b6113e0565b6040516105269190613dca565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613534565b611498565b005b34801561056457600080fd5b5061056d61151f565b60405161057a9190613dca565b60405180910390f35b34801561058f57600080fd5b50610598611526565b005b3480156105a657600080fd5b506105af6115ae565b6040516105bc9190613dca565b60405180910390f35b3480156105d157600080fd5b506105da6115b4565b005b3480156105e857600080fd5b506105f16117ea565b6040516105fe91906139eb565b60405180910390f35b34801561061357600080fd5b5061061c611814565b6040516106299190613a6d565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613411565b6118a6565b005b34801561066757600080fd5b50610682600480360381019061067d9190613534565b611a27565b005b34801561069057600080fd5b50610699611aad565b005b3480156106a757600080fd5b506106c260048036038101906106bd919061338e565b611b9e565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613534565b611c00565b005b3480156106f957600080fd5b50610714600480360381019061070f9190613534565b611c86565b6040516107219190613a6d565b60405180910390f35b34801561073657600080fd5b5061073f611d2d565b60405161074c9190613dca565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906132fb565b611d34565b6040516107899190613a52565b60405180910390f35b34801561079e57600080fd5b506107a7611dc8565b6040516107b49190613a52565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df91906132ce565b611ddc565b005b3480156107f257600080fd5b506107fb611ed4565b6040516108089190613dca565b60405180910390f35b61010460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108d957600047905061010460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108d6573d6000803e3d6000fd5b50505b565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b657506109b582611eda565b5b9050919050565b6060606580546109cc9061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546109f89061407a565b8015610a455780601f10610a1a57610100808354040283529160200191610a45565b820191906000526020600020905b815481529060010190602001808311610a2857829003601f168201915b5050505050905090565b6000610a5a82611f44565b610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613c4f565b60405180910390fd5b6069600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610adf82611160565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4790613d0f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6f611fb0565b73ffffffffffffffffffffffffffffffffffffffff161480610b9e5750610b9d81610b98611fb0565b611d34565b5b610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd490613b8f565b60405180910390fd5b610be78383611fb8565b505050565b610bf46130cf565b610bfd82611f44565b610c0657600080fd5b60fc60008381526020019081526020016000206040518060200160405290816000820154815250509050919050565b6000610c4160fb612071565b905090565b61010260009054906101000a900460ff16610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613b4f565b60405180910390fd5b61010054811115610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390613d8f565b60405180910390fd5b60ff54610ce882610fba565b1115610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2090613d6f565b60405180910390fd5b348160fe54610d389190613f36565b1115610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7090613c0f565b60405180910390fd5b600080600190505b828111610de357610d9260fb61207f565b610d9c60fb612071565b915060ff548211610dd057610db13383612095565b60006040518060200160405280848152509050610dce83826120b3565b505b8080610ddb906140dd565b915050610d81565b505050565b610df9610df3611fb0565b82612131565b610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90613d4f565b60405180910390fd5b610e4383838361220f565b505050565b610e50611fb0565b73ffffffffffffffffffffffffffffffffffffffff16610e6e6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613c6f565b60405180910390fd5b806101018190555050565b610ed7611fb0565b73ffffffffffffffffffffffffffffffffffffffff16610ef56117ea565b73ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613c6f565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f96573d6000803e3d6000fd5b5050565b610fb583838360405180602001604052806000815250611b9e565b505050565b600081610fc760fb612071565b610fd19190613eaf565b9050919050565b610fe0611fb0565b73ffffffffffffffffffffffffffffffffffffffff16610ffe6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90613c6f565b60405180910390fd5b6001151561010260009054906101000a900460ff161515146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290613cef565b60405180910390fd5b600061010260006101000a81548160ff021916908315150217905550565b6110d1611fb0565b73ffffffffffffffffffffffffffffffffffffffff166110ef6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613c6f565b60405180910390fd5b80610103908051906020019061115c9291906130e2565b5050565b6000806067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090613bcf565b60405180910390fd5b80915050919050565b61121a611fb0565b73ffffffffffffffffffffffffffffffffffffffff166112386117ea565b73ffffffffffffffffffffffffffffffffffffffff161461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590613c6f565b60405180910390fd5b61010260009054906101000a900460ff166112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613b4f565b60405180910390fd5b61010154811115611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90613aef565b60405180910390fd5b60ff5461133082610fba565b1115611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890613ccf565b60405180910390fd5b600080600190505b8281116113db5761138a60fb61207f565b61139460fb612071565b915060ff5482116113c8576113a93383612095565b600060405180602001604052808481525090506113c683826120b3565b505b80806113d3906140dd565b915050611379565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144890613baf565b60405180910390fd5b606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a0611fb0565b73ffffffffffffffffffffffffffffffffffffffff166114be6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90613c6f565b60405180910390fd5b806101008190555050565b6101005481565b61152e611fb0565b73ffffffffffffffffffffffffffffffffffffffff1661154c6117ea565b73ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613c6f565b60405180910390fd5b6115ac600061246b565b565b60fe5481565b600060019054906101000a900460ff16806115da575060008054906101000a900460ff16155b611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090613bef565b60405180910390fd5b60008060019054906101000a900460ff161590508015611669576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6116dd6040518060400160405280600981526020017f53686f655661756c7400000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53484f4500000000000000000000000000000000000000000000000000000000815250612531565b6116e561263a565b6116ed612723565b600061010260006101000a81548160ff02191690831515021790555061271060ff8190555066d529ae9e86000060fe81905550603261010181905550600f610100819055507342e98cdb46444c96b8fdc93da2fcfd9a77fa957561010460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117c66040518060400160405280601e81526020017f687474703a2f2f6170692e73686f657661756c742e696f2f746f6b656e2f00008152506110c9565b80156117e75760008060016101000a81548160ff0219169083151502179055505b50565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060606680546118239061407a565b80601f016020809104026020016040519081016040528092919081815260200182805461184f9061407a565b801561189c5780601f106118715761010080835404028352916020019161189c565b820191906000526020600020905b81548152906001019060200180831161187f57829003601f168201915b5050505050905090565b6118ae611fb0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390613b2f565b60405180910390fd5b80606a6000611929611fb0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119d6611fb0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a1b9190613a52565b60405180910390a35050565b611a2f611fb0565b73ffffffffffffffffffffffffffffffffffffffff16611a4d6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90613c6f565b60405180910390fd5b8060fe8190555050565b611ab5611fb0565b73ffffffffffffffffffffffffffffffffffffffff16611ad36117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090613c6f565b60405180910390fd5b6000151561010260009054906101000a900460ff16151514611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790613d2f565b60405180910390fd5b600161010260006101000a81548160ff021916908315150217905550565b611baf611ba9611fb0565b83612131565b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613d4f565b60405180910390fd5b611bfa84848484612804565b50505050565b611c08611fb0565b73ffffffffffffffffffffffffffffffffffffffff16611c266117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613c6f565b60405180910390fd5b8060ff8190555050565b6060611c9182611f44565b611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790613caf565b60405180910390fd5b6000611cda612860565b90506000815111611cfa5760405180602001604052806000815250611d25565b80611d04846128f3565b604051602001611d159291906139c7565b6040516020818303038152906040525b915050919050565b6101015481565b6000606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61010260009054906101000a900460ff1681565b611de4611fb0565b73ffffffffffffffffffffffffffffffffffffffff16611e026117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613c6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf90613aaf565b60405180910390fd5b611ed18161246b565b50565b60ff5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816069600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661202b83611160565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6120af828260405180602001604052806000815250612a54565b5050565b6120bc82611f44565b6120c557600080fd5b6120cd611fb0565b73ffffffffffffffffffffffffffffffffffffffff166120ec83611160565b73ffffffffffffffffffffffffffffffffffffffff161461210c57600080fd5b8060fc6000848152602001908152602001600020600082015181600001559050505050565b600061213c82611f44565b61217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290613b6f565b60405180910390fd5b600061218683611160565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121f557508373ffffffffffffffffffffffffffffffffffffffff166121dd84610a4f565b73ffffffffffffffffffffffffffffffffffffffff16145b8061220657506122058185611d34565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661222f82611160565b73ffffffffffffffffffffffffffffffffffffffff1614612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90613c8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ec90613b0f565b60405180910390fd5b612300838383612aaf565b61230b600082611fb8565b6001606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461235b9190613f90565b925050819055506001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b29190613eaf565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff1680612557575060008054906101000a900460ff16155b612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613bef565b60405180910390fd5b60008060019054906101000a900460ff1615905080156125e6576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b82606590805190602001906125fc9291906130e2565b5081606690805190602001906126139291906130e2565b5080156126355760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680612660575060008054906101000a900460ff16155b61269f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269690613bef565b60405180910390fd5b60008060019054906101000a900460ff1615905080156126ef576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6126f7612ab4565b6126ff612b8d565b80156127205760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612749575060008054906101000a900460ff16155b612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f90613bef565b60405180910390fd5b60008060019054906101000a900460ff1615905080156127d8576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6127e0612c76565b80156128015760008060016101000a81548160ff0219169083151502179055505b50565b61280f84848461220f565b61281b84848484612d57565b61285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190613a8f565b60405180910390fd5b50505050565b606061010380546128709061407a565b80601f016020809104026020016040519081016040528092919081815260200182805461289c9061407a565b80156128e95780601f106128be576101008083540402835291602001916128e9565b820191906000526020600020905b8154815290600101906020018083116128cc57829003601f168201915b5050505050905090565b6060600082141561293b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a4f565b600082905060005b6000821461296d578080612956906140dd565b915050600a826129669190613f05565b9150612943565b60008167ffffffffffffffff81111561298957612988614213565b5b6040519080825280601f01601f1916602001820160405280156129bb5781602001600182028036833780820191505090505b5090505b60008514612a48576001826129d49190613f90565b9150600a856129e39190614126565b60306129ef9190613eaf565b60f81b818381518110612a0557612a046141e4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a419190613f05565b94506129bf565b8093505050505b919050565b612a5e8383612eee565b612a6b6000848484612d57565b612aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa190613a8f565b60405180910390fd5b505050565b505050565b600060019054906101000a900460ff1680612ada575060008054906101000a900460ff16155b612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1090613bef565b60405180910390fd5b60008060019054906101000a900460ff161590508015612b69576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015612b8a5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612bb3575060008054906101000a900460ff16155b612bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be990613bef565b60405180910390fd5b60008060019054906101000a900460ff161590508015612c42576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612c52612c4d611fb0565b61246b565b8015612c735760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612c9c575060008054906101000a900460ff16155b612cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd290613bef565b60405180910390fd5b60008060019054906101000a900460ff161590508015612d2b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600160c9819055508015612d545760008060016101000a81548160ff0219169083151502179055505b50565b6000612d788473ffffffffffffffffffffffffffffffffffffffff166130bc565b15612ee1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612da1611fb0565b8786866040518563ffffffff1660e01b8152600401612dc39493929190613a06565b602060405180830381600087803b158015612ddd57600080fd5b505af1925050508015612e0e57506040513d601f19601f82011682018060405250810190612e0b91906134be565b60015b612e91573d8060008114612e3e576040519150601f19603f3d011682016040523d82523d6000602084013e612e43565b606091505b50600081511415612e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8090613a8f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ee6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5590613c2f565b60405180910390fd5b612f6781611f44565b15612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e90613acf565b60405180910390fd5b612fb360008383612aaf565b6001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130039190613eaf565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6040518060200160405280600081525090565b8280546130ee9061407a565b90600052602060002090601f0160209004810192826131105760008555613157565b82601f1061312957805160ff1916838001178555613157565b82800160010185558215613157579182015b8281111561315657825182559160200191906001019061313b565b5b5090506131649190613168565b5090565b5b80821115613181576000816000905550600101613169565b5090565b600061319861319384613e0a565b613de5565b9050828152602081018484840111156131b4576131b3614247565b5b6131bf848285614038565b509392505050565b60006131da6131d584613e3b565b613de5565b9050828152602081018484840111156131f6576131f5614247565b5b613201848285614038565b509392505050565b600081359050613218816148a2565b92915050565b60008135905061322d816148b9565b92915050565b600081359050613242816148d0565b92915050565b600081519050613257816148d0565b92915050565b600082601f83011261327257613271614242565b5b8135613282848260208601613185565b91505092915050565b600082601f8301126132a05761329f614242565b5b81356132b08482602086016131c7565b91505092915050565b6000813590506132c8816148e7565b92915050565b6000602082840312156132e4576132e3614251565b5b60006132f284828501613209565b91505092915050565b6000806040838503121561331257613311614251565b5b600061332085828601613209565b925050602061333185828601613209565b9150509250929050565b60008060006060848603121561335457613353614251565b5b600061336286828701613209565b935050602061337386828701613209565b9250506040613384868287016132b9565b9150509250925092565b600080600080608085870312156133a8576133a7614251565b5b60006133b687828801613209565b94505060206133c787828801613209565b93505060406133d8878288016132b9565b925050606085013567ffffffffffffffff8111156133f9576133f861424c565b5b6134058782880161325d565b91505092959194509250565b6000806040838503121561342857613427614251565b5b600061343685828601613209565b92505060206134478582860161321e565b9150509250929050565b6000806040838503121561346857613467614251565b5b600061347685828601613209565b9250506020613487858286016132b9565b9150509250929050565b6000602082840312156134a7576134a6614251565b5b60006134b584828501613233565b91505092915050565b6000602082840312156134d4576134d3614251565b5b60006134e284828501613248565b91505092915050565b60006020828403121561350157613500614251565b5b600082013567ffffffffffffffff81111561351f5761351e61424c565b5b61352b8482850161328b565b91505092915050565b60006020828403121561354a57613549614251565b5b6000613558848285016132b9565b91505092915050565b61356a81613fc4565b82525050565b61357981613fd6565b82525050565b600061358a82613e6c565b6135948185613e82565b93506135a4818560208601614047565b6135ad81614256565b840191505092915050565b60006135c382613e77565b6135cd8185613e93565b93506135dd818560208601614047565b6135e681614256565b840191505092915050565b60006135fc82613e77565b6136068185613ea4565b9350613616818560208601614047565b80840191505092915050565b600061362f603283613e93565b915061363a82614267565b604082019050919050565b6000613652602683613e93565b915061365d826142b6565b604082019050919050565b6000613675601c83613e93565b915061368082614305565b602082019050919050565b6000613698601f83613e93565b91506136a38261432e565b602082019050919050565b60006136bb602483613e93565b91506136c682614357565b604082019050919050565b60006136de601983613e93565b91506136e9826143a6565b602082019050919050565b6000613701602283613e93565b915061370c826143cf565b604082019050919050565b6000613724602c83613e93565b915061372f8261441e565b604082019050919050565b6000613747603883613e93565b91506137528261446d565b604082019050919050565b600061376a602a83613e93565b9150613775826144bc565b604082019050919050565b600061378d602983613e93565b91506137988261450b565b604082019050919050565b60006137b0602e83613e93565b91506137bb8261455a565b604082019050919050565b60006137d3601983613e93565b91506137de826145a9565b602082019050919050565b60006137f6602083613e93565b9150613801826145d2565b602082019050919050565b6000613819602c83613e93565b9150613824826145fb565b604082019050919050565b600061383c602083613e93565b91506138478261464a565b602082019050919050565b600061385f602983613e93565b915061386a82614673565b604082019050919050565b6000613882602f83613e93565b915061388d826146c2565b604082019050919050565b60006138a5601a83613e93565b91506138b082614711565b602082019050919050565b60006138c8601683613e93565b91506138d38261473a565b602082019050919050565b60006138eb602183613e93565b91506138f682614763565b604082019050919050565b600061390e601683613e93565b9150613919826147b2565b602082019050919050565b6000613931603183613e93565b915061393c826147db565b604082019050919050565b6000613954601483613e93565b915061395f8261482a565b602082019050919050565b6000613977602183613e93565b915061398282614853565b604082019050919050565b6020820160008201516139a360008501826139a9565b50505050565b6139b28161402e565b82525050565b6139c18161402e565b82525050565b60006139d382856135f1565b91506139df82846135f1565b91508190509392505050565b6000602082019050613a006000830184613561565b92915050565b6000608082019050613a1b6000830187613561565b613a286020830186613561565b613a3560408301856139b8565b8181036060830152613a47818461357f565b905095945050505050565b6000602082019050613a676000830184613570565b92915050565b60006020820190508181036000830152613a8781846135b8565b905092915050565b60006020820190508181036000830152613aa881613622565b9050919050565b60006020820190508181036000830152613ac881613645565b9050919050565b60006020820190508181036000830152613ae881613668565b9050919050565b60006020820190508181036000830152613b088161368b565b9050919050565b60006020820190508181036000830152613b28816136ae565b9050919050565b60006020820190508181036000830152613b48816136d1565b9050919050565b60006020820190508181036000830152613b68816136f4565b9050919050565b60006020820190508181036000830152613b8881613717565b9050919050565b60006020820190508181036000830152613ba88161373a565b9050919050565b60006020820190508181036000830152613bc88161375d565b9050919050565b60006020820190508181036000830152613be881613780565b9050919050565b60006020820190508181036000830152613c08816137a3565b9050919050565b60006020820190508181036000830152613c28816137c6565b9050919050565b60006020820190508181036000830152613c48816137e9565b9050919050565b60006020820190508181036000830152613c688161380c565b9050919050565b60006020820190508181036000830152613c888161382f565b9050919050565b60006020820190508181036000830152613ca881613852565b9050919050565b60006020820190508181036000830152613cc881613875565b9050919050565b60006020820190508181036000830152613ce881613898565b9050919050565b60006020820190508181036000830152613d08816138bb565b9050919050565b60006020820190508181036000830152613d28816138de565b9050919050565b60006020820190508181036000830152613d4881613901565b9050919050565b60006020820190508181036000830152613d6881613924565b9050919050565b60006020820190508181036000830152613d8881613947565b9050919050565b60006020820190508181036000830152613da88161396a565b9050919050565b6000602082019050613dc4600083018461398d565b92915050565b6000602082019050613ddf60008301846139b8565b92915050565b6000613def613e00565b9050613dfb82826140ac565b919050565b6000604051905090565b600067ffffffffffffffff821115613e2557613e24614213565b5b613e2e82614256565b9050602081019050919050565b600067ffffffffffffffff821115613e5657613e55614213565b5b613e5f82614256565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613eba8261402e565b9150613ec58361402e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613efa57613ef9614157565b5b828201905092915050565b6000613f108261402e565b9150613f1b8361402e565b925082613f2b57613f2a614186565b5b828204905092915050565b6000613f418261402e565b9150613f4c8361402e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8557613f84614157565b5b828202905092915050565b6000613f9b8261402e565b9150613fa68361402e565b925082821015613fb957613fb8614157565b5b828203905092915050565b6000613fcf8261400e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561406557808201518184015260208101905061404a565b83811115614074576000848401525b50505050565b6000600282049050600182168061409257607f821691505b602082108114156140a6576140a56141b5565b5b50919050565b6140b582614256565b810181811067ffffffffffffffff821117156140d4576140d3614213565b5b80604052505050565b60006140e88261402e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561411b5761411a614157565b5b600182019050919050565b60006141318261402e565b915061413c8361402e565b92508261414c5761414b614186565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616e206f6e6c79206d696e74203530206769667420617420612074696d6500600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420546f6b6560008201527f6e73000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f56616c75652073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f457863656564206d617820737570706c79206f662053686f6573000000000000600082015250565b7f73616c6520697320616c72656164792070617573656400000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f73616c6520697320616c72656164792061637469766500000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617920737570706c79206f662053686f652773000000000000000000000000600082015250565b7f43616e206f6e6c79206d696e7420313520746f6b656e7320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6148ab81613fc4565b81146148b657600080fd5b50565b6148c281613fd6565b81146148cd57600080fd5b50565b6148d981613fe2565b81146148e457600080fd5b50565b6148f08161402e565b81146148fb57600080fd5b5056fea26469706673582212209988759f2a5062cf202e7cad3de2d9a2cd4789aa60e5dc2067e08fd7266cd68664736f6c63430008070033

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80637118974211610118578063b66a0e5d116100a0578063d6c29b4e1161006f578063d6c29b4e1461072a578063e985e9c514610755578063eb8d244414610792578063f2fde38b146107bd578063f47c84c5146107e65761020f565b8063b66a0e5d14610684578063b88d4fde1461069b578063c714e89c146106c4578063c87b56dd146106ed5761020f565b80638129fc1c116100e75780638129fc1c146105c55780638da5cb5b146105dc57806395d89b4114610607578063a22cb46514610632578063a2b40d191461065b5761020f565b8063711897421461052f5780637146bd0814610558578063715018a6146105835780637ff9b5961461059a5761020f565b806335b9ac0c1161019b57806355367ba91161016a57806355367ba91461044c57806355f804b3146104635780636352211e1461048c5780636cd5645f146104c957806370a08231146104f25761020f565b806335b9ac0c146103a65780633ccfd60b146103cf57806342842e0e146103e6578063527a844f1461040f5761020f565b8063095ea7b3116101e2578063095ea7b3146102d05780630ae7a310146102f957806318160ddd1461033657806319fe8b3b1461036157806323b872dd1461037d5761020f565b8063015749601461021457806301ffc9a71461022b57806306fdde0314610268578063081812fc14610293575b600080fd5b34801561022057600080fd5b50610229610811565b005b34801561023757600080fd5b50610252600480360381019061024d9190613491565b6108db565b60405161025f9190613a52565b60405180910390f35b34801561027457600080fd5b5061027d6109bd565b60405161028a9190613a6d565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190613534565b610a4f565b6040516102c791906139eb565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f29190613451565b610ad4565b005b34801561030557600080fd5b50610320600480360381019061031b9190613534565b610bec565b60405161032d9190613daf565b60405180910390f35b34801561034257600080fd5b5061034b610c35565b6040516103589190613dca565b60405180910390f35b61037b60048036038101906103769190613534565b610c46565b005b34801561038957600080fd5b506103a4600480360381019061039f919061333b565b610de8565b005b3480156103b257600080fd5b506103cd60048036038101906103c89190613534565b610e48565b005b3480156103db57600080fd5b506103e4610ecf565b005b3480156103f257600080fd5b5061040d6004803603810190610408919061333b565b610f9a565b005b34801561041b57600080fd5b5061043660048036038101906104319190613534565b610fba565b6040516104439190613dca565b60405180910390f35b34801561045857600080fd5b50610461610fd8565b005b34801561046f57600080fd5b5061048a600480360381019061048591906134eb565b6110c9565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613534565b611160565b6040516104c091906139eb565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190613534565b611212565b005b3480156104fe57600080fd5b50610519600480360381019061051491906132ce565b6113e0565b6040516105269190613dca565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613534565b611498565b005b34801561056457600080fd5b5061056d61151f565b60405161057a9190613dca565b60405180910390f35b34801561058f57600080fd5b50610598611526565b005b3480156105a657600080fd5b506105af6115ae565b6040516105bc9190613dca565b60405180910390f35b3480156105d157600080fd5b506105da6115b4565b005b3480156105e857600080fd5b506105f16117ea565b6040516105fe91906139eb565b60405180910390f35b34801561061357600080fd5b5061061c611814565b6040516106299190613a6d565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613411565b6118a6565b005b34801561066757600080fd5b50610682600480360381019061067d9190613534565b611a27565b005b34801561069057600080fd5b50610699611aad565b005b3480156106a757600080fd5b506106c260048036038101906106bd919061338e565b611b9e565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613534565b611c00565b005b3480156106f957600080fd5b50610714600480360381019061070f9190613534565b611c86565b6040516107219190613a6d565b60405180910390f35b34801561073657600080fd5b5061073f611d2d565b60405161074c9190613dca565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906132fb565b611d34565b6040516107899190613a52565b60405180910390f35b34801561079e57600080fd5b506107a7611dc8565b6040516107b49190613a52565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df91906132ce565b611ddc565b005b3480156107f257600080fd5b506107fb611ed4565b6040516108089190613dca565b60405180910390f35b61010460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108d957600047905061010460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108d6573d6000803e3d6000fd5b50505b565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b657506109b582611eda565b5b9050919050565b6060606580546109cc9061407a565b80601f01602080910402602001604051908101604052809291908181526020018280546109f89061407a565b8015610a455780601f10610a1a57610100808354040283529160200191610a45565b820191906000526020600020905b815481529060010190602001808311610a2857829003601f168201915b5050505050905090565b6000610a5a82611f44565b610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613c4f565b60405180910390fd5b6069600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610adf82611160565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4790613d0f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6f611fb0565b73ffffffffffffffffffffffffffffffffffffffff161480610b9e5750610b9d81610b98611fb0565b611d34565b5b610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd490613b8f565b60405180910390fd5b610be78383611fb8565b505050565b610bf46130cf565b610bfd82611f44565b610c0657600080fd5b60fc60008381526020019081526020016000206040518060200160405290816000820154815250509050919050565b6000610c4160fb612071565b905090565b61010260009054906101000a900460ff16610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613b4f565b60405180910390fd5b61010054811115610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390613d8f565b60405180910390fd5b60ff54610ce882610fba565b1115610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2090613d6f565b60405180910390fd5b348160fe54610d389190613f36565b1115610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7090613c0f565b60405180910390fd5b600080600190505b828111610de357610d9260fb61207f565b610d9c60fb612071565b915060ff548211610dd057610db13383612095565b60006040518060200160405280848152509050610dce83826120b3565b505b8080610ddb906140dd565b915050610d81565b505050565b610df9610df3611fb0565b82612131565b610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90613d4f565b60405180910390fd5b610e4383838361220f565b505050565b610e50611fb0565b73ffffffffffffffffffffffffffffffffffffffff16610e6e6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613c6f565b60405180910390fd5b806101018190555050565b610ed7611fb0565b73ffffffffffffffffffffffffffffffffffffffff16610ef56117ea565b73ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613c6f565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f96573d6000803e3d6000fd5b5050565b610fb583838360405180602001604052806000815250611b9e565b505050565b600081610fc760fb612071565b610fd19190613eaf565b9050919050565b610fe0611fb0565b73ffffffffffffffffffffffffffffffffffffffff16610ffe6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90613c6f565b60405180910390fd5b6001151561010260009054906101000a900460ff161515146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290613cef565b60405180910390fd5b600061010260006101000a81548160ff021916908315150217905550565b6110d1611fb0565b73ffffffffffffffffffffffffffffffffffffffff166110ef6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613c6f565b60405180910390fd5b80610103908051906020019061115c9291906130e2565b5050565b6000806067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090613bcf565b60405180910390fd5b80915050919050565b61121a611fb0565b73ffffffffffffffffffffffffffffffffffffffff166112386117ea565b73ffffffffffffffffffffffffffffffffffffffff161461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590613c6f565b60405180910390fd5b61010260009054906101000a900460ff166112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613b4f565b60405180910390fd5b61010154811115611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90613aef565b60405180910390fd5b60ff5461133082610fba565b1115611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890613ccf565b60405180910390fd5b600080600190505b8281116113db5761138a60fb61207f565b61139460fb612071565b915060ff5482116113c8576113a93383612095565b600060405180602001604052808481525090506113c683826120b3565b505b80806113d3906140dd565b915050611379565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144890613baf565b60405180910390fd5b606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a0611fb0565b73ffffffffffffffffffffffffffffffffffffffff166114be6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90613c6f565b60405180910390fd5b806101008190555050565b6101005481565b61152e611fb0565b73ffffffffffffffffffffffffffffffffffffffff1661154c6117ea565b73ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613c6f565b60405180910390fd5b6115ac600061246b565b565b60fe5481565b600060019054906101000a900460ff16806115da575060008054906101000a900460ff16155b611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090613bef565b60405180910390fd5b60008060019054906101000a900460ff161590508015611669576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6116dd6040518060400160405280600981526020017f53686f655661756c7400000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53484f4500000000000000000000000000000000000000000000000000000000815250612531565b6116e561263a565b6116ed612723565b600061010260006101000a81548160ff02191690831515021790555061271060ff8190555066d529ae9e86000060fe81905550603261010181905550600f610100819055507342e98cdb46444c96b8fdc93da2fcfd9a77fa957561010460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117c66040518060400160405280601e81526020017f687474703a2f2f6170692e73686f657661756c742e696f2f746f6b656e2f00008152506110c9565b80156117e75760008060016101000a81548160ff0219169083151502179055505b50565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060606680546118239061407a565b80601f016020809104026020016040519081016040528092919081815260200182805461184f9061407a565b801561189c5780601f106118715761010080835404028352916020019161189c565b820191906000526020600020905b81548152906001019060200180831161187f57829003601f168201915b5050505050905090565b6118ae611fb0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390613b2f565b60405180910390fd5b80606a6000611929611fb0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119d6611fb0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a1b9190613a52565b60405180910390a35050565b611a2f611fb0565b73ffffffffffffffffffffffffffffffffffffffff16611a4d6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90613c6f565b60405180910390fd5b8060fe8190555050565b611ab5611fb0565b73ffffffffffffffffffffffffffffffffffffffff16611ad36117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090613c6f565b60405180910390fd5b6000151561010260009054906101000a900460ff16151514611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790613d2f565b60405180910390fd5b600161010260006101000a81548160ff021916908315150217905550565b611baf611ba9611fb0565b83612131565b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613d4f565b60405180910390fd5b611bfa84848484612804565b50505050565b611c08611fb0565b73ffffffffffffffffffffffffffffffffffffffff16611c266117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613c6f565b60405180910390fd5b8060ff8190555050565b6060611c9182611f44565b611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790613caf565b60405180910390fd5b6000611cda612860565b90506000815111611cfa5760405180602001604052806000815250611d25565b80611d04846128f3565b604051602001611d159291906139c7565b6040516020818303038152906040525b915050919050565b6101015481565b6000606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61010260009054906101000a900460ff1681565b611de4611fb0565b73ffffffffffffffffffffffffffffffffffffffff16611e026117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613c6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf90613aaf565b60405180910390fd5b611ed18161246b565b50565b60ff5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816069600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661202b83611160565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6120af828260405180602001604052806000815250612a54565b5050565b6120bc82611f44565b6120c557600080fd5b6120cd611fb0565b73ffffffffffffffffffffffffffffffffffffffff166120ec83611160565b73ffffffffffffffffffffffffffffffffffffffff161461210c57600080fd5b8060fc6000848152602001908152602001600020600082015181600001559050505050565b600061213c82611f44565b61217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290613b6f565b60405180910390fd5b600061218683611160565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121f557508373ffffffffffffffffffffffffffffffffffffffff166121dd84610a4f565b73ffffffffffffffffffffffffffffffffffffffff16145b8061220657506122058185611d34565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661222f82611160565b73ffffffffffffffffffffffffffffffffffffffff1614612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90613c8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ec90613b0f565b60405180910390fd5b612300838383612aaf565b61230b600082611fb8565b6001606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461235b9190613f90565b925050819055506001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b29190613eaf565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff1680612557575060008054906101000a900460ff16155b612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613bef565b60405180910390fd5b60008060019054906101000a900460ff1615905080156125e6576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b82606590805190602001906125fc9291906130e2565b5081606690805190602001906126139291906130e2565b5080156126355760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680612660575060008054906101000a900460ff16155b61269f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269690613bef565b60405180910390fd5b60008060019054906101000a900460ff1615905080156126ef576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6126f7612ab4565b6126ff612b8d565b80156127205760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612749575060008054906101000a900460ff16155b612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f90613bef565b60405180910390fd5b60008060019054906101000a900460ff1615905080156127d8576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6127e0612c76565b80156128015760008060016101000a81548160ff0219169083151502179055505b50565b61280f84848461220f565b61281b84848484612d57565b61285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190613a8f565b60405180910390fd5b50505050565b606061010380546128709061407a565b80601f016020809104026020016040519081016040528092919081815260200182805461289c9061407a565b80156128e95780601f106128be576101008083540402835291602001916128e9565b820191906000526020600020905b8154815290600101906020018083116128cc57829003601f168201915b5050505050905090565b6060600082141561293b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a4f565b600082905060005b6000821461296d578080612956906140dd565b915050600a826129669190613f05565b9150612943565b60008167ffffffffffffffff81111561298957612988614213565b5b6040519080825280601f01601f1916602001820160405280156129bb5781602001600182028036833780820191505090505b5090505b60008514612a48576001826129d49190613f90565b9150600a856129e39190614126565b60306129ef9190613eaf565b60f81b818381518110612a0557612a046141e4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a419190613f05565b94506129bf565b8093505050505b919050565b612a5e8383612eee565b612a6b6000848484612d57565b612aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa190613a8f565b60405180910390fd5b505050565b505050565b600060019054906101000a900460ff1680612ada575060008054906101000a900460ff16155b612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1090613bef565b60405180910390fd5b60008060019054906101000a900460ff161590508015612b69576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015612b8a5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612bb3575060008054906101000a900460ff16155b612bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be990613bef565b60405180910390fd5b60008060019054906101000a900460ff161590508015612c42576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612c52612c4d611fb0565b61246b565b8015612c735760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612c9c575060008054906101000a900460ff16155b612cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd290613bef565b60405180910390fd5b60008060019054906101000a900460ff161590508015612d2b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600160c9819055508015612d545760008060016101000a81548160ff0219169083151502179055505b50565b6000612d788473ffffffffffffffffffffffffffffffffffffffff166130bc565b15612ee1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612da1611fb0565b8786866040518563ffffffff1660e01b8152600401612dc39493929190613a06565b602060405180830381600087803b158015612ddd57600080fd5b505af1925050508015612e0e57506040513d601f19601f82011682018060405250810190612e0b91906134be565b60015b612e91573d8060008114612e3e576040519150601f19603f3d011682016040523d82523d6000602084013e612e43565b606091505b50600081511415612e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8090613a8f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ee6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5590613c2f565b60405180910390fd5b612f6781611f44565b15612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e90613acf565b60405180910390fd5b612fb360008383612aaf565b6001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130039190613eaf565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6040518060200160405280600081525090565b8280546130ee9061407a565b90600052602060002090601f0160209004810192826131105760008555613157565b82601f1061312957805160ff1916838001178555613157565b82800160010185558215613157579182015b8281111561315657825182559160200191906001019061313b565b5b5090506131649190613168565b5090565b5b80821115613181576000816000905550600101613169565b5090565b600061319861319384613e0a565b613de5565b9050828152602081018484840111156131b4576131b3614247565b5b6131bf848285614038565b509392505050565b60006131da6131d584613e3b565b613de5565b9050828152602081018484840111156131f6576131f5614247565b5b613201848285614038565b509392505050565b600081359050613218816148a2565b92915050565b60008135905061322d816148b9565b92915050565b600081359050613242816148d0565b92915050565b600081519050613257816148d0565b92915050565b600082601f83011261327257613271614242565b5b8135613282848260208601613185565b91505092915050565b600082601f8301126132a05761329f614242565b5b81356132b08482602086016131c7565b91505092915050565b6000813590506132c8816148e7565b92915050565b6000602082840312156132e4576132e3614251565b5b60006132f284828501613209565b91505092915050565b6000806040838503121561331257613311614251565b5b600061332085828601613209565b925050602061333185828601613209565b9150509250929050565b60008060006060848603121561335457613353614251565b5b600061336286828701613209565b935050602061337386828701613209565b9250506040613384868287016132b9565b9150509250925092565b600080600080608085870312156133a8576133a7614251565b5b60006133b687828801613209565b94505060206133c787828801613209565b93505060406133d8878288016132b9565b925050606085013567ffffffffffffffff8111156133f9576133f861424c565b5b6134058782880161325d565b91505092959194509250565b6000806040838503121561342857613427614251565b5b600061343685828601613209565b92505060206134478582860161321e565b9150509250929050565b6000806040838503121561346857613467614251565b5b600061347685828601613209565b9250506020613487858286016132b9565b9150509250929050565b6000602082840312156134a7576134a6614251565b5b60006134b584828501613233565b91505092915050565b6000602082840312156134d4576134d3614251565b5b60006134e284828501613248565b91505092915050565b60006020828403121561350157613500614251565b5b600082013567ffffffffffffffff81111561351f5761351e61424c565b5b61352b8482850161328b565b91505092915050565b60006020828403121561354a57613549614251565b5b6000613558848285016132b9565b91505092915050565b61356a81613fc4565b82525050565b61357981613fd6565b82525050565b600061358a82613e6c565b6135948185613e82565b93506135a4818560208601614047565b6135ad81614256565b840191505092915050565b60006135c382613e77565b6135cd8185613e93565b93506135dd818560208601614047565b6135e681614256565b840191505092915050565b60006135fc82613e77565b6136068185613ea4565b9350613616818560208601614047565b80840191505092915050565b600061362f603283613e93565b915061363a82614267565b604082019050919050565b6000613652602683613e93565b915061365d826142b6565b604082019050919050565b6000613675601c83613e93565b915061368082614305565b602082019050919050565b6000613698601f83613e93565b91506136a38261432e565b602082019050919050565b60006136bb602483613e93565b91506136c682614357565b604082019050919050565b60006136de601983613e93565b91506136e9826143a6565b602082019050919050565b6000613701602283613e93565b915061370c826143cf565b604082019050919050565b6000613724602c83613e93565b915061372f8261441e565b604082019050919050565b6000613747603883613e93565b91506137528261446d565b604082019050919050565b600061376a602a83613e93565b9150613775826144bc565b604082019050919050565b600061378d602983613e93565b91506137988261450b565b604082019050919050565b60006137b0602e83613e93565b91506137bb8261455a565b604082019050919050565b60006137d3601983613e93565b91506137de826145a9565b602082019050919050565b60006137f6602083613e93565b9150613801826145d2565b602082019050919050565b6000613819602c83613e93565b9150613824826145fb565b604082019050919050565b600061383c602083613e93565b91506138478261464a565b602082019050919050565b600061385f602983613e93565b915061386a82614673565b604082019050919050565b6000613882602f83613e93565b915061388d826146c2565b604082019050919050565b60006138a5601a83613e93565b91506138b082614711565b602082019050919050565b60006138c8601683613e93565b91506138d38261473a565b602082019050919050565b60006138eb602183613e93565b91506138f682614763565b604082019050919050565b600061390e601683613e93565b9150613919826147b2565b602082019050919050565b6000613931603183613e93565b915061393c826147db565b604082019050919050565b6000613954601483613e93565b915061395f8261482a565b602082019050919050565b6000613977602183613e93565b915061398282614853565b604082019050919050565b6020820160008201516139a360008501826139a9565b50505050565b6139b28161402e565b82525050565b6139c18161402e565b82525050565b60006139d382856135f1565b91506139df82846135f1565b91508190509392505050565b6000602082019050613a006000830184613561565b92915050565b6000608082019050613a1b6000830187613561565b613a286020830186613561565b613a3560408301856139b8565b8181036060830152613a47818461357f565b905095945050505050565b6000602082019050613a676000830184613570565b92915050565b60006020820190508181036000830152613a8781846135b8565b905092915050565b60006020820190508181036000830152613aa881613622565b9050919050565b60006020820190508181036000830152613ac881613645565b9050919050565b60006020820190508181036000830152613ae881613668565b9050919050565b60006020820190508181036000830152613b088161368b565b9050919050565b60006020820190508181036000830152613b28816136ae565b9050919050565b60006020820190508181036000830152613b48816136d1565b9050919050565b60006020820190508181036000830152613b68816136f4565b9050919050565b60006020820190508181036000830152613b8881613717565b9050919050565b60006020820190508181036000830152613ba88161373a565b9050919050565b60006020820190508181036000830152613bc88161375d565b9050919050565b60006020820190508181036000830152613be881613780565b9050919050565b60006020820190508181036000830152613c08816137a3565b9050919050565b60006020820190508181036000830152613c28816137c6565b9050919050565b60006020820190508181036000830152613c48816137e9565b9050919050565b60006020820190508181036000830152613c688161380c565b9050919050565b60006020820190508181036000830152613c888161382f565b9050919050565b60006020820190508181036000830152613ca881613852565b9050919050565b60006020820190508181036000830152613cc881613875565b9050919050565b60006020820190508181036000830152613ce881613898565b9050919050565b60006020820190508181036000830152613d08816138bb565b9050919050565b60006020820190508181036000830152613d28816138de565b9050919050565b60006020820190508181036000830152613d4881613901565b9050919050565b60006020820190508181036000830152613d6881613924565b9050919050565b60006020820190508181036000830152613d8881613947565b9050919050565b60006020820190508181036000830152613da88161396a565b9050919050565b6000602082019050613dc4600083018461398d565b92915050565b6000602082019050613ddf60008301846139b8565b92915050565b6000613def613e00565b9050613dfb82826140ac565b919050565b6000604051905090565b600067ffffffffffffffff821115613e2557613e24614213565b5b613e2e82614256565b9050602081019050919050565b600067ffffffffffffffff821115613e5657613e55614213565b5b613e5f82614256565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613eba8261402e565b9150613ec58361402e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613efa57613ef9614157565b5b828201905092915050565b6000613f108261402e565b9150613f1b8361402e565b925082613f2b57613f2a614186565b5b828204905092915050565b6000613f418261402e565b9150613f4c8361402e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8557613f84614157565b5b828202905092915050565b6000613f9b8261402e565b9150613fa68361402e565b925082821015613fb957613fb8614157565b5b828203905092915050565b6000613fcf8261400e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561406557808201518184015260208101905061404a565b83811115614074576000848401525b50505050565b6000600282049050600182168061409257607f821691505b602082108114156140a6576140a56141b5565b5b50919050565b6140b582614256565b810181811067ffffffffffffffff821117156140d4576140d3614213565b5b80604052505050565b60006140e88261402e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561411b5761411a614157565b5b600182019050919050565b60006141318261402e565b915061413c8361402e565b92508261414c5761414b614186565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616e206f6e6c79206d696e74203530206769667420617420612074696d6500600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420546f6b6560008201527f6e73000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f56616c75652073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f457863656564206d617820737570706c79206f662053686f6573000000000000600082015250565b7f73616c6520697320616c72656164792070617573656400000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f73616c6520697320616c72656164792061637469766500000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617920737570706c79206f662053686f652773000000000000000000000000600082015250565b7f43616e206f6e6c79206d696e7420313520746f6b656e7320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6148ab81613fc4565b81146148b657600080fd5b50565b6148c281613fd6565b81146148cd57600080fd5b50565b6148d981613fe2565b81146148e457600080fd5b50565b6148f08161402e565b81146148fb57600080fd5b5056fea26469706673582212209988759f2a5062cf202e7cad3de2d9a2cd4789aa60e5dc2067e08fd7266cd68664736f6c63430008070033

Deployed Bytecode Sourcemap

42485:5378:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47494:200;;;;;;;;;;;;;:::i;:::-;;30120:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31097:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32667:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32179:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47700:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45546:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45846:753;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33557:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44183:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47346:140;;;;;;;;;;;;;:::i;:::-;;33967:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45686:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44459:143;;;;;;;;;;;;;:::i;:::-;;44973:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30791:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46644:661;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30521:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44030:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42986:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11849:94;;;;;;;;;;;;;:::i;:::-;;42842:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43457:517;;;;;;;;;;;;;:::i;:::-;;11198:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31266:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32960:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45135:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44643:143;;;;;;;;;;;;;:::i;:::-;;34223:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44322:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31441:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43079:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33326:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43228:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12098:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42910:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47494:200;47548:16;;;;;;;;;;;47534:30;;:10;:30;;;47530:157;;;47581:12;47596:21;47581:36;;47640:16;;;;;;;;;;;47632:34;;:43;47667:7;47632:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47566:121;47530:157;47494:200::o;30120:337::-;30244:4;30292:36;30277:51;;;:11;:51;;;;:123;;;;30356:44;30341:59;;;:11;:59;;;;30277:123;:172;;;;30413:36;30437:11;30413:23;:36::i;:::-;30277:172;30261:188;;30120:337;;;:::o;31097:100::-;31151:13;31184:5;31177:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31097:100;:::o;32667:221::-;32743:7;32771:16;32779:7;32771;:16::i;:::-;32763:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32856:15;:24;32872:7;32856:24;;;;;;;;;;;;;;;;;;;;;32849:31;;32667:221;;;:::o;32179:422::-;32260:13;32276:34;32302:7;32276:25;:34::i;:::-;32260:50;;32335:5;32329:11;;:2;:11;;;;32321:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32429:5;32413:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32438:37;32455:5;32462:12;:10;:12::i;:::-;32438:16;:37::i;:::-;32413:62;32391:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32572:21;32581:2;32585:7;32572:8;:21::i;:::-;32249:352;32179:422;;:::o;47700:160::-;47758:15;;:::i;:::-;47794:17;47802:8;47794:7;:17::i;:::-;47786:26;;;;;;47830:10;:20;47841:8;47830:20;;;;;;;;;;;47823:27;;;;;;;;;;;;;;;;;;;47700:160;;;:::o;45546:95::-;45590:4;45614:19;:9;:17;:19::i;:::-;45607:26;;45546:95;:::o;45846:753::-;45914:12;;;;;;;;;;;45906:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45997:12;;45984:9;:25;;45976:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;46094:10;;46066:23;46079:9;46066:12;:23::i;:::-;:38;;46058:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;46176:9;46161;46148:10;;:22;;;;:::i;:::-;:37;;46140:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46226:11;46252:6;46261:1;46252:10;;46248:344;46269:9;46264:1;:14;46248:344;;46300:21;:9;:19;:21::i;:::-;46345:19;:9;:17;:19::i;:::-;46336:28;;46393:10;;46383:6;:20;46379:202;;46424:29;46434:10;46446:6;46424:9;:29::i;:::-;46472:24;46499:16;;;;;;;;46508:6;46499:16;;;46472:43;;46534:31;46548:6;46556:8;46534:13;:31::i;:::-;46405:176;46379:202;46280:3;;;;;:::i;:::-;;;;46248:344;;;;45895:704;45846:753;:::o;33557:339::-;33752:41;33771:12;:10;:12::i;:::-;33785:7;33752:18;:41::i;:::-;33744:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33860:28;33870:4;33876:2;33880:7;33860:9;:28::i;:::-;33557:339;;;:::o;44183:94::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44261:8:::1;44250;:19;;;;44183:94:::0;:::o;47346:140::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47394:12:::1;47409:21;47394:36;;47449:10;47441:28;;:37;47470:7;47441:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47383:103;47346:140::o:0;33967:185::-;34105:39;34122:4;34128:2;34132:7;34105:39;;;;;;;;;;;;:16;:39::i;:::-;33967:185;;;:::o;45686:120::-;45744:4;45790:8;45768:19;:9;:17;:19::i;:::-;:30;;;;:::i;:::-;45761:37;;45686:120;;;:::o;44459:143::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44532:4:::1;44516:20;;:12;;;;;;;;;;;:20;;;44508:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44589:5;44574:12;;:20;;;;;;;;;;;;;;;;;;44459:143::o:0;44973:104::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45058:11:::1;45048:7;:21;;;;;;;;;;;;:::i;:::-;;44973:104:::0;:::o;30791:239::-;30863:7;30883:13;30899:7;:16;30907:7;30899:16;;;;;;;;;;;;;;;;;;;;;30883:32;;30951:1;30934:19;;:5;:19;;;;30926:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31017:5;31010:12;;;30791:239;;;:::o;46644:661::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46712:12:::1;;;;;;;;;;;46704:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46793:8;;46782:7;:19;;46774:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46882:10;;46856:21;46869:7;46856:12;:21::i;:::-;:36;;46848:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46934:11;46960:6:::0;46969:1:::1;46960:10;;46956:342;46977:7;46972:1;:12;46956:342;;47006:21;:9;:19;:21::i;:::-;47051:19;:9;:17;:19::i;:::-;47042:28;;47099:10;;47089:6;:20;47085:202;;47130:29;47140:10;47152:6;47130:9;:29::i;:::-;47178:24;47205:16;;;;;;;;47214:6;47205:16;;::::0;47178:43:::1;;47240:31;47254:6;47262:8;47240:13;:31::i;:::-;47111:176;47085:202;46986:3;;;;;:::i;:::-;;;;46956:342;;;;46693:612;46644:661:::0;:::o;30521:208::-;30593:7;30638:1;30621:19;;:5;:19;;;;30613:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30705:9;:16;30715:5;30705:16;;;;;;;;;;;;;;;;30698:23;;30521:208;;;:::o;44030:101::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44115:8:::1;44100:12;:23;;;;44030:101:::0;:::o;42986:24::-;;;;:::o;11849:94::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11914:21:::1;11932:1;11914:9;:21::i;:::-;11849:94::o:0;42842:25::-;;;;:::o;43457:517::-;5571:13;;;;;;;;;;;:30;;;;5589:12;;;;;;;;;;5588:13;5571:30;5563:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;5665:19;5688:13;;;;;;;;;;;5687:14;5665:36;;5716:14;5712:101;;;5763:4;5747:13;;:20;;;;;;;;;;;;;;;;;;5797:4;5782:12;;:19;;;;;;;;;;;;;;;;;;5712:101;43509:62:::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:41:::1;:62::i;:::-;43582:35;:33;:35::i;:::-;43628:51;:49;:51::i;:::-;43705:5;43690:12;;:20;;;;;;;;;;;;;;;;;;43734:5;43721:10;:18;;;;43763:17;43750:10;:30;;;;43809:2;43798:8;:13;;;;43837:2;43822:12;:17;;;;43869:42;43850:16;;:61;;;;;;;;;;;;;;;;;;43922:44;;;;;;;;;;;;;;;;;::::0;:10:::1;:44::i;:::-;5843:14:::0;5839:68;;;5890:5;5874:13;;:21;;;;;;;;;;;;;;;;;;5839:68;5552:362;43457:517::o;11198:87::-;11244:7;11271:6;;;;;;;;;;;11264:13;;11198:87;:::o;31266:104::-;31322:13;31355:7;31348:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31266:104;:::o;32960:295::-;33075:12;:10;:12::i;:::-;33063:24;;:8;:24;;;;33055:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33175:8;33130:18;:32;33149:12;:10;:12::i;:::-;33130:32;;;;;;;;;;;;;;;:42;33163:8;33130:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33228:8;33199:48;;33214:12;:10;:12::i;:::-;33199:48;;;33238:8;33199:48;;;;;;:::i;:::-;;;;;;;;32960:295;;:::o;45135:98::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45216:9:::1;45203:10;:22;;;;45135:98:::0;:::o;44643:143::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44716:5:::1;44700:21;;:12;;;;;;;;;;;:21;;;44692:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44774:4;44759:12;;:19;;;;;;;;;;;;;;;;;;44643:143::o:0;34223:328::-;34398:41;34417:12;:10;:12::i;:::-;34431:7;34398:18;:41::i;:::-;34390:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34504:39;34518:4;34524:2;34528:7;34537:5;34504:13;:39::i;:::-;34223:328;;;;:::o;44322:96::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44402:8:::1;44389:10;:21;;;;44322:96:::0;:::o;31441:334::-;31514:13;31548:16;31556:7;31548;:16::i;:::-;31540:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31629:21;31653:10;:8;:10::i;:::-;31629:34;;31705:1;31687:7;31681:21;:25;:86;;;;;;;;;;;;;;;;;31733:7;31742:18;:7;:16;:18::i;:::-;31716:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31681:86;31674:93;;;31441:334;;;:::o;43079:20::-;;;;:::o;33326:164::-;33423:4;33447:18;:25;33466:5;33447:25;;;;;;;;;;;;;;;:35;33473:8;33447:35;;;;;;;;;;;;;;;;;;;;;;;;;33440:42;;33326:164;;;;:::o;43228:24::-;;;;;;;;;;;;;:::o;12098:192::-;11429:12;:10;:12::i;:::-;11418:23;;:7;:5;:7::i;:::-;:23;;;11410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12207:1:::1;12187:22;;:8;:22;;;;12179:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12263:19;12273:8;12263:9;:19::i;:::-;12098:192:::0;:::o;42910:25::-;;;;:::o;14419:168::-;14504:4;14543:36;14528:51;;;:11;:51;;;;14521:58;;14419:168;;;:::o;36061:127::-;36126:4;36178:1;36150:30;;:7;:16;36158:7;36150:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36143:37;;36061:127;;;:::o;9712:98::-;9765:7;9792:10;9785:17;;9712:98;:::o;40076:185::-;40178:2;40151:15;:24;40167:7;40151:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40245:7;40241:2;40196:57;;40205:34;40231:7;40205:25;:34::i;:::-;40196:57;;;;;;;;;;;;40076:185;;:::o;1415:114::-;1480:7;1507;:14;;;1500:21;;1415:114;;;:::o;1537:115::-;1636:1;1618:7;:14;;;:19;;;;;;;;;;;1537:115;:::o;37056:110::-;37132:26;37142:2;37146:7;37132:26;;;;;;;;;;;;:9;:26::i;:::-;37056:110;;:::o;45285:209::-;45376:17;45384:8;45376:7;:17::i;:::-;45368:26;;;;;;45434:12;:10;:12::i;:::-;45413:33;;:17;45421:8;45413:7;:17::i;:::-;:33;;;45405:42;;;;;;45481:5;45458:10;:20;45469:8;45458:20;;;;;;;;;;;:28;;;;;;;;;;;45285:209;;:::o;36355:359::-;36448:4;36473:16;36481:7;36473;:16::i;:::-;36465:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36549:13;36565:34;36591:7;36565:25;:34::i;:::-;36549:50;;36629:5;36618:16;;:7;:16;;;:51;;;;36662:7;36638:31;;:20;36650:7;36638:11;:20::i;:::-;:31;;;36618:51;:87;;;;36673:32;36690:5;36697:7;36673:16;:32::i;:::-;36618:87;36610:96;;;36355:359;;;;:::o;39369:589::-;39539:4;39501:42;;:34;39527:7;39501:25;:34::i;:::-;:42;;;39493:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39622:1;39608:16;;:2;:16;;;;39600:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39678:39;39699:4;39705:2;39709:7;39678:20;:39::i;:::-;39782:29;39799:1;39803:7;39782:8;:29::i;:::-;39843:1;39824:9;:15;39834:4;39824:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39872:1;39855:9;:13;39865:2;39855:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39903:2;39884:7;:16;39892:7;39884:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39942:7;39938:2;39923:27;;39932:4;39923:27;;;;;;;;;;;;39369:589;;;:::o;12298:173::-;12354:16;12373:6;;;;;;;;;;;12354:25;;12399:8;12390:6;;:17;;;;;;;;;;;;;;;;;;12454:8;12423:40;;12444:8;12423:40;;;;;;;;;;;;12343:128;12298:173;:::o;29890:158::-;5571:13;;;;;;;;;;;:30;;;;5589:12;;;;;;;;;;5588:13;5571:30;5563:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;5665:19;5688:13;;;;;;;;;;;5687:14;5665:36;;5716:14;5712:101;;;5763:4;5747:13;;:20;;;;;;;;;;;;;;;;;;5797:4;5782:12;;:19;;;;;;;;;;;;;;;;;;5712:101;30007:5:::1;29999;:13;;;;;;;;;;;;:::i;:::-;;30033:7;30023;:17;;;;;;;;;;;;:::i;:::-;;5843:14:::0;5839:68;;;5890:5;5874:13;;:21;;;;;;;;;;;;;;;;;;5839:68;5552:362;29890:158;;:::o;10881:129::-;5571:13;;;;;;;;;;;:30;;;;5589:12;;;;;;;;;;5588:13;5571:30;5563:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;5665:19;5688:13;;;;;;;;;;;5687:14;5665:36;;5716:14;5712:101;;;5763:4;5747:13;;:20;;;;;;;;;;;;;;;;;;5797:4;5782:12;;:19;;;;;;;;;;;;;;;;;;5712:101;10939:26:::1;:24;:26::i;:::-;10976;:24;:26::i;:::-;5843:14:::0;5839:68;;;5890:5;5874:13;;:21;;;;;;;;;;;;;;;;;;5839:68;5552:362;10881:129::o;7763:108::-;5571:13;;;;;;;;;;;:30;;;;5589:12;;;;;;;;;;5588:13;5571:30;5563:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;5665:19;5688:13;;;;;;;;;;;5687:14;5665:36;;5716:14;5712:101;;;5763:4;5747:13;;:20;;;;;;;;;;;;;;;;;;5797:4;5782:12;;:19;;;;;;;;;;;;;;;;;;5712:101;7829:34:::1;:32;:34::i;:::-;5843:14:::0;5839:68;;;5890:5;5874:13;;:21;;;;;;;;;;;;;;;;;;5839:68;5552:362;7763:108::o;35433:315::-;35590:28;35600:4;35606:2;35610:7;35590:9;:28::i;:::-;35637:48;35660:4;35666:2;35670:7;35679:5;35637:22;:48::i;:::-;35629:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35433:315;;;;:::o;44824:108::-;44884:13;44917:7;44910:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44824:108;:::o;2327:723::-;2383:13;2613:1;2604:5;:10;2600:53;;;2631:10;;;;;;;;;;;;;;;;;;;;;2600:53;2663:12;2678:5;2663:20;;2694:14;2719:78;2734:1;2726:4;:9;2719:78;;2752:8;;;;;:::i;:::-;;;;2783:2;2775:10;;;;;:::i;:::-;;;2719:78;;;2807:19;2839:6;2829:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2807:39;;2857:154;2873:1;2864:5;:10;2857:154;;2901:1;2891:11;;;;;:::i;:::-;;;2968:2;2960:5;:10;;;;:::i;:::-;2947:2;:24;;;;:::i;:::-;2934:39;;2917:6;2924;2917:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2997:2;2988:11;;;;;:::i;:::-;;;2857:154;;;3035:6;3021:21;;;;;2327:723;;;;:::o;37393:321::-;37523:18;37529:2;37533:7;37523:5;:18::i;:::-;37574:54;37605:1;37609:2;37613:7;37622:5;37574:22;:54::i;:::-;37552:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37393:321;;;:::o;42219:126::-;;;;:::o;9641:65::-;5571:13;;;;;;;;;;;:30;;;;5589:12;;;;;;;;;;5588:13;5571:30;5563:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;5665:19;5688:13;;;;;;;;;;;5687:14;5665:36;;5716:14;5712:101;;;5763:4;5747:13;;:20;;;;;;;;;;;;;;;;;;5797:4;5782:12;;:19;;;;;;;;;;;;;;;;;;5712:101;5843:14;5839:68;;;5890:5;5874:13;;:21;;;;;;;;;;;;;;;;;;5839:68;5552:362;9641:65::o;11018:99::-;5571:13;;;;;;;;;;;:30;;;;5589:12;;;;;;;;;;5588:13;5571:30;5563:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;5665:19;5688:13;;;;;;;;;;;5687:14;5665:36;;5716:14;5712:101;;;5763:4;5747:13;;:20;;;;;;;;;;;;;;;;;;5797:4;5782:12;;:19;;;;;;;;;;;;;;;;;;5712:101;11086:23:::1;11096:12;:10;:12::i;:::-;11086:9;:23::i;:::-;5843:14:::0;5839:68;;;5890:5;5874:13;;:21;;;;;;;;;;;;;;;;;;5839:68;5552:362;11018:99::o;7879:106::-;5571:13;;;;;;;;;;;:30;;;;5589:12;;;;;;;;;;5588:13;5571:30;5563:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;5665:19;5688:13;;;;;;;;;;;5687:14;5665:36;;5716:14;5712:101;;;5763:4;5747:13;;:20;;;;;;;;;;;;;;;;;;5797:4;5782:12;;:19;;;;;;;;;;;;;;;;;;5712:101;7677:1:::1;7955:7;:22;;;;5843:14:::0;5839:68;;;5890:5;5874:13;;:21;;;;;;;;;;;;;;;;;;5839:68;5552:362;7879:106::o;40826:821::-;40981:4;41002:15;:2;:13;;;:15::i;:::-;40998:642;;;41065:2;41038:47;;;41086:12;:10;:12::i;:::-;41100:4;41106:7;41115:5;41038:83;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41034:551;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41319:1;41302:6;:13;:18;41298:272;;;41345:60;;;;;;;;;;:::i;:::-;;;;;;;;41298:272;41520:6;41514:13;41505:6;41501:2;41497:15;41490:38;41034:551;41182:52;;;41172:62;;;:6;:62;;;;41165:69;;;;;40998:642;41624:4;41617:11;;40826:821;;;;;;;:::o;38050:382::-;38144:1;38130:16;;:2;:16;;;;38122:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38203:16;38211:7;38203;:16::i;:::-;38202:17;38194:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38265:45;38294:1;38298:2;38302:7;38265:20;:45::i;:::-;38340:1;38323:9;:13;38333:2;38323:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38371:2;38352:7;:16;38360:7;38352:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38416:7;38412:2;38391:33;;38408:1;38391:33;;;;;;;;;;;;38050:382;;:::o;15428:387::-;15488:4;15696:12;15763:7;15751:20;15743:28;;15806:1;15799:4;:8;15792:15;;;15428:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8516:366;;;:::o;8888:::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;8888:366;;;:::o;9260:::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9260:366;;;:::o;9632:::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9632:366;;;:::o;10004:::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10004:366;;;:::o;10376:::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10376:366;;;:::o;10748:::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10748:366;;;:::o;11120:::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11120:366;;;:::o;11492:::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11492:366;;;:::o;11864:::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;11864:366;;;:::o;12236:::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12608:366;;;:::o;12980:::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;12980:366;;;:::o;13352:::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13352:366;;;:::o;13724:::-;13866:3;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13963:93;14052:3;13963:93;:::i;:::-;14081:2;14076:3;14072:12;14065:19;;13724:366;;;:::o;14096:::-;14238:3;14259:67;14323:2;14318:3;14259:67;:::i;:::-;14252:74;;14335:93;14424:3;14335:93;:::i;:::-;14453:2;14448:3;14444:12;14437:19;;14096:366;;;:::o;14468:::-;14610:3;14631:67;14695:2;14690:3;14631:67;:::i;:::-;14624:74;;14707:93;14796:3;14707:93;:::i;:::-;14825:2;14820:3;14816:12;14809:19;;14468:366;;;:::o;14840:::-;14982:3;15003:67;15067:2;15062:3;15003:67;:::i;:::-;14996:74;;15079:93;15168:3;15079:93;:::i;:::-;15197:2;15192:3;15188:12;15181:19;;14840:366;;;:::o;15212:::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15212:366;;;:::o;15584:::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15584:366;;;:::o;15956:::-;16098:3;16119:67;16183:2;16178:3;16119:67;:::i;:::-;16112:74;;16195:93;16284:3;16195:93;:::i;:::-;16313:2;16308:3;16304:12;16297:19;;15956:366;;;:::o;16328:::-;16470:3;16491:67;16555:2;16550:3;16491:67;:::i;:::-;16484:74;;16567:93;16656:3;16567:93;:::i;:::-;16685:2;16680:3;16676:12;16669:19;;16328:366;;;:::o;16700:::-;16842:3;16863:67;16927:2;16922:3;16863:67;:::i;:::-;16856:74;;16939:93;17028:3;16939:93;:::i;:::-;17057:2;17052:3;17048:12;17041:19;;16700:366;;;:::o;17072:::-;17214:3;17235:67;17299:2;17294:3;17235:67;:::i;:::-;17228:74;;17311:93;17400:3;17311:93;:::i;:::-;17429:2;17424:3;17420:12;17413:19;;17072:366;;;:::o;17444:::-;17586:3;17607:67;17671:2;17666:3;17607:67;:::i;:::-;17600:74;;17683:93;17772:3;17683:93;:::i;:::-;17801:2;17796:3;17792:12;17785:19;;17444:366;;;:::o;17878:333::-;18027:4;18022:3;18018:14;18112:4;18105:5;18101:16;18095:23;18131:63;18188:4;18183:3;18179:14;18165:12;18131:63;:::i;:::-;18042:162;17996:215;17878:333;;:::o;18217:108::-;18294:24;18312:5;18294:24;:::i;:::-;18289:3;18282:37;18217:108;;:::o;18331:118::-;18418:24;18436:5;18418:24;:::i;:::-;18413:3;18406:37;18331:118;;:::o;18455:435::-;18635:3;18657:95;18748:3;18739:6;18657:95;:::i;:::-;18650:102;;18769:95;18860:3;18851:6;18769:95;:::i;:::-;18762:102;;18881:3;18874:10;;18455:435;;;;;:::o;18896:222::-;18989:4;19027:2;19016:9;19012:18;19004:26;;19040:71;19108:1;19097:9;19093:17;19084:6;19040:71;:::i;:::-;18896:222;;;;:::o;19124:640::-;19319:4;19357:3;19346:9;19342:19;19334:27;;19371:71;19439:1;19428:9;19424:17;19415:6;19371:71;:::i;:::-;19452:72;19520:2;19509:9;19505:18;19496:6;19452:72;:::i;:::-;19534;19602:2;19591:9;19587:18;19578:6;19534:72;:::i;:::-;19653:9;19647:4;19643:20;19638:2;19627:9;19623:18;19616:48;19681:76;19752:4;19743:6;19681:76;:::i;:::-;19673:84;;19124:640;;;;;;;:::o;19770:210::-;19857:4;19895:2;19884:9;19880:18;19872:26;;19908:65;19970:1;19959:9;19955:17;19946:6;19908:65;:::i;:::-;19770:210;;;;:::o;19986:313::-;20099:4;20137:2;20126:9;20122:18;20114:26;;20186:9;20180:4;20176:20;20172:1;20161:9;20157:17;20150:47;20214:78;20287:4;20278:6;20214:78;:::i;:::-;20206:86;;19986:313;;;;:::o;20305:419::-;20471:4;20509:2;20498:9;20494:18;20486:26;;20558:9;20552:4;20548:20;20544:1;20533:9;20529:17;20522:47;20586:131;20712:4;20586:131;:::i;:::-;20578:139;;20305:419;;;:::o;20730:::-;20896:4;20934:2;20923:9;20919:18;20911:26;;20983:9;20977:4;20973:20;20969:1;20958:9;20954:17;20947:47;21011:131;21137:4;21011:131;:::i;:::-;21003:139;;20730:419;;;:::o;21155:::-;21321:4;21359:2;21348:9;21344:18;21336:26;;21408:9;21402:4;21398:20;21394:1;21383:9;21379:17;21372:47;21436:131;21562:4;21436:131;:::i;:::-;21428:139;;21155:419;;;:::o;21580:::-;21746:4;21784:2;21773:9;21769:18;21761:26;;21833:9;21827:4;21823:20;21819:1;21808:9;21804:17;21797:47;21861:131;21987:4;21861:131;:::i;:::-;21853:139;;21580:419;;;:::o;22005:::-;22171:4;22209:2;22198:9;22194:18;22186:26;;22258:9;22252:4;22248:20;22244:1;22233:9;22229:17;22222:47;22286:131;22412:4;22286:131;:::i;:::-;22278:139;;22005:419;;;:::o;22430:::-;22596:4;22634:2;22623:9;22619:18;22611:26;;22683:9;22677:4;22673:20;22669:1;22658:9;22654:17;22647:47;22711:131;22837:4;22711:131;:::i;:::-;22703:139;;22430:419;;;:::o;22855:::-;23021:4;23059:2;23048:9;23044:18;23036:26;;23108:9;23102:4;23098:20;23094:1;23083:9;23079:17;23072:47;23136:131;23262:4;23136:131;:::i;:::-;23128:139;;22855:419;;;:::o;23280:::-;23446:4;23484:2;23473:9;23469:18;23461:26;;23533:9;23527:4;23523:20;23519:1;23508:9;23504:17;23497:47;23561:131;23687:4;23561:131;:::i;:::-;23553:139;;23280:419;;;:::o;23705:::-;23871:4;23909:2;23898:9;23894:18;23886:26;;23958:9;23952:4;23948:20;23944:1;23933:9;23929:17;23922:47;23986:131;24112:4;23986:131;:::i;:::-;23978:139;;23705:419;;;:::o;24130:::-;24296:4;24334:2;24323:9;24319:18;24311:26;;24383:9;24377:4;24373:20;24369:1;24358:9;24354:17;24347:47;24411:131;24537:4;24411:131;:::i;:::-;24403:139;;24130:419;;;:::o;24555:::-;24721:4;24759:2;24748:9;24744:18;24736:26;;24808:9;24802:4;24798:20;24794:1;24783:9;24779:17;24772:47;24836:131;24962:4;24836:131;:::i;:::-;24828:139;;24555:419;;;:::o;24980:::-;25146:4;25184:2;25173:9;25169:18;25161:26;;25233:9;25227:4;25223:20;25219:1;25208:9;25204:17;25197:47;25261:131;25387:4;25261:131;:::i;:::-;25253:139;;24980:419;;;:::o;25405:::-;25571:4;25609:2;25598:9;25594:18;25586:26;;25658:9;25652:4;25648:20;25644:1;25633:9;25629:17;25622:47;25686:131;25812:4;25686:131;:::i;:::-;25678:139;;25405:419;;;:::o;25830:::-;25996:4;26034:2;26023:9;26019:18;26011:26;;26083:9;26077:4;26073:20;26069:1;26058:9;26054:17;26047:47;26111:131;26237:4;26111:131;:::i;:::-;26103:139;;25830:419;;;:::o;26255:::-;26421:4;26459:2;26448:9;26444:18;26436:26;;26508:9;26502:4;26498:20;26494:1;26483:9;26479:17;26472:47;26536:131;26662:4;26536:131;:::i;:::-;26528:139;;26255:419;;;:::o;26680:::-;26846:4;26884:2;26873:9;26869:18;26861:26;;26933:9;26927:4;26923:20;26919:1;26908:9;26904:17;26897:47;26961:131;27087:4;26961:131;:::i;:::-;26953:139;;26680:419;;;:::o;27105:::-;27271:4;27309:2;27298:9;27294:18;27286:26;;27358:9;27352:4;27348:20;27344:1;27333:9;27329:17;27322:47;27386:131;27512:4;27386:131;:::i;:::-;27378:139;;27105:419;;;:::o;27530:::-;27696:4;27734:2;27723:9;27719:18;27711:26;;27783:9;27777:4;27773:20;27769:1;27758:9;27754:17;27747:47;27811:131;27937:4;27811:131;:::i;:::-;27803:139;;27530:419;;;:::o;27955:::-;28121:4;28159:2;28148:9;28144:18;28136:26;;28208:9;28202:4;28198:20;28194:1;28183:9;28179:17;28172:47;28236:131;28362:4;28236:131;:::i;:::-;28228:139;;27955:419;;;:::o;28380:::-;28546:4;28584:2;28573:9;28569:18;28561:26;;28633:9;28627:4;28623:20;28619:1;28608:9;28604:17;28597:47;28661:131;28787:4;28661:131;:::i;:::-;28653:139;;28380:419;;;:::o;28805:::-;28971:4;29009:2;28998:9;28994:18;28986:26;;29058:9;29052:4;29048:20;29044:1;29033:9;29029:17;29022:47;29086:131;29212:4;29086:131;:::i;:::-;29078:139;;28805:419;;;:::o;29230:::-;29396:4;29434:2;29423:9;29419:18;29411:26;;29483:9;29477:4;29473:20;29469:1;29458:9;29454:17;29447:47;29511:131;29637:4;29511:131;:::i;:::-;29503:139;;29230:419;;;:::o;29655:::-;29821:4;29859:2;29848:9;29844:18;29836:26;;29908:9;29902:4;29898:20;29894:1;29883:9;29879:17;29872:47;29936:131;30062:4;29936:131;:::i;:::-;29928:139;;29655:419;;;:::o;30080:::-;30246:4;30284:2;30273:9;30269:18;30261:26;;30333:9;30327:4;30323:20;30319:1;30308:9;30304:17;30297:47;30361:131;30487:4;30361:131;:::i;:::-;30353:139;;30080:419;;;:::o;30505:::-;30671:4;30709:2;30698:9;30694:18;30686:26;;30758:9;30752:4;30748:20;30744:1;30733:9;30729:17;30722:47;30786:131;30912:4;30786:131;:::i;:::-;30778:139;;30505:419;;;:::o;30930:326::-;31075:4;31113:2;31102:9;31098:18;31090:26;;31126:123;31246:1;31235:9;31231:17;31222:6;31126:123;:::i;:::-;30930:326;;;;:::o;31262:222::-;31355:4;31393:2;31382:9;31378:18;31370:26;;31406:71;31474:1;31463:9;31459:17;31450:6;31406:71;:::i;:::-;31262:222;;;;:::o;31490:129::-;31524:6;31551:20;;:::i;:::-;31541:30;;31580:33;31608:4;31600:6;31580:33;:::i;:::-;31490:129;;;:::o;31625:75::-;31658:6;31691:2;31685:9;31675:19;;31625:75;:::o;31706:307::-;31767:4;31857:18;31849:6;31846:30;31843:56;;;31879:18;;:::i;:::-;31843:56;31917:29;31939:6;31917:29;:::i;:::-;31909:37;;32001:4;31995;31991:15;31983:23;;31706:307;;;:::o;32019:308::-;32081:4;32171:18;32163:6;32160:30;32157:56;;;32193:18;;:::i;:::-;32157:56;32231:29;32253:6;32231:29;:::i;:::-;32223:37;;32315:4;32309;32305:15;32297:23;;32019:308;;;:::o;32333:98::-;32384:6;32418:5;32412:12;32402:22;;32333:98;;;:::o;32437:99::-;32489:6;32523:5;32517:12;32507:22;;32437:99;;;:::o;32542:168::-;32625:11;32659:6;32654:3;32647:19;32699:4;32694:3;32690:14;32675:29;;32542:168;;;;:::o;32716:169::-;32800:11;32834:6;32829:3;32822:19;32874:4;32869:3;32865:14;32850:29;;32716:169;;;;:::o;32891:148::-;32993:11;33030:3;33015:18;;32891:148;;;;:::o;33045:305::-;33085:3;33104:20;33122:1;33104:20;:::i;:::-;33099:25;;33138:20;33156:1;33138:20;:::i;:::-;33133:25;;33292:1;33224:66;33220:74;33217:1;33214:81;33211:107;;;33298:18;;:::i;:::-;33211:107;33342:1;33339;33335:9;33328:16;;33045:305;;;;:::o;33356:185::-;33396:1;33413:20;33431:1;33413:20;:::i;:::-;33408:25;;33447:20;33465:1;33447:20;:::i;:::-;33442:25;;33486:1;33476:35;;33491:18;;:::i;:::-;33476:35;33533:1;33530;33526:9;33521:14;;33356:185;;;;:::o;33547:348::-;33587:7;33610:20;33628:1;33610:20;:::i;:::-;33605:25;;33644:20;33662:1;33644:20;:::i;:::-;33639:25;;33832:1;33764:66;33760:74;33757:1;33754:81;33749:1;33742:9;33735:17;33731:105;33728:131;;;33839:18;;:::i;:::-;33728:131;33887:1;33884;33880:9;33869:20;;33547:348;;;;:::o;33901:191::-;33941:4;33961:20;33979:1;33961:20;:::i;:::-;33956:25;;33995:20;34013:1;33995:20;:::i;:::-;33990:25;;34034:1;34031;34028:8;34025:34;;;34039:18;;:::i;:::-;34025:34;34084:1;34081;34077:9;34069:17;;33901:191;;;;:::o;34098:96::-;34135:7;34164:24;34182:5;34164:24;:::i;:::-;34153:35;;34098:96;;;:::o;34200:90::-;34234:7;34277:5;34270:13;34263:21;34252:32;;34200:90;;;:::o;34296:149::-;34332:7;34372:66;34365:5;34361:78;34350:89;;34296:149;;;:::o;34451:126::-;34488:7;34528:42;34521:5;34517:54;34506:65;;34451:126;;;:::o;34583:77::-;34620:7;34649:5;34638:16;;34583:77;;;:::o;34666:154::-;34750:6;34745:3;34740;34727:30;34812:1;34803:6;34798:3;34794:16;34787:27;34666:154;;;:::o;34826:307::-;34894:1;34904:113;34918:6;34915:1;34912:13;34904:113;;;35003:1;34998:3;34994:11;34988:18;34984:1;34979:3;34975:11;34968:39;34940:2;34937:1;34933:10;34928:15;;34904:113;;;35035:6;35032:1;35029:13;35026:101;;;35115:1;35106:6;35101:3;35097:16;35090:27;35026:101;34875:258;34826:307;;;:::o;35139:320::-;35183:6;35220:1;35214:4;35210:12;35200:22;;35267:1;35261:4;35257:12;35288:18;35278:81;;35344:4;35336:6;35332:17;35322:27;;35278:81;35406:2;35398:6;35395:14;35375:18;35372:38;35369:84;;;35425:18;;:::i;:::-;35369:84;35190:269;35139:320;;;:::o;35465:281::-;35548:27;35570:4;35548:27;:::i;:::-;35540:6;35536:40;35678:6;35666:10;35663:22;35642:18;35630:10;35627:34;35624:62;35621:88;;;35689:18;;:::i;:::-;35621:88;35729:10;35725:2;35718:22;35508:238;35465:281;;:::o;35752:233::-;35791:3;35814:24;35832:5;35814:24;:::i;:::-;35805:33;;35860:66;35853:5;35850:77;35847:103;;;35930:18;;:::i;:::-;35847:103;35977:1;35970:5;35966:13;35959:20;;35752:233;;;:::o;35991:176::-;36023:1;36040:20;36058:1;36040:20;:::i;:::-;36035:25;;36074:20;36092:1;36074:20;:::i;:::-;36069:25;;36113:1;36103:35;;36118:18;;:::i;:::-;36103:35;36159:1;36156;36152:9;36147:14;;35991:176;;;;:::o;36173:180::-;36221:77;36218:1;36211:88;36318:4;36315:1;36308:15;36342:4;36339:1;36332:15;36359:180;36407:77;36404:1;36397:88;36504:4;36501:1;36494:15;36528:4;36525:1;36518:15;36545:180;36593:77;36590:1;36583:88;36690:4;36687:1;36680:15;36714:4;36711:1;36704:15;36731:180;36779:77;36776:1;36769:88;36876:4;36873:1;36866:15;36900:4;36897:1;36890:15;36917:180;36965:77;36962:1;36955:88;37062:4;37059:1;37052:15;37086:4;37083:1;37076:15;37103:117;37212:1;37209;37202:12;37226:117;37335:1;37332;37325:12;37349:117;37458:1;37455;37448:12;37472:117;37581:1;37578;37571:12;37595:102;37636:6;37687:2;37683:7;37678:2;37671:5;37667:14;37663:28;37653:38;;37595:102;;;:::o;37703:237::-;37843:34;37839:1;37831:6;37827:14;37820:58;37912:20;37907:2;37899:6;37895:15;37888:45;37703:237;:::o;37946:225::-;38086:34;38082:1;38074:6;38070:14;38063:58;38155:8;38150:2;38142:6;38138:15;38131:33;37946:225;:::o;38177:178::-;38317:30;38313:1;38305:6;38301:14;38294:54;38177:178;:::o;38361:181::-;38501:33;38497:1;38489:6;38485:14;38478:57;38361:181;:::o;38548:223::-;38688:34;38684:1;38676:6;38672:14;38665:58;38757:6;38752:2;38744:6;38740:15;38733:31;38548:223;:::o;38777:175::-;38917:27;38913:1;38905:6;38901:14;38894:51;38777:175;:::o;38958:221::-;39098:34;39094:1;39086:6;39082:14;39075:58;39167:4;39162:2;39154:6;39150:15;39143:29;38958:221;:::o;39185:231::-;39325:34;39321:1;39313:6;39309:14;39302:58;39394:14;39389:2;39381:6;39377:15;39370:39;39185:231;:::o;39422:243::-;39562:34;39558:1;39550:6;39546:14;39539:58;39631:26;39626:2;39618:6;39614:15;39607:51;39422:243;:::o;39671:229::-;39811:34;39807:1;39799:6;39795:14;39788:58;39880:12;39875:2;39867:6;39863:15;39856:37;39671:229;:::o;39906:228::-;40046:34;40042:1;40034:6;40030:14;40023:58;40115:11;40110:2;40102:6;40098:15;40091:36;39906:228;:::o;40140:233::-;40280:34;40276:1;40268:6;40264:14;40257:58;40349:16;40344:2;40336:6;40332:15;40325:41;40140:233;:::o;40379:175::-;40519:27;40515:1;40507:6;40503:14;40496:51;40379:175;:::o;40560:182::-;40700:34;40696:1;40688:6;40684:14;40677:58;40560:182;:::o;40748:231::-;40888:34;40884:1;40876:6;40872:14;40865:58;40957:14;40952:2;40944:6;40940:15;40933:39;40748:231;:::o;40985:182::-;41125:34;41121:1;41113:6;41109:14;41102:58;40985:182;:::o;41173:228::-;41313:34;41309:1;41301:6;41297:14;41290:58;41382:11;41377:2;41369:6;41365:15;41358:36;41173:228;:::o;41407:234::-;41547:34;41543:1;41535:6;41531:14;41524:58;41616:17;41611:2;41603:6;41599:15;41592:42;41407:234;:::o;41647:176::-;41787:28;41783:1;41775:6;41771:14;41764:52;41647:176;:::o;41829:172::-;41969:24;41965:1;41957:6;41953:14;41946:48;41829:172;:::o;42007:220::-;42147:34;42143:1;42135:6;42131:14;42124:58;42216:3;42211:2;42203:6;42199:15;42192:28;42007:220;:::o;42233:172::-;42373:24;42369:1;42361:6;42357:14;42350:48;42233:172;:::o;42411:236::-;42551:34;42547:1;42539:6;42535:14;42528:58;42620:19;42615:2;42607:6;42603:15;42596:44;42411:236;:::o;42653:170::-;42793:22;42789:1;42781:6;42777:14;42770:46;42653:170;:::o;42829:220::-;42969:34;42965:1;42957:6;42953:14;42946:58;43038:3;43033:2;43025:6;43021:15;43014:28;42829:220;:::o;43055:122::-;43128:24;43146:5;43128:24;:::i;:::-;43121:5;43118:35;43108:63;;43167:1;43164;43157:12;43108:63;43055:122;:::o;43183:116::-;43253:21;43268:5;43253:21;:::i;:::-;43246:5;43243:32;43233:60;;43289:1;43286;43279:12;43233:60;43183:116;:::o;43305:120::-;43377:23;43394:5;43377:23;:::i;:::-;43370:5;43367:34;43357:62;;43415:1;43412;43405:12;43357:62;43305:120;:::o;43431:122::-;43504:24;43522:5;43504:24;:::i;:::-;43497:5;43494:35;43484:63;;43543:1;43540;43533:12;43484:63;43431:122;:::o

Swarm Source

ipfs://9988759f2a5062cf202e7cad3de2d9a2cd4789aa60e5dc2067e08fd7266cd686
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.