ETH Price: $2,369.08 (-1.97%)

Token

Lucky Dragons (LD)
 

Overview

Max Total Supply

59 LD

Holders

35

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 LD
0xdad836760e9eeBD3d71E2Be2B5293cc360086346
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:
LuckyDragons

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-24
*/

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/utils/Counters.sol

pragma solidity ^0.8.0;

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

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

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

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

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: @openzeppelin/contracts/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/contracts/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/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.8.0;

/**
 * @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/contracts/access/Ownable.sol

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract 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/contracts/token/ERC721/extensions/IERC721Enumerable.sol

pragma solidity ^0.8.0;

/**
 * @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/contracts/utils/introspection/ERC165.sol

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/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/contracts/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);
    }

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface 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/contracts/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/contracts/token/ERC721/ERC721.sol

pragma solidity ^0.8.0;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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


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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = 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);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            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);

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.

     */
    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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
 
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol

pragma solidity ^0.8.0;

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721.balanceOf(owner),
            "ERC721Enumerable: owner index out of bounds"
        );
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721Enumerable.totalSupply(),
            "ERC721Enumerable: global index out of bounds"
        );
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId)
        private
    {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}



// File: LuckyDragons.sol

pragma solidity ^0.8.0;

interface IGemToken {
    function updateReward(address _from, address _to) external;

    function claimByLuckyDragon(address _user, uint256 _rewardAmount) external;
}

contract LuckyDragons is ERC721Enumerable, Ownable, IERC721Receiver {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenId;
    string private hiddenProof;
    IGemToken public GemToken;
    bool public revealed = false;

    uint256 public constant MAX_MMM = 7777;
    uint256 public price = 35000000000000000; //0.035 Ether (Presale), 0.07 Ether (Public)
    string baseTokenURI;
    bool public saleOpen = false;
    bool public presaleOpen = false;
    
    string public baseExtension = ".json";
    string public notRevealedUri;

    struct UserInfo {
        uint256 tokenId1;
        uint256 stakeTime;
    }

    mapping(address => UserInfo[]) public userInfo;

    event LuckyDragonMinted(uint256 totalMinted);
    event StakedLuckyDragon(
        address indexed user,
        uint256 tokenId1,
        uint256 stakeTime
    );
    event UnStakedLuckyDragon(
        address indexed user,
        uint256 tokenId1,
        uint256 stakeTime
    );

    constructor(string memory _initNotRevealedUri) ERC721("Lucky Dragons", "LD") {
        setNotRevealedURI(_initNotRevealedUri);
    }
    
    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
        _exists(tokenId),
        "ERC721Metadata: URI query for nonexistent token"
        );

        if (!revealed) {
        return notRevealedUri;
        } else {
        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
            ? string(
                abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension)
            )
            : "";
        }
    }
    //Get token Ids of all tokens owned by _owner
    function walletOfOwner(address _owner)
        external
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }

        return tokensId;
    }

    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    function setPrice(uint256 _newPrice) external onlyOwner {
        price = _newPrice;
    }

    function reveal() external onlyOwner {
        revealed = true;
    }

    //Close sale if open, open sale if closed
    function flipSaleState() external onlyOwner {
        saleOpen = !saleOpen;
    }

    function flipPresaleState() external onlyOwner {
        presaleOpen = !presaleOpen;
    }

    function withdrawAll() external onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function setGemToken(address _gemToken) external onlyOwner {
        GemToken = IGemToken(_gemToken);
    }

    function gethiddenProof() public view onlyOwner returns (string memory) {
        return hiddenProof;
    }

    function sethiddenProof(string memory _hiddenProof) public onlyOwner {
        hiddenProof = _hiddenProof;
    }

    function airdrop(address[] calldata _recipients) external onlyOwner {
        require(
            totalSupply() + _recipients.length <= MAX_MMM,
            "Airdrop will exceed maximum supply of Lucky Dragons"
        );
        require(_recipients.length != 0, "Address not found");
        for (uint256 i = 0; i < _recipients.length; i++) {
            require(_recipients[i] != address(0), "Airdrop to Null address");
            _mint(_recipients[i]);
        }
    }

    function presaleMint(string calldata _proof, uint256 _count)
        external
        payable
    {
        address user = msg.sender;
        require (
            (keccak256(abi.encodePacked(_proof)) == keccak256(abi.encodePacked(hiddenProof))),
            "Not whitelisted"
        );
       
        require(presaleOpen, "Presale is not open yet");
        require(!saleOpen, "Presale is closed");

        require(
            _count > 0,
            "Can't mint 0 Dragons"
        );

        require(
            totalSupply() + _count <= MAX_MMM,
            "Exceeds maximum supply of Lucky Dragons"
        );
        
        require(
            msg.value >= price * _count,
            "Ether sent with this transaction is not correct"
        );

        for (uint256 i = 0; i < _count; i++) {
            _mint(user);
        }
    }

    //mint LuckyDragon
    function mintLuckyDragon(uint256 _count) external payable {
        require(
            _count > 0,
            "Minimum 1 Dragon has to be minted per transaction"
        );

        require(
            totalSupply() + _count <= MAX_MMM,
            "Exceeds maximum supply of Lucky Dragons"
        );
       

        address _to = msg.sender;
        if (_to != owner()) {
            require(saleOpen, "Sale is not open yet");
           
           
            require(
                msg.value >= price * _count,
                "Ether sent with this transaction is not correct"
            );
        }
        for (uint256 i = 0; i < _count; i++) {
            _mint(_to);
        }
    }

    function _mint(address _to) private {
        _tokenId.increment();
        uint256 tokenId = _tokenId.current();
        _safeMint(_to, tokenId);
        emit LuckyDragonMinted(tokenId);
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        GemToken.updateReward(from, to);
        ERC721.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public override {
        GemToken.updateReward(from, to);
        ERC721.safeTransferFrom(from, to, tokenId, data);
    }

    function stakeLuckyDragon(uint256 _tokenId1) external {
        address staker = msg.sender;
        require(
            ownerOf(_tokenId1) == staker,
            "Caller is not the owner of the NFT"
        );
      
        ERC721.safeTransferFrom(staker, address(this), _tokenId1, "");

        UserInfo memory userDetails;
        userDetails.tokenId1 = _tokenId1;
        userDetails.stakeTime = block.timestamp;
        userInfo[staker].push(userDetails);

        emit StakedLuckyDragon(
            staker,
            _tokenId1,
            block.timestamp
        );
    }

    function getUserStakeLength(address _owner)
        external
        view
        returns (uint256)
    {
        return userInfo[_owner].length;
    }

    function unStake(uint256 _index) external {
        address unStaker = msg.sender;
        UserInfo storage userDetails = userInfo[unStaker][_index];
        uint256 tokenId1 = userDetails.tokenId1;
        uint256 timePassedSinceStaked = getTimePassedSinceStake(
            unStaker,
            _index
        );
        require(
            timePassedSinceStaked >= 1,
            "You can not unstake before 1 day"
        );
        userDetails = userInfo[unStaker][userInfo[unStaker].length - 1];
        userInfo[unStaker].pop();

        ERC721.safeTransferFrom(address(this), unStaker, tokenId1, "");
       

        GemToken.claimByLuckyDragon(unStaker, 0);
        emit UnStakedLuckyDragon(
            unStaker,
            tokenId1,
            block.timestamp
        );
    }

    function getTimePassedSinceStake(address _owner, uint256 _index)
        public
        view
        returns (uint256)
    {
        return (block.timestamp - userInfo[_owner][_index].stakeTime) / 86400;
    }


    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) external pure override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":"uint256","name":"totalMinted","type":"uint256"}],"name":"LuckyDragonMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeTime","type":"uint256"}],"name":"StakedLuckyDragon","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeTime","type":"uint256"}],"name":"UnStakedLuckyDragon","type":"event"},{"inputs":[],"name":"GemToken","outputs":[{"internalType":"contract IGemToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MMM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPresaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","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":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getTimePassedSinceStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getUserStakeLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gethiddenProof","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"_count","type":"uint256"}],"name":"mintLuckyDragon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","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":"string","name":"_proof","type":"string"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"saleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gemToken","type":"address"}],"name":"setGemToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenProof","type":"string"}],"name":"sethiddenProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId1","type":"uint256"}],"name":"stakeLuckyDragon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"unStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"tokenId1","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600d805460ff60a01b19169055667c585087238000600e556010805461ffff1916905560c06040526005608081905264173539b7b760d91b60a09081526200004b9160119190620001dd565b503480156200005957600080fd5b5060405162003927380380620039278339810160408190526200007c9162000283565b604080518082018252600d81526c4c75636b7920447261676f6e7360981b602080830191825283518085019094526002845261131160f21b908401528151919291620000cb91600091620001dd565b508051620000e1906001906020840190620001dd565b505050620000fe620000f86200011060201b60201c565b62000114565b620001098162000166565b50620003e1565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200017062000110565b6001600160a01b031662000183620001ce565b6001600160a01b031614620001b55760405162461bcd60e51b8152600401620001ac9062000359565b60405180910390fd5b8051620001ca906012906020840190620001dd565b5050565b600a546001600160a01b031690565b828054620001eb906200038e565b90600052602060002090601f0160209004810192826200020f57600085556200025a565b82601f106200022a57805160ff19168380011785556200025a565b828001600101855582156200025a579182015b828111156200025a5782518255916020019190600101906200023d565b50620002689291506200026c565b5090565b5b808211156200026857600081556001016200026d565b6000602080838503121562000296578182fd5b82516001600160401b0380821115620002ad578384fd5b818501915085601f830112620002c1578384fd5b815181811115620002d657620002d6620003cb565b604051601f8201601f19908116603f01168101908382118183101715620003015762000301620003cb565b81604052828152888684870101111562000319578687fd5b8693505b828410156200033c57848401860151818501870152928501926200031d565b828411156200034d57868684830101525b98975050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600281046001821680620003a357607f821691505b60208210811415620003c557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61353680620003f16000396000f3fe6080604052600436106102885760003560e01c8063729ad39e1161015a578063b88d4fde116100c1578063e985e9c51161007a578063e985e9c51461074a578063f2c4ce1e1461076a578063f2fde38b1461078a578063f7ea7bca146107aa578063f81227d4146107ca578063f84736e6146107df57610288565b8063b88d4fde146106ab578063bee6348a146106cb578063bf104985146106e0578063c6682862146106f5578063c87b56dd1461070a578063c8ded0941461072a57610288565b806395d89b411161011357806395d89b4114610622578063964f5f561461063757806399288dbb1461064c578063a035b1fe14610661578063a22cb46514610676578063a475b5dd1461069657610288565b8063729ad39e14610578578063774442fb146105985780637d3169f5146105b8578063853828b6146105d85780638da5cb5b146105ed57806391b7f5ed1461060257610288565b806334918dfd116101fe57806355f804b3116101b757806355f804b3146104d05780635d3eea91146104f05780636352211e146105105780636729acb81461053057806370a0823114610543578063715018a61461056357610288565b806334918dfd14610419578063355aee101461042e57806342842e0e1461044e578063438b63001461046e5780634f6ccce71461049b57806351830227146104bb57610288565b8063150b7a0211610250578063150b7a021461034957806318160ddd1461037657806321ce919d1461039857806323b872dd146103c65780632f745c59146103e6578063318545fe1461040657610288565b806301ffc9a71461028d57806306fdde03146102c3578063081812fc146102e5578063081c8c4414610312578063095ea7b314610327575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612848565b6107f4565b6040516102ba9190612b39565b60405180910390f35b3480156102cf57600080fd5b506102d8610821565b6040516102ba9190612b59565b3480156102f157600080fd5b50610305610300366004612939565b6108b3565b6040516102ba9190612a71565b34801561031e57600080fd5b506102d86108ff565b34801561033357600080fd5b506103476103423660046127b0565b61098d565b005b34801561035557600080fd5b506103696103643660046126fd565b610a25565b6040516102ba9190612b44565b34801561038257600080fd5b5061038b610a36565b6040516102ba919061338d565b3480156103a457600080fd5b506103b86103b33660046127b0565b610a3c565b6040516102ba929190613396565b3480156103d257600080fd5b506103476103e13660046126c2565b610a78565b3480156103f257600080fd5b5061038b6104013660046127b0565b610ae7565b610347610414366004612880565b610b39565b34801561042557600080fd5b50610347610ca1565b34801561043a57600080fd5b50610347610449366004612676565b610cf4565b34801561045a57600080fd5b506103476104693660046126c2565b610d55565b34801561047a57600080fd5b5061048e610489366004612676565b610d70565b6040516102ba9190612af5565b3480156104a757600080fd5b5061038b6104b6366004612939565b610e2e565b3480156104c757600080fd5b506102ad610e89565b3480156104dc57600080fd5b506103476104eb3660046128f3565b610e99565b3480156104fc57600080fd5b5061034761050b366004612939565b610eef565b34801561051c57600080fd5b5061030561052b366004612939565b6110e9565b61034761053e366004612939565b61111e565b34801561054f57600080fd5b5061038b61055e366004612676565b611208565b34801561056f57600080fd5b5061034761124c565b34801561058457600080fd5b506103476105933660046127d9565b611297565b3480156105a457600080fd5b506103476105b3366004612939565b6113df565b3480156105c457600080fd5b5061038b6105d33660046127b0565b6114b7565b3480156105e457600080fd5b50610347611523565b3480156105f957600080fd5b506103056115e1565b34801561060e57600080fd5b5061034761061d366004612939565b6115f0565b34801561062e57600080fd5b506102d8611634565b34801561064357600080fd5b50610305611643565b34801561065857600080fd5b506102ad611652565b34801561066d57600080fd5b5061038b61165b565b34801561068257600080fd5b50610347610691366004612776565b611661565b3480156106a257600080fd5b5061034761172f565b3480156106b757600080fd5b506103476106c63660046126fd565b611783565b3480156106d757600080fd5b506102ad6117f9565b3480156106ec57600080fd5b5061038b611807565b34801561070157600080fd5b506102d861180d565b34801561071657600080fd5b506102d8610725366004612939565b61181a565b34801561073657600080fd5b506103476107453660046128f3565b611944565b34801561075657600080fd5b506102ad610765366004612690565b611996565b34801561077657600080fd5b506103476107853660046128f3565b6119c4565b34801561079657600080fd5b506103476107a5366004612676565b611a16565b3480156107b657600080fd5b5061038b6107c5366004612676565b611a84565b3480156107d657600080fd5b50610347611a9f565b3480156107eb57600080fd5b506102d8611afb565b60006001600160e01b0319821663780e9d6360e01b1480610819575061081982611b49565b90505b919050565b6060600080546108309061343e565b80601f016020809104026020016040519081016040528092919081815260200182805461085c9061343e565b80156108a95780601f1061087e576101008083540402835291602001916108a9565b820191906000526020600020905b81548152906001019060200180831161088c57829003601f168201915b5050505050905090565b60006108be82611b89565b6108e35760405162461bcd60e51b81526004016108da90612f8e565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6012805461090c9061343e565b80601f01602080910402602001604051908101604052809291908181526020018280546109389061343e565b80156109855780601f1061095a57610100808354040283529160200191610985565b820191906000526020600020905b81548152906001019060200180831161096857829003601f168201915b505050505081565b6000610998826110e9565b9050806001600160a01b0316836001600160a01b031614156109cc5760405162461bcd60e51b81526004016108da90613174565b806001600160a01b03166109de611ba6565b6001600160a01b031614806109fa57506109fa81610765611ba6565b610a165760405162461bcd60e51b81526004016108da90612e40565b610a208383611baa565b505050565b630a85bd0160e11b5b949350505050565b60085490565b60136020528160005260406000208181548110610a5857600080fd5b600091825260209091206002909102018054600190910154909250905082565b600d54604051636918579d60e11b81526001600160a01b039091169063d230af3a90610aaa9086908690600401612a85565b600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b50505050610a20838383611c18565b6000610af283611208565b8210610b105760405162461bcd60e51b81526004016108da90612b6c565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6040513390610b4d90600c90602001612a62565b604051602081830303815290604052805190602001208484604051602001610b76929190612a15565b6040516020818303038152906040528051906020012014610ba95760405162461bcd60e51b81526004016108da90612e9d565b601054610100900460ff16610bd05760405162461bcd60e51b81526004016108da906130f6565b60105460ff1615610bf35760405162461bcd60e51b81526004016108da90612c86565b60008211610c135760405162461bcd60e51b81526004016108da90612e12565b611e6182610c1f610a36565b610c2991906133b0565b1115610c475760405162461bcd60e51b81526004016108da9061312d565b81600e54610c5591906133dc565b341015610c745760405162461bcd60e51b81526004016108da90612fda565b60005b82811015610c9a57610c8882611c50565b80610c9281613479565b915050610c77565b5050505050565b610ca9611ba6565b6001600160a01b0316610cba6115e1565b6001600160a01b031614610ce05760405162461bcd60e51b81526004016108da90613029565b6010805460ff19811660ff90911615179055565b610cfc611ba6565b6001600160a01b0316610d0d6115e1565b6001600160a01b031614610d335760405162461bcd60e51b81526004016108da90613029565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610a2083838360405180602001604052806000815250611783565b60606000610d7d83611208565b905060008167ffffffffffffffff811115610da857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610dd1578160200160208202803683370190505b50905060005b82811015610e2657610de98582610ae7565b828281518110610e0957634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610e1e81613479565b915050610dd7565b509392505050565b6000610e38610a36565b8210610e565760405162461bcd60e51b81526004016108da90613316565b60088281548110610e7757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600d54600160a01b900460ff1681565b610ea1611ba6565b6001600160a01b0316610eb26115e1565b6001600160a01b031614610ed85760405162461bcd60e51b81526004016108da90613029565b8051610eeb90600f906020840190612536565b5050565b336000818152601360205260408120805484908110610f1e57634e487b7160e01b600052603260045260246000fd5b600091825260208220600290910201805490925090610f3d84866114b7565b90506001811015610f605760405162461bcd60e51b81526004016108da90612d91565b6001600160a01b03841660009081526013602052604090208054610f86906001906133fb565b81548110610fa457634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201925060136000856001600160a01b03166001600160a01b03168152602001908152602001600020805480610ff657634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020906002020160008082016000905560018201600090555050905561103a30858460405180602001604052806000815250611cad565b600d546040516314d2279960e21b81526001600160a01b03909116906353489e649061106d908790600090600401612adc565b600060405180830381600087803b15801561108757600080fd5b505af115801561109b573d6000803e3d6000fd5b50505050836001600160a01b03167f68d4e617c08c77309030c5dbb6f9f3df7aecfdce26f6a1a031a5dd824386bbdf83426040516110da929190613396565b60405180910390a25050505050565b6000818152600260205260408120546001600160a01b0316806108195760405162461bcd60e51b81526004016108da90612f10565b6000811161113e5760405162461bcd60e51b81526004016108da906132c5565b611e618161114a610a36565b61115491906133b0565b11156111725760405162461bcd60e51b81526004016108da9061312d565b3361117b6115e1565b6001600160a01b0316816001600160a01b0316146111e25760105460ff166111b55760405162461bcd60e51b81526004016108da90612d63565b81600e546111c391906133dc565b3410156111e25760405162461bcd60e51b81526004016108da90612fda565b60005b82811015610a20576111f682611c50565b8061120081613479565b9150506111e5565b60006001600160a01b0382166112305760405162461bcd60e51b81526004016108da90612ec6565b506001600160a01b031660009081526003602052604090205490565b611254611ba6565b6001600160a01b03166112656115e1565b6001600160a01b03161461128b5760405162461bcd60e51b81526004016108da90613029565b6112956000611ce6565b565b61129f611ba6565b6001600160a01b03166112b06115e1565b6001600160a01b0316146112d65760405162461bcd60e51b81526004016108da90613029565b611e61816112e2610a36565b6112ec91906133b0565b111561130a5760405162461bcd60e51b81526004016108da906131b5565b806113275760405162461bcd60e51b81526004016108da90613362565b60005b81811015610a2057600083838381811061135457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113699190612676565b6001600160a01b031614156113905760405162461bcd60e51b81526004016108da90612cb1565b6113cd8383838181106113b357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113c89190612676565b611c50565b806113d781613479565b91505061132a565b33806113ea836110e9565b6001600160a01b0316146114105760405162461bcd60e51b81526004016108da90613208565b61142b81308460405180602001604052806000815250611cad565b6114336125ba565b8281524260208083018281526001600160a01b038516600081815260138452604080822080546001818101835591845295909220875160029096020194855592519301929092555190917f9c49ec62644ee6558d56cf91d8772f33ea6db879a8ef72ef41c308327a981aa6916114aa918791613396565b60405180910390a2505050565b6001600160a01b03821660009081526013602052604081208054620151809190849081106114f557634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101544261151291906133fb565b61151c91906133c8565b9392505050565b61152b611ba6565b6001600160a01b031661153c6115e1565b6001600160a01b0316146115625760405162461bcd60e51b81526004016108da90613029565b6000336001600160a01b03164760405161157b90612a6e565b60006040518083038185875af1925050503d80600081146115b8576040519150601f19603f3d011682016040523d82523d6000602084013e6115bd565b606091505b50509050806115de5760405162461bcd60e51b81526004016108da9061324a565b50565b600a546001600160a01b031690565b6115f8611ba6565b6001600160a01b03166116096115e1565b6001600160a01b03161461162f5760405162461bcd60e51b81526004016108da90613029565b600e55565b6060600180546108309061343e565b600d546001600160a01b031681565b60105460ff1681565b600e5481565b611669611ba6565b6001600160a01b0316826001600160a01b0316141561169a5760405162461bcd60e51b81526004016108da90612d2c565b80600560006116a7611ba6565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556116eb611ba6565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117239190612b39565b60405180910390a35050565b611737611ba6565b6001600160a01b03166117486115e1565b6001600160a01b03161461176e5760405162461bcd60e51b81526004016108da90613029565b600d805460ff60a01b1916600160a01b179055565b600d54604051636918579d60e11b81526001600160a01b039091169063d230af3a906117b59087908790600401612a85565b600060405180830381600087803b1580156117cf57600080fd5b505af11580156117e3573d6000803e3d6000fd5b505050506117f384848484611cad565b50505050565b601054610100900460ff1681565b611e6181565b6011805461090c9061343e565b606061182582611b89565b6118415760405162461bcd60e51b81526004016108da906130a7565b600d54600160a01b900460ff166118e4576012805461185f9061343e565b80601f016020809104026020016040519081016040528092919081815260200182805461188b9061343e565b80156118d85780601f106118ad576101008083540402835291602001916118d8565b820191906000526020600020905b8154815290600101906020018083116118bb57829003601f168201915b5050505050905061081c565b60006118ee611d38565b9050600081511161190e576040518060200160405280600081525061193c565b8061191884611d47565b601160405160200161192c93929190612a25565b6040516020818303038152906040525b91505061081c565b61194c611ba6565b6001600160a01b031661195d6115e1565b6001600160a01b0316146119835760405162461bcd60e51b81526004016108da90613029565b8051610eeb90600c906020840190612536565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6119cc611ba6565b6001600160a01b03166119dd6115e1565b6001600160a01b031614611a035760405162461bcd60e51b81526004016108da90613029565b8051610eeb906012906020840190612536565b611a1e611ba6565b6001600160a01b0316611a2f6115e1565b6001600160a01b031614611a555760405162461bcd60e51b81526004016108da90613029565b6001600160a01b038116611a7b5760405162461bcd60e51b81526004016108da90612c09565b6115de81611ce6565b6001600160a01b031660009081526013602052604090205490565b611aa7611ba6565b6001600160a01b0316611ab86115e1565b6001600160a01b031614611ade5760405162461bcd60e51b81526004016108da90613029565b6010805461ff001981166101009182900460ff1615909102179055565b6060611b05611ba6565b6001600160a01b0316611b166115e1565b6001600160a01b031614611b3c5760405162461bcd60e51b81526004016108da90613029565b600c80546108309061343e565b60006001600160e01b031982166380ac58cd60e01b1480611b7a57506001600160e01b03198216635b5e139f60e01b145b80610819575061081982611e62565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611bdf826110e9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611c29611c23611ba6565b82611e7b565b611c455760405162461bcd60e51b81526004016108da90613274565b610a20838383611ef8565b611c5a600b612025565b6000611c66600b61202e565b9050611c728282612032565b7f0bbf17f27d3d5fd87e2d4bc3ba5668100eb9aca29543d28fcb16e6c6fd6cd77781604051611ca1919061338d565b60405180910390a15050565b611cbe611cb8611ba6565b83611e7b565b611cda5760405162461bcd60e51b81526004016108da90613274565b6117f38484848461204c565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060600f80546108309061343e565b606081611d6c57506040805180820190915260018152600360fc1b602082015261081c565b8160005b8115611d965780611d8081613479565b9150611d8f9050600a836133c8565b9150611d70565b60008167ffffffffffffffff811115611dbf57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611de9576020820181803683370190505b5090505b8415610a2e57611dfe6001836133fb565b9150611e0b600a86613494565b611e169060306133b0565b60f81b818381518110611e3957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611e5b600a866133c8565b9450611ded565b6001600160e01b031981166301ffc9a760e01b14919050565b6000611e8682611b89565b611ea25760405162461bcd60e51b81526004016108da90612dc6565b6000611ead836110e9565b9050806001600160a01b0316846001600160a01b03161480611ee85750836001600160a01b0316611edd846108b3565b6001600160a01b0316145b80610a2e5750610a2e8185611996565b826001600160a01b0316611f0b826110e9565b6001600160a01b031614611f315760405162461bcd60e51b81526004016108da9061305e565b6001600160a01b038216611f575760405162461bcd60e51b81526004016108da90612ce8565b611f6283838361207f565b611f6d600082611baa565b6001600160a01b0383166000908152600360205260408120805460019290611f969084906133fb565b90915550506001600160a01b0382166000908152600360205260408120805460019290611fc49084906133b0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b80546001019055565b5490565b610eeb828260405180602001604052806000815250612108565b612057848484611ef8565b6120638484848461213b565b6117f35760405162461bcd60e51b81526004016108da90612bb7565b61208a838383610a20565b6001600160a01b0383166120a6576120a181612253565b6120c9565b816001600160a01b0316836001600160a01b0316146120c9576120c98382612297565b6001600160a01b0382166120e5576120e081612334565b610a20565b826001600160a01b0316826001600160a01b031614610a2057610a20828261240d565b6121128383612451565b61211f600084848461213b565b610a205760405162461bcd60e51b81526004016108da90612bb7565b600061214f846001600160a01b0316612530565b1561224b57836001600160a01b031663150b7a0261216b611ba6565b8786866040518563ffffffff1660e01b815260040161218d9493929190612a9f565b602060405180830381600087803b1580156121a757600080fd5b505af19250505080156121d7575060408051601f3d908101601f191682019092526121d491810190612864565b60015b612231573d808015612205576040519150601f19603f3d011682016040523d82523d6000602084013e61220a565b606091505b5080516122295760405162461bcd60e51b81526004016108da90612bb7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a2e565b506001610a2e565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b600060016122a484611208565b6122ae91906133fb565b600083815260076020526040902054909150808214612301576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612346906001906133fb565b6000838152600960205260408120546008805493945090928490811061237c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600883815481106123ab57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806123f157634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061241883611208565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166124775760405162461bcd60e51b81526004016108da90612f59565b61248081611b89565b1561249d5760405162461bcd60e51b81526004016108da90612c4f565b6124a96000838361207f565b6001600160a01b03821660009081526003602052604081208054600192906124d29084906133b0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b8280546125429061343e565b90600052602060002090601f01602090048101928261256457600085556125aa565b82601f1061257d57805160ff19168380011785556125aa565b828001600101855582156125aa579182015b828111156125aa57825182559160200191906001019061258f565b506125b69291506125d4565b5090565b604051806040016040528060008152602001600081525090565b5b808211156125b657600081556001016125d5565b600067ffffffffffffffff80841115612604576126046134d4565b604051601f8501601f19908116603f0116810190828211818310171561262c5761262c6134d4565b8160405280935085815286868601111561264557600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461081c57600080fd5b600060208284031215612687578081fd5b61151c8261265f565b600080604083850312156126a2578081fd5b6126ab8361265f565b91506126b96020840161265f565b90509250929050565b6000806000606084860312156126d6578081fd5b6126df8461265f565b92506126ed6020850161265f565b9150604084013590509250925092565b60008060008060808587031215612712578081fd5b61271b8561265f565b93506127296020860161265f565b925060408501359150606085013567ffffffffffffffff81111561274b578182fd5b8501601f8101871361275b578182fd5b61276a878235602084016125e9565b91505092959194509250565b60008060408385031215612788578182fd5b6127918361265f565b9150602083013580151581146127a5578182fd5b809150509250929050565b600080604083850312156127c2578182fd5b6127cb8361265f565b946020939093013593505050565b600080602083850312156127eb578182fd5b823567ffffffffffffffff80821115612802578384fd5b818501915085601f830112612815578384fd5b813581811115612823578485fd5b8660208083028501011115612836578485fd5b60209290920196919550909350505050565b600060208284031215612859578081fd5b813561151c816134ea565b600060208284031215612875578081fd5b815161151c816134ea565b600080600060408486031215612894578283fd5b833567ffffffffffffffff808211156128ab578485fd5b818601915086601f8301126128be578485fd5b8135818111156128cc578586fd5b8760208285010111156128dd578586fd5b6020928301989097509590910135949350505050565b600060208284031215612904578081fd5b813567ffffffffffffffff81111561291a578182fd5b8201601f8101841361292a578182fd5b610a2e848235602084016125e9565b60006020828403121561294a578081fd5b5035919050565b60008151808452612969816020860160208601613412565b601f01601f19169290920160200192915050565b80546000906002810460018083168061299757607f831692505b60208084108214156129b757634e487b7160e01b86526022600452602486fd5b8180156129cb57600181146129dc57612a09565b60ff19861689528489019650612a09565b6129e5886133a4565b60005b86811015612a015781548b8201529085019083016129e8565b505084890196505b50505050505092915050565b6000828483379101908152919050565b60008451612a37818460208901613412565b845190830190612a4b818360208901613412565b612a578183018661297d565b979650505050505050565b600061151c828461297d565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ad290830184612951565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015612b2d57835183529284019291840191600101612b11565b50909695505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60006020825261151c6020830184612951565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260119082015270141c995cd85b19481a5cc818db1bdcd959607a1b604082015260600190565b60208082526017908201527f41697264726f7020746f204e756c6c2061646472657373000000000000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526014908201527314d85b19481a5cc81b9bdd081bdc195b881e595d60621b604082015260600190565b6020808252818101527f596f752063616e206e6f7420756e7374616b65206265666f7265203120646179604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526014908201527343616e2774206d696e74203020447261676f6e7360601b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252600f908201526e139bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252602f908201527f45746865722073656e7420776974682074686973207472616e73616374696f6e60408201526e081a5cc81b9bdd0818dbdc9c9958dd608a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526017908201527f50726573616c65206973206e6f74206f70656e20796574000000000000000000604082015260600190565b60208082526027908201527f45786365656473206d6178696d756d20737570706c79206f66204c75636b7920604082015266447261676f6e7360c81b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526033908201527f41697264726f702077696c6c20657863656564206d6178696d756d20737570706040820152726c79206f66204c75636b7920447261676f6e7360681b606082015260800190565b60208082526022908201527f43616c6c6572206973206e6f7420746865206f776e6572206f6620746865204e604082015261119560f21b606082015260800190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526031908201527f4d696e696d756d203120447261676f6e2068617320746f206265206d696e746560408201527032103832b9103a3930b739b0b1ba34b7b760791b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b6020808252601190820152701059191c995cdcc81b9bdd08199bdd5b99607a1b604082015260600190565b90815260200190565b918252602082015260400190565b60009081526020902090565b600082198211156133c3576133c36134a8565b500190565b6000826133d7576133d76134be565b500490565b60008160001904831182151516156133f6576133f66134a8565b500290565b60008282101561340d5761340d6134a8565b500390565b60005b8381101561342d578181015183820152602001613415565b838111156117f35750506000910152565b60028104600182168061345257607f821691505b6020821081141561347357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561348d5761348d6134a8565b5060010190565b6000826134a3576134a36134be565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146115de57600080fdfea2646970667358221220b37e263dab5abc9d31be64d81ce90d3b68389ef236dd0b7e2ab16e7843639cec64736f6c634300080100330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d57456e4732474a327a766e71623743715a6e38654b566831557156567162796e6d50357955676b696a35564e00000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c8063729ad39e1161015a578063b88d4fde116100c1578063e985e9c51161007a578063e985e9c51461074a578063f2c4ce1e1461076a578063f2fde38b1461078a578063f7ea7bca146107aa578063f81227d4146107ca578063f84736e6146107df57610288565b8063b88d4fde146106ab578063bee6348a146106cb578063bf104985146106e0578063c6682862146106f5578063c87b56dd1461070a578063c8ded0941461072a57610288565b806395d89b411161011357806395d89b4114610622578063964f5f561461063757806399288dbb1461064c578063a035b1fe14610661578063a22cb46514610676578063a475b5dd1461069657610288565b8063729ad39e14610578578063774442fb146105985780637d3169f5146105b8578063853828b6146105d85780638da5cb5b146105ed57806391b7f5ed1461060257610288565b806334918dfd116101fe57806355f804b3116101b757806355f804b3146104d05780635d3eea91146104f05780636352211e146105105780636729acb81461053057806370a0823114610543578063715018a61461056357610288565b806334918dfd14610419578063355aee101461042e57806342842e0e1461044e578063438b63001461046e5780634f6ccce71461049b57806351830227146104bb57610288565b8063150b7a0211610250578063150b7a021461034957806318160ddd1461037657806321ce919d1461039857806323b872dd146103c65780632f745c59146103e6578063318545fe1461040657610288565b806301ffc9a71461028d57806306fdde03146102c3578063081812fc146102e5578063081c8c4414610312578063095ea7b314610327575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612848565b6107f4565b6040516102ba9190612b39565b60405180910390f35b3480156102cf57600080fd5b506102d8610821565b6040516102ba9190612b59565b3480156102f157600080fd5b50610305610300366004612939565b6108b3565b6040516102ba9190612a71565b34801561031e57600080fd5b506102d86108ff565b34801561033357600080fd5b506103476103423660046127b0565b61098d565b005b34801561035557600080fd5b506103696103643660046126fd565b610a25565b6040516102ba9190612b44565b34801561038257600080fd5b5061038b610a36565b6040516102ba919061338d565b3480156103a457600080fd5b506103b86103b33660046127b0565b610a3c565b6040516102ba929190613396565b3480156103d257600080fd5b506103476103e13660046126c2565b610a78565b3480156103f257600080fd5b5061038b6104013660046127b0565b610ae7565b610347610414366004612880565b610b39565b34801561042557600080fd5b50610347610ca1565b34801561043a57600080fd5b50610347610449366004612676565b610cf4565b34801561045a57600080fd5b506103476104693660046126c2565b610d55565b34801561047a57600080fd5b5061048e610489366004612676565b610d70565b6040516102ba9190612af5565b3480156104a757600080fd5b5061038b6104b6366004612939565b610e2e565b3480156104c757600080fd5b506102ad610e89565b3480156104dc57600080fd5b506103476104eb3660046128f3565b610e99565b3480156104fc57600080fd5b5061034761050b366004612939565b610eef565b34801561051c57600080fd5b5061030561052b366004612939565b6110e9565b61034761053e366004612939565b61111e565b34801561054f57600080fd5b5061038b61055e366004612676565b611208565b34801561056f57600080fd5b5061034761124c565b34801561058457600080fd5b506103476105933660046127d9565b611297565b3480156105a457600080fd5b506103476105b3366004612939565b6113df565b3480156105c457600080fd5b5061038b6105d33660046127b0565b6114b7565b3480156105e457600080fd5b50610347611523565b3480156105f957600080fd5b506103056115e1565b34801561060e57600080fd5b5061034761061d366004612939565b6115f0565b34801561062e57600080fd5b506102d8611634565b34801561064357600080fd5b50610305611643565b34801561065857600080fd5b506102ad611652565b34801561066d57600080fd5b5061038b61165b565b34801561068257600080fd5b50610347610691366004612776565b611661565b3480156106a257600080fd5b5061034761172f565b3480156106b757600080fd5b506103476106c63660046126fd565b611783565b3480156106d757600080fd5b506102ad6117f9565b3480156106ec57600080fd5b5061038b611807565b34801561070157600080fd5b506102d861180d565b34801561071657600080fd5b506102d8610725366004612939565b61181a565b34801561073657600080fd5b506103476107453660046128f3565b611944565b34801561075657600080fd5b506102ad610765366004612690565b611996565b34801561077657600080fd5b506103476107853660046128f3565b6119c4565b34801561079657600080fd5b506103476107a5366004612676565b611a16565b3480156107b657600080fd5b5061038b6107c5366004612676565b611a84565b3480156107d657600080fd5b50610347611a9f565b3480156107eb57600080fd5b506102d8611afb565b60006001600160e01b0319821663780e9d6360e01b1480610819575061081982611b49565b90505b919050565b6060600080546108309061343e565b80601f016020809104026020016040519081016040528092919081815260200182805461085c9061343e565b80156108a95780601f1061087e576101008083540402835291602001916108a9565b820191906000526020600020905b81548152906001019060200180831161088c57829003601f168201915b5050505050905090565b60006108be82611b89565b6108e35760405162461bcd60e51b81526004016108da90612f8e565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6012805461090c9061343e565b80601f01602080910402602001604051908101604052809291908181526020018280546109389061343e565b80156109855780601f1061095a57610100808354040283529160200191610985565b820191906000526020600020905b81548152906001019060200180831161096857829003601f168201915b505050505081565b6000610998826110e9565b9050806001600160a01b0316836001600160a01b031614156109cc5760405162461bcd60e51b81526004016108da90613174565b806001600160a01b03166109de611ba6565b6001600160a01b031614806109fa57506109fa81610765611ba6565b610a165760405162461bcd60e51b81526004016108da90612e40565b610a208383611baa565b505050565b630a85bd0160e11b5b949350505050565b60085490565b60136020528160005260406000208181548110610a5857600080fd5b600091825260209091206002909102018054600190910154909250905082565b600d54604051636918579d60e11b81526001600160a01b039091169063d230af3a90610aaa9086908690600401612a85565b600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b50505050610a20838383611c18565b6000610af283611208565b8210610b105760405162461bcd60e51b81526004016108da90612b6c565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6040513390610b4d90600c90602001612a62565b604051602081830303815290604052805190602001208484604051602001610b76929190612a15565b6040516020818303038152906040528051906020012014610ba95760405162461bcd60e51b81526004016108da90612e9d565b601054610100900460ff16610bd05760405162461bcd60e51b81526004016108da906130f6565b60105460ff1615610bf35760405162461bcd60e51b81526004016108da90612c86565b60008211610c135760405162461bcd60e51b81526004016108da90612e12565b611e6182610c1f610a36565b610c2991906133b0565b1115610c475760405162461bcd60e51b81526004016108da9061312d565b81600e54610c5591906133dc565b341015610c745760405162461bcd60e51b81526004016108da90612fda565b60005b82811015610c9a57610c8882611c50565b80610c9281613479565b915050610c77565b5050505050565b610ca9611ba6565b6001600160a01b0316610cba6115e1565b6001600160a01b031614610ce05760405162461bcd60e51b81526004016108da90613029565b6010805460ff19811660ff90911615179055565b610cfc611ba6565b6001600160a01b0316610d0d6115e1565b6001600160a01b031614610d335760405162461bcd60e51b81526004016108da90613029565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610a2083838360405180602001604052806000815250611783565b60606000610d7d83611208565b905060008167ffffffffffffffff811115610da857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610dd1578160200160208202803683370190505b50905060005b82811015610e2657610de98582610ae7565b828281518110610e0957634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610e1e81613479565b915050610dd7565b509392505050565b6000610e38610a36565b8210610e565760405162461bcd60e51b81526004016108da90613316565b60088281548110610e7757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600d54600160a01b900460ff1681565b610ea1611ba6565b6001600160a01b0316610eb26115e1565b6001600160a01b031614610ed85760405162461bcd60e51b81526004016108da90613029565b8051610eeb90600f906020840190612536565b5050565b336000818152601360205260408120805484908110610f1e57634e487b7160e01b600052603260045260246000fd5b600091825260208220600290910201805490925090610f3d84866114b7565b90506001811015610f605760405162461bcd60e51b81526004016108da90612d91565b6001600160a01b03841660009081526013602052604090208054610f86906001906133fb565b81548110610fa457634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201925060136000856001600160a01b03166001600160a01b03168152602001908152602001600020805480610ff657634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020906002020160008082016000905560018201600090555050905561103a30858460405180602001604052806000815250611cad565b600d546040516314d2279960e21b81526001600160a01b03909116906353489e649061106d908790600090600401612adc565b600060405180830381600087803b15801561108757600080fd5b505af115801561109b573d6000803e3d6000fd5b50505050836001600160a01b03167f68d4e617c08c77309030c5dbb6f9f3df7aecfdce26f6a1a031a5dd824386bbdf83426040516110da929190613396565b60405180910390a25050505050565b6000818152600260205260408120546001600160a01b0316806108195760405162461bcd60e51b81526004016108da90612f10565b6000811161113e5760405162461bcd60e51b81526004016108da906132c5565b611e618161114a610a36565b61115491906133b0565b11156111725760405162461bcd60e51b81526004016108da9061312d565b3361117b6115e1565b6001600160a01b0316816001600160a01b0316146111e25760105460ff166111b55760405162461bcd60e51b81526004016108da90612d63565b81600e546111c391906133dc565b3410156111e25760405162461bcd60e51b81526004016108da90612fda565b60005b82811015610a20576111f682611c50565b8061120081613479565b9150506111e5565b60006001600160a01b0382166112305760405162461bcd60e51b81526004016108da90612ec6565b506001600160a01b031660009081526003602052604090205490565b611254611ba6565b6001600160a01b03166112656115e1565b6001600160a01b03161461128b5760405162461bcd60e51b81526004016108da90613029565b6112956000611ce6565b565b61129f611ba6565b6001600160a01b03166112b06115e1565b6001600160a01b0316146112d65760405162461bcd60e51b81526004016108da90613029565b611e61816112e2610a36565b6112ec91906133b0565b111561130a5760405162461bcd60e51b81526004016108da906131b5565b806113275760405162461bcd60e51b81526004016108da90613362565b60005b81811015610a2057600083838381811061135457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113699190612676565b6001600160a01b031614156113905760405162461bcd60e51b81526004016108da90612cb1565b6113cd8383838181106113b357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113c89190612676565b611c50565b806113d781613479565b91505061132a565b33806113ea836110e9565b6001600160a01b0316146114105760405162461bcd60e51b81526004016108da90613208565b61142b81308460405180602001604052806000815250611cad565b6114336125ba565b8281524260208083018281526001600160a01b038516600081815260138452604080822080546001818101835591845295909220875160029096020194855592519301929092555190917f9c49ec62644ee6558d56cf91d8772f33ea6db879a8ef72ef41c308327a981aa6916114aa918791613396565b60405180910390a2505050565b6001600160a01b03821660009081526013602052604081208054620151809190849081106114f557634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101544261151291906133fb565b61151c91906133c8565b9392505050565b61152b611ba6565b6001600160a01b031661153c6115e1565b6001600160a01b0316146115625760405162461bcd60e51b81526004016108da90613029565b6000336001600160a01b03164760405161157b90612a6e565b60006040518083038185875af1925050503d80600081146115b8576040519150601f19603f3d011682016040523d82523d6000602084013e6115bd565b606091505b50509050806115de5760405162461bcd60e51b81526004016108da9061324a565b50565b600a546001600160a01b031690565b6115f8611ba6565b6001600160a01b03166116096115e1565b6001600160a01b03161461162f5760405162461bcd60e51b81526004016108da90613029565b600e55565b6060600180546108309061343e565b600d546001600160a01b031681565b60105460ff1681565b600e5481565b611669611ba6565b6001600160a01b0316826001600160a01b0316141561169a5760405162461bcd60e51b81526004016108da90612d2c565b80600560006116a7611ba6565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556116eb611ba6565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117239190612b39565b60405180910390a35050565b611737611ba6565b6001600160a01b03166117486115e1565b6001600160a01b03161461176e5760405162461bcd60e51b81526004016108da90613029565b600d805460ff60a01b1916600160a01b179055565b600d54604051636918579d60e11b81526001600160a01b039091169063d230af3a906117b59087908790600401612a85565b600060405180830381600087803b1580156117cf57600080fd5b505af11580156117e3573d6000803e3d6000fd5b505050506117f384848484611cad565b50505050565b601054610100900460ff1681565b611e6181565b6011805461090c9061343e565b606061182582611b89565b6118415760405162461bcd60e51b81526004016108da906130a7565b600d54600160a01b900460ff166118e4576012805461185f9061343e565b80601f016020809104026020016040519081016040528092919081815260200182805461188b9061343e565b80156118d85780601f106118ad576101008083540402835291602001916118d8565b820191906000526020600020905b8154815290600101906020018083116118bb57829003601f168201915b5050505050905061081c565b60006118ee611d38565b9050600081511161190e576040518060200160405280600081525061193c565b8061191884611d47565b601160405160200161192c93929190612a25565b6040516020818303038152906040525b91505061081c565b61194c611ba6565b6001600160a01b031661195d6115e1565b6001600160a01b0316146119835760405162461bcd60e51b81526004016108da90613029565b8051610eeb90600c906020840190612536565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6119cc611ba6565b6001600160a01b03166119dd6115e1565b6001600160a01b031614611a035760405162461bcd60e51b81526004016108da90613029565b8051610eeb906012906020840190612536565b611a1e611ba6565b6001600160a01b0316611a2f6115e1565b6001600160a01b031614611a555760405162461bcd60e51b81526004016108da90613029565b6001600160a01b038116611a7b5760405162461bcd60e51b81526004016108da90612c09565b6115de81611ce6565b6001600160a01b031660009081526013602052604090205490565b611aa7611ba6565b6001600160a01b0316611ab86115e1565b6001600160a01b031614611ade5760405162461bcd60e51b81526004016108da90613029565b6010805461ff001981166101009182900460ff1615909102179055565b6060611b05611ba6565b6001600160a01b0316611b166115e1565b6001600160a01b031614611b3c5760405162461bcd60e51b81526004016108da90613029565b600c80546108309061343e565b60006001600160e01b031982166380ac58cd60e01b1480611b7a57506001600160e01b03198216635b5e139f60e01b145b80610819575061081982611e62565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611bdf826110e9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611c29611c23611ba6565b82611e7b565b611c455760405162461bcd60e51b81526004016108da90613274565b610a20838383611ef8565b611c5a600b612025565b6000611c66600b61202e565b9050611c728282612032565b7f0bbf17f27d3d5fd87e2d4bc3ba5668100eb9aca29543d28fcb16e6c6fd6cd77781604051611ca1919061338d565b60405180910390a15050565b611cbe611cb8611ba6565b83611e7b565b611cda5760405162461bcd60e51b81526004016108da90613274565b6117f38484848461204c565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060600f80546108309061343e565b606081611d6c57506040805180820190915260018152600360fc1b602082015261081c565b8160005b8115611d965780611d8081613479565b9150611d8f9050600a836133c8565b9150611d70565b60008167ffffffffffffffff811115611dbf57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611de9576020820181803683370190505b5090505b8415610a2e57611dfe6001836133fb565b9150611e0b600a86613494565b611e169060306133b0565b60f81b818381518110611e3957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611e5b600a866133c8565b9450611ded565b6001600160e01b031981166301ffc9a760e01b14919050565b6000611e8682611b89565b611ea25760405162461bcd60e51b81526004016108da90612dc6565b6000611ead836110e9565b9050806001600160a01b0316846001600160a01b03161480611ee85750836001600160a01b0316611edd846108b3565b6001600160a01b0316145b80610a2e5750610a2e8185611996565b826001600160a01b0316611f0b826110e9565b6001600160a01b031614611f315760405162461bcd60e51b81526004016108da9061305e565b6001600160a01b038216611f575760405162461bcd60e51b81526004016108da90612ce8565b611f6283838361207f565b611f6d600082611baa565b6001600160a01b0383166000908152600360205260408120805460019290611f969084906133fb565b90915550506001600160a01b0382166000908152600360205260408120805460019290611fc49084906133b0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b80546001019055565b5490565b610eeb828260405180602001604052806000815250612108565b612057848484611ef8565b6120638484848461213b565b6117f35760405162461bcd60e51b81526004016108da90612bb7565b61208a838383610a20565b6001600160a01b0383166120a6576120a181612253565b6120c9565b816001600160a01b0316836001600160a01b0316146120c9576120c98382612297565b6001600160a01b0382166120e5576120e081612334565b610a20565b826001600160a01b0316826001600160a01b031614610a2057610a20828261240d565b6121128383612451565b61211f600084848461213b565b610a205760405162461bcd60e51b81526004016108da90612bb7565b600061214f846001600160a01b0316612530565b1561224b57836001600160a01b031663150b7a0261216b611ba6565b8786866040518563ffffffff1660e01b815260040161218d9493929190612a9f565b602060405180830381600087803b1580156121a757600080fd5b505af19250505080156121d7575060408051601f3d908101601f191682019092526121d491810190612864565b60015b612231573d808015612205576040519150601f19603f3d011682016040523d82523d6000602084013e61220a565b606091505b5080516122295760405162461bcd60e51b81526004016108da90612bb7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a2e565b506001610a2e565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b600060016122a484611208565b6122ae91906133fb565b600083815260076020526040902054909150808214612301576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612346906001906133fb565b6000838152600960205260408120546008805493945090928490811061237c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600883815481106123ab57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806123f157634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061241883611208565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166124775760405162461bcd60e51b81526004016108da90612f59565b61248081611b89565b1561249d5760405162461bcd60e51b81526004016108da90612c4f565b6124a96000838361207f565b6001600160a01b03821660009081526003602052604081208054600192906124d29084906133b0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b8280546125429061343e565b90600052602060002090601f01602090048101928261256457600085556125aa565b82601f1061257d57805160ff19168380011785556125aa565b828001600101855582156125aa579182015b828111156125aa57825182559160200191906001019061258f565b506125b69291506125d4565b5090565b604051806040016040528060008152602001600081525090565b5b808211156125b657600081556001016125d5565b600067ffffffffffffffff80841115612604576126046134d4565b604051601f8501601f19908116603f0116810190828211818310171561262c5761262c6134d4565b8160405280935085815286868601111561264557600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461081c57600080fd5b600060208284031215612687578081fd5b61151c8261265f565b600080604083850312156126a2578081fd5b6126ab8361265f565b91506126b96020840161265f565b90509250929050565b6000806000606084860312156126d6578081fd5b6126df8461265f565b92506126ed6020850161265f565b9150604084013590509250925092565b60008060008060808587031215612712578081fd5b61271b8561265f565b93506127296020860161265f565b925060408501359150606085013567ffffffffffffffff81111561274b578182fd5b8501601f8101871361275b578182fd5b61276a878235602084016125e9565b91505092959194509250565b60008060408385031215612788578182fd5b6127918361265f565b9150602083013580151581146127a5578182fd5b809150509250929050565b600080604083850312156127c2578182fd5b6127cb8361265f565b946020939093013593505050565b600080602083850312156127eb578182fd5b823567ffffffffffffffff80821115612802578384fd5b818501915085601f830112612815578384fd5b813581811115612823578485fd5b8660208083028501011115612836578485fd5b60209290920196919550909350505050565b600060208284031215612859578081fd5b813561151c816134ea565b600060208284031215612875578081fd5b815161151c816134ea565b600080600060408486031215612894578283fd5b833567ffffffffffffffff808211156128ab578485fd5b818601915086601f8301126128be578485fd5b8135818111156128cc578586fd5b8760208285010111156128dd578586fd5b6020928301989097509590910135949350505050565b600060208284031215612904578081fd5b813567ffffffffffffffff81111561291a578182fd5b8201601f8101841361292a578182fd5b610a2e848235602084016125e9565b60006020828403121561294a578081fd5b5035919050565b60008151808452612969816020860160208601613412565b601f01601f19169290920160200192915050565b80546000906002810460018083168061299757607f831692505b60208084108214156129b757634e487b7160e01b86526022600452602486fd5b8180156129cb57600181146129dc57612a09565b60ff19861689528489019650612a09565b6129e5886133a4565b60005b86811015612a015781548b8201529085019083016129e8565b505084890196505b50505050505092915050565b6000828483379101908152919050565b60008451612a37818460208901613412565b845190830190612a4b818360208901613412565b612a578183018661297d565b979650505050505050565b600061151c828461297d565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ad290830184612951565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015612b2d57835183529284019291840191600101612b11565b50909695505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60006020825261151c6020830184612951565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260119082015270141c995cd85b19481a5cc818db1bdcd959607a1b604082015260600190565b60208082526017908201527f41697264726f7020746f204e756c6c2061646472657373000000000000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526014908201527314d85b19481a5cc81b9bdd081bdc195b881e595d60621b604082015260600190565b6020808252818101527f596f752063616e206e6f7420756e7374616b65206265666f7265203120646179604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526014908201527343616e2774206d696e74203020447261676f6e7360601b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252600f908201526e139bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252602f908201527f45746865722073656e7420776974682074686973207472616e73616374696f6e60408201526e081a5cc81b9bdd0818dbdc9c9958dd608a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526017908201527f50726573616c65206973206e6f74206f70656e20796574000000000000000000604082015260600190565b60208082526027908201527f45786365656473206d6178696d756d20737570706c79206f66204c75636b7920604082015266447261676f6e7360c81b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526033908201527f41697264726f702077696c6c20657863656564206d6178696d756d20737570706040820152726c79206f66204c75636b7920447261676f6e7360681b606082015260800190565b60208082526022908201527f43616c6c6572206973206e6f7420746865206f776e6572206f6620746865204e604082015261119560f21b606082015260800190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526031908201527f4d696e696d756d203120447261676f6e2068617320746f206265206d696e746560408201527032103832b9103a3930b739b0b1ba34b7b760791b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b6020808252601190820152701059191c995cdcc81b9bdd08199bdd5b99607a1b604082015260600190565b90815260200190565b918252602082015260400190565b60009081526020902090565b600082198211156133c3576133c36134a8565b500190565b6000826133d7576133d76134be565b500490565b60008160001904831182151516156133f6576133f66134a8565b500290565b60008282101561340d5761340d6134a8565b500390565b60005b8381101561342d578181015183820152602001613415565b838111156117f35750506000910152565b60028104600182168061345257607f821691505b6020821081141561347357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561348d5761348d6134a8565b5060010190565b6000826134a3576134a36134be565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146115de57600080fdfea2646970667358221220b37e263dab5abc9d31be64d81ce90d3b68389ef236dd0b7e2ab16e7843639cec64736f6c63430008010033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d57456e4732474a327a766e71623743715a6e38654b566831557156567162796e6d50357955676b696a35564e00000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _initNotRevealedUri (string): https://gateway.pinata.cloud/ipfs/QmWEnG2GJ2zvnqb7CqZn8eKVh1UqVVqbynmP5yUgkij5VN

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d57456e4732474a327a766e71623743715a6e38654b56683155715656
Arg [4] : 7162796e6d50357955676b696a35564e00000000000000000000000000000000


Deployed Bytecode Sourcemap

45047:8418:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38904:300;;;;;;;;;;-1:-1:-1;38904:300:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27000:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28563:308::-;;;;;;;;;;-1:-1:-1;28563:308:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45592:28::-;;;;;;;;;;;;;:::i;28086:411::-;;;;;;;;;;-1:-1:-1;28086:411:0;;;;;:::i;:::-;;:::i;:::-;;53256:206;;;;;;;;;;-1:-1:-1;53256:206:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39707:113::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;45716:46::-;;;;;;;;;;-1:-1:-1;45716:46:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;50946:214::-;;;;;;;;;;-1:-1:-1;50946:214:0;;;;;:::i;:::-;;:::i;39288:343::-;;;;;;;;;;-1:-1:-1;39288:343:0;;;;;:::i;:::-;;:::i;49094:880::-;;;;;;:::i;:::-;;:::i;47872:83::-;;;;;;;;;;;;;:::i;48247:109::-;;;;;;;;;;-1:-1:-1;48247:109:0;;;;;:::i;:::-;;:::i;30069:185::-;;;;;;;;;;-1:-1:-1;30069:185:0;;;;;:::i;:::-;;:::i;47010:385::-;;;;;;;;;;-1:-1:-1;47010:385:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39897:320::-;;;;;;;;;;-1:-1:-1;39897:320:0;;;;;:::i;:::-;;:::i;45269:28::-;;;;;;;;;;;;;:::i;47403:101::-;;;;;;;;;;-1:-1:-1;47403:101:0;;;;;:::i;:::-;;:::i;52207:816::-;;;;;;;;;;-1:-1:-1;52207:816:0;;;;;:::i;:::-;;:::i;26607:326::-;;;;;;;;;;-1:-1:-1;26607:326:0;;;;;:::i;:::-;;:::i;50006:726::-;;;;;;:::i;:::-;;:::i;26250:295::-;;;;;;;;;;-1:-1:-1;26250:295:0;;;;;:::i;:::-;;:::i;9739:94::-;;;;;;;;;;;;;:::i;48603:483::-;;;;;;;;;;-1:-1:-1;48603:483:0;;;;;:::i;:::-;;:::i;51432:602::-;;;;;;;;;;-1:-1:-1;51432:602:0;;;;;:::i;:::-;;:::i;53031:215::-;;;;;;;;;;-1:-1:-1;53031:215:0;;;;;:::i;:::-;;:::i;48063:176::-;;;;;;;;;;;;;:::i;9088:87::-;;;;;;;;;;;;;:::i;47646:92::-;;;;;;;;;;-1:-1:-1;47646:92:0;;;;;:::i;:::-;;:::i;27169:104::-;;;;;;;;;;;;;:::i;45237:25::-;;;;;;;;;;;;;:::i;45469:28::-;;;;;;;;;;;;;:::i;45351:40::-;;;;;;;;;;;;;:::i;28943:327::-;;;;;;;;;;-1:-1:-1;28943:327:0;;;;;:::i;:::-;;:::i;47746:71::-;;;;;;;;;;;;;:::i;51168:256::-;;;;;;;;;;-1:-1:-1;51168:256:0;;;;;:::i;:::-;;:::i;45504:31::-;;;;;;;;;;;;;:::i;45306:38::-;;;;;;;;;;;;;:::i;45548:37::-;;;;;;;;;;;;;:::i;46339:614::-;;;;;;;;;;-1:-1:-1;46339:614:0;;;;;:::i;:::-;;:::i;48481:114::-;;;;;;;;;;-1:-1:-1;48481:114:0;;;;;:::i;:::-;;:::i;29341:214::-;;;;;;;;;;-1:-1:-1;29341:214:0;;;;;:::i;:::-;;:::i;47512:126::-;;;;;;;;;;-1:-1:-1;47512:126:0;;;;;:::i;:::-;;:::i;9988:229::-;;;;;;;;;;-1:-1:-1;9988:229:0;;;;;:::i;:::-;;:::i;52042:157::-;;;;;;;;;;-1:-1:-1;52042:157:0;;;;;:::i;:::-;;:::i;47963:92::-;;;;;;;;;;;;;:::i;48364:109::-;;;;;;;;;;;;;:::i;38904:300::-;39051:4;-1:-1:-1;;;;;;39093:50:0;;-1:-1:-1;;;39093:50:0;;:103;;;39160:36;39184:11;39160:23;:36::i;:::-;39073:123;;38904:300;;;;:::o;27000:100::-;27054:13;27087:5;27080:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27000:100;:::o;28563:308::-;28684:7;28731:16;28739:7;28731;:16::i;:::-;28709:110;;;;-1:-1:-1;;;28709:110:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;28839:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28839:24:0;;28563:308::o;45592:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28086:411::-;28167:13;28183:23;28198:7;28183:14;:23::i;:::-;28167:39;;28231:5;-1:-1:-1;;;;;28225:11:0;:2;-1:-1:-1;;;;;28225:11:0;;;28217:57;;;;-1:-1:-1;;;28217:57:0;;;;;;;:::i;:::-;28325:5;-1:-1:-1;;;;;28309:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;28309:21:0;;:62;;;;28334:37;28351:5;28358:12;:10;:12::i;28334:37::-;28287:168;;;;-1:-1:-1;;;28287:168:0;;;;;;;:::i;:::-;28468:21;28477:2;28481:7;28468:8;:21::i;:::-;28086:411;;;:::o;53256:206::-;-1:-1:-1;;;53256:206:0;;;;;;;:::o;39707:113::-;39795:10;:17;39707:113;:::o;45716:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45716:46:0;-1:-1:-1;45716:46:0;:::o;50946:214::-;51072:8;;:31;;-1:-1:-1;;;51072:31:0;;-1:-1:-1;;;;;51072:8:0;;;;:21;;:31;;51094:4;;51100:2;;51072:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51114:38;51134:4;51140:2;51144:7;51114:19;:38::i;39288:343::-;39430:7;39485:23;39502:5;39485:16;:23::i;:::-;39477:5;:31;39455:124;;;;-1:-1:-1;;;39455:124:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;39597:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;39288:343::o;49094:880::-;49315:29;;49221:10;;49315:29;;49332:11;;49315:29;;;:::i;:::-;;;;;;;;;;;;;49305:40;;;;;;49293:6;;49276:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49266:35;;;;;;:79;49242:147;;;;-1:-1:-1;;;49242:147:0;;;;;;;:::i;:::-;49417:11;;;;;;;49409:47;;;;-1:-1:-1;;;49409:47:0;;;;;;;:::i;:::-;49476:8;;;;49475:9;49467:39;;;;-1:-1:-1;;;49467:39:0;;;;;;;:::i;:::-;49550:1;49541:6;:10;49519:80;;;;-1:-1:-1;;;49519:80:0;;;;;;;:::i;:::-;45340:4;49650:6;49634:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:33;;49612:122;;;;-1:-1:-1;;;49612:122:0;;;;;;;:::i;:::-;49798:6;49790:5;;:14;;;;:::i;:::-;49777:9;:27;;49755:124;;;;-1:-1:-1;;;49755:124:0;;;;;;;:::i;:::-;49897:9;49892:75;49916:6;49912:1;:10;49892:75;;;49944:11;49950:4;49944:5;:11::i;:::-;49924:3;;;;:::i;:::-;;;;49892:75;;;;49094:880;;;;:::o;47872:83::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;47939:8:::1;::::0;;-1:-1:-1;;47927:20:0;::::1;47939:8;::::0;;::::1;47938:9;47927:20;::::0;;47872:83::o;48247:109::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;48317:8:::1;:31:::0;;-1:-1:-1;;;;;;48317:31:0::1;-1:-1:-1::0;;;;;48317:31:0;;;::::1;::::0;;;::::1;::::0;;48247:109::o;30069:185::-;30207:39;30224:4;30230:2;30234:7;30207:39;;;;;;;;;;;;:16;:39::i;47010:385::-;47099:16;47133:18;47154:17;47164:6;47154:9;:17::i;:::-;47133:38;;47184:25;47226:10;47212:25;;;;;;-1:-1:-1;;;47212:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47212:25:0;;47184:53;;47253:9;47248:112;47272:10;47268:1;:14;47248:112;;;47318:30;47338:6;47346:1;47318:19;:30::i;:::-;47304:8;47313:1;47304:11;;;;;;-1:-1:-1;;;47304:11:0;;;;;;;;;;;;;;;;;;:44;47284:3;;;;:::i;:::-;;;;47248:112;;;-1:-1:-1;47379:8:0;47010:385;-1:-1:-1;;;47010:385:0:o;39897:320::-;40017:7;40072:30;:28;:30::i;:::-;40064:5;:38;40042:132;;;;-1:-1:-1;;;40042:132:0;;;;;;;:::i;:::-;40192:10;40203:5;40192:17;;;;;;-1:-1:-1;;;40192:17:0;;;;;;;;;;;;;;;;;40185:24;;39897:320;;;:::o;45269:28::-;;;-1:-1:-1;;;45269:28:0;;;;;:::o;47403:101::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;47474:22;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;47403:101:::0;:::o;52207:816::-;52279:10;52260:16;52331:18;;;:8;:18;;;;;:26;;52350:6;;52331:26;;;;-1:-1:-1;;;52331:26:0;;;;;;;;;;;;;;;;;;;;;52387:20;;52331:26;;-1:-1:-1;52387:20:0;52450:78;52488:8;52511:6;52450:23;:78::i;:::-;52418:110;;52586:1;52561:21;:26;;52539:108;;;;-1:-1:-1;;;52539:108:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52672:18:0;;;;;;:8;:18;;;;;52691:25;;:29;;52719:1;;52691:29;:::i;:::-;52672:49;;;;;;-1:-1:-1;;;52672:49:0;;;;;;;;;;;;;;;;;;;52658:63;;52732:8;:18;52741:8;-1:-1:-1;;;;;52732:18:0;-1:-1:-1;;;;;52732:18:0;;;;;;;;;;;;:24;;;;;-1:-1:-1;;;52732:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52769:62;52801:4;52808:8;52818;52769:62;;;;;;;;;;;;:23;:62::i;:::-;52853:8;;:40;;-1:-1:-1;;;52853:40:0;;-1:-1:-1;;;;;52853:8:0;;;;:27;;:40;;52881:8;;52853;;:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52943:8;-1:-1:-1;;;;;52909:106:0;;52966:8;52989:15;52909:106;;;;;;;:::i;:::-;;;;;;;;52207:816;;;;;:::o;26607:326::-;26724:7;26765:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26765:16:0;26814:19;26792:110;;;;-1:-1:-1;;;26792:110:0;;;;;;;:::i;50006:726::-;50106:1;50097:6;:10;50075:109;;;;-1:-1:-1;;;50075:109:0;;;;;;;:::i;:::-;45340:4;50235:6;50219:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:33;;50197:122;;;;-1:-1:-1;;;50197:122:0;;;;;;;:::i;:::-;50355:10;50387:7;:5;:7::i;:::-;-1:-1:-1;;;;;50380:14:0;:3;-1:-1:-1;;;;;50380:14:0;;50376:265;;50419:8;;;;50411:41;;;;-1:-1:-1;;;50411:41:0;;;;;;;:::i;:::-;50540:6;50532:5;;:14;;;;:::i;:::-;50519:9;:27;;50493:136;;;;-1:-1:-1;;;50493:136:0;;;;;;;:::i;:::-;50656:9;50651:74;50675:6;50671:1;:10;50651:74;;;50703:10;50709:3;50703:5;:10::i;:::-;50683:3;;;;:::i;:::-;;;;50651:74;;26250:295;26367:7;-1:-1:-1;;;;;26414:19:0;;26392:111;;;;-1:-1:-1;;;26392:111:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;26521:16:0;;;;;:9;:16;;;;;;;26250:295::o;9739:94::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;9804:21:::1;9822:1;9804:9;:21::i;:::-;9739:94::o:0;48603:483::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;45340:4:::1;48720:11:::0;48704:13:::1;:11;:13::i;:::-;:34;;;;:::i;:::-;:45;;48682:146;;;;-1:-1:-1::0;;;48682:146:0::1;;;;;;;:::i;:::-;48847:23:::0;48839:53:::1;;;;-1:-1:-1::0;;;48839:53:0::1;;;;;;;:::i;:::-;48908:9;48903:176;48923:22:::0;;::::1;48903:176;;;49001:1;48975:11:::0;;48987:1;48975:14;;::::1;;;-1:-1:-1::0;;;48975:14:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48975:28:0::1;;;48967:64;;;;-1:-1:-1::0;;;48967:64:0::1;;;;;;;:::i;:::-;49046:21;49052:11;;49064:1;49052:14;;;;;-1:-1:-1::0;;;49052:14:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49046:5;:21::i;:::-;48947:3:::0;::::1;::::0;::::1;:::i;:::-;;;;48903:176;;51432:602:::0;51514:10;;51557:18;51565:9;51557:7;:18::i;:::-;-1:-1:-1;;;;;51557:28:0;;51535:112;;;;-1:-1:-1;;;51535:112:0;;;;;;;:::i;:::-;51666:61;51690:6;51706:4;51713:9;51666:61;;;;;;;;;;;;:23;:61::i;:::-;51740:27;;:::i;:::-;51778:32;;;51845:15;51821:21;;;;:39;;;-1:-1:-1;;;;;51871:16:0;;51778:20;51871:16;;;:8;:16;;;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51923:103;51871:16;;51923:103;;;;51801:9;;51923:103;:::i;:::-;;;;;;;;51432:602;;;:::o;53031:215::-;-1:-1:-1;;;;;53195:16:0;;53144:7;53195:16;;;:8;:16;;;;;:24;;53233:5;;53195:16;53212:6;;53195:24;;;;-1:-1:-1;;;53195:24:0;;;;;;;;;;;;;;;;;;;:34;;;53177:15;:52;;;;:::i;:::-;53176:62;;;;:::i;:::-;53169:69;53031:215;-1:-1:-1;;;53031:215:0:o;48063:176::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;48117:12:::1;48135:10;-1:-1:-1::0;;;;;48135:15:0::1;48158:21;48135:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48116:68;;;48203:7;48195:36;;;;-1:-1:-1::0;;;48195:36:0::1;;;;;;;:::i;:::-;9379:1;48063:176::o:0;9088:87::-;9161:6;;-1:-1:-1;;;;;9161:6:0;9088:87;:::o;47646:92::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;47713:5:::1;:17:::0;47646:92::o;27169:104::-;27225:13;27258:7;27251:14;;;;;:::i;45237:25::-;;;-1:-1:-1;;;;;45237:25:0;;:::o;45469:28::-;;;;;;:::o;45351:40::-;;;;:::o;28943:327::-;29090:12;:10;:12::i;:::-;-1:-1:-1;;;;;29078:24:0;:8;-1:-1:-1;;;;;29078:24:0;;;29070:62;;;;-1:-1:-1;;;29070:62:0;;;;;;;:::i;:::-;29190:8;29145:18;:32;29164:12;:10;:12::i;:::-;-1:-1:-1;;;;;29145:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;29145:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;29145:53:0;;;;;;;;;;;29229:12;:10;:12::i;:::-;-1:-1:-1;;;;;29214:48:0;;29253:8;29214:48;;;;;;:::i;:::-;;;;;;;;28943:327;;:::o;47746:71::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;47794:8:::1;:15:::0;;-1:-1:-1;;;;47794:15:0::1;-1:-1:-1::0;;;47794:15:0::1;::::0;;47746:71::o;51168:256::-;51326:8;;:31;;-1:-1:-1;;;51326:31:0;;-1:-1:-1;;;;;51326:8:0;;;;:21;;:31;;51348:4;;51354:2;;51326:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51368:48;51392:4;51398:2;51402:7;51411:4;51368:23;:48::i;:::-;51168:256;;;;:::o;45504:31::-;;;;;;;;;:::o;45306:38::-;45340:4;45306:38;:::o;45548:37::-;;;;;;;:::i;46339:614::-;46457:13;46506:16;46514:7;46506;:16::i;:::-;46488:105;;;;-1:-1:-1;;;46488:105:0;;;;;;;:::i;:::-;46611:8;;-1:-1:-1;;;46611:8:0;;;;46606:340;;46639:14;46632:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46606:340;46682:28;46713:10;:8;:10::i;:::-;46682:41;;46785:1;46760:14;46754:28;:32;:180;;;;;;;;;;;;;;;;;46844:14;46860:25;46877:7;46860:16;:25::i;:::-;46887:13;46827:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46754:180;46734:200;;;;;48481:114;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;48561:26;;::::1;::::0;:11:::1;::::0;:26:::1;::::0;::::1;::::0;::::1;:::i;29341:214::-:0;-1:-1:-1;;;;;29512:25:0;;;29483:4;29512:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29341:214::o;47512:126::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;47598:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;9988:229::-:0;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10091:22:0;::::1;10069:110;;;;-1:-1:-1::0;;;10069:110:0::1;;;;;;;:::i;:::-;10190:19;10200:8;10190:9;:19::i;52042:157::-:0;-1:-1:-1;;;;;52168:16:0;52136:7;52168:16;;;:8;:16;;;;;:23;;52042:157::o;47963:92::-;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;48036:11:::1;::::0;;-1:-1:-1;;48021:26:0;::::1;48036:11;::::0;;;::::1;;;48035:12;48021:26:::0;;::::1;;::::0;;47963:92::o;48364:109::-;48421:13;9319:12;:10;:12::i;:::-;-1:-1:-1;;;;;9308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;9308:23:0;;9300:68;;;;-1:-1:-1;;;9300:68:0;;;;;;;:::i;:::-;48454:11:::1;48447:18;;;;;:::i;25831:355::-:0;25978:4;-1:-1:-1;;;;;;26020:40:0;;-1:-1:-1;;;26020:40:0;;:105;;-1:-1:-1;;;;;;;26077:48:0;;-1:-1:-1;;;26077:48:0;26020:105;:158;;;;26142:36;26166:11;26142:23;:36::i;32237:127::-;32302:4;32326:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32326:16:0;:30;;;32237:127::o;2061:98::-;2141:10;2061:98;:::o;36360:174::-;36435:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36435:29:0;-1:-1:-1;;;;;36435:29:0;;;;;;;;:24;;36489:23;36435:24;36489:14;:23::i;:::-;-1:-1:-1;;;;;36480:46:0;;;;;;;;;;;36360:174;;:::o;29622:376::-;29831:41;29850:12;:10;:12::i;:::-;29864:7;29831:18;:41::i;:::-;29809:140;;;;-1:-1:-1;;;29809:140:0;;;;;;;:::i;:::-;29962:28;29972:4;29978:2;29982:7;29962:9;:28::i;50740:198::-;50787:20;:8;:18;:20::i;:::-;50818:15;50836:18;:8;:16;:18::i;:::-;50818:36;;50865:23;50875:3;50880:7;50865:9;:23::i;:::-;50904:26;50922:7;50904:26;;;;;;:::i;:::-;;;;;;;;50740:198;;:::o;30325:365::-;30514:41;30533:12;:10;:12::i;:::-;30547:7;30514:18;:41::i;:::-;30492:140;;;;-1:-1:-1;;;30492:140:0;;;;;;;:::i;:::-;30643:39;30657:4;30663:2;30667:7;30676:5;30643:13;:39::i;10225:173::-;10300:6;;;-1:-1:-1;;;;;10317:17:0;;;-1:-1:-1;;;;;;10317:17:0;;;;;;;10350:40;;10300:6;;;10317:17;10300:6;;10350:40;;10281:16;;10350:40;10225:173;;:::o;46218:113::-;46278:13;46311:12;46304:19;;;;;:::i;12730:723::-;12786:13;13007:10;13003:53;;-1:-1:-1;13034:10:0;;;;;;;;;;;;-1:-1:-1;;;13034:10:0;;;;;;13003:53;13081:5;13066:12;13122:78;13129:9;;13122:78;;13155:8;;;;:::i;:::-;;-1:-1:-1;13178:10:0;;-1:-1:-1;13186:2:0;13178:10;;:::i;:::-;;;13122:78;;;13210:19;13242:6;13232:17;;;;;;-1:-1:-1;;;13232:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13232:17:0;;13210:39;;13260:154;13267:10;;13260:154;;13294:11;13304:1;13294:11;;:::i;:::-;;-1:-1:-1;13363:10:0;13371:2;13363:5;:10;:::i;:::-;13350:24;;:2;:24;:::i;:::-;13337:39;;13320:6;13327;13320:14;;;;;;-1:-1:-1;;;13320:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;13320:56:0;;;;;;;;-1:-1:-1;13391:11:0;13400:2;13391:11;;:::i;:::-;;;13260:154;;12209:207;-1:-1:-1;;;;;;12368:40:0;;-1:-1:-1;;;12368:40:0;12209:207;;;:::o;32531:452::-;32660:4;32704:16;32712:7;32704;:16::i;:::-;32682:110;;;;-1:-1:-1;;;32682:110:0;;;;;;;:::i;:::-;32803:13;32819:23;32834:7;32819:14;:23::i;:::-;32803:39;;32872:5;-1:-1:-1;;;;;32861:16:0;:7;-1:-1:-1;;;;;32861:16:0;;:64;;;;32918:7;-1:-1:-1;;;;;32894:31:0;:20;32906:7;32894:11;:20::i;:::-;-1:-1:-1;;;;;32894:31:0;;32861:64;:113;;;;32942:32;32959:5;32966:7;32942:16;:32::i;35627:615::-;35800:4;-1:-1:-1;;;;;35773:31:0;:23;35788:7;35773:14;:23::i;:::-;-1:-1:-1;;;;;35773:31:0;;35751:122;;;;-1:-1:-1;;;35751:122:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35892:16:0;;35884:65;;;;-1:-1:-1;;;35884:65:0;;;;;;;:::i;:::-;35962:39;35983:4;35989:2;35993:7;35962:20;:39::i;:::-;36066:29;36083:1;36087:7;36066:8;:29::i;:::-;-1:-1:-1;;;;;36108:15:0;;;;;;:9;:15;;;;;:20;;36127:1;;36108:15;:20;;36127:1;;36108:20;:::i;:::-;;;;-1:-1:-1;;;;;;;36139:13:0;;;;;;:9;:13;;;;;:18;;36156:1;;36139:13;:18;;36156:1;;36139:18;:::i;:::-;;;;-1:-1:-1;;36168:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36168:21:0;-1:-1:-1;;;;;36168:21:0;;;;;;;;;36207:27;;36168:16;;36207:27;;;;;;;35627:615;;;:::o;970:127::-;1059:19;;1077:1;1059:19;;;970:127::o;848:114::-;940:14;;848:114::o;33325:110::-;33401:26;33411:2;33415:7;33401:26;;;;;;;;;;;;:9;:26::i;31572:352::-;31729:28;31739:4;31745:2;31749:7;31729:9;:28::i;:::-;31790:48;31813:4;31819:2;31823:7;31832:5;31790:22;:48::i;:::-;31768:148;;;;-1:-1:-1;;;31768:148:0;;;;;;;:::i;40325:589::-;40469:45;40496:4;40502:2;40506:7;40469:26;:45::i;:::-;-1:-1:-1;;;;;40531:18:0;;40527:187;;40566:40;40598:7;40566:31;:40::i;:::-;40527:187;;;40636:2;-1:-1:-1;;;;;40628:10:0;:4;-1:-1:-1;;;;;40628:10:0;;40624:90;;40655:47;40688:4;40694:7;40655:32;:47::i;:::-;-1:-1:-1;;;;;40728:16:0;;40724:183;;40761:45;40798:7;40761:36;:45::i;:::-;40724:183;;;40834:4;-1:-1:-1;;;;;40828:10:0;:2;-1:-1:-1;;;;;40828:10:0;;40824:83;;40855:40;40883:2;40887:7;40855:27;:40::i;33662:321::-;33792:18;33798:2;33802:7;33792:5;:18::i;:::-;33843:54;33874:1;33878:2;33882:7;33891:5;33843:22;:54::i;:::-;33821:154;;;;-1:-1:-1;;;33821:154:0;;;;;;;:::i;36733:984::-;36888:4;36909:15;:2;-1:-1:-1;;;;;36909:13:0;;:15::i;:::-;36905:805;;;36978:2;-1:-1:-1;;;;;36962:36:0;;37021:12;:10;:12::i;:::-;37056:4;37083:7;37113:5;36962:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36962:175:0;;;;;;;;-1:-1:-1;;36962:175:0;;;;;;;;;;;;:::i;:::-;;;36941:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37324:13:0;;37320:320;;37367:108;;-1:-1:-1;;;37367:108:0;;;;;;;:::i;37320:320::-;37590:6;37584:13;37575:6;37571:2;37567:15;37560:38;36941:714;-1:-1:-1;;;;;;37201:55:0;-1:-1:-1;;;37201:55:0;;-1:-1:-1;37194:62:0;;36905:805;-1:-1:-1;37694:4:0;37687:11;;41637:164;41741:10;:17;;41714:24;;;;:15;:24;;;;;:44;;;41769:24;;;;;;;;;;;;41637:164::o;42428:1002::-;42708:22;42758:1;42733:22;42750:4;42733:16;:22::i;:::-;:26;;;;:::i;:::-;42770:18;42791:26;;;:17;:26;;;;;;42708:51;;-1:-1:-1;42924:28:0;;;42920:328;;-1:-1:-1;;;;;42991:18:0;;42969:19;42991:18;;;:12;:18;;;;;;;;:34;;;;;;;;;43042:30;;;;;;:44;;;43159:30;;:17;:30;;;;;:43;;;42920:328;-1:-1:-1;43344:26:0;;;;:17;:26;;;;;;;;43337:33;;;-1:-1:-1;;;;;43388:18:0;;;;;:12;:18;;;;;:34;;;;;;;43381:41;42428:1002::o;43725:1079::-;44003:10;:17;43978:22;;44003:21;;44023:1;;44003:21;:::i;:::-;44035:18;44056:24;;;:15;:24;;;;;;44429:10;:26;;43978:46;;-1:-1:-1;44056:24:0;;43978:46;;44429:26;;;;-1:-1:-1;;;44429:26:0;;;;;;;;;;;;;;;;;44407:48;;44493:11;44468:10;44479;44468:22;;;;;;-1:-1:-1;;;44468:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;44573:28;;;:15;:28;;;;;;;:41;;;44745:24;;;;;44738:31;44780:10;:16;;;;;-1:-1:-1;;;44780:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;43725:1079;;;;:::o;41215:221::-;41300:14;41317:20;41334:2;41317:16;:20::i;:::-;-1:-1:-1;;;;;41348:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41393:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;41215:221:0:o;34319:382::-;-1:-1:-1;;;;;34399:16:0;;34391:61;;;;-1:-1:-1;;;34391:61:0;;;;;;;:::i;:::-;34472:16;34480:7;34472;:16::i;:::-;34471:17;34463:58;;;;-1:-1:-1;;;34463:58:0;;;;;;;:::i;:::-;34534:45;34563:1;34567:2;34571:7;34534:20;:45::i;:::-;-1:-1:-1;;;;;34592:13:0;;;;;;:9;:13;;;;;:18;;34609:1;;34592:13;:18;;34609:1;;34592:18;:::i;:::-;;;;-1:-1:-1;;34621:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34621:21:0;-1:-1:-1;;;;;34621:21:0;;;;;;;;34660:33;;34621:16;;;34660:33;;34621:16;;34660:33;34319:382;;:::o;15251:387::-;15574:20;15622:8;;;15251:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:633:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;232:2;226:9;200:2;286:15;;-1:-1:-1;;282:24:1;;;308:2;278:33;274:42;262:55;;;332:18;;;352:22;;;329:46;326:2;;;378:18;;:::i;:::-;418:10;414:2;407:22;447:6;438:15;;477:6;469;462:22;517:3;508:6;503:3;499:16;496:25;493:2;;;534:1;531;524:12;493:2;584:6;579:3;572:4;564:6;560:17;547:44;639:1;632:4;623:6;615;611:19;607:30;600:41;;;;90:557;;;;;:::o;652:175::-;722:20;;-1:-1:-1;;;;;771:31:1;;761:42;;751:2;;817:1;814;807:12;832:198;;944:2;932:9;923:7;919:23;915:32;912:2;;;965:6;957;950:22;912:2;993:31;1014:9;993:31;:::i;1035:274::-;;;1164:2;1152:9;1143:7;1139:23;1135:32;1132:2;;;1185:6;1177;1170:22;1132:2;1213:31;1234:9;1213:31;:::i;:::-;1203:41;;1263:40;1299:2;1288:9;1284:18;1263:40;:::i;:::-;1253:50;;1122:187;;;;;:::o;1314:342::-;;;;1460:2;1448:9;1439:7;1435:23;1431:32;1428:2;;;1481:6;1473;1466:22;1428:2;1509:31;1530:9;1509:31;:::i;:::-;1499:41;;1559:40;1595:2;1584:9;1580:18;1559:40;:::i;:::-;1549:50;;1646:2;1635:9;1631:18;1618:32;1608:42;;1418:238;;;;;:::o;1661:702::-;;;;;1833:3;1821:9;1812:7;1808:23;1804:33;1801:2;;;1855:6;1847;1840:22;1801:2;1883:31;1904:9;1883:31;:::i;:::-;1873:41;;1933:40;1969:2;1958:9;1954:18;1933:40;:::i;:::-;1923:50;;2020:2;2009:9;2005:18;1992:32;1982:42;;2075:2;2064:9;2060:18;2047:32;2102:18;2094:6;2091:30;2088:2;;;2139:6;2131;2124:22;2088:2;2167:22;;2220:4;2212:13;;2208:27;-1:-1:-1;2198:2:1;;2254:6;2246;2239:22;2198:2;2282:75;2349:7;2344:2;2331:16;2326:2;2322;2318:11;2282:75;:::i;:::-;2272:85;;;1791:572;;;;;;;:::o;2368:369::-;;;2494:2;2482:9;2473:7;2469:23;2465:32;2462:2;;;2515:6;2507;2500:22;2462:2;2543:31;2564:9;2543:31;:::i;:::-;2533:41;;2624:2;2613:9;2609:18;2596:32;2671:5;2664:13;2657:21;2650:5;2647:32;2637:2;;2698:6;2690;2683:22;2637:2;2726:5;2716:15;;;2452:285;;;;;:::o;2742:266::-;;;2871:2;2859:9;2850:7;2846:23;2842:32;2839:2;;;2892:6;2884;2877:22;2839:2;2920:31;2941:9;2920:31;:::i;:::-;2910:41;2998:2;2983:18;;;;2970:32;;-1:-1:-1;;;2829:179:1:o;3013:666::-;;;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;3181:6;3173;3166:22;3128:2;3226:9;3213:23;3255:18;3296:2;3288:6;3285:14;3282:2;;;3317:6;3309;3302:22;3282:2;3360:6;3349:9;3345:22;3335:32;;3405:7;3398:4;3394:2;3390:13;3386:27;3376:2;;3432:6;3424;3417:22;3376:2;3477;3464:16;3503:2;3495:6;3492:14;3489:2;;;3524:6;3516;3509:22;3489:2;3583:7;3578:2;3572;3564:6;3560:15;3556:2;3552:24;3548:33;3545:46;3542:2;;;3609:6;3601;3594:22;3542:2;3645;3637:11;;;;;3667:6;;-1:-1:-1;3118:561:1;;-1:-1:-1;;;;3118:561:1:o;3684:257::-;;3795:2;3783:9;3774:7;3770:23;3766:32;3763:2;;;3816:6;3808;3801:22;3763:2;3860:9;3847:23;3879:32;3905:5;3879:32;:::i;3946:261::-;;4068:2;4056:9;4047:7;4043:23;4039:32;4036:2;;;4089:6;4081;4074:22;4036:2;4126:9;4120:16;4145:32;4171:5;4145:32;:::i;4212:716::-;;;;4361:2;4349:9;4340:7;4336:23;4332:32;4329:2;;;4382:6;4374;4367:22;4329:2;4427:9;4414:23;4456:18;4497:2;4489:6;4486:14;4483:2;;;4518:6;4510;4503:22;4483:2;4561:6;4550:9;4546:22;4536:32;;4606:7;4599:4;4595:2;4591:13;4587:27;4577:2;;4633:6;4625;4618:22;4577:2;4678;4665:16;4704:2;4696:6;4693:14;4690:2;;;4725:6;4717;4710:22;4690:2;4777:7;4770:4;4761:6;4757:2;4753:15;4749:26;4746:39;4743:2;;;4803:6;4795;4788:22;4743:2;4839:4;4831:13;;;;4863:6;;-1:-1:-1;4901:20:1;;;;4888:34;;4319:609;-1:-1:-1;;;;4319:609:1:o;4933:482::-;;5055:2;5043:9;5034:7;5030:23;5026:32;5023:2;;;5076:6;5068;5061:22;5023:2;5121:9;5108:23;5154:18;5146:6;5143:30;5140:2;;;5191:6;5183;5176:22;5140:2;5219:22;;5272:4;5264:13;;5260:27;-1:-1:-1;5250:2:1;;5306:6;5298;5291:22;5250:2;5334:75;5401:7;5396:2;5383:16;5378:2;5374;5370:11;5334:75;:::i;5420:190::-;;5532:2;5520:9;5511:7;5507:23;5503:32;5500:2;;;5553:6;5545;5538:22;5500:2;-1:-1:-1;5581:23:1;;5490:120;-1:-1:-1;5490:120:1:o;5615:259::-;;5696:5;5690:12;5723:6;5718:3;5711:19;5739:63;5795:6;5788:4;5783:3;5779:14;5772:4;5765:5;5761:16;5739:63;:::i;:::-;5856:2;5835:15;-1:-1:-1;;5831:29:1;5822:39;;;;5863:4;5818:50;;5666:208;-1:-1:-1;;5666:208:1:o;5879:982::-;5966:12;;5879:982;;6038:1;6023:17;;6059:1;6095:18;;;;6122:2;;6176:4;6168:6;6164:17;6154:27;;6122:2;6202;6250;6242:6;6239:14;6219:18;6216:38;6213:2;;;-1:-1:-1;;;6277:33:1;;6333:4;6330:1;6323:15;6363:4;6284:3;6351:17;6213:2;6394:18;6421:104;;;;6539:1;6534:321;;;;6387:468;;6421:104;-1:-1:-1;;6454:24:1;;6442:37;;6499:16;;;;-1:-1:-1;6421:104:1;;6534:321;6570:38;6602:5;6570:38;:::i;:::-;6630:1;6644:165;6658:6;6655:1;6652:13;6644:165;;;6736:14;;6723:11;;;6716:35;6779:16;;;;6673:10;;6644:165;;;6648:3;;6838:6;6833:3;6829:16;6822:23;;6387:468;;;;;;;5939:922;;;;:::o;6866:275::-;;7051:6;7043;7038:3;7025:33;7077:16;;7102:15;;;7077:16;7015:126;-1:-1:-1;7015:126:1:o;7146:552::-;;7408:6;7402:13;7424:53;7470:6;7465:3;7458:4;7450:6;7446:17;7424:53;:::i;:::-;7540:13;;7499:16;;;;7562:57;7540:13;7499:16;7596:4;7584:17;;7562:57;:::i;:::-;7635;7682:8;7675:5;7671:20;7663:6;7635:57;:::i;:::-;7628:64;7378:320;-1:-1:-1;;;;;;;7378:320:1:o;7703:199::-;;7856:40;7892:3;7884:6;7856:40;:::i;7907:205::-;8107:3;8098:14::o;8117:203::-;-1:-1:-1;;;;;8281:32:1;;;;8263:51;;8251:2;8236:18;;8218:102::o;8325:304::-;-1:-1:-1;;;;;8555:15:1;;;8537:34;;8607:15;;8602:2;8587:18;;8580:43;8487:2;8472:18;;8454:175::o;8634:490::-;-1:-1:-1;;;;;8903:15:1;;;8885:34;;8955:15;;8950:2;8935:18;;8928:43;9002:2;8987:18;;8980:34;;;9050:3;9045:2;9030:18;;9023:31;;;8634:490;;9071:47;;9098:19;;9090:6;9071:47;:::i;:::-;9063:55;8837:287;-1:-1:-1;;;;;;8837:287:1:o;9129:282::-;-1:-1:-1;;;;;9329:32:1;;;;9311:51;;9393:2;9378:18;;9371:34;9299:2;9284:18;;9266:145::o;9416:635::-;9587:2;9639:21;;;9709:13;;9612:18;;;9731:22;;;9416:635;;9587:2;9810:15;;;;9784:2;9769:18;;;9416:635;9856:169;9870:6;9867:1;9864:13;9856:169;;;9931:13;;9919:26;;10000:15;;;;9965:12;;;;9892:1;9885:9;9856:169;;;-1:-1:-1;10042:3:1;;9567:484;-1:-1:-1;;;;;;9567:484:1:o;10056:187::-;10221:14;;10214:22;10196:41;;10184:2;10169:18;;10151:92::o;10248:202::-;-1:-1:-1;;;;;;10410:33:1;;;;10392:52;;10380:2;10365:18;;10347:103::o;10681:221::-;;10830:2;10819:9;10812:21;10850:46;10892:2;10881:9;10877:18;10869:6;10850:46;:::i;10907:407::-;11109:2;11091:21;;;11148:2;11128:18;;;11121:30;11187:34;11182:2;11167:18;;11160:62;-1:-1:-1;;;11253:2:1;11238:18;;11231:41;11304:3;11289:19;;11081:233::o;11319:414::-;11521:2;11503:21;;;11560:2;11540:18;;;11533:30;11599:34;11594:2;11579:18;;11572:62;-1:-1:-1;;;11665:2:1;11650:18;;11643:48;11723:3;11708:19;;11493:240::o;11738:402::-;11940:2;11922:21;;;11979:2;11959:18;;;11952:30;12018:34;12013:2;11998:18;;11991:62;-1:-1:-1;;;12084:2:1;12069:18;;12062:36;12130:3;12115:19;;11912:228::o;12145:352::-;12347:2;12329:21;;;12386:2;12366:18;;;12359:30;12425;12420:2;12405:18;;12398:58;12488:2;12473:18;;12319:178::o;12502:341::-;12704:2;12686:21;;;12743:2;12723:18;;;12716:30;-1:-1:-1;;;12777:2:1;12762:18;;12755:47;12834:2;12819:18;;12676:167::o;12848:347::-;13050:2;13032:21;;;13089:2;13069:18;;;13062:30;13128:25;13123:2;13108:18;;13101:53;13186:2;13171:18;;13022:173::o;13200:400::-;13402:2;13384:21;;;13441:2;13421:18;;;13414:30;13480:34;13475:2;13460:18;;13453:62;-1:-1:-1;;;13546:2:1;13531:18;;13524:34;13590:3;13575:19;;13374:226::o;13605:349::-;13807:2;13789:21;;;13846:2;13826:18;;;13819:30;13885:27;13880:2;13865:18;;13858:55;13945:2;13930:18;;13779:175::o;13959:344::-;14161:2;14143:21;;;14200:2;14180:18;;;14173:30;-1:-1:-1;;;14234:2:1;14219:18;;14212:50;14294:2;14279:18;;14133:170::o;14308:356::-;14510:2;14492:21;;;14529:18;;;14522:30;14588:34;14583:2;14568:18;;14561:62;14655:2;14640:18;;14482:182::o;14669:408::-;14871:2;14853:21;;;14910:2;14890:18;;;14883:30;14949:34;14944:2;14929:18;;14922:62;-1:-1:-1;;;15015:2:1;15000:18;;14993:42;15067:3;15052:19;;14843:234::o;15082:344::-;15284:2;15266:21;;;15323:2;15303:18;;;15296:30;-1:-1:-1;;;15357:2:1;15342:18;;15335:50;15417:2;15402:18;;15256:170::o;15431:420::-;15633:2;15615:21;;;15672:2;15652:18;;;15645:30;15711:34;15706:2;15691:18;;15684:62;15782:26;15777:2;15762:18;;15755:54;15841:3;15826:19;;15605:246::o;15856:339::-;16058:2;16040:21;;;16097:2;16077:18;;;16070:30;-1:-1:-1;;;16131:2:1;16116:18;;16109:45;16186:2;16171:18;;16030:165::o;16200:406::-;16402:2;16384:21;;;16441:2;16421:18;;;16414:30;16480:34;16475:2;16460:18;;16453:62;-1:-1:-1;;;16546:2:1;16531:18;;16524:40;16596:3;16581:19;;16374:232::o;16611:405::-;16813:2;16795:21;;;16852:2;16832:18;;;16825:30;16891:34;16886:2;16871:18;;16864:62;-1:-1:-1;;;16957:2:1;16942:18;;16935:39;17006:3;16991:19;;16785:231::o;17021:356::-;17223:2;17205:21;;;17242:18;;;17235:30;17301:34;17296:2;17281:18;;17274:62;17368:2;17353:18;;17195:182::o;17382:408::-;17584:2;17566:21;;;17623:2;17603:18;;;17596:30;17662:34;17657:2;17642:18;;17635:62;-1:-1:-1;;;17728:2:1;17713:18;;17706:42;17780:3;17765:19;;17556:234::o;17795:411::-;17997:2;17979:21;;;18036:2;18016:18;;;18009:30;18075:34;18070:2;18055:18;;18048:62;-1:-1:-1;;;18141:2:1;18126:18;;18119:45;18196:3;18181:19;;17969:237::o;18211:356::-;18413:2;18395:21;;;18432:18;;;18425:30;18491:34;18486:2;18471:18;;18464:62;18558:2;18543:18;;18385:182::o;18572:405::-;18774:2;18756:21;;;18813:2;18793:18;;;18786:30;18852:34;18847:2;18832:18;;18825:62;-1:-1:-1;;;18918:2:1;18903:18;;18896:39;18967:3;18952:19;;18746:231::o;18982:411::-;19184:2;19166:21;;;19223:2;19203:18;;;19196:30;19262:34;19257:2;19242:18;;19235:62;-1:-1:-1;;;19328:2:1;19313:18;;19306:45;19383:3;19368:19;;19156:237::o;19398:347::-;19600:2;19582:21;;;19639:2;19619:18;;;19612:30;19678:25;19673:2;19658:18;;19651:53;19736:2;19721:18;;19572:173::o;19750:403::-;19952:2;19934:21;;;19991:2;19971:18;;;19964:30;20030:34;20025:2;20010:18;;20003:62;-1:-1:-1;;;20096:2:1;20081:18;;20074:37;20143:3;20128:19;;19924:229::o;20158:397::-;20360:2;20342:21;;;20399:2;20379:18;;;20372:30;20438:34;20433:2;20418:18;;20411:62;-1:-1:-1;;;20504:2:1;20489:18;;20482:31;20545:3;20530:19;;20332:223::o;20560:415::-;20762:2;20744:21;;;20801:2;20781:18;;;20774:30;20840:34;20835:2;20820:18;;20813:62;-1:-1:-1;;;20906:2:1;20891:18;;20884:49;20965:3;20950:19;;20734:241::o;20980:398::-;21182:2;21164:21;;;21221:2;21201:18;;;21194:30;21260:34;21255:2;21240:18;;21233:62;-1:-1:-1;;;21326:2:1;21311:18;;21304:32;21368:3;21353:19;;21154:224::o;21383:340::-;21585:2;21567:21;;;21624:2;21604:18;;;21597:30;-1:-1:-1;;;21658:2:1;21643:18;;21636:46;21714:2;21699:18;;21557:166::o;21728:413::-;21930:2;21912:21;;;21969:2;21949:18;;;21942:30;22008:34;22003:2;21988:18;;21981:62;-1:-1:-1;;;22074:2:1;22059:18;;22052:47;22131:3;22116:19;;21902:239::o;22146:413::-;22348:2;22330:21;;;22387:2;22367:18;;;22360:30;22426:34;22421:2;22406:18;;22399:62;-1:-1:-1;;;22492:2:1;22477:18;;22470:47;22549:3;22534:19;;22320:239::o;22564:408::-;22766:2;22748:21;;;22805:2;22785:18;;;22778:30;22844:34;22839:2;22824:18;;22817:62;-1:-1:-1;;;22910:2:1;22895:18;;22888:42;22962:3;22947:19;;22738:234::o;22977:341::-;23179:2;23161:21;;;23218:2;23198:18;;;23191:30;-1:-1:-1;;;23252:2:1;23237:18;;23230:47;23309:2;23294:18;;23151:167::o;23323:177::-;23469:25;;;23457:2;23442:18;;23424:76::o;23505:248::-;23679:25;;;23735:2;23720:18;;23713:34;23667:2;23652:18;;23634:119::o;23758:129::-;;23826:17;;;23876:4;23860:21;;;23816:71::o;23892:128::-;;23963:1;23959:6;23956:1;23953:13;23950:2;;;23969:18;;:::i;:::-;-1:-1:-1;24005:9:1;;23940:80::o;24025:120::-;;24091:1;24081:2;;24096:18;;:::i;:::-;-1:-1:-1;24130:9:1;;24071:74::o;24150:168::-;;24256:1;24252;24248:6;24244:14;24241:1;24238:21;24233:1;24226:9;24219:17;24215:45;24212:2;;;24263:18;;:::i;:::-;-1:-1:-1;24303:9:1;;24202:116::o;24323:125::-;;24391:1;24388;24385:8;24382:2;;;24396:18;;:::i;:::-;-1:-1:-1;24433:9:1;;24372:76::o;24453:258::-;24525:1;24535:113;24549:6;24546:1;24543:13;24535:113;;;24625:11;;;24619:18;24606:11;;;24599:39;24571:2;24564:10;24535:113;;;24666:6;24663:1;24660:13;24657:2;;;-1:-1:-1;;24701:1:1;24683:16;;24676:27;24506:205::o;24716:380::-;24801:1;24791:12;;24848:1;24838:12;;;24859:2;;24913:4;24905:6;24901:17;24891:27;;24859:2;24966;24958:6;24955:14;24935:18;24932:38;24929:2;;;25012:10;25007:3;25003:20;25000:1;24993:31;25047:4;25044:1;25037:15;25075:4;25072:1;25065:15;24929:2;;24771:325;;;:::o;25101:135::-;;-1:-1:-1;;25161:17:1;;25158:2;;;25181:18;;:::i;:::-;-1:-1:-1;25228:1:1;25217:13;;25148:88::o;25241:112::-;;25299:1;25289:2;;25304:18;;:::i;:::-;-1:-1:-1;25338:9:1;;25279:74::o;25358:127::-;25419:10;25414:3;25410:20;25407:1;25400:31;25450:4;25447:1;25440:15;25474:4;25471:1;25464:15;25490:127;25551:10;25546:3;25542:20;25539:1;25532:31;25582:4;25579:1;25572:15;25606:4;25603:1;25596:15;25622:127;25683:10;25678:3;25674:20;25671:1;25664:31;25714:4;25711:1;25704:15;25738:4;25735:1;25728:15;25754:133;-1:-1:-1;;;;;;25830:32:1;;25820:43;;25810:2;;25877:1;25874;25867:12

Swarm Source

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