ETH Price: $3,215.67 (+1.67%)

Token

Lil Blobs WRLD - Official (Blobs)
 

Overview

Max Total Supply

888 Blobs

Holders

492

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
9 Blobs
0x802a0cfd53f236582bb60ccafbfe5421da81e908
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:
LilBlobsWrld

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-02
*/

// SPDX-License-Identifier: MIT

// Scroll down to the bottom to find the contract of interest. 

// File: @openzeppelin/[email protected]/utils/introspection/IERC165.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 IERC165 {
    /**
     * @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/[email protected]/token/ERC721/IERC721.sol


pragma solidity ^0.8.0;

// import "@openzeppelin/[email protected]/utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @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/[email protected]/token/ERC721/IERC721Receiver.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 IERC721Receiver {
    /**
     * @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/[email protected]/token/ERC721/extensions/IERC721Metadata.sol


pragma solidity ^0.8.0;

// import "@openzeppelin/[email protected]/token/ERC721/IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @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/[email protected]/utils/Address.sol


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @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/[email protected]/utils/Context.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 Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File: @openzeppelin/[email protected]/utils/Strings.sol


pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    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/[email protected]/utils/introspection/ERC165.sol


pragma solidity ^0.8.0;

// import "@openzeppelin/[email protected]/utils/introspection/IERC165.sol";

/**
 * @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 ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


// File: @openzeppelin/[email protected]/utils/math/SafeMath.sol


pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


// File: @openzeppelin/[email protected]/utils/cryptography/MerkleProof.sol


pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        bytes32 computedHash = leaf;

        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }

        // Check if the computed hash (root) is equal to the provided root
        return computedHash == root;
    }
}


// File: @openzeppelin/[email protected]/token/ERC721/extensions/IERC721Enumerable.sol


pragma solidity ^0.8.0;

// import "@openzeppelin/[email protected]/token/ERC721/IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File: @openzeppelin/[email protected]/access/Ownable.sol


pragma solidity ^0.8.0;

// import "@openzeppelin/[email protected]/utils/Context.sol";

/**
 * @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 Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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


// File: @openzeppelin/[email protected]/security/ReentrancyGuard.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 ReentrancyGuard {
    // 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;

    constructor() {
        _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;
    }
}

// File: www/contracts/LilBlobsWrld.sol

pragma solidity ^0.8.0;

// import "@openzeppelin/[email protected]/token/ERC721/IERC721.sol";
// import "@openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol";
// import "@openzeppelin/[email protected]/token/ERC721/extensions/IERC721Metadata.sol";
// import "@openzeppelin/[email protected]/utils/Address.sol";
// import "@openzeppelin/[email protected]/utils/Context.sol";
// import "@openzeppelin/[email protected]/utils/Strings.sol";
// import "@openzeppelin/[email protected]/utils/introspection/ERC165.sol";
// import "@openzeppelin/[email protected]/utils/math/SafeMath.sol";
// import "@openzeppelin/[email protected]/utils/cryptography/MerkleProof.sol";
/**
 * This is a modified version of the ERC721 class, where we only store
 * the address of the minter into an _owners array upon minting.
 * 
 * While this saves on minting gas costs, it means that the the balanceOf
 * function needs to do a bruteforce search through all the tokens.
 *
 * For small amounts of tokens (e.g. 8888), RPC services like Infura
 * can still query the function. 
 *
 * It also means any future contracts that reads the balanceOf function 
 * in a non-view function will incur a gigantic gas fee. 
 */
abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    
    using Address for address;
    
    string private _name;
    
    string private _symbol;
    
    address[] internal _owners;
    
    uint internal _burntCount;

    mapping(uint256 => address) private _tokenApprovals;
    
    mapping(address => mapping(address => bool)) private _operatorApprovals;     
    
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }     
    
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        uint count = 0;
        uint n = _owners.length;
        for (uint i = 0; i < n; ++i) {
            if (owner == _owners[i]) {
                ++count;
            }
        }
        return count;
    }
    
    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;
    }
    
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.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);
    }
    
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }
    
    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);
    }
    
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    
    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);
    }
    
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    
    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);
    }     
    
    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");
    }
  
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }
  
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
  
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
  
    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"
        );
    }
  
    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);
        _owners.push(to);

        emit Transfer(address(0), to, tokenId);
    }
  
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }
  
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.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);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }
  
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
  
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.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;
        }
    }
  
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.0;

// import "@openzeppelin/[email protected]/token/ERC721/extensions/IERC721Enumerable.sol";

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) {
        uint256 count = 0;
        uint256 n = _owners.length;
        for (uint256 i = 0; i < n; ++i) {
            if (owner == _owners[i]) {
                if (count == index) {
                    return i;
                } else {
                    ++count;
                }
            }
        }
        require(false, "Token not found.");
    }
    
    function totalSupply() public view virtual override returns (uint256) {
        return (_owners.length - _burntCount);
    }
    
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(_exists(index), "ERC721: operator query for nonexistent token");
        return index;
    }
}

pragma solidity ^0.8.0;
pragma abicoder v2;

// import "@openzeppelin/[email protected]/access/Ownable.sol";
// import "@openzeppelin/[email protected]/security/ReentrancyGuard.sol";

contract LilBlobsWrld is ERC721Enumerable, Ownable, ReentrancyGuard {

    using Strings for uint;

    using SafeMath for uint256;
    
    uint public constant TOKEN_PRICE = 60000000000000000; // 0.06 ETH

    uint public constant PRE_SALE_TOKEN_PRICE = 60000000000000000; // 0.06 ETH

    uint public constant MAX_TOKENS_PER_PUBLIC_MINT = 5; // Only applies during public sale.

    uint public MAX_TOKENS = 8888;
    
    uint public MAX_PRESALE_TOKENS_PER_WALLET = 2;

    bytes32 public whitelistMerkleRoot;

    address constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD;

    address private VAULT_ADDRESS = 0xC378E5ca770D9D1D0AEfE0d644b9B97645757346;

    /// @dev 1: presale, 2: public sale, 255: closed.
    uint public saleState; 

    /// @dev 0: disable burn, 1: enable burn
    uint public burnState; 

    // @dev Save whitelist address for presale
    mapping(address => int) public presaleReservations;

    /// @dev The license text/url for every token.
    string public LICENSE = "https://www.nftlicense.org"; 

    ///      This contains all the information needed to reproduce the collection
    string public PROVENANCE; 

    /// @dev The base URI
    string public baseURI;

    event LicenseSet(string _license);

    event ProvenanceSet(string _provenance);

    event SaleClosed();

    event PreSaleOpened();

    event PublicSaleOpened();

    constructor() 
    ERC721("Lil Blobs WRLD - Official", "Blobs") { 
        saleState = 255;
        burnState = 0;
        baseURI = "https://www.lilblobswrld.io/api/tokens/";
    }
    
    /// @dev Withdraws Ether to vault address.    
    function withdraw() external onlyOwner {
        payable(VAULT_ADDRESS).transfer(address(this).balance);
    }

    function setVaultAddress(address addr) external onlyOwner {
        VAULT_ADDRESS = addr;
    }

    /// @dev Sets the provenance.
    function setProvenance(string memory _provenance) external onlyOwner {
        PROVENANCE = _provenance;
        emit ProvenanceSet(_provenance);
    }

    /// @dev Sets base URI for all token IDs.
    function setBaseURI(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
    }

    /// @dev Sets setMaxPresaleToken
    function setMaxPresaleToken(uint _amount) external onlyOwner {
        MAX_PRESALE_TOKENS_PER_WALLET = _amount;
    }

    /// @dev Open the pre-sale. 
    function openPreSale() public onlyOwner {
        saleState = 1;
        emit PreSaleOpened();
    }

    /// @dev Open the public sale. 
    function openPublicSale() public onlyOwner {
        saleState = 2;
        emit PublicSaleOpened();
    }

    /// @dev Close the sale.
    function closeSale() public onlyOwner {
        saleState = 255;
        emit SaleClosed();
    }

    /// @dev Mint just one NFT.
    function mintOne(address _toAddress) internal {
        uint mintIndex = _owners.length;
        require(mintIndex < MAX_TOKENS, "Sold out.");
        _safeMint(_toAddress, mintIndex);
    }

    /// @dev Force mint for the addresses. 
    //       Can be called anytime.
    //       If called right after the creation of the contract, the tokens 
    //       are assigned sequentially starting from id 0. 
    function forceMint(address[] memory _addresses) external onlyOwner { 
        for (uint i = 0; i < _addresses.length; ++i) {
            mintOne(_addresses[i]);
        }
    }
    
    /// @dev Self mint for the owner. 
    ///      Can be called anytime.
    ///      This does not require the sale to be open.
    function selfMint(uint _numTokens) external onlyOwner { 
        for (uint i = 0; i < _numTokens; ++i) {
            mintOne(msg.sender);
        }
    }
    
    /// @dev Sets the license text.
    function setLicense(string memory _license) external onlyOwner {
        LICENSE = _license;
        emit LicenseSet(_license);
    }

    /// @dev Returns the license for tokens.
    function tokenLicense(uint _id) external view returns(string memory) {
        require(_exists(_id), "ERC721: operator query for nonexistent token");
        return LICENSE;
    }
    
    /// @dev Presale mint
    function presaleMint(uint _numTokens, bytes32[] calldata merkleProof) external payable nonReentrant {
        require(saleState == 1, "Presale not open."); 
        require(_numTokens > 0, "Minimum number to mint is 1.");

        require(
            MerkleProof.verify(
                merkleProof,
                whitelistMerkleRoot,
                keccak256(abi.encodePacked(msg.sender))
            ),
            "Address does not exist in whitelist"
        );

        require(_numTokens <= MAX_PRESALE_TOKENS_PER_WALLET, "Maximum mint number exceeded");
        presaleReservations[msg.sender] += int(_numTokens);

        require(presaleReservations[msg.sender] <= int(MAX_PRESALE_TOKENS_PER_WALLET), "Whitelisted buying exceeded");
        require(msg.value >= PRE_SALE_TOKEN_PRICE * _numTokens, "Wrong Ether value.");

        for (uint i = 0; i < _numTokens; ++i) {
            mintOne(msg.sender);
        }
    }

    /// @dev Public mint
    function mint(uint _numTokens) external payable nonReentrant {
        require(saleState == 2, "Public mint not open."); 
        require(_numTokens > 0, "Minimum number to mint is 1.");
        require(_numTokens <= MAX_TOKENS_PER_PUBLIC_MINT, "Number per mint exceeded.");
        require(msg.value >= TOKEN_PRICE * _numTokens, "Wrong Ether value.");

        for (uint i = 0; i < _numTokens; ++i) {
            mintOne(msg.sender);
        }
    }

    /// @dev Returns an array of the token ids under the owner.
    function tokensOfOwner(address _owner) external view returns (uint[] memory) {
        uint[] memory a = new uint[](balanceOf(_owner));
        uint j = 0;
        uint n = _owners.length;
        for (uint i; i < n; ++i) {
            if (_owner == _owners[i]) {
                a[j++] = i;
            }
        }
        return a;
    }

    /// @dev Returns the token's URI for the metadata.
    function tokenURI(uint256 _id) external view virtual override returns (string memory) {
        require(_exists(_id), "ERC721: operator query for nonexistent token");
        return string(abi.encodePacked(baseURI, _id.toString()));
    }

    /// @dev Returns the most relevant stats in a single go to reduce RPC calls.
    function stats() external view returns (uint[] memory) {
        uint[] memory a = new uint[](4);
        a[0] = saleState; 
        a[1] = totalSupply(); 
        a[2] = 0;
        a[3] = saleState == 1 ? PRE_SALE_TOKEN_PRICE : TOKEN_PRICE;
        return a;
    }

    function enableBurn() external onlyOwner {
        burnState = 1;
    }

    function disableBurn() external onlyOwner {
        burnState = 0;
    }

    function selfBurn(uint256 tokenId) external {
        require(burnState == 1, "Burning disabled");
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        require(ownerOf(tokenId) == msg.sender, "You do not own this token.");

        _beforeTokenTransfer(msg.sender, BURN_ADDRESS, tokenId);

        // Clear approvals
        _approve(BURN_ADDRESS, tokenId);

        safeTransferFrom(msg.sender, BURN_ADDRESS, tokenId);

        _burntCount++;
        delete _owners[tokenId];
    }

    function getBurnCount() external view returns (uint){
        return _burntCount;
    }

    function setWhitelistMerkleRoot(bytes32 merkleRoot) external onlyOwner {
        whitelistMerkleRoot = merkleRoot;
    }

    function setPresaleReservations(address[] calldata _addresses, int _numTokens ) external onlyOwner {
        for (uint i = 0; i < _addresses.length; i++) {
            presaleReservations[_addresses[i]] = _numTokens;
        }
    }

    function getPresaleRemaining(address _address) external view returns (int) {
        return int(MAX_PRESALE_TOKENS_PER_WALLET) - presaleReservations[_address];
    }

    function setMaxToken(uint _maxToken) external onlyOwner {
        MAX_TOKENS = _maxToken;
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"string","name":"_license","type":"string"}],"name":"LicenseSet","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":[],"name":"PreSaleOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_provenance","type":"string"}],"name":"ProvenanceSet","type":"event"},{"anonymous":false,"inputs":[],"name":"PublicSaleOpened","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleClosed","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":"LICENSE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE_TOKENS_PER_WALLET","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":[],"name":"MAX_TOKENS_PER_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_SALE_TOKEN_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_PRICE","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"forceMint","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":"getBurnCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getPresaleRemaining","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","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":"_numTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openPublicSale","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"_numTokens","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleReservations","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","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":"saleState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"selfBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokens","type":"uint256"}],"name":"selfMint","outputs":[],"stateMutability":"nonpayable","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":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_license","type":"string"}],"name":"setLicense","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxPresaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"int256","name":"_numTokens","type":"int256"}],"name":"setPresaleReservations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setVaultAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stats","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"tokenLicense","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6122b86008556002600955600b80546001600160a01b03191673c378e5ca770d9d1d0aefe0d644b9b9764575734617905560c0604052601a60808190527f68747470733a2f2f7777772e6e66746c6963656e73652e6f726700000000000060a09081526200007191600f9190620001b0565b503480156200007f57600080fd5b50604080518082018252601981527f4c696c20426c6f62732057524c44202d204f6666696369616c00000000000000602080830191825283518085019094526005845264426c6f627360d81b908401528151919291620000e291600091620001b0565b508051620000f8906001906020840190620001b0565b505050620001156200010f6200015a60201b60201c565b6200015e565b600160075560ff600c556000600d55604080516060810190915260278082526200334b602083013980516200015391601191602090910190620001b0565b5062000293565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001be9062000256565b90600052602060002090601f016020900481019282620001e257600085556200022d565b82601f10620001fd57805160ff19168380011785556200022d565b828001600101855582156200022d579182015b828111156200022d57825182559160200191906001019062000210565b506200023b9291506200023f565b5090565b5b808211156200023b576000815560010162000240565b600181811c908216806200026b57607f821691505b602082108114156200028d57634e487b7160e01b600052602260045260246000fd5b50919050565b6130a880620002a36000396000f3fe6080604052600436106103505760003560e01c80636c0360eb116101c6578063bd32fb66116100f7578063e7cf548c11610095578063ee55efee1161006f578063ee55efee14610934578063f2fde38b14610949578063f47c84c514610969578063ffe630b51461097f57600080fd5b8063e7cf548c146108b6578063e985e9c5146108cb578063ea9f093d1461091457600080fd5b8063d2d8cb67116100d1578063d2d8cb67146106ab578063d80528ae1461086e578063d9b137b214610883578063e3e1e8ef146108a357600080fd5b8063bd32fb6614610819578063c5da5cbe14610839578063c87b56dd1461084e57600080fd5b806395d89b4111610164578063aa98e0c61161013e578063aa98e0c6146107ae578063b585209b146107c4578063b88d4fde146107d9578063b98877e2146107f957600080fd5b806395d89b4114610766578063a0712d681461077b578063a22cb4651461078e57600080fd5b8063715018a6116101a0578063715018a6146106e65780638462151c146106fb57806385535cc5146107285780638da5cb5b1461074857600080fd5b80636c0360eb146106965780636d7c82bb146106ab57806370a08231146106c657600080fd5b80632f745c59116102a0578063564c2c591161023e5780635e5ea327116102185780635e5ea3271461062b578063603f4d521461064b5780636352211e146106615780636373a6b11461068157600080fd5b8063564c2c59146105c85780635a3c7d26146105f55780635a856d791461061557600080fd5b80633ccfd60b1161027a5780633ccfd60b1461055357806342842e0e146105685780634f6ccce71461058857806355f804b3146105a857600080fd5b80632f745c591461050957806333bffccc146105295780633b37d1d61461053e57600080fd5b80630a912fc41161030d57806318160ddd116102e757806318160ddd146104a957806323b872dd146104be5780632403c08e146104de578063269d9e92146104f357600080fd5b80630a912fc4146104465780630d3c69b41461045b57806313e494ac1461047b57600080fd5b806301ffc9a7146103555780630554e4321461038a57806306fdde03146103ac578063081812fc146103ce578063095ea7b31461040657806309acc2cb14610426575b600080fd5b34801561036157600080fd5b506103756103703660046127b6565b61099f565b60405190151581526020015b60405180910390f35b34801561039657600080fd5b506103aa6103a5366004612826565b6109ca565b005b3480156103b857600080fd5b506103c1610a66565b60405161038191906128ca565b3480156103da57600080fd5b506103ee6103e93660046128dd565b610af8565b6040516001600160a01b039091168152602001610381565b34801561041257600080fd5b506103aa610421366004612912565b610b80565b34801561043257600080fd5b506103aa6104413660046128dd565b610c96565b34801561045257600080fd5b506103c1610cc5565b34801561046757600080fd5b506103aa6104763660046128dd565b610d53565b34801561048757600080fd5b5061049b61049636600461293c565b610da5565b604051908152602001610381565b3480156104b557600080fd5b5061049b610dcb565b3480156104ca57600080fd5b506103aa6104d9366004612957565b610de2565b3480156104ea57600080fd5b506103aa610e13565b3480156104ff57600080fd5b5061049b600d5481565b34801561051557600080fd5b5061049b610524366004612912565b610e44565b34801561053557600080fd5b506103aa610ef2565b34801561054a57600080fd5b506103aa610f4c565b34801561055f57600080fd5b506103aa610f7d565b34801561057457600080fd5b506103aa610583366004612957565b610fe3565b34801561059457600080fd5b5061049b6105a33660046128dd565b610ffe565b3480156105b457600080fd5b506103aa6105c3366004612a32565b611029565b3480156105d457600080fd5b5061049b6105e336600461293c565b600e6020526000908152604090205481565b34801561060157600080fd5b506103aa610610366004612a32565b611066565b34801561062157600080fd5b5061049b60095481565b34801561063757600080fd5b506103aa6106463660046128dd565b6110de565b34801561065757600080fd5b5061049b600c5481565b34801561066d57600080fd5b506103ee61067c3660046128dd565b611205565b34801561068d57600080fd5b506103c1611291565b3480156106a257600080fd5b506103c161129e565b3480156106b757600080fd5b5061049b66d529ae9e86000081565b3480156106d257600080fd5b5061049b6106e136600461293c565b6112ab565b3480156106f257600080fd5b506103aa61137d565b34801561070757600080fd5b5061071b61071636600461293c565b6113b3565b6040516103819190612a7b565b34801561073457600080fd5b506103aa61074336600461293c565b61148c565b34801561075457600080fd5b506006546001600160a01b03166103ee565b34801561077257600080fd5b506103c16114d8565b6103aa6107893660046128dd565b6114e7565b34801561079a57600080fd5b506103aa6107a9366004612abf565b6116ac565b3480156107ba57600080fd5b5061049b600a5481565b3480156107d057600080fd5b506103aa611771565b3480156107e557600080fd5b506103aa6107f4366004612afb565b6117cb565b34801561080557600080fd5b506103aa610814366004612b77565b6117fd565b34801561082557600080fd5b506103aa6108343660046128dd565b611865565b34801561084557600080fd5b5061049b600581565b34801561085a57600080fd5b506103c16108693660046128dd565b611894565b34801561087a57600080fd5b5061071b6118ed565b34801561088f57600080fd5b506103c161089e3660046128dd565b6119c1565b6103aa6108b1366004612c24565b611a7a565b3480156108c257600080fd5b5060035461049b565b3480156108d757600080fd5b506103756108e6366004612c70565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561092057600080fd5b506103aa61092f3660046128dd565b611d90565b34801561094057600080fd5b506103aa611dbf565b34801561095557600080fd5b506103aa61096436600461293c565b611e19565b34801561097557600080fd5b5061049b60085481565b34801561098b57600080fd5b506103aa61099a366004612a32565b611eb1565b60006001600160e01b0319821663780e9d6360e01b14806109c457506109c482611f1e565b92915050565b6006546001600160a01b031633146109fd5760405162461bcd60e51b81526004016109f490612ca3565b60405180910390fd5b60005b82811015610a605781600e6000868685818110610a1f57610a1f612cd8565b9050602002016020810190610a34919061293c565b6001600160a01b0316815260208101919091526040016000205580610a5881612d04565b915050610a00565b50505050565b606060008054610a7590612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa190612d1f565b8015610aee5780601f10610ac357610100808354040283529160200191610aee565b820191906000526020600020905b815481529060010190602001808311610ad157829003601f168201915b5050505050905090565b6000610b0382611f6e565b610b645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109f4565b506000908152600460205260409020546001600160a01b031690565b6000610b8b82611205565b9050806001600160a01b0316836001600160a01b03161415610bf95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109f4565b336001600160a01b0382161480610c155750610c1581336108e6565b610c875760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109f4565b610c918383611fb8565b505050565b6006546001600160a01b03163314610cc05760405162461bcd60e51b81526004016109f490612ca3565b600855565b600f8054610cd290612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfe90612d1f565b8015610d4b5780601f10610d2057610100808354040283529160200191610d4b565b820191906000526020600020905b815481529060010190602001808311610d2e57829003601f168201915b505050505081565b6006546001600160a01b03163314610d7d5760405162461bcd60e51b81526004016109f490612ca3565b60005b81811015610da157610d9133612026565b610d9a81612d04565b9050610d80565b5050565b6001600160a01b0381166000908152600e60205260408120546009546109c49190612d5a565b600354600254600091610ddd91612d99565b905090565b610dec3382612070565b610e085760405162461bcd60e51b81526004016109f490612db0565b610c91838383612115565b6006546001600160a01b03163314610e3d5760405162461bcd60e51b81526004016109f490612ca3565b6000600d55565b6002546000908190815b81811015610eb65760028181548110610e6957610e69612cd8565b6000918252602090912001546001600160a01b0387811691161415610ea65784831415610e9a5792506109c4915050565b610ea383612d04565b92505b610eaf81612d04565b9050610e4e565b5060405162461bcd60e51b815260206004820152601060248201526f2a37b5b2b7103737ba103337bab7321760811b60448201526064016109f4565b6006546001600160a01b03163314610f1c5760405162461bcd60e51b81526004016109f490612ca3565b6001600c556040517faa7f66109fc44f83151144a97120f5d50861e58565b5fba86db13d2157273f3790600090a1565b6006546001600160a01b03163314610f765760405162461bcd60e51b81526004016109f490612ca3565b6001600d55565b6006546001600160a01b03163314610fa75760405162461bcd60e51b81526004016109f490612ca3565b600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610fe0573d6000803e3d6000fd5b50565b610c91838383604051806020016040528060008152506117cb565b600061100982611f6e565b6110255760405162461bcd60e51b81526004016109f490612e01565b5090565b6006546001600160a01b031633146110535760405162461bcd60e51b81526004016109f490612ca3565b8051610da1906011906020840190612710565b6006546001600160a01b031633146110905760405162461bcd60e51b81526004016109f490612ca3565b80516110a390600f906020840190612710565b507f0c36b2588cd03c71dd3534d1649d17d37de28a093cd238454fcf722fc8165db6816040516110d391906128ca565b60405180910390a150565b600d546001146111235760405162461bcd60e51b815260206004820152601060248201526f109d5c9b9a5b99c8191a5cd8589b195960821b60448201526064016109f4565b61112c81611f6e565b6111485760405162461bcd60e51b81526004016109f490612e01565b3361115282611205565b6001600160a01b0316146111a85760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468697320746f6b656e2e00000000000060448201526064016109f4565b6111b461dead82611fb8565b6111c13361dead83610fe3565b600380549060006111d183612d04565b9190505550600281815481106111e9576111e9612cd8565b600091825260209091200180546001600160a01b031916905550565b6000806002838154811061121b5761121b612cd8565b6000918252602090912001546001600160a01b03169050806109c45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109f4565b60108054610cd290612d1f565b60118054610cd290612d1f565b60006001600160a01b0382166113165760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109f4565b600254600090815b81811015611374576002818154811061133957611339612cd8565b6000918252602090912001546001600160a01b03868116911614156113645761136183612d04565b92505b61136d81612d04565b905061131e565b50909392505050565b6006546001600160a01b031633146113a75760405162461bcd60e51b81526004016109f490612ca3565b6113b1600061226b565b565b606060006113c0836112ab565b67ffffffffffffffff8111156113d8576113d8612993565b604051908082528060200260200182016040528015611401578160200160208202803683370190505b50600254909150600090815b81811015611482576002818154811061142857611428612cd8565b6000918252602090912001546001600160a01b03878116911614156114725780848461145381612d04565b95508151811061146557611465612cd8565b6020026020010181815250505b61147b81612d04565b905061140d565b5091949350505050565b6006546001600160a01b031633146114b65760405162461bcd60e51b81526004016109f490612ca3565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606060018054610a7590612d1f565b6002600754141561153a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109f4565b60026007819055600c54146115895760405162461bcd60e51b8152602060048201526015602482015274283ab13634b19036b4b73a103737ba1037b832b71760591b60448201526064016109f4565b600081116115d95760405162461bcd60e51b815260206004820152601c60248201527f4d696e696d756d206e756d62657220746f206d696e7420697320312e0000000060448201526064016109f4565b600581111561162a5760405162461bcd60e51b815260206004820152601960248201527f4e756d62657220706572206d696e742065786365656465642e0000000000000060448201526064016109f4565b61163b8166d529ae9e860000612e4d565b34101561167f5760405162461bcd60e51b81526020600482015260126024820152712bb937b7339022ba3432b9103b30b63ab29760711b60448201526064016109f4565b60005b818110156116a35761169333612026565b61169c81612d04565b9050611682565b50506001600755565b6001600160a01b0382163314156117055760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109f4565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b0316331461179b5760405162461bcd60e51b81526004016109f490612ca3565b6002600c556040517f66dabe1eaf0e80a2a0d527275b6044a2c4dce05b26d4cd19aaaaacc623aa714c90600090a1565b6117d53383612070565b6117f15760405162461bcd60e51b81526004016109f490612db0565b610a60848484846122bd565b6006546001600160a01b031633146118275760405162461bcd60e51b81526004016109f490612ca3565b60005b8151811015610da15761185582828151811061184857611848612cd8565b6020026020010151612026565b61185e81612d04565b905061182a565b6006546001600160a01b0316331461188f5760405162461bcd60e51b81526004016109f490612ca3565b600a55565b606061189f82611f6e565b6118bb5760405162461bcd60e51b81526004016109f490612e01565b60116118c6836122f0565b6040516020016118d7929190612e88565b6040516020818303038152906040529050919050565b60408051600480825260a082019092526060916000919060208201608080368337019050509050600c548160008151811061192a5761192a612cd8565b60200260200101818152505061193e610dcb565b8160018151811061195157611951612cd8565b60200260200101818152505060008160028151811061197257611972612cd8565b602002602001018181525050600c546001146119955766d529ae9e86000061199e565b66d529ae9e8600005b816003815181106119b1576119b1612cd8565b6020908102919091010152919050565b60606119cc82611f6e565b6119e85760405162461bcd60e51b81526004016109f490612e01565b600f80546119f590612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2190612d1f565b8015611a6e5780601f10611a4357610100808354040283529160200191611a6e565b820191906000526020600020905b815481529060010190602001808311611a5157829003601f168201915b50505050509050919050565b60026007541415611acd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109f4565b6002600755600c54600114611b185760405162461bcd60e51b8152602060048201526011602482015270283932b9b0b632903737ba1037b832b71760791b60448201526064016109f4565b60008311611b685760405162461bcd60e51b815260206004820152601c60248201527f4d696e696d756d206e756d62657220746f206d696e7420697320312e0000000060448201526064016109f4565b611bdd82828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a546040516bffffffffffffffffffffffff193360601b1660208201529092506034019050604051602081830303815290604052805190602001206123ee565b611c355760405162461bcd60e51b815260206004820152602360248201527f4164647265737320646f6573206e6f7420657869737420696e2077686974656c6044820152621a5cdd60ea1b60648201526084016109f4565b600954831115611c875760405162461bcd60e51b815260206004820152601c60248201527f4d6178696d756d206d696e74206e756d6265722065786365656465640000000060448201526064016109f4565b336000908152600e602052604081208054859290611ca6908490612f2f565b9091555050600954336000908152600e60205260409020541315611d0c5760405162461bcd60e51b815260206004820152601b60248201527f57686974656c697374656420627579696e67206578636565646564000000000060448201526064016109f4565b611d1d8366d529ae9e860000612e4d565b341015611d615760405162461bcd60e51b81526020600482015260126024820152712bb937b7339022ba3432b9103b30b63ab29760711b60448201526064016109f4565b60005b83811015611d8557611d7533612026565b611d7e81612d04565b9050611d64565b505060016007555050565b6006546001600160a01b03163314611dba5760405162461bcd60e51b81526004016109f490612ca3565b600955565b6006546001600160a01b03163314611de95760405162461bcd60e51b81526004016109f490612ca3565b60ff600c556040517f4c013bd73202fde3c7cfe26ca486d0882f2c5b2fc9c761b15212f759bd2347dd90600090a1565b6006546001600160a01b03163314611e435760405162461bcd60e51b81526004016109f490612ca3565b6001600160a01b038116611ea85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109f4565b610fe08161226b565b6006546001600160a01b03163314611edb5760405162461bcd60e51b81526004016109f490612ca3565b8051611eee906010906020840190612710565b507f3853b44548a85d7daef49bed60dd9561e75e717377a53afc7c8e1fc00403c03e816040516110d391906128ca565b60006001600160e01b031982166380ac58cd60e01b1480611f4f57506001600160e01b03198216635b5e139f60e01b145b806109c457506301ffc9a760e01b6001600160e01b03198316146109c4565b600254600090821080156109c4575060006001600160a01b031660028381548110611f9b57611f9b612cd8565b6000918252602090912001546001600160a01b0316141592915050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611fed82611205565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60025460085481106120665760405162461bcd60e51b815260206004820152600960248201526829b7b6321037baba1760b91b60448201526064016109f4565b610da1828261249d565b600061207b82611f6e565b6120975760405162461bcd60e51b81526004016109f490612e01565b60006120a283611205565b9050806001600160a01b0316846001600160a01b031614806120dd5750836001600160a01b03166120d284610af8565b6001600160a01b0316145b8061210d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661212882611205565b6001600160a01b0316146121905760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109f4565b6001600160a01b0382166121f25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109f4565b6121fd600082611fb8565b816002828154811061221157612211612cd8565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6122c8848484612115565b6122d4848484846124b7565b610a605760405162461bcd60e51b81526004016109f490612f70565b6060816123145750506040805180820190915260018152600360fc1b602082015290565b8160005b811561233e578061232881612d04565b91506123379050600a83612fd8565b9150612318565b60008167ffffffffffffffff81111561235957612359612993565b6040519080825280601f01601f191660200182016040528015612383576020820181803683370190505b5090505b841561210d57612398600183612d99565b91506123a5600a86612fec565b6123b0906030613000565b60f81b8183815181106123c5576123c5612cd8565b60200101906001600160f81b031916908160001a9053506123e7600a86612fd8565b9450612387565b600081815b855181101561249257600086828151811061241057612410612cd8565b6020026020010151905080831161245257604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061247f565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061248a81612d04565b9150506123f3565b509092149392505050565b610da18282604051806020016040528060008152506125b5565b60006001600160a01b0384163b156125aa57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906124fb903390899088908890600401613018565b6020604051808303816000875af1925050508015612536575060408051601f3d908101601f1916820190925261253391810190613055565b60015b612590573d808015612564576040519150601f19603f3d011682016040523d82523d6000602084013e612569565b606091505b5080516125885760405162461bcd60e51b81526004016109f490612f70565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061210d565b506001949350505050565b6125bf83836125e8565b6125cc60008484846124b7565b610c915760405162461bcd60e51b81526004016109f490612f70565b6001600160a01b03821661263e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109f4565b61264781611f6e565b156126945760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109f4565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461271c90612d1f565b90600052602060002090601f01602090048101928261273e5760008555612784565b82601f1061275757805160ff1916838001178555612784565b82800160010185558215612784579182015b82811115612784578251825591602001919060010190612769565b506110259291505b80821115611025576000815560010161278c565b6001600160e01b031981168114610fe057600080fd5b6000602082840312156127c857600080fd5b81356127d3816127a0565b9392505050565b60008083601f8401126127ec57600080fd5b50813567ffffffffffffffff81111561280457600080fd5b6020830191508360208260051b850101111561281f57600080fd5b9250929050565b60008060006040848603121561283b57600080fd5b833567ffffffffffffffff81111561285257600080fd5b61285e868287016127da565b909790965060209590950135949350505050565b60005b8381101561288d578181015183820152602001612875565b83811115610a605750506000910152565b600081518084526128b6816020860160208601612872565b601f01601f19169290920160200192915050565b6020815260006127d3602083018461289e565b6000602082840312156128ef57600080fd5b5035919050565b80356001600160a01b038116811461290d57600080fd5b919050565b6000806040838503121561292557600080fd5b61292e836128f6565b946020939093013593505050565b60006020828403121561294e57600080fd5b6127d3826128f6565b60008060006060848603121561296c57600080fd5b612975846128f6565b9250612983602085016128f6565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156129d2576129d2612993565b604052919050565b600067ffffffffffffffff8311156129f4576129f4612993565b612a07601f8401601f19166020016129a9565b9050828152838383011115612a1b57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612a4457600080fd5b813567ffffffffffffffff811115612a5b57600080fd5b8201601f81018413612a6c57600080fd5b61210d848235602084016129da565b6020808252825182820181905260009190848201906040850190845b81811015612ab357835183529284019291840191600101612a97565b50909695505050505050565b60008060408385031215612ad257600080fd5b612adb836128f6565b915060208301358015158114612af057600080fd5b809150509250929050565b60008060008060808587031215612b1157600080fd5b612b1a856128f6565b9350612b28602086016128f6565b925060408501359150606085013567ffffffffffffffff811115612b4b57600080fd5b8501601f81018713612b5c57600080fd5b612b6b878235602084016129da565b91505092959194509250565b60006020808385031215612b8a57600080fd5b823567ffffffffffffffff80821115612ba257600080fd5b818501915085601f830112612bb657600080fd5b813581811115612bc857612bc8612993565b8060051b9150612bd98483016129a9565b8181529183018401918481019088841115612bf357600080fd5b938501935b83851015612c1857612c09856128f6565b82529385019390850190612bf8565b98975050505050505050565b600080600060408486031215612c3957600080fd5b83359250602084013567ffffffffffffffff811115612c5757600080fd5b612c63868287016127da565b9497909650939450505050565b60008060408385031215612c8357600080fd5b612c8c836128f6565b9150612c9a602084016128f6565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612d1857612d18612cee565b5060010190565b600181811c90821680612d3357607f821691505b60208210811415612d5457634e487b7160e01b600052602260045260246000fd5b50919050565b60008083128015600160ff1b850184121615612d7857612d78612cee565b6001600160ff1b0384018313811615612d9357612d93612cee565b50500390565b600082821015612dab57612dab612cee565b500390565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6000816000190483118215151615612e6757612e67612cee565b500290565b60008151612e7e818560208601612872565b9290920192915050565b600080845481600182811c915080831680612ea457607f831692505b6020808410821415612ec457634e487b7160e01b86526022600452602486fd5b818015612ed85760018114612ee957612f16565b60ff19861689528489019650612f16565b60008b81526020902060005b86811015612f0e5781548b820152908501908301612ef5565b505084890196505b505050505050612f268185612e6c565b95945050505050565b600080821280156001600160ff1b0384900385131615612f5157612f51612cee565b600160ff1b8390038412811615612f6a57612f6a612cee565b50500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612fe757612fe7612fc2565b500490565b600082612ffb57612ffb612fc2565b500690565b6000821982111561301357613013612cee565b500190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061304b9083018461289e565b9695505050505050565b60006020828403121561306757600080fd5b81516127d3816127a056fea2646970667358221220e934dd3f8bab9d350c1d8e6f89061a2e756ca6522beb3230a26341a1929682ea64736f6c634300080b003368747470733a2f2f7777772e6c696c626c6f627377726c642e696f2f6170692f746f6b656e732f

Deployed Bytecode

0x6080604052600436106103505760003560e01c80636c0360eb116101c6578063bd32fb66116100f7578063e7cf548c11610095578063ee55efee1161006f578063ee55efee14610934578063f2fde38b14610949578063f47c84c514610969578063ffe630b51461097f57600080fd5b8063e7cf548c146108b6578063e985e9c5146108cb578063ea9f093d1461091457600080fd5b8063d2d8cb67116100d1578063d2d8cb67146106ab578063d80528ae1461086e578063d9b137b214610883578063e3e1e8ef146108a357600080fd5b8063bd32fb6614610819578063c5da5cbe14610839578063c87b56dd1461084e57600080fd5b806395d89b4111610164578063aa98e0c61161013e578063aa98e0c6146107ae578063b585209b146107c4578063b88d4fde146107d9578063b98877e2146107f957600080fd5b806395d89b4114610766578063a0712d681461077b578063a22cb4651461078e57600080fd5b8063715018a6116101a0578063715018a6146106e65780638462151c146106fb57806385535cc5146107285780638da5cb5b1461074857600080fd5b80636c0360eb146106965780636d7c82bb146106ab57806370a08231146106c657600080fd5b80632f745c59116102a0578063564c2c591161023e5780635e5ea327116102185780635e5ea3271461062b578063603f4d521461064b5780636352211e146106615780636373a6b11461068157600080fd5b8063564c2c59146105c85780635a3c7d26146105f55780635a856d791461061557600080fd5b80633ccfd60b1161027a5780633ccfd60b1461055357806342842e0e146105685780634f6ccce71461058857806355f804b3146105a857600080fd5b80632f745c591461050957806333bffccc146105295780633b37d1d61461053e57600080fd5b80630a912fc41161030d57806318160ddd116102e757806318160ddd146104a957806323b872dd146104be5780632403c08e146104de578063269d9e92146104f357600080fd5b80630a912fc4146104465780630d3c69b41461045b57806313e494ac1461047b57600080fd5b806301ffc9a7146103555780630554e4321461038a57806306fdde03146103ac578063081812fc146103ce578063095ea7b31461040657806309acc2cb14610426575b600080fd5b34801561036157600080fd5b506103756103703660046127b6565b61099f565b60405190151581526020015b60405180910390f35b34801561039657600080fd5b506103aa6103a5366004612826565b6109ca565b005b3480156103b857600080fd5b506103c1610a66565b60405161038191906128ca565b3480156103da57600080fd5b506103ee6103e93660046128dd565b610af8565b6040516001600160a01b039091168152602001610381565b34801561041257600080fd5b506103aa610421366004612912565b610b80565b34801561043257600080fd5b506103aa6104413660046128dd565b610c96565b34801561045257600080fd5b506103c1610cc5565b34801561046757600080fd5b506103aa6104763660046128dd565b610d53565b34801561048757600080fd5b5061049b61049636600461293c565b610da5565b604051908152602001610381565b3480156104b557600080fd5b5061049b610dcb565b3480156104ca57600080fd5b506103aa6104d9366004612957565b610de2565b3480156104ea57600080fd5b506103aa610e13565b3480156104ff57600080fd5b5061049b600d5481565b34801561051557600080fd5b5061049b610524366004612912565b610e44565b34801561053557600080fd5b506103aa610ef2565b34801561054a57600080fd5b506103aa610f4c565b34801561055f57600080fd5b506103aa610f7d565b34801561057457600080fd5b506103aa610583366004612957565b610fe3565b34801561059457600080fd5b5061049b6105a33660046128dd565b610ffe565b3480156105b457600080fd5b506103aa6105c3366004612a32565b611029565b3480156105d457600080fd5b5061049b6105e336600461293c565b600e6020526000908152604090205481565b34801561060157600080fd5b506103aa610610366004612a32565b611066565b34801561062157600080fd5b5061049b60095481565b34801561063757600080fd5b506103aa6106463660046128dd565b6110de565b34801561065757600080fd5b5061049b600c5481565b34801561066d57600080fd5b506103ee61067c3660046128dd565b611205565b34801561068d57600080fd5b506103c1611291565b3480156106a257600080fd5b506103c161129e565b3480156106b757600080fd5b5061049b66d529ae9e86000081565b3480156106d257600080fd5b5061049b6106e136600461293c565b6112ab565b3480156106f257600080fd5b506103aa61137d565b34801561070757600080fd5b5061071b61071636600461293c565b6113b3565b6040516103819190612a7b565b34801561073457600080fd5b506103aa61074336600461293c565b61148c565b34801561075457600080fd5b506006546001600160a01b03166103ee565b34801561077257600080fd5b506103c16114d8565b6103aa6107893660046128dd565b6114e7565b34801561079a57600080fd5b506103aa6107a9366004612abf565b6116ac565b3480156107ba57600080fd5b5061049b600a5481565b3480156107d057600080fd5b506103aa611771565b3480156107e557600080fd5b506103aa6107f4366004612afb565b6117cb565b34801561080557600080fd5b506103aa610814366004612b77565b6117fd565b34801561082557600080fd5b506103aa6108343660046128dd565b611865565b34801561084557600080fd5b5061049b600581565b34801561085a57600080fd5b506103c16108693660046128dd565b611894565b34801561087a57600080fd5b5061071b6118ed565b34801561088f57600080fd5b506103c161089e3660046128dd565b6119c1565b6103aa6108b1366004612c24565b611a7a565b3480156108c257600080fd5b5060035461049b565b3480156108d757600080fd5b506103756108e6366004612c70565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561092057600080fd5b506103aa61092f3660046128dd565b611d90565b34801561094057600080fd5b506103aa611dbf565b34801561095557600080fd5b506103aa61096436600461293c565b611e19565b34801561097557600080fd5b5061049b60085481565b34801561098b57600080fd5b506103aa61099a366004612a32565b611eb1565b60006001600160e01b0319821663780e9d6360e01b14806109c457506109c482611f1e565b92915050565b6006546001600160a01b031633146109fd5760405162461bcd60e51b81526004016109f490612ca3565b60405180910390fd5b60005b82811015610a605781600e6000868685818110610a1f57610a1f612cd8565b9050602002016020810190610a34919061293c565b6001600160a01b0316815260208101919091526040016000205580610a5881612d04565b915050610a00565b50505050565b606060008054610a7590612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa190612d1f565b8015610aee5780601f10610ac357610100808354040283529160200191610aee565b820191906000526020600020905b815481529060010190602001808311610ad157829003601f168201915b5050505050905090565b6000610b0382611f6e565b610b645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109f4565b506000908152600460205260409020546001600160a01b031690565b6000610b8b82611205565b9050806001600160a01b0316836001600160a01b03161415610bf95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109f4565b336001600160a01b0382161480610c155750610c1581336108e6565b610c875760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109f4565b610c918383611fb8565b505050565b6006546001600160a01b03163314610cc05760405162461bcd60e51b81526004016109f490612ca3565b600855565b600f8054610cd290612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfe90612d1f565b8015610d4b5780601f10610d2057610100808354040283529160200191610d4b565b820191906000526020600020905b815481529060010190602001808311610d2e57829003601f168201915b505050505081565b6006546001600160a01b03163314610d7d5760405162461bcd60e51b81526004016109f490612ca3565b60005b81811015610da157610d9133612026565b610d9a81612d04565b9050610d80565b5050565b6001600160a01b0381166000908152600e60205260408120546009546109c49190612d5a565b600354600254600091610ddd91612d99565b905090565b610dec3382612070565b610e085760405162461bcd60e51b81526004016109f490612db0565b610c91838383612115565b6006546001600160a01b03163314610e3d5760405162461bcd60e51b81526004016109f490612ca3565b6000600d55565b6002546000908190815b81811015610eb65760028181548110610e6957610e69612cd8565b6000918252602090912001546001600160a01b0387811691161415610ea65784831415610e9a5792506109c4915050565b610ea383612d04565b92505b610eaf81612d04565b9050610e4e565b5060405162461bcd60e51b815260206004820152601060248201526f2a37b5b2b7103737ba103337bab7321760811b60448201526064016109f4565b6006546001600160a01b03163314610f1c5760405162461bcd60e51b81526004016109f490612ca3565b6001600c556040517faa7f66109fc44f83151144a97120f5d50861e58565b5fba86db13d2157273f3790600090a1565b6006546001600160a01b03163314610f765760405162461bcd60e51b81526004016109f490612ca3565b6001600d55565b6006546001600160a01b03163314610fa75760405162461bcd60e51b81526004016109f490612ca3565b600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610fe0573d6000803e3d6000fd5b50565b610c91838383604051806020016040528060008152506117cb565b600061100982611f6e565b6110255760405162461bcd60e51b81526004016109f490612e01565b5090565b6006546001600160a01b031633146110535760405162461bcd60e51b81526004016109f490612ca3565b8051610da1906011906020840190612710565b6006546001600160a01b031633146110905760405162461bcd60e51b81526004016109f490612ca3565b80516110a390600f906020840190612710565b507f0c36b2588cd03c71dd3534d1649d17d37de28a093cd238454fcf722fc8165db6816040516110d391906128ca565b60405180910390a150565b600d546001146111235760405162461bcd60e51b815260206004820152601060248201526f109d5c9b9a5b99c8191a5cd8589b195960821b60448201526064016109f4565b61112c81611f6e565b6111485760405162461bcd60e51b81526004016109f490612e01565b3361115282611205565b6001600160a01b0316146111a85760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468697320746f6b656e2e00000000000060448201526064016109f4565b6111b461dead82611fb8565b6111c13361dead83610fe3565b600380549060006111d183612d04565b9190505550600281815481106111e9576111e9612cd8565b600091825260209091200180546001600160a01b031916905550565b6000806002838154811061121b5761121b612cd8565b6000918252602090912001546001600160a01b03169050806109c45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109f4565b60108054610cd290612d1f565b60118054610cd290612d1f565b60006001600160a01b0382166113165760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109f4565b600254600090815b81811015611374576002818154811061133957611339612cd8565b6000918252602090912001546001600160a01b03868116911614156113645761136183612d04565b92505b61136d81612d04565b905061131e565b50909392505050565b6006546001600160a01b031633146113a75760405162461bcd60e51b81526004016109f490612ca3565b6113b1600061226b565b565b606060006113c0836112ab565b67ffffffffffffffff8111156113d8576113d8612993565b604051908082528060200260200182016040528015611401578160200160208202803683370190505b50600254909150600090815b81811015611482576002818154811061142857611428612cd8565b6000918252602090912001546001600160a01b03878116911614156114725780848461145381612d04565b95508151811061146557611465612cd8565b6020026020010181815250505b61147b81612d04565b905061140d565b5091949350505050565b6006546001600160a01b031633146114b65760405162461bcd60e51b81526004016109f490612ca3565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606060018054610a7590612d1f565b6002600754141561153a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109f4565b60026007819055600c54146115895760405162461bcd60e51b8152602060048201526015602482015274283ab13634b19036b4b73a103737ba1037b832b71760591b60448201526064016109f4565b600081116115d95760405162461bcd60e51b815260206004820152601c60248201527f4d696e696d756d206e756d62657220746f206d696e7420697320312e0000000060448201526064016109f4565b600581111561162a5760405162461bcd60e51b815260206004820152601960248201527f4e756d62657220706572206d696e742065786365656465642e0000000000000060448201526064016109f4565b61163b8166d529ae9e860000612e4d565b34101561167f5760405162461bcd60e51b81526020600482015260126024820152712bb937b7339022ba3432b9103b30b63ab29760711b60448201526064016109f4565b60005b818110156116a35761169333612026565b61169c81612d04565b9050611682565b50506001600755565b6001600160a01b0382163314156117055760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109f4565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b0316331461179b5760405162461bcd60e51b81526004016109f490612ca3565b6002600c556040517f66dabe1eaf0e80a2a0d527275b6044a2c4dce05b26d4cd19aaaaacc623aa714c90600090a1565b6117d53383612070565b6117f15760405162461bcd60e51b81526004016109f490612db0565b610a60848484846122bd565b6006546001600160a01b031633146118275760405162461bcd60e51b81526004016109f490612ca3565b60005b8151811015610da15761185582828151811061184857611848612cd8565b6020026020010151612026565b61185e81612d04565b905061182a565b6006546001600160a01b0316331461188f5760405162461bcd60e51b81526004016109f490612ca3565b600a55565b606061189f82611f6e565b6118bb5760405162461bcd60e51b81526004016109f490612e01565b60116118c6836122f0565b6040516020016118d7929190612e88565b6040516020818303038152906040529050919050565b60408051600480825260a082019092526060916000919060208201608080368337019050509050600c548160008151811061192a5761192a612cd8565b60200260200101818152505061193e610dcb565b8160018151811061195157611951612cd8565b60200260200101818152505060008160028151811061197257611972612cd8565b602002602001018181525050600c546001146119955766d529ae9e86000061199e565b66d529ae9e8600005b816003815181106119b1576119b1612cd8565b6020908102919091010152919050565b60606119cc82611f6e565b6119e85760405162461bcd60e51b81526004016109f490612e01565b600f80546119f590612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2190612d1f565b8015611a6e5780601f10611a4357610100808354040283529160200191611a6e565b820191906000526020600020905b815481529060010190602001808311611a5157829003601f168201915b50505050509050919050565b60026007541415611acd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109f4565b6002600755600c54600114611b185760405162461bcd60e51b8152602060048201526011602482015270283932b9b0b632903737ba1037b832b71760791b60448201526064016109f4565b60008311611b685760405162461bcd60e51b815260206004820152601c60248201527f4d696e696d756d206e756d62657220746f206d696e7420697320312e0000000060448201526064016109f4565b611bdd82828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a546040516bffffffffffffffffffffffff193360601b1660208201529092506034019050604051602081830303815290604052805190602001206123ee565b611c355760405162461bcd60e51b815260206004820152602360248201527f4164647265737320646f6573206e6f7420657869737420696e2077686974656c6044820152621a5cdd60ea1b60648201526084016109f4565b600954831115611c875760405162461bcd60e51b815260206004820152601c60248201527f4d6178696d756d206d696e74206e756d6265722065786365656465640000000060448201526064016109f4565b336000908152600e602052604081208054859290611ca6908490612f2f565b9091555050600954336000908152600e60205260409020541315611d0c5760405162461bcd60e51b815260206004820152601b60248201527f57686974656c697374656420627579696e67206578636565646564000000000060448201526064016109f4565b611d1d8366d529ae9e860000612e4d565b341015611d615760405162461bcd60e51b81526020600482015260126024820152712bb937b7339022ba3432b9103b30b63ab29760711b60448201526064016109f4565b60005b83811015611d8557611d7533612026565b611d7e81612d04565b9050611d64565b505060016007555050565b6006546001600160a01b03163314611dba5760405162461bcd60e51b81526004016109f490612ca3565b600955565b6006546001600160a01b03163314611de95760405162461bcd60e51b81526004016109f490612ca3565b60ff600c556040517f4c013bd73202fde3c7cfe26ca486d0882f2c5b2fc9c761b15212f759bd2347dd90600090a1565b6006546001600160a01b03163314611e435760405162461bcd60e51b81526004016109f490612ca3565b6001600160a01b038116611ea85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109f4565b610fe08161226b565b6006546001600160a01b03163314611edb5760405162461bcd60e51b81526004016109f490612ca3565b8051611eee906010906020840190612710565b507f3853b44548a85d7daef49bed60dd9561e75e717377a53afc7c8e1fc00403c03e816040516110d391906128ca565b60006001600160e01b031982166380ac58cd60e01b1480611f4f57506001600160e01b03198216635b5e139f60e01b145b806109c457506301ffc9a760e01b6001600160e01b03198316146109c4565b600254600090821080156109c4575060006001600160a01b031660028381548110611f9b57611f9b612cd8565b6000918252602090912001546001600160a01b0316141592915050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611fed82611205565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60025460085481106120665760405162461bcd60e51b815260206004820152600960248201526829b7b6321037baba1760b91b60448201526064016109f4565b610da1828261249d565b600061207b82611f6e565b6120975760405162461bcd60e51b81526004016109f490612e01565b60006120a283611205565b9050806001600160a01b0316846001600160a01b031614806120dd5750836001600160a01b03166120d284610af8565b6001600160a01b0316145b8061210d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661212882611205565b6001600160a01b0316146121905760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109f4565b6001600160a01b0382166121f25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109f4565b6121fd600082611fb8565b816002828154811061221157612211612cd8565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6122c8848484612115565b6122d4848484846124b7565b610a605760405162461bcd60e51b81526004016109f490612f70565b6060816123145750506040805180820190915260018152600360fc1b602082015290565b8160005b811561233e578061232881612d04565b91506123379050600a83612fd8565b9150612318565b60008167ffffffffffffffff81111561235957612359612993565b6040519080825280601f01601f191660200182016040528015612383576020820181803683370190505b5090505b841561210d57612398600183612d99565b91506123a5600a86612fec565b6123b0906030613000565b60f81b8183815181106123c5576123c5612cd8565b60200101906001600160f81b031916908160001a9053506123e7600a86612fd8565b9450612387565b600081815b855181101561249257600086828151811061241057612410612cd8565b6020026020010151905080831161245257604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061247f565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061248a81612d04565b9150506123f3565b509092149392505050565b610da18282604051806020016040528060008152506125b5565b60006001600160a01b0384163b156125aa57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906124fb903390899088908890600401613018565b6020604051808303816000875af1925050508015612536575060408051601f3d908101601f1916820190925261253391810190613055565b60015b612590573d808015612564576040519150601f19603f3d011682016040523d82523d6000602084013e612569565b606091505b5080516125885760405162461bcd60e51b81526004016109f490612f70565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061210d565b506001949350505050565b6125bf83836125e8565b6125cc60008484846124b7565b610c915760405162461bcd60e51b81526004016109f490612f70565b6001600160a01b03821661263e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109f4565b61264781611f6e565b156126945760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109f4565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461271c90612d1f565b90600052602060002090601f01602090048101928261273e5760008555612784565b82601f1061275757805160ff1916838001178555612784565b82800160010185558215612784579182015b82811115612784578251825591602001919060010190612769565b506110259291505b80821115611025576000815560010161278c565b6001600160e01b031981168114610fe057600080fd5b6000602082840312156127c857600080fd5b81356127d3816127a0565b9392505050565b60008083601f8401126127ec57600080fd5b50813567ffffffffffffffff81111561280457600080fd5b6020830191508360208260051b850101111561281f57600080fd5b9250929050565b60008060006040848603121561283b57600080fd5b833567ffffffffffffffff81111561285257600080fd5b61285e868287016127da565b909790965060209590950135949350505050565b60005b8381101561288d578181015183820152602001612875565b83811115610a605750506000910152565b600081518084526128b6816020860160208601612872565b601f01601f19169290920160200192915050565b6020815260006127d3602083018461289e565b6000602082840312156128ef57600080fd5b5035919050565b80356001600160a01b038116811461290d57600080fd5b919050565b6000806040838503121561292557600080fd5b61292e836128f6565b946020939093013593505050565b60006020828403121561294e57600080fd5b6127d3826128f6565b60008060006060848603121561296c57600080fd5b612975846128f6565b9250612983602085016128f6565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156129d2576129d2612993565b604052919050565b600067ffffffffffffffff8311156129f4576129f4612993565b612a07601f8401601f19166020016129a9565b9050828152838383011115612a1b57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612a4457600080fd5b813567ffffffffffffffff811115612a5b57600080fd5b8201601f81018413612a6c57600080fd5b61210d848235602084016129da565b6020808252825182820181905260009190848201906040850190845b81811015612ab357835183529284019291840191600101612a97565b50909695505050505050565b60008060408385031215612ad257600080fd5b612adb836128f6565b915060208301358015158114612af057600080fd5b809150509250929050565b60008060008060808587031215612b1157600080fd5b612b1a856128f6565b9350612b28602086016128f6565b925060408501359150606085013567ffffffffffffffff811115612b4b57600080fd5b8501601f81018713612b5c57600080fd5b612b6b878235602084016129da565b91505092959194509250565b60006020808385031215612b8a57600080fd5b823567ffffffffffffffff80821115612ba257600080fd5b818501915085601f830112612bb657600080fd5b813581811115612bc857612bc8612993565b8060051b9150612bd98483016129a9565b8181529183018401918481019088841115612bf357600080fd5b938501935b83851015612c1857612c09856128f6565b82529385019390850190612bf8565b98975050505050505050565b600080600060408486031215612c3957600080fd5b83359250602084013567ffffffffffffffff811115612c5757600080fd5b612c63868287016127da565b9497909650939450505050565b60008060408385031215612c8357600080fd5b612c8c836128f6565b9150612c9a602084016128f6565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612d1857612d18612cee565b5060010190565b600181811c90821680612d3357607f821691505b60208210811415612d5457634e487b7160e01b600052602260045260246000fd5b50919050565b60008083128015600160ff1b850184121615612d7857612d78612cee565b6001600160ff1b0384018313811615612d9357612d93612cee565b50500390565b600082821015612dab57612dab612cee565b500390565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6000816000190483118215151615612e6757612e67612cee565b500290565b60008151612e7e818560208601612872565b9290920192915050565b600080845481600182811c915080831680612ea457607f831692505b6020808410821415612ec457634e487b7160e01b86526022600452602486fd5b818015612ed85760018114612ee957612f16565b60ff19861689528489019650612f16565b60008b81526020902060005b86811015612f0e5781548b820152908501908301612ef5565b505084890196505b505050505050612f268185612e6c565b95945050505050565b600080821280156001600160ff1b0384900385131615612f5157612f51612cee565b600160ff1b8390038412811615612f6a57612f6a612cee565b50500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612fe757612fe7612fc2565b500490565b600082612ffb57612ffb612fc2565b500690565b6000821982111561301357613013612cee565b500190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061304b9083018461289e565b9695505050505050565b60006020828403121561306757600080fd5b81516127d3816127a056fea2646970667358221220e934dd3f8bab9d350c1d8e6f89061a2e756ca6522beb3230a26341a1929682ea64736f6c634300080b0033

Deployed Bytecode Sourcemap

44565:8267:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43311:224;;;;;;;;;;-1:-1:-1;43311:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;43311:224:0;;;;;;;;52307:236;;;;;;;;;;-1:-1:-1;52307:236:0;;;;;:::i;:::-;;:::i;:::-;;37206:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37857:221::-;;;;;;;;;;-1:-1:-1;37857:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2595:32:1;;;2577:51;;2565:2;2550:18;37857:221:0;2431:203:1;37434:411:0;;;;;;;;;;-1:-1:-1;37434:411:0;;;;;:::i;:::-;;:::i;52726:97::-;;;;;;;;;;-1:-1:-1;52726:97:0;;;;;:::i;:::-;;:::i;45590:52::-;;;;;;;;;;;;;:::i;48217:157::-;;;;;;;;;;-1:-1:-1;48217:157:0;;;;;:::i;:::-;;:::i;52551:167::-;;;;;;;;;;-1:-1:-1;52551:167:0;;;;;:::i;:::-;;:::i;:::-;;;3411:25:1;;;3399:2;3384:18;52551:167:0;3267:175:1;44037:126:0;;;;;;;;;;;;;:::i;38573:339::-;;;;;;;;;;-1:-1:-1;38573:339:0;;;;;:::i;:::-;;:::i;51456:74::-;;;;;;;;;;;;;:::i;45400:21::-;;;;;;;;;;;;;;;;43547:478;;;;;;;;;;-1:-1:-1;43547:478:0;;;;;:::i;:::-;;:::i;47032:103::-;;;;;;;;;;;;;:::i;51375:73::-;;;;;;;;;;;;;:::i;46256:112::-;;;;;;;;;;;;;:::i;38924:185::-;;;;;;;;;;-1:-1:-1;38924:185:0;;;;;:::i;:::-;;:::i;44175:197::-;;;;;;;;;;-1:-1:-1;44175:197:0;;;;;:::i;:::-;;:::i;46725:100::-;;;;;;;;;;-1:-1:-1;46725:100:0;;;;;:::i;:::-;;:::i;45479:50::-;;;;;;;;;;-1:-1:-1;45479:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;48423:136;;;;;;;;;;-1:-1:-1;48423:136:0;;;;;:::i;:::-;;:::i;45005:45::-;;;;;;;;;;;;;;;;51538:534;;;;;;;;;;-1:-1:-1;51538:534:0;;;;;:::i;:::-;;:::i;45323:21::-;;;;;;;;;;;;;;;;36955:239;;;;;;;;;;-1:-1:-1;36955:239:0;;;;;:::i;:::-;;:::i;45735:24::-;;;;;;;;;;;;;:::i;45796:21::-;;;;;;;;;;;;;:::i;44785:61::-;;;;;;;;;;;;44829:17;44785:61;;36555:388;;;;;;;;;;-1:-1:-1;36555:388:0;;;;;:::i;:::-;;:::i;31108:94::-;;;;;;;;;;;;;:::i;50351:349::-;;;;;;;;;;-1:-1:-1;50351:349:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46376:97::-;;;;;;;;;;-1:-1:-1;46376:97:0;;;;;:::i;:::-;;:::i;30457:87::-;;;;;;;;;;-1:-1:-1;30530:6:0;;-1:-1:-1;;;;;30530:6:0;30457:87;;37318:104;;;;;;;;;;;;;:::i;49819:459::-;;;;;;:::i;:::-;;:::i;38090:295::-;;;;;;;;;;-1:-1:-1;38090:295:0;;;;;:::i;:::-;;:::i;45059:34::-;;;;;;;;;;;;;;;;47180:109;;;;;;;;;;;;;:::i;39121:328::-;;;;;;;;;;-1:-1:-1;39121:328:0;;;;;:::i;:::-;;:::i;47891:180::-;;;;;;;;;;-1:-1:-1;47891:180:0;;;;;:::i;:::-;;:::i;52177:122::-;;;;;;;;;;-1:-1:-1;52177:122:0;;;;;:::i;:::-;;:::i;44867:51::-;;;;;;;;;;;;44917:1;44867:51;;50764:241;;;;;;;;;;-1:-1:-1;50764:241:0;;;;;:::i;:::-;;:::i;51095:272::-;;;;;;;;;;;;;:::i;48613:182::-;;;;;;;;;;-1:-1:-1;48613:182:0;;;;;:::i;:::-;;:::i;48834:951::-;;;;;;:::i;:::-;;:::i;52080:89::-;;;;;;;;;;-1:-1:-1;52150:11:0;;52080:89;;38397:164;;;;;;;;;;-1:-1:-1;38397:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;38518:25:0;;;38494:4;38518:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;38397:164;46871:119;;;;;;;;;;-1:-1:-1;46871:119:0;;;;;:::i;:::-;;:::i;47327:100::-;;;;;;;;;;;;;:::i;31357:192::-;;;;;;;;;;-1:-1:-1;31357:192:0;;;;;:::i;:::-;;:::i;44963:29::-;;;;;;;;;;;;;;;;46516:154;;;;;;;;;;-1:-1:-1;46516:154:0;;;;;:::i;:::-;;:::i;43311:224::-;43413:4;-1:-1:-1;;;;;;43437:50:0;;-1:-1:-1;;;43437:50:0;;:90;;;43491:36;43515:11;43491:23;:36::i;:::-;43430:97;43311:224;-1:-1:-1;;43311:224:0:o;52307:236::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;;;;;;;;;52422:6:::1;52417:119;52434:21:::0;;::::1;52417:119;;;52514:10;52477:19;:34;52497:10;;52508:1;52497:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52477:34:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52477:34:0;:47;52457:3;::::1;::::0;::::1;:::i;:::-;;;;52417:119;;;;52307:236:::0;;;:::o;37206:100::-;37260:13;37293:5;37286:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37206:100;:::o;37857:221::-;37933:7;37961:16;37969:7;37961;:16::i;:::-;37953:73;;;;-1:-1:-1;;;37953:73:0;;10354:2:1;37953:73:0;;;10336:21:1;10393:2;10373:18;;;10366:30;10432:34;10412:18;;;10405:62;-1:-1:-1;;;10483:18:1;;;10476:42;10535:19;;37953:73:0;10152:408:1;37953:73:0;-1:-1:-1;38046:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;38046:24:0;;37857:221::o;37434:411::-;37515:13;37531:23;37546:7;37531:14;:23::i;:::-;37515:39;;37579:5;-1:-1:-1;;;;;37573:11:0;:2;-1:-1:-1;;;;;37573:11:0;;;37565:57;;;;-1:-1:-1;;;37565:57:0;;10767:2:1;37565:57:0;;;10749:21:1;10806:2;10786:18;;;10779:30;10845:34;10825:18;;;10818:62;-1:-1:-1;;;10896:18:1;;;10889:31;10937:19;;37565:57:0;10565:397:1;37565:57:0;16428:10;-1:-1:-1;;;;;37657:21:0;;;;:62;;-1:-1:-1;37682:37:0;37699:5;16428:10;38397:164;:::i;37682:37::-;37635:168;;;;-1:-1:-1;;;37635:168:0;;11169:2:1;37635:168:0;;;11151:21:1;11208:2;11188:18;;;11181:30;11247:34;11227:18;;;11220:62;11318:26;11298:18;;;11291:54;11362:19;;37635:168:0;10967:420:1;37635:168:0;37816:21;37825:2;37829:7;37816:8;:21::i;:::-;37504:341;37434:411;;:::o;52726:97::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;52793:10:::1;:22:::0;52726:97::o;45590:52::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48217:157::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;48288:6:::1;48283:84;48304:10;48300:1;:14;48283:84;;;48336:19;48344:10;48336:7;:19::i;:::-;48316:3;::::0;::::1;:::i;:::-;;;48283:84;;;;48217:157:::0;:::o;52551:167::-;-1:-1:-1;;;;;52681:29:0;;52621:3;52681:29;;;:19;:29;;;;;;52648;;52644:66;;52681:29;52644:66;:::i;44037:126::-;44143:11;;44126:7;:14;44098:7;;44126:28;;;:::i;:::-;44118:37;;44037:126;:::o;38573:339::-;38768:41;16428:10;38801:7;38768:18;:41::i;:::-;38760:103;;;;-1:-1:-1;;;38760:103:0;;;;;;;:::i;:::-;38876:28;38886:4;38892:2;38896:7;38876:9;:28::i;51456:74::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;51521:1:::1;51509:9;:13:::0;51456:74::o;43547:478::-;43704:7;:14;43636:15;;;;;43729:244;43753:1;43749;:5;43729:244;;;43789:7;43797:1;43789:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;43780:19:0;;;43789:10;;43780:19;43776:186;;;43833:5;43824;:14;43820:127;;;43870:1;-1:-1:-1;43863:8:0;;-1:-1:-1;;43863:8:0;43820:127;43920:7;;;:::i;:::-;;;43820:127;43756:3;;;:::i;:::-;;;43729:244;;;-1:-1:-1;43983:34:0;;-1:-1:-1;;;43983:34:0;;12414:2:1;43983:34:0;;;12396:21:1;12453:2;12433:18;;;12426:30;-1:-1:-1;;;12472:18:1;;;12465:46;12528:18;;43983:34:0;12212:340:1;47032:103:0;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;47095:1:::1;47083:9;:13:::0;47112:15:::1;::::0;::::1;::::0;;;::::1;47032:103::o:0;51375:73::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;51439:1:::1;51427:9;:13:::0;51375:73::o;46256:112::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;46314:13:::1;::::0;46306:54:::1;::::0;-1:-1:-1;;;;;46314:13:0;;::::1;::::0;46338:21:::1;46306:54:::0;::::1;;;::::0;46314:13:::1;46306:54:::0;46314:13;46306:54;46338:21;46314:13;46306:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;46256:112::o:0;38924:185::-;39062:39;39079:4;39085:2;39089:7;39062:39;;;;;;;;;;;;:16;:39::i;44175:197::-;44250:7;44278:14;44286:5;44278:7;:14::i;:::-;44270:71;;;;-1:-1:-1;;;44270:71:0;;;;;;;:::i;:::-;-1:-1:-1;44359:5:0;44175:197::o;46725:100::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;46799:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;48423:136::-:0;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;48497:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;48531:20;48542:8;48531:20;;;;;;:::i;:::-;;;;;;;;48423:136:::0;:::o;51538:534::-;51601:9;;51614:1;51601:14;51593:43;;;;-1:-1:-1;;;51593:43:0;;13172:2:1;51593:43:0;;;13154:21:1;13211:2;13191:18;;;13184:30;-1:-1:-1;;;13230:18:1;;;13223:46;13286:18;;51593:43:0;12970:340:1;51593:43:0;51655:16;51663:7;51655;:16::i;:::-;51647:73;;;;-1:-1:-1;;;51647:73:0;;;;;;;:::i;:::-;51759:10;51739:16;51747:7;51739;:16::i;:::-;-1:-1:-1;;;;;51739:30:0;;51731:69;;;;-1:-1:-1;;;51731:69:0;;13517:2:1;51731:69:0;;;13499:21:1;13556:2;13536:18;;;13529:30;13595:28;13575:18;;;13568:56;13641:18;;51731:69:0;13315:350:1;51731:69:0;51909:31;45134:42;51932:7;51909:8;:31::i;:::-;51953:51;51970:10;45134:42;51996:7;51953:16;:51::i;:::-;52017:11;:13;;;:11;:13;;;:::i;:::-;;;;;;52048:7;52056;52048:16;;;;;;;;:::i;:::-;;;;;;;;;;52041:23;;-1:-1:-1;;;;;;52041:23:0;;;-1:-1:-1;51538:534:0:o;36955:239::-;37027:7;37047:13;37063:7;37071;37063:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;37063:16:0;;-1:-1:-1;37098:19:0;37090:73;;;;-1:-1:-1;;;37090:73:0;;13872:2:1;37090:73:0;;;13854:21:1;13911:2;13891:18;;;13884:30;13950:34;13930:18;;;13923:62;-1:-1:-1;;;14001:18:1;;;13994:39;14050:19;;37090:73:0;13670:405:1;45735:24:0;;;;;;;:::i;45796:21::-;;;;;;;:::i;36555:388::-;36627:7;-1:-1:-1;;;;;36655:19:0;;36647:74;;;;-1:-1:-1;;;36647:74:0;;14282:2:1;36647:74:0;;;14264:21:1;14321:2;14301:18;;;14294:30;14360:34;14340:18;;;14333:62;-1:-1:-1;;;14411:18:1;;;14404:40;14461:19;;36647:74:0;14080:406:1;36647:74:0;36766:7;:14;36732:10;;;36791:122;36812:1;36808;:5;36791:122;;;36848:7;36856:1;36848:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;36839:19:0;;;36848:10;;36839:19;36835:67;;;36879:7;;;:::i;:::-;;;36835:67;36815:3;;;:::i;:::-;;;36791:122;;;-1:-1:-1;36930:5:0;;36555:388;-1:-1:-1;;;36555:388:0:o;31108:94::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;31173:21:::1;31191:1;31173:9;:21::i;:::-;31108:94::o:0;50351:349::-;50413:13;50439:15;50468:17;50478:6;50468:9;:17::i;:::-;50457:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50457:29:0;-1:-1:-1;50527:7:0;:14;50439:47;;-1:-1:-1;50497:6:0;;;50552:122;50569:1;50565;:5;50552:122;;;50606:7;50614:1;50606:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;50596:20:0;;;50606:10;;50596:20;50592:71;;;50646:1;50637;50639:3;;;;:::i;:::-;;;50637:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;50592:71;50572:3;;;:::i;:::-;;;50552:122;;;-1:-1:-1;50691:1:0;;50351:349;-1:-1:-1;;;;50351:349:0:o;46376:97::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;46445:13:::1;:20:::0;;-1:-1:-1;;;;;;46445:20:0::1;-1:-1:-1::0;;;;;46445:20:0;;;::::1;::::0;;;::::1;::::0;;46376:97::o;37318:104::-;37374:13;37407:7;37400:14;;;;;:::i;49819:459::-;33490:1;34086:7;;:19;;34078:63;;;;-1:-1:-1;;;34078:63:0;;14693:2:1;34078:63:0;;;14675:21:1;14732:2;14712:18;;;14705:30;14771:33;14751:18;;;14744:61;14822:18;;34078:63:0;14491:355:1;34078:63:0;33490:1;34219:7;:18;;;49899:9:::1;::::0;:14:::1;49891:48;;;::::0;-1:-1:-1;;;49891:48:0;;15053:2:1;49891:48:0::1;::::0;::::1;15035:21:1::0;15092:2;15072:18;;;15065:30;-1:-1:-1;;;15111:18:1;;;15104:51;15172:18;;49891:48:0::1;14851:345:1::0;49891:48:0::1;49972:1;49959:10;:14;49951:55;;;::::0;-1:-1:-1;;;49951:55:0;;15403:2:1;49951:55:0::1;::::0;::::1;15385:21:1::0;15442:2;15422:18;;;15415:30;15481;15461:18;;;15454:58;15529:18;;49951:55:0::1;15201:352:1::0;49951:55:0::1;44917:1;50025:10;:40;;50017:78;;;::::0;-1:-1:-1;;;50017:78:0;;15760:2:1;50017:78:0::1;::::0;::::1;15742:21:1::0;15799:2;15779:18;;;15772:30;15838:27;15818:18;;;15811:55;15883:18;;50017:78:0::1;15558:349:1::0;50017:78:0::1;50127:24;50141:10:::0;44747:17:::1;50127:24;:::i;:::-;50114:9;:37;;50106:68;;;::::0;-1:-1:-1;;;50106:68:0;;16287:2:1;50106:68:0::1;::::0;::::1;16269:21:1::0;16326:2;16306:18;;;16299:30;-1:-1:-1;;;16345:18:1;;;16338:48;16403:18;;50106:68:0::1;16085:342:1::0;50106:68:0::1;50192:6;50187:84;50208:10;50204:1;:14;50187:84;;;50240:19;50248:10;50240:7;:19::i;:::-;50220:3;::::0;::::1;:::i;:::-;;;50187:84;;;-1:-1:-1::0;;33446:1:0;34398:7;:22;49819:459::o;38090:295::-;-1:-1:-1;;;;;38193:24:0;;16428:10;38193:24;;38185:62;;;;-1:-1:-1;;;38185:62:0;;16634:2:1;38185:62:0;;;16616:21:1;16673:2;16653:18;;;16646:30;16712:27;16692:18;;;16685:55;16757:18;;38185:62:0;16432:349:1;38185:62:0;16428:10;38260:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;38260:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;38260:53:0;;;;;;;;;;38329:48;;540:41:1;;;38260:42:0;;16428:10;38329:48;;513:18:1;38329:48:0;;;;;;;38090:295;;:::o;47180:109::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;47246:1:::1;47234:9;:13:::0;47263:18:::1;::::0;::::1;::::0;;;::::1;47180:109::o:0;39121:328::-;39296:41;16428:10;39329:7;39296:18;:41::i;:::-;39288:103;;;;-1:-1:-1;;;39288:103:0;;;;;;;:::i;:::-;39402:39;39416:4;39422:2;39426:7;39435:5;39402:13;:39::i;47891:180::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;47975:6:::1;47970:94;47991:10;:17;47987:1;:21;47970:94;;;48030:22;48038:10;48049:1;48038:13;;;;;;;;:::i;:::-;;;;;;;48030:7;:22::i;:::-;48010:3;::::0;::::1;:::i;:::-;;;47970:94;;52177:122:::0;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;52259:19:::1;:32:::0;52177:122::o;50764:241::-;50835:13;50869:12;50877:3;50869:7;:12::i;:::-;50861:69;;;;-1:-1:-1;;;50861:69:0;;;;;;;:::i;:::-;50972:7;50981:14;:3;:12;:14::i;:::-;50955:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50941:56;;50764:241;;;:::o;51095:272::-;51179:13;;;51190:1;51179:13;;;;;;;;;51135;;51161:15;;51179:13;;;;;;;;;;;-1:-1:-1;51179:13:0;51161:31;;51210:9;;51203:1;51205;51203:4;;;;;;;;:::i;:::-;;;;;;:16;;;;;51238:13;:11;:13::i;:::-;51231:1;51233;51231:4;;;;;;;;:::i;:::-;;;;;;:20;;;;;51270:1;51263;51265;51263:4;;;;;;;;:::i;:::-;;;;;;:8;;;;;51289:9;;51302:1;51289:14;:51;;44747:17;51289:51;;;44829:17;51289:51;51282:1;51284;51282:4;;;;;;;;:::i;:::-;;;;;;;;;;:58;51358:1;51095:272;-1:-1:-1;51095:272:0:o;48613:182::-;48667:13;48701:12;48709:3;48701:7;:12::i;:::-;48693:69;;;;-1:-1:-1;;;48693:69:0;;;;;;;:::i;:::-;48780:7;48773:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48613:182;;;:::o;48834:951::-;33490:1;34086:7;;:19;;34078:63;;;;-1:-1:-1;;;34078:63:0;;14693:2:1;34078:63:0;;;14675:21:1;14732:2;14712:18;;;14705:30;14771:33;14751:18;;;14744:61;14822:18;;34078:63:0;14491:355:1;34078:63:0;33490:1;34219:7;:18;48953:9:::1;::::0;48966:1:::1;48953:14;48945:44;;;::::0;-1:-1:-1;;;48945:44:0;;18483:2:1;48945:44:0::1;::::0;::::1;18465:21:1::0;18522:2;18502:18;;;18495:30;-1:-1:-1;;;18541:18:1;;;18534:47;18598:18;;48945:44:0::1;18281:341:1::0;48945:44:0::1;49022:1;49009:10;:14;49001:55;;;::::0;-1:-1:-1;;;49001:55:0;;15403:2:1;49001:55:0::1;::::0;::::1;15385:21:1::0;15442:2;15422:18;;;15415:30;15481;15461:18;;;15454:58;15529:18;;49001:55:0::1;15201:352:1::0;49001:55:0::1;49091:159;49128:11;;49091:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;49158:19:0::1;::::0;49206:28:::1;::::0;-1:-1:-1;;49223:10:0::1;18776:2:1::0;18772:15;18768:53;49206:28:0::1;::::0;::::1;18756:66:1::0;49158:19:0;;-1:-1:-1;18838:12:1;;;-1:-1:-1;49206:28:0::1;;;;;;;;;;;;49196:39;;;;;;49091:18;:159::i;:::-;49069:244;;;::::0;-1:-1:-1;;;49069:244:0;;19063:2:1;49069:244:0::1;::::0;::::1;19045:21:1::0;19102:2;19082:18;;;19075:30;19141:34;19121:18;;;19114:62;-1:-1:-1;;;19192:18:1;;;19185:33;19235:19;;49069:244:0::1;18861:399:1::0;49069:244:0::1;49348:29;;49334:10;:43;;49326:84;;;::::0;-1:-1:-1;;;49326:84:0;;19467:2:1;49326:84:0::1;::::0;::::1;19449:21:1::0;19506:2;19486:18;;;19479:30;19545;19525:18;;;19518:58;19593:18;;49326:84:0::1;19265:352:1::0;49326:84:0::1;49441:10;49421:31;::::0;;;:19:::1;:31;::::0;;;;:50;;49460:10;;49421:31;:50:::1;::::0;49460:10;;49421:50:::1;:::i;:::-;::::0;;;-1:-1:-1;;49531:29:0::1;::::0;49512:10:::1;49492:31;::::0;;;:19:::1;:31;::::0;;;;;:69:::1;;49484:109;;;::::0;-1:-1:-1;;;49484:109:0;;20094:2:1;49484:109:0::1;::::0;::::1;20076:21:1::0;20133:2;20113:18;;;20106:30;20172:29;20152:18;;;20145:57;20219:18;;49484:109:0::1;19892:351:1::0;49484:109:0::1;49625:33;49648:10:::0;44829:17:::1;49625:33;:::i;:::-;49612:9;:46;;49604:77;;;::::0;-1:-1:-1;;;49604:77:0;;16287:2:1;49604:77:0::1;::::0;::::1;16269:21:1::0;16326:2;16306:18;;;16299:30;-1:-1:-1;;;16345:18:1;;;16338:48;16403:18;;49604:77:0::1;16085:342:1::0;49604:77:0::1;49699:6;49694:84;49715:10;49711:1;:14;49694:84;;;49747:19;49755:10;49747:7;:19::i;:::-;49727:3;::::0;::::1;:::i;:::-;;;49694:84;;;-1:-1:-1::0;;33446:1:0;34398:7;:22;-1:-1:-1;;48834:951:0:o;46871:119::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;46943:29:::1;:39:::0;46871:119::o;47327:100::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;47388:3:::1;47376:9;:15:::0;47407:12:::1;::::0;::::1;::::0;;;::::1;47327:100::o:0;31357:192::-;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31446:22:0;::::1;31438:73;;;::::0;-1:-1:-1;;;31438:73:0;;20450:2:1;31438:73:0::1;::::0;::::1;20432:21:1::0;20489:2;20469:18;;;20462:30;20528:34;20508:18;;;20501:62;-1:-1:-1;;;20579:18:1;;;20572:36;20625:19;;31438:73:0::1;20248:402:1::0;31438:73:0::1;31522:19;31532:8;31522:9;:19::i;46516:154::-:0;30530:6;;-1:-1:-1;;;;;30530:6:0;16428:10;30677:23;30669:68;;;;-1:-1:-1;;;30669:68:0;;;;;;;:::i;:::-;46596:24;;::::1;::::0;:10:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;:::-;;46636:26;46650:11;46636:26;;;;;;:::i;36238:305::-:0;36340:4;-1:-1:-1;;;;;;36377:40:0;;-1:-1:-1;;;36377:40:0;;:105;;-1:-1:-1;;;;;;;36434:48:0;;-1:-1:-1;;;36434:48:0;36377:105;:158;;;-1:-1:-1;;;;;;;;;;19627:40:0;;;36499:36;19518:157;39791:155;39890:7;:14;39856:4;;39880:24;;:58;;;;;39936:1;-1:-1:-1;;;;;39908:30:0;:7;39916;39908:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;39908:16:0;:30;;39873:65;39791:155;-1:-1:-1;;39791:155:0:o;41989:174::-;42064:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;42064:29:0;-1:-1:-1;;;;;42064:29:0;;;;;;;;:24;;42118:23;42064:24;42118:14;:23::i;:::-;-1:-1:-1;;;;;42109:46:0;;;;;;;;;;;41989:174;;:::o;47468:194::-;47542:7;:14;47587:10;;47575:22;;47567:44;;;;-1:-1:-1;;;47567:44:0;;20857:2:1;47567:44:0;;;20839:21:1;20896:1;20876:18;;;20869:29;-1:-1:-1;;;20914:18:1;;;20907:39;20963:18;;47567:44:0;20655:332:1;47567:44:0;47622:32;47632:10;47644:9;47622;:32::i;39956:348::-;40049:4;40074:16;40082:7;40074;:16::i;:::-;40066:73;;;;-1:-1:-1;;;40066:73:0;;;;;;;:::i;:::-;40150:13;40166:23;40181:7;40166:14;:23::i;:::-;40150:39;;40219:5;-1:-1:-1;;;;;40208:16:0;:7;-1:-1:-1;;;;;40208:16:0;;:51;;;;40252:7;-1:-1:-1;;;;;40228:31:0;:20;40240:7;40228:11;:20::i;:::-;-1:-1:-1;;;;;40228:31:0;;40208:51;:87;;;-1:-1:-1;;;;;;38518:25:0;;;38494:4;38518:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;40263:32;40200:96;39956:348;-1:-1:-1;;;;39956:348:0:o;41463:516::-;41622:4;-1:-1:-1;;;;;41595:31:0;:23;41610:7;41595:14;:23::i;:::-;-1:-1:-1;;;;;41595:31:0;;41587:85;;;;-1:-1:-1;;;41587:85:0;;21194:2:1;41587:85:0;;;21176:21:1;21233:2;21213:18;;;21206:30;21272:34;21252:18;;;21245:62;-1:-1:-1;;;21323:18:1;;;21316:39;21372:19;;41587:85:0;20992:405:1;41587:85:0;-1:-1:-1;;;;;41691:16:0;;41683:65;;;;-1:-1:-1;;;41683:65:0;;21604:2:1;41683:65:0;;;21586:21:1;21643:2;21623:18;;;21616:30;21682:34;21662:18;;;21655:62;-1:-1:-1;;;21733:18:1;;;21726:34;21777:19;;41683:65:0;21402:400:1;41683:65:0;41865:29;41882:1;41886:7;41865:8;:29::i;:::-;41924:2;41905:7;41913;41905:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;41905:21:0;-1:-1:-1;;;;;41905:21:0;;;;;;41944:27;;41963:7;;41944:27;;;;;;;;;;41905:16;41944:27;41463:516;;;:::o;31557:173::-;31632:6;;;-1:-1:-1;;;;;31649:17:0;;;-1:-1:-1;;;;;;31649:17:0;;;;;;;31682:40;;31632:6;;;31649:17;31632:6;;31682:40;;31613:16;;31682:40;31602:128;31557:173;:::o;39466:315::-;39623:28;39633:4;39639:2;39643:7;39623:9;:28::i;:::-;39670:48;39693:4;39699:2;39703:7;39712:5;39670:22;:48::i;:::-;39662:111;;;;-1:-1:-1;;;39662:111:0;;;;;;;:::i;16879:723::-;16935:13;17156:10;17152:53;;-1:-1:-1;;17183:10:0;;;;;;;;;;;;-1:-1:-1;;;17183:10:0;;;;;16879:723::o;17152:53::-;17230:5;17215:12;17271:78;17278:9;;17271:78;;17304:8;;;;:::i;:::-;;-1:-1:-1;17327:10:0;;-1:-1:-1;17335:2:0;17327:10;;:::i;:::-;;;17271:78;;;17359:19;17391:6;17381:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17381:17:0;;17359:39;;17409:154;17416:10;;17409:154;;17443:11;17453:1;17443:11;;:::i;:::-;;-1:-1:-1;17512:10:0;17520:2;17512:5;:10;:::i;:::-;17499:24;;:2;:24;:::i;:::-;17486:39;;17469:6;17476;17469:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;17469:56:0;;;;;;;;-1:-1:-1;17540:11:0;17549:2;17540:11;;:::i;:::-;;;17409:154;;27488:830;27613:4;27653;27613;27670:525;27694:5;:12;27690:1;:16;27670:525;;;27728:20;27751:5;27757:1;27751:8;;;;;;;;:::i;:::-;;;;;;;27728:31;;27796:12;27780;:28;27776:408;;27933:44;;;;;;22890:19:1;;;22925:12;;;22918:28;;;22962:12;;27933:44:0;;;;;;;;;;;;27923:55;;;;;;27908:70;;27776:408;;;28123:44;;;;;;22890:19:1;;;22925:12;;;22918:28;;;22962:12;;28123:44:0;;;;;;;;;;;;28113:55;;;;;;28098:70;;27776:408;-1:-1:-1;27708:3:0;;;;:::i;:::-;;;;27670:525;;;-1:-1:-1;28290:20:0;;;;27488:830;-1:-1:-1;;;27488:830:0:o;40314:110::-;40390:26;40400:2;40404:7;40390:26;;;;;;;;;;;;:9;:26::i;42173:799::-;42328:4;-1:-1:-1;;;;;42349:13:0;;8709:20;8757:8;42345:620;;42385:72;;-1:-1:-1;;;42385:72:0;;-1:-1:-1;;;;;42385:36:0;;;;;:72;;16428:10;;42436:4;;42442:7;;42451:5;;42385:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42385:72:0;;;;;;;;-1:-1:-1;;42385:72:0;;;;;;;;;;;;:::i;:::-;;;42381:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42627:13:0;;42623:272;;42670:60;;-1:-1:-1;;;42670:60:0;;;;;;;:::i;42623:272::-;42845:6;42839:13;42830:6;42826:2;42822:15;42815:38;42381:529;-1:-1:-1;;;;;;42508:51:0;-1:-1:-1;;;42508:51:0;;-1:-1:-1;42501:58:0;;42345:620;-1:-1:-1;42949:4:0;42173:799;;;;;;:::o;40434:321::-;40564:18;40570:2;40574:7;40564:5;:18::i;:::-;40615:54;40646:1;40650:2;40654:7;40663:5;40615:22;:54::i;:::-;40593:154;;;;-1:-1:-1;;;40593:154:0;;;;;;;:::i;40765:346::-;-1:-1:-1;;;;;40845:16:0;;40837:61;;;;-1:-1:-1;;;40837:61:0;;23946:2:1;40837:61:0;;;23928:21:1;;;23965:18;;;23958:30;24024:34;24004:18;;;23997:62;24076:18;;40837:61:0;23744:356:1;40837:61:0;40918:16;40926:7;40918;:16::i;:::-;40917:17;40909:58;;;;-1:-1:-1;;;40909:58:0;;24307:2:1;40909:58:0;;;24289:21:1;24346:2;24326:18;;;24319:30;24385;24365:18;;;24358:58;24433:18;;40909:58:0;24105:352:1;40909:58:0;41036:7;:16;;;;;;;-1:-1:-1;41036:16:0;;;;;;;-1:-1:-1;;;;;;41036:16:0;-1:-1:-1;;;;;41036:16:0;;;;;;;;41070:33;;41095:7;;-1:-1:-1;41070:33:0;;-1:-1:-1;;41070:33:0;40765:346;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:367::-;655:8;665:6;719:3;712:4;704:6;700:17;696:27;686:55;;737:1;734;727:12;686:55;-1:-1:-1;760:20:1;;803:18;792:30;;789:50;;;835:1;832;825:12;789:50;872:4;864:6;860:17;848:29;;932:3;925:4;915:6;912:1;908:14;900:6;896:27;892:38;889:47;886:67;;;949:1;946;939:12;886:67;592:367;;;;;:::o;964:504::-;1058:6;1066;1074;1127:2;1115:9;1106:7;1102:23;1098:32;1095:52;;;1143:1;1140;1133:12;1095:52;1183:9;1170:23;1216:18;1208:6;1205:30;1202:50;;;1248:1;1245;1238:12;1202:50;1287:70;1349:7;1340:6;1329:9;1325:22;1287:70;:::i;:::-;1376:8;;1261:96;;-1:-1:-1;1458:2:1;1443:18;;;;1430:32;;964:504;-1:-1:-1;;;;964:504:1:o;1473:258::-;1545:1;1555:113;1569:6;1566:1;1563:13;1555:113;;;1645:11;;;1639:18;1626:11;;;1619:39;1591:2;1584:10;1555:113;;;1686:6;1683:1;1680:13;1677:48;;;-1:-1:-1;;1721:1:1;1703:16;;1696:27;1473:258::o;1736:269::-;1789:3;1827:5;1821:12;1854:6;1849:3;1842:19;1870:63;1926:6;1919:4;1914:3;1910:14;1903:4;1896:5;1892:16;1870:63;:::i;:::-;1987:2;1966:15;-1:-1:-1;;1962:29:1;1953:39;;;;1994:4;1949:50;;1736:269;-1:-1:-1;;1736:269:1:o;2010:231::-;2159:2;2148:9;2141:21;2122:4;2179:56;2231:2;2220:9;2216:18;2208:6;2179:56;:::i;2246:180::-;2305:6;2358:2;2346:9;2337:7;2333:23;2329:32;2326:52;;;2374:1;2371;2364:12;2326:52;-1:-1:-1;2397:23:1;;2246:180;-1:-1:-1;2246:180:1:o;2639:173::-;2707:20;;-1:-1:-1;;;;;2756:31:1;;2746:42;;2736:70;;2802:1;2799;2792:12;2736:70;2639:173;;;:::o;2817:254::-;2885:6;2893;2946:2;2934:9;2925:7;2921:23;2917:32;2914:52;;;2962:1;2959;2952:12;2914:52;2985:29;3004:9;2985:29;:::i;:::-;2975:39;3061:2;3046:18;;;;3033:32;;-1:-1:-1;;;2817:254:1:o;3076:186::-;3135:6;3188:2;3176:9;3167:7;3163:23;3159:32;3156:52;;;3204:1;3201;3194:12;3156:52;3227:29;3246:9;3227:29;:::i;3629:328::-;3706:6;3714;3722;3775:2;3763:9;3754:7;3750:23;3746:32;3743:52;;;3791:1;3788;3781:12;3743:52;3814:29;3833:9;3814:29;:::i;:::-;3804:39;;3862:38;3896:2;3885:9;3881:18;3862:38;:::i;:::-;3852:48;;3947:2;3936:9;3932:18;3919:32;3909:42;;3629:328;;;;;:::o;3962:127::-;4023:10;4018:3;4014:20;4011:1;4004:31;4054:4;4051:1;4044:15;4078:4;4075:1;4068:15;4094:275;4165:2;4159:9;4230:2;4211:13;;-1:-1:-1;;4207:27:1;4195:40;;4265:18;4250:34;;4286:22;;;4247:62;4244:88;;;4312:18;;:::i;:::-;4348:2;4341:22;4094:275;;-1:-1:-1;4094:275:1:o;4374:407::-;4439:5;4473:18;4465:6;4462:30;4459:56;;;4495:18;;:::i;:::-;4533:57;4578:2;4557:15;;-1:-1:-1;;4553:29:1;4584:4;4549:40;4533:57;:::i;:::-;4524:66;;4613:6;4606:5;4599:21;4653:3;4644:6;4639:3;4635:16;4632:25;4629:45;;;4670:1;4667;4660:12;4629:45;4719:6;4714:3;4707:4;4700:5;4696:16;4683:43;4773:1;4766:4;4757:6;4750:5;4746:18;4742:29;4735:40;4374:407;;;;;:::o;4786:451::-;4855:6;4908:2;4896:9;4887:7;4883:23;4879:32;4876:52;;;4924:1;4921;4914:12;4876:52;4964:9;4951:23;4997:18;4989:6;4986:30;4983:50;;;5029:1;5026;5019:12;4983:50;5052:22;;5105:4;5097:13;;5093:27;-1:-1:-1;5083:55:1;;5134:1;5131;5124:12;5083:55;5157:74;5223:7;5218:2;5205:16;5200:2;5196;5192:11;5157:74;:::i;5242:632::-;5413:2;5465:21;;;5535:13;;5438:18;;;5557:22;;;5384:4;;5413:2;5636:15;;;;5610:2;5595:18;;;5384:4;5679:169;5693:6;5690:1;5687:13;5679:169;;;5754:13;;5742:26;;5823:15;;;;5788:12;;;;5715:1;5708:9;5679:169;;;-1:-1:-1;5865:3:1;;5242:632;-1:-1:-1;;;;;;5242:632:1:o;5879:347::-;5944:6;5952;6005:2;5993:9;5984:7;5980:23;5976:32;5973:52;;;6021:1;6018;6011:12;5973:52;6044:29;6063:9;6044:29;:::i;:::-;6034:39;;6123:2;6112:9;6108:18;6095:32;6170:5;6163:13;6156:21;6149:5;6146:32;6136:60;;6192:1;6189;6182:12;6136:60;6215:5;6205:15;;;5879:347;;;;;:::o;6413:667::-;6508:6;6516;6524;6532;6585:3;6573:9;6564:7;6560:23;6556:33;6553:53;;;6602:1;6599;6592:12;6553:53;6625:29;6644:9;6625:29;:::i;:::-;6615:39;;6673:38;6707:2;6696:9;6692:18;6673:38;:::i;:::-;6663:48;;6758:2;6747:9;6743:18;6730:32;6720:42;;6813:2;6802:9;6798:18;6785:32;6840:18;6832:6;6829:30;6826:50;;;6872:1;6869;6862:12;6826:50;6895:22;;6948:4;6940:13;;6936:27;-1:-1:-1;6926:55:1;;6977:1;6974;6967:12;6926:55;7000:74;7066:7;7061:2;7048:16;7043:2;7039;7035:11;7000:74;:::i;:::-;6990:84;;;6413:667;;;;;;;:::o;7085:952::-;7169:6;7200:2;7243;7231:9;7222:7;7218:23;7214:32;7211:52;;;7259:1;7256;7249:12;7211:52;7299:9;7286:23;7328:18;7369:2;7361:6;7358:14;7355:34;;;7385:1;7382;7375:12;7355:34;7423:6;7412:9;7408:22;7398:32;;7468:7;7461:4;7457:2;7453:13;7449:27;7439:55;;7490:1;7487;7480:12;7439:55;7526:2;7513:16;7548:2;7544;7541:10;7538:36;;;7554:18;;:::i;:::-;7600:2;7597:1;7593:10;7583:20;;7623:28;7647:2;7643;7639:11;7623:28;:::i;:::-;7685:15;;;7755:11;;;7751:20;;;7716:12;;;;7783:19;;;7780:39;;;7815:1;7812;7805:12;7780:39;7839:11;;;;7859:148;7875:6;7870:3;7867:15;7859:148;;;7941:23;7960:3;7941:23;:::i;:::-;7929:36;;7892:12;;;;7985;;;;7859:148;;;8026:5;7085:952;-1:-1:-1;;;;;;;;7085:952:1:o;8227:505::-;8322:6;8330;8338;8391:2;8379:9;8370:7;8366:23;8362:32;8359:52;;;8407:1;8404;8397:12;8359:52;8443:9;8430:23;8420:33;;8504:2;8493:9;8489:18;8476:32;8531:18;8523:6;8520:30;8517:50;;;8563:1;8560;8553:12;8517:50;8602:70;8664:7;8655:6;8644:9;8640:22;8602:70;:::i;:::-;8227:505;;8691:8;;-1:-1:-1;8576:96:1;;-1:-1:-1;;;;8227:505:1:o;8737:260::-;8805:6;8813;8866:2;8854:9;8845:7;8841:23;8837:32;8834:52;;;8882:1;8879;8872:12;8834:52;8905:29;8924:9;8905:29;:::i;:::-;8895:39;;8953:38;8987:2;8976:9;8972:18;8953:38;:::i;:::-;8943:48;;8737:260;;;;;:::o;9002:356::-;9204:2;9186:21;;;9223:18;;;9216:30;9282:34;9277:2;9262:18;;9255:62;9349:2;9334:18;;9002:356::o;9363:127::-;9424:10;9419:3;9415:20;9412:1;9405:31;9455:4;9452:1;9445:15;9479:4;9476:1;9469:15;9495:127;9556:10;9551:3;9547:20;9544:1;9537:31;9587:4;9584:1;9577:15;9611:4;9608:1;9601:15;9627:135;9666:3;-1:-1:-1;;9687:17:1;;9684:43;;;9707:18;;:::i;:::-;-1:-1:-1;9754:1:1;9743:13;;9627:135::o;9767:380::-;9846:1;9842:12;;;;9889;;;9910:61;;9964:4;9956:6;9952:17;9942:27;;9910:61;10017:2;10009:6;10006:14;9986:18;9983:38;9980:161;;;10063:10;10058:3;10054:20;10051:1;10044:31;10098:4;10095:1;10088:15;10126:4;10123:1;10116:15;9980:161;;9767:380;;;:::o;11392:267::-;11431:4;11460:9;;;11485:10;;-1:-1:-1;;;11504:19:1;;11497:27;;11481:44;11478:70;;;11528:18;;:::i;:::-;-1:-1:-1;;;;;11575:27:1;;11568:35;;11560:44;;11557:70;;;11607:18;;:::i;:::-;-1:-1:-1;;11644:9:1;;11392:267::o;11664:125::-;11704:4;11732:1;11729;11726:8;11723:34;;;11737:18;;:::i;:::-;-1:-1:-1;11774:9:1;;11664:125::o;11794:413::-;11996:2;11978:21;;;12035:2;12015:18;;;12008:30;12074:34;12069:2;12054:18;;12047:62;-1:-1:-1;;;12140:2:1;12125:18;;12118:47;12197:3;12182:19;;11794:413::o;12557:408::-;12759:2;12741:21;;;12798:2;12778:18;;;12771:30;12837:34;12832:2;12817:18;;12810:62;-1:-1:-1;;;12903:2:1;12888:18;;12881:42;12955:3;12940:19;;12557:408::o;15912:168::-;15952:7;16018:1;16014;16010:6;16006:14;16003:1;16000:21;15995:1;15988:9;15981:17;15977:45;15974:71;;;16025:18;;:::i;:::-;-1:-1:-1;16065:9:1;;15912:168::o;16912:185::-;16954:3;16992:5;16986:12;17007:52;17052:6;17047:3;17040:4;17033:5;17029:16;17007:52;:::i;:::-;17075:16;;;;;16912:185;-1:-1:-1;;16912:185:1:o;17102:1174::-;17278:3;17307:1;17340:6;17334:13;17370:3;17392:1;17420:9;17416:2;17412:18;17402:28;;17480:2;17469:9;17465:18;17502;17492:61;;17546:4;17538:6;17534:17;17524:27;;17492:61;17572:2;17620;17612:6;17609:14;17589:18;17586:38;17583:165;;;-1:-1:-1;;;17647:33:1;;17703:4;17700:1;17693:15;17733:4;17654:3;17721:17;17583:165;17764:18;17791:104;;;;17909:1;17904:320;;;;17757:467;;17791:104;-1:-1:-1;;17824:24:1;;17812:37;;17869:16;;;;-1:-1:-1;17791:104:1;;17904:320;16859:1;16852:14;;;16896:4;16883:18;;17999:1;18013:165;18027:6;18024:1;18021:13;18013:165;;;18105:14;;18092:11;;;18085:35;18148:16;;;;18042:10;;18013:165;;;18017:3;;18207:6;18202:3;18198:16;18191:23;;17757:467;;;;;;;18240:30;18266:3;18258:6;18240:30;:::i;:::-;18233:37;17102:1174;-1:-1:-1;;;;;17102:1174:1:o;19622:265::-;19661:3;19689:9;;;19714:10;;-1:-1:-1;;;;;19733:27:1;;;19726:35;;19710:52;19707:78;;;19765:18;;:::i;:::-;-1:-1:-1;;;19812:19:1;;;19805:27;;19797:36;;19794:62;;;19836:18;;:::i;:::-;-1:-1:-1;;19872:9:1;;19622:265::o;21807:414::-;22009:2;21991:21;;;22048:2;22028:18;;;22021:30;22087:34;22082:2;22067:18;;22060:62;-1:-1:-1;;;22153:2:1;22138:18;;22131:48;22211:3;22196:19;;21807:414::o;22226:127::-;22287:10;22282:3;22278:20;22275:1;22268:31;22318:4;22315:1;22308:15;22342:4;22339:1;22332:15;22358:120;22398:1;22424;22414:35;;22429:18;;:::i;:::-;-1:-1:-1;22463:9:1;;22358:120::o;22483:112::-;22515:1;22541;22531:35;;22546:18;;:::i;:::-;-1:-1:-1;22580:9:1;;22483:112::o;22600:128::-;22640:3;22671:1;22667:6;22664:1;22661:13;22658:39;;;22677:18;;:::i;:::-;-1:-1:-1;22713:9:1;;22600:128::o;22985:500::-;-1:-1:-1;;;;;23254:15:1;;;23236:34;;23306:15;;23301:2;23286:18;;23279:43;23353:2;23338:18;;23331:34;;;23401:3;23396:2;23381:18;;23374:31;;;23179:4;;23422:57;;23459:19;;23451:6;23422:57;:::i;:::-;23414:65;22985:500;-1:-1:-1;;;;;;22985:500:1:o;23490:249::-;23559:6;23612:2;23600:9;23591:7;23587:23;23583:32;23580:52;;;23628:1;23625;23618:12;23580:52;23660:9;23654:16;23679:30;23703:5;23679:30;:::i

Swarm Source

ipfs://e934dd3f8bab9d350c1d8e6f89061a2e756ca6522beb3230a26341a1929682ea
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.