ETH Price: $2,369.01 (-3.83%)

Token

Cryptopus (OCTO)
 

Overview

Max Total Supply

204 OCTO

Holders

90

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 OCTO
0x9ced3bdc0e6ff65c3f072b0b5527184843ed4eaf
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

10000 Cryptopus living on the Ethereum blockchain. Cryptopia; the tiny planet that keeps the secrets of the entire universe; and Cryptopus, a Cryptopian who survived the apocalypse.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Cryptopus

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-10
*/

// SPDX-License-Identifier: GPL-3.0

//******--- ░█████╗░██████╗░██╗░░░██╗██████╗░████████╗░█████╗░██████╗░██╗░░░██╗░██████╗ ---******//
//******--- ██╔══██╗██╔══██╗╚██╗░██╔╝██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗██║░░░██║██╔════╝ ---******//
//******--- ██║░░╚═╝██████╔╝░╚████╔╝░██████╔╝░░░██║░░░██║░░██║██████╔╝██║░░░██║╚█████╗░ ---******//
//******--- ██║░░██╗██╔══██╗░░╚██╔╝░░██╔═══╝░░░░██║░░░██║░░██║██╔═══╝░██║░░░██║░╚═══██╗ ---******//
//******--- ╚█████╔╝██║░░██║░░░██║░░░██║░░░░░░░░██║░░░╚█████╔╝██║░░░░░╚██████╔╝██████╔╝ ---******//
//******--- ░╚════╝░╚═╝░░╚═╝░░░╚═╝░░░╚═╝░░░░░░░░╚═╝░░░░╚════╝░╚═╝░░░░░░╚═════╝░╚═════╝░ ---******//


//******--- Website:   https://cryptopusnft.io                ---******//
//******--- Twitter:   https://twitter.com/Cryptopus_nfts     ---******//


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


// OpenZeppelin Contracts v4.4.0 (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/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.0 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

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

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

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


// OpenZeppelin Contracts v4.4.0 (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/Context.sol


// OpenZeppelin Contracts v4.4.0 (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/access/Ownable.sol


// OpenZeppelin Contracts v4.4.0 (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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.0 (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/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.0 (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/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.0 (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/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.0 (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/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.0 (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/ERC721.sol


// OpenZeppelin Contracts v4.4.0 (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 {
        _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

// File: Cryptopus.sol





pragma solidity 0.8.10;






contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

contract Cryptopus is ERC721, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;

  //constants
    uint256 public presaleCost = 0.06 ether;
    uint256 public publicsaleCost = 0.07 ether;
    uint64 public maxSupply = 10000;
    uint64 private maxPublicMintAmount = 5;
    uint64 private reservedOwnerMint=50;
    
  //variable s
    bool public paused = false;
    bool public baseURILocked = false;
    bool public presale = false;
    bool public publicsale = false;
    address public proxyRegistryAddress;
    bytes32 private merkleRoot;
    string public contractURL;
    string public baseURI;
    string public baseExtension = ".json";
  
  //Arrays
    mapping(address => uint) publicSaleRemaining; 
    mapping(address => uint) whitelistRemaining; 
    mapping(address => bool) whitelistUsed; 

  //Actions
    event BaseTokenURIChanged(string baseURI);
    event ContractURIChanged(string contractURL);

    constructor(string memory _name, string memory _symbol,string memory _initBaseURI,string memory _initcontractURI,address _initProxyAddress,bytes32 _merkleRoot) ERC721(_name, _symbol) {   
        setProxyAddress(_initProxyAddress);
        setcontractURI(_initcontractURI);
        setBaseURI(_initBaseURI);
        setMerkleRoot(_merkleRoot);
        _tokenIdCounter.increment();
        mint_function(reservedOwnerMint);
    }

    // internal
    function mint_function(uint256 _mintAmount) internal {
        require(!paused,"Contract is paused");
        uint current = _tokenIdCounter.current();
        require(current + _mintAmount <= maxSupply,"You're exceeding maximum tokens");

        for (uint256 i = 1; i <= _mintAmount; i++) {
          mintInternal();
        }
    }

    function mintInternal() internal {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _mint(msg.sender, tokenId);
    }
  

  // public
    function totalSupply() public view returns (uint) {
        return _tokenIdCounter.current() - 1;
    }
    
    function preSaleMint(uint256 _mintAmount, uint256 _MaxMintAmount,bool _earlyInvest, bytes32[] memory proof) external payable {
        require(presale, "Pre-sale minting is not active");
        require(_earlyInvest || msg.value >= presaleCost * _mintAmount,"You have unsufficient fund!");
        require( MerkleProof.verify(proof,merkleRoot, keccak256(abi.encodePacked(msg.sender,_MaxMintAmount,_earlyInvest))),"You're not in whitelist!");
        
        if (!whitelistUsed[msg.sender]){
            whitelistUsed[msg.sender]=true;
            whitelistRemaining[msg.sender]=_MaxMintAmount;
        }
        require(whitelistRemaining[msg.sender]-_mintAmount>=0,"You're exceeding registered amount");
        whitelistRemaining[msg.sender]-=_mintAmount;
        mint_function(_mintAmount);
    }
    
    function publicSaleMint(uint256 _mintAmount) external payable {
        require(publicsale, "Public sale will start on 13th December 19:00:00 UTC");
        uint128 __maxPublicMintAmount = maxPublicMintAmount;
        require(__maxPublicMintAmount >= _mintAmount,"Maximum mint amount is 5");
        require(__maxPublicMintAmount >= publicSaleRemaining[msg.sender]+_mintAmount,"Maximum mint amount is 5");
        require(msg.value >= publicsaleCost * _mintAmount,"You have unsufficient fund!");
        
        publicSaleRemaining[msg.sender] += _mintAmount;
        mint_function(_mintAmount);
    }
    
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory)
    {
        require(  _exists(tokenId),"ERC721Metadata: URI query for nonexistent token" );
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, Strings.toString(tokenId), baseExtension)) : "";
    }
    
    function contractURI() public view returns (string memory) {
      return contractURL;
    }
    
    
    
    //ADMIN FUNCTIONS
    function lockContract() public onlyOwner(){
      baseURILocked=true;
    }
    
    function ownershiptransfer(address _newOwner) public onlyOwner(){
        transferOwnership(_newOwner);
    }
    
    function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner() {
        merkleRoot = _merkleRoot;
    }
    
    function setBaseURI(string memory _newBaseURI) public onlyOwner() {
        require(!baseURILocked,"We Can't change baseURI");
        baseURI = _newBaseURI;
        emit BaseTokenURIChanged(_newBaseURI);
    }
    
    function setBaseExtension(string memory _newBaseExtension) public onlyOwner() {
        baseExtension = _newBaseExtension;
    }
    
    function setcontractURI(string memory _newcontractURI) public onlyOwner() {
        contractURL = _newcontractURI;
        emit ContractURIChanged(_newcontractURI);
    }

    function setProxyAddress(address _proxyRegistryAddress) public onlyOwner() {
        proxyRegistryAddress = _proxyRegistryAddress;
    }

    function toogleSection(uint section) public onlyOwner() {
        if (section==0) paused=!paused;
        if (section==1) presale=!presale;
        if (section==2) publicsale=!publicsale;
    }
      
    function withdraw() public payable {
        require(payable(owner()).send(address(this).balance));
    }

    function tokensOfOwner(address _owner, uint startId, uint endId) external view returns(uint256[] memory ) {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) {
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 index = 0;

            for (uint256 tokenId = startId; tokenId < endId; tokenId++) {
                if (index == tokenCount) break;

                if (ownerOf(tokenId) == _owner) {
                    result[index] = tokenId;
                    index++;
                }
            }

            return result;
        }
    }
    // Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings.
    function isApprovedForAll(address owner, address operator) override public view returns (bool)
    {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }
        return super.isApprovedForAll(owner, operator);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initcontractURI","type":"string"},{"internalType":"address","name":"_initProxyAddress","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseTokenURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"contractURL","type":"string"}],"name":"ContractURIChanged","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURILocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"ownershiptransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"uint256","name":"_MaxMintAmount","type":"uint256"},{"internalType":"bool","name":"_earlyInvest","type":"bool"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicsale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicsaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newcontractURI","type":"string"}],"name":"setcontractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"uint256","name":"endId","type":"uint256"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"section","type":"uint256"}],"name":"toogleSection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405266d529ae9e86000060085566f8b0a10e470000600955612710600a60006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506005600a60086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506032600a60106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600a60186101000a81548160ff0219169083151502179055506000600a60196101000a81548160ff0219169083151502179055506000600a601a6101000a81548160ff0219169083151502179055506000600a601b6101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600f90805190602001906200015292919062000ad0565b503480156200016057600080fd5b50604051620061a2380380620061a2833981810160405281019062000186919062000dbd565b85858160009080519060200190620001a092919062000ad0565b508060019080519060200190620001b992919062000ad0565b505050620001dc620001d06200027460201b60201c565b6200027c60201b60201c565b620001ed826200034260201b60201c565b620001fe836200041560201b60201c565b6200020f84620004f960201b60201c565b62000220816200063060201b60201c565b620002376007620006c960201b6200222b1760201c565b62000268600a60109054906101000a900467ffffffffffffffff1667ffffffffffffffff16620006df60201b60201c565b5050505050506200134b565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003526200027460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000378620007fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c89062000f36565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620004256200027460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200044b620007fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049b9062000f36565b60405180910390fd5b80600d9080519060200190620004bc92919062000ad0565b507fd5ee5eaf65263bab5d569890714d123ad48a9e54409d35e71d374f3dd300bba081604051620004ee919062000fa4565b60405180910390a150565b620005096200027460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200052f620007fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000588576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057f9062000f36565b60405180910390fd5b600a60199054906101000a900460ff1615620005db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d29062001018565b60405180910390fd5b80600e9080519060200190620005f392919062000ad0565b507f228a3ac0675af69daeaaa5b8d369fe2faae665e7f340f0b78ccbb84e17b4f6948160405162000625919062000fa4565b60405180910390a150565b620006406200027460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000666620007fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b69062000f36565b60405180910390fd5b80600c8190555050565b6001816000016000828254019250508190555050565b600a60189054906101000a900460ff161562000732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000729906200108a565b60405180910390fd5b60006200074b60076200082460201b620022411760201c565b9050600a60009054906101000a900467ffffffffffffffff1667ffffffffffffffff1682826200077c9190620010e5565b1115620007c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b79062001192565b60405180910390fd5b6000600190505b828111620007f557620007df6200083260201b60201c565b8080620007ec90620011b4565b915050620007c7565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081600001549050919050565b60006200084b60076200082460201b620022411760201c565b9050620008646007620006c960201b6200222b1760201c565b6200087633826200087960201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e39062001252565b60405180910390fd5b620008fd8162000a5f60201b60201c565b1562000940576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093790620012c4565b60405180910390fd5b620009546000838362000acb60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009a69190620010e5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b82805462000ade9062001315565b90600052602060002090601f01602090048101928262000b02576000855562000b4e565b82601f1062000b1d57805160ff191683800117855562000b4e565b8280016001018555821562000b4e579182015b8281111562000b4d57825182559160200191906001019062000b30565b5b50905062000b5d919062000b61565b5090565b5b8082111562000b7c57600081600090555060010162000b62565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000be98262000b9e565b810181811067ffffffffffffffff8211171562000c0b5762000c0a62000baf565b5b80604052505050565b600062000c2062000b80565b905062000c2e828262000bde565b919050565b600067ffffffffffffffff82111562000c515762000c5062000baf565b5b62000c5c8262000b9e565b9050602081019050919050565b60005b8381101562000c8957808201518184015260208101905062000c6c565b8381111562000c99576000848401525b50505050565b600062000cb662000cb08462000c33565b62000c14565b90508281526020810184848401111562000cd55762000cd462000b99565b5b62000ce284828562000c69565b509392505050565b600082601f83011262000d025762000d0162000b94565b5b815162000d1484826020860162000c9f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d4a8262000d1d565b9050919050565b62000d5c8162000d3d565b811462000d6857600080fd5b50565b60008151905062000d7c8162000d51565b92915050565b6000819050919050565b62000d978162000d82565b811462000da357600080fd5b50565b60008151905062000db78162000d8c565b92915050565b60008060008060008060c0878903121562000ddd5762000ddc62000b8a565b5b600087015167ffffffffffffffff81111562000dfe5762000dfd62000b8f565b5b62000e0c89828a0162000cea565b965050602087015167ffffffffffffffff81111562000e305762000e2f62000b8f565b5b62000e3e89828a0162000cea565b955050604087015167ffffffffffffffff81111562000e625762000e6162000b8f565b5b62000e7089828a0162000cea565b945050606087015167ffffffffffffffff81111562000e945762000e9362000b8f565b5b62000ea289828a0162000cea565b935050608062000eb589828a0162000d6b565b92505060a062000ec889828a0162000da6565b9150509295509295509295565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f1e60208362000ed5565b915062000f2b8262000ee6565b602082019050919050565b6000602082019050818103600083015262000f518162000f0f565b9050919050565b600081519050919050565b600062000f708262000f58565b62000f7c818562000ed5565b935062000f8e81856020860162000c69565b62000f998162000b9e565b840191505092915050565b6000602082019050818103600083015262000fc0818462000f63565b905092915050565b7f57652043616e2774206368616e67652062617365555249000000000000000000600082015250565b60006200100060178362000ed5565b91506200100d8262000fc8565b602082019050919050565b60006020820190508181036000830152620010338162000ff1565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b60006200107260128362000ed5565b91506200107f826200103a565b602082019050919050565b60006020820190508181036000830152620010a58162001063565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010f282620010ac565b9150620010ff83620010ac565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620011375762001136620010b6565b5b828201905092915050565b7f596f7527726520657863656564696e67206d6178696d756d20746f6b656e7300600082015250565b60006200117a601f8362000ed5565b9150620011878262001142565b602082019050919050565b60006020820190508181036000830152620011ad816200116b565b9050919050565b6000620011c182620010ac565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620011f757620011f6620010b6565b5b600182019050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200123a60208362000ed5565b9150620012478262001202565b602082019050919050565b600060208201905081810360008301526200126d816200122b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000620012ac601c8362000ed5565b9150620012b98262001274565b602082019050919050565b60006020820190508181036000830152620012df816200129d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200132e57607f821691505b60208210811415620013455762001344620012e6565b5b50919050565b614e47806200135b6000396000f3fe6080604052600436106102465760003560e01c8063715018a611610139578063c6682862116100b6578063da3ef23f1161007a578063da3ef23f1461081d578063e8a3d48514610846578063e985e9c514610871578063efa00ce7146108ae578063f2fde38b146108d7578063fdea8e0b1461090057610246565b8063c668286214610722578063c839fe941461074d578063c87b56dd1461078a578063cd7c0326146107c7578063d5abeb01146107f257610246565b806395d89b41116100fd57806395d89b411461065e578063a22cb46514610689578063b3ab66b0146106b2578063b88d4fde146106ce578063b94805a2146106f757610246565b8063715018a6146105b1578063753868e3146105c85780637cb64759146105df5780638da5cb5b1461060857806392829d741461063357610246565b806342842e0e116101c75780635d148e5c1161018b5780635d148e5c146104b85780636352211e146104e357806365aeb061146105205780636c0360eb1461054957806370a082311461057457610246565b806342842e0e146103e7578063452c1b891461041057806346a7dadc1461043b57806355f804b3146104645780635c975abb1461048d57610246565b806318160ddd1161020e57806318160ddd1461033557806323b872dd146103605780632a23d07d14610389578063309385dc146103b45780633ccfd60b146103dd57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630d6a726614610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061320a565b61092b565b60405161027f9190613252565b60405180910390f35b34801561029457600080fd5b5061029d610a0d565b6040516102aa9190613306565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d5919061335e565b610a9f565b6040516102e791906133cc565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613413565b610b24565b005b610333600480360381019061032e91906135fd565b610c3c565b005b34801561034157600080fd5b5061034a610f3a565b604051610357919061368f565b60405180910390f35b34801561036c57600080fd5b50610387600480360381019061038291906136aa565b610f57565b005b34801561039557600080fd5b5061039e610fb7565b6040516103ab919061368f565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906136fd565b610fbd565b005b6103e5611045565b005b3480156103f357600080fd5b5061040e600480360381019061040991906136aa565b61108c565b005b34801561041c57600080fd5b506104256110ac565b6040516104329190613306565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d91906136fd565b61113a565b005b34801561047057600080fd5b5061048b600480360381019061048691906137df565b6111fa565b005b34801561049957600080fd5b506104a2611317565b6040516104af9190613252565b60405180910390f35b3480156104c457600080fd5b506104cd61132a565b6040516104da9190613252565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061335e565b61133d565b60405161051791906133cc565b60405180910390f35b34801561052c57600080fd5b506105476004803603810190610542919061335e565b6113ef565b005b34801561055557600080fd5b5061055e61150a565b60405161056b9190613306565b60405180910390f35b34801561058057600080fd5b5061059b600480360381019061059691906136fd565b611598565b6040516105a8919061368f565b60405180910390f35b3480156105bd57600080fd5b506105c6611650565b005b3480156105d457600080fd5b506105dd6116d8565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613828565b611771565b005b34801561061457600080fd5b5061061d6117f7565b60405161062a91906133cc565b60405180910390f35b34801561063f57600080fd5b50610648611821565b604051610655919061368f565b60405180910390f35b34801561066a57600080fd5b50610673611827565b6040516106809190613306565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613855565b6118b9565b005b6106cc60048036038101906106c7919061335e565b6118cf565b005b3480156106da57600080fd5b506106f560048036038101906106f09190613936565b611aea565b005b34801561070357600080fd5b5061070c611b4c565b6040516107199190613252565b60405180910390f35b34801561072e57600080fd5b50610737611b5f565b6040516107449190613306565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f91906139b9565b611bed565b6040516107819190613aca565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac919061335e565b611d4d565b6040516107be9190613306565b60405180910390f35b3480156107d357600080fd5b506107dc611df8565b6040516107e991906133cc565b60405180910390f35b3480156107fe57600080fd5b50610807611e1e565b6040516108149190613b0f565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f91906137df565b611e38565b005b34801561085257600080fd5b5061085b611ece565b6040516108689190613306565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613b2a565b611f60565b6040516108a59190613252565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906137df565b612053565b005b3480156108e357600080fd5b506108fe60048036038101906108f991906136fd565b612120565b005b34801561090c57600080fd5b50610915612218565b6040516109229190613252565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109f657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a065750610a058261224f565b5b9050919050565b606060008054610a1c90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4890613b99565b8015610a955780601f10610a6a57610100808354040283529160200191610a95565b820191906000526020600020905b815481529060010190602001808311610a7857829003601f168201915b5050505050905090565b6000610aaa826122b9565b610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613c3d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2f8261133d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790613ccf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bbf612325565b73ffffffffffffffffffffffffffffffffffffffff161480610bee5750610bed81610be8612325565b611f60565b5b610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2490613d61565b60405180910390fd5b610c37838361232d565b505050565b600a601a9054906101000a900460ff16610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290613dcd565b60405180910390fd5b8180610ca4575083600854610ca09190613e1c565b3410155b610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90613ec2565b60405180910390fd5b610d1a81600c54338686604051602001610cff93929190613f93565b604051602081830303815290604052805190602001206123e6565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d509061401c565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e47576001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600084601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e94919061403c565b1015610ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc906140e2565b60405180910390fd5b83601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f24919061403c565b92505081905550610f34846123fd565b50505050565b60006001610f486007612241565b610f52919061403c565b905090565b610f68610f62612325565b826124f7565b610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90614174565b60405180910390fd5b610fb28383836125d5565b505050565b60085481565b610fc5612325565b73ffffffffffffffffffffffffffffffffffffffff16610fe36117f7565b73ffffffffffffffffffffffffffffffffffffffff1614611039576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611030906141e0565b60405180910390fd5b61104281612120565b50565b61104d6117f7565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061108a57600080fd5b565b6110a783838360405180602001604052806000815250611aea565b505050565b600d80546110b990613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546110e590613b99565b80156111325780601f1061110757610100808354040283529160200191611132565b820191906000526020600020905b81548152906001019060200180831161111557829003601f168201915b505050505081565b611142612325565b73ffffffffffffffffffffffffffffffffffffffff166111606117f7565b73ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad906141e0565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611202612325565b73ffffffffffffffffffffffffffffffffffffffff166112206117f7565b73ffffffffffffffffffffffffffffffffffffffff1614611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d906141e0565b60405180910390fd5b600a60199054906101000a900460ff16156112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd9061424c565b60405180910390fd5b80600e90805190602001906112dc9291906130fb565b507f228a3ac0675af69daeaaa5b8d369fe2faae665e7f340f0b78ccbb84e17b4f6948160405161130c9190613306565b60405180910390a150565b600a60189054906101000a900460ff1681565b600a60199054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd906142de565b60405180910390fd5b80915050919050565b6113f7612325565b73ffffffffffffffffffffffffffffffffffffffff166114156117f7565b73ffffffffffffffffffffffffffffffffffffffff161461146b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611462906141e0565b60405180910390fd5b600081141561149f57600a60189054906101000a900460ff1615600a60186101000a81548160ff0219169083151502179055505b60018114156114d357600a601a9054906101000a900460ff1615600a601a6101000a81548160ff0219169083151502179055505b600281141561150757600a601b9054906101000a900460ff1615600a601b6101000a81548160ff0219169083151502179055505b50565b600e805461151790613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461154390613b99565b80156115905780601f1061156557610100808354040283529160200191611590565b820191906000526020600020905b81548152906001019060200180831161157357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614370565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611658612325565b73ffffffffffffffffffffffffffffffffffffffff166116766117f7565b73ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c3906141e0565b60405180910390fd5b6116d66000612831565b565b6116e0612325565b73ffffffffffffffffffffffffffffffffffffffff166116fe6117f7565b73ffffffffffffffffffffffffffffffffffffffff1614611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b906141e0565b60405180910390fd5b6001600a60196101000a81548160ff021916908315150217905550565b611779612325565b73ffffffffffffffffffffffffffffffffffffffff166117976117f7565b73ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906141e0565b60405180910390fd5b80600c8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b60606001805461183690613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461186290613b99565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b5050505050905090565b6118cb6118c4612325565b83836128f7565b5050565b600a601b9054906101000a900460ff1661191e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191590614402565b60405180910390fd5b6000600a60089054906101000a900467ffffffffffffffff1667ffffffffffffffff16905081816fffffffffffffffffffffffffffffffff161015611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f9061446e565b60405180910390fd5b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e3919061448e565b816fffffffffffffffffffffffffffffffff161015611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e9061446e565b60405180910390fd5b81600954611a459190613e1c565b341015611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613ec2565b60405180910390fd5b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ad6919061448e565b92505081905550611ae6826123fd565b5050565b611afb611af5612325565b836124f7565b611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190614174565b60405180910390fd5b611b4684848484612a64565b50505050565b600a601b9054906101000a900460ff1681565b600f8054611b6c90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9890613b99565b8015611be55780601f10611bba57610100808354040283529160200191611be5565b820191906000526020600020905b815481529060010190602001808311611bc857829003601f168201915b505050505081565b60606000611bfa85611598565b90506000811415611c5757600067ffffffffffffffff811115611c2057611c1f613484565b5b604051908082528060200260200182016040528015611c4e5781602001602082028036833780820191505090505b50915050611d46565b60008167ffffffffffffffff811115611c7357611c72613484565b5b604051908082528060200260200182016040528015611ca15781602001602082028036833780820191505090505b5090506000808690505b85811015611d3e5783821415611cc057611d3e565b8773ffffffffffffffffffffffffffffffffffffffff16611ce08261133d565b73ffffffffffffffffffffffffffffffffffffffff161415611d2b5780838381518110611d1057611d0f6144e4565b5b6020026020010181815250508180611d2790614513565b9250505b8080611d3690614513565b915050611cab565b508193505050505b9392505050565b6060611d58826122b9565b611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e906145ce565b60405180910390fd5b6000600e8054611da690613b99565b905011611dc25760405180602001604052806000815250611df1565b600e611dcd83612ac0565b600f604051602001611de1939291906146be565b6040516020818303038152906040525b9050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900467ffffffffffffffff1681565b611e40612325565b73ffffffffffffffffffffffffffffffffffffffff16611e5e6117f7565b73ffffffffffffffffffffffffffffffffffffffff1614611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab906141e0565b60405180910390fd5b80600f9080519060200190611eca9291906130fb565b5050565b6060600d8054611edd90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990613b99565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050905090565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611fd891906133cc565b602060405180830381865afa158015611ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612019919061472d565b73ffffffffffffffffffffffffffffffffffffffff16141561203f57600191505061204d565b6120498484612c21565b9150505b92915050565b61205b612325565b73ffffffffffffffffffffffffffffffffffffffff166120796117f7565b73ffffffffffffffffffffffffffffffffffffffff16146120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906141e0565b60405180910390fd5b80600d90805190602001906120e59291906130fb565b507fd5ee5eaf65263bab5d569890714d123ad48a9e54409d35e71d374f3dd300bba0816040516121159190613306565b60405180910390a150565b612128612325565b73ffffffffffffffffffffffffffffffffffffffff166121466117f7565b73ffffffffffffffffffffffffffffffffffffffff161461219c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612193906141e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906147cc565b60405180910390fd5b61221581612831565b50565b600a601a9054906101000a900460ff1681565b6001816000016000828254019250508190555050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123a08361133d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000826123f38584612cb5565b1490509392505050565b600a60189054906101000a900460ff161561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244490614838565b60405180910390fd5b60006124596007612241565b9050600a60009054906101000a900467ffffffffffffffff1667ffffffffffffffff168282612488919061448e565b11156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c0906148a4565b60405180910390fd5b6000600190505b8281116124f2576124df612d68565b80806124ea90614513565b9150506124d0565b505050565b6000612502826122b9565b612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253890614936565b60405180910390fd5b600061254c8361133d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125bb57508373ffffffffffffffffffffffffffffffffffffffff166125a384610a9f565b73ffffffffffffffffffffffffffffffffffffffff16145b806125cc57506125cb8185611f60565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125f58261133d565b73ffffffffffffffffffffffffffffffffffffffff161461264b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612642906149c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b290614a5a565b60405180910390fd5b6126c6838383612d8d565b6126d160008261232d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612721919061403c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612778919061448e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295d90614ac6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a579190613252565b60405180910390a3505050565b612a6f8484846125d5565b612a7b84848484612d92565b612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614b58565b60405180910390fd5b50505050565b60606000821415612b08576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c1c565b600082905060005b60008214612b3a578080612b2390614513565b915050600a82612b339190614ba7565b9150612b10565b60008167ffffffffffffffff811115612b5657612b55613484565b5b6040519080825280601f01601f191660200182016040528015612b885781602001600182028036833780820191505090505b5090505b60008514612c1557600182612ba1919061403c565b9150600a85612bb09190614bd8565b6030612bbc919061448e565b60f81b818381518110612bd257612bd16144e4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c0e9190614ba7565b9450612b8c565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008082905060005b8451811015612d5d576000858281518110612cdc57612cdb6144e4565b5b60200260200101519050808311612d1d578281604051602001612d00929190614c2a565b604051602081830303815290604052805190602001209250612d49565b8083604051602001612d30929190614c2a565b6040516020818303038152906040528051906020012092505b508080612d5590614513565b915050612cbe565b508091505092915050565b6000612d746007612241565b9050612d80600761222b565b612d8a3382612f1a565b50565b505050565b6000612db38473ffffffffffffffffffffffffffffffffffffffff166130e8565b15612f0d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ddc612325565b8786866040518563ffffffff1660e01b8152600401612dfe9493929190614cab565b6020604051808303816000875af1925050508015612e3a57506040513d601f19601f82011682018060405250810190612e379190614d0c565b60015b612ebd573d8060008114612e6a576040519150601f19603f3d011682016040523d82523d6000602084013e612e6f565b606091505b50600081511415612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac90614b58565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f12565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8190614d85565b60405180910390fd5b612f93816122b9565b15612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90614df1565b60405180910390fd5b612fdf60008383612d8d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461302f919061448e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461310790613b99565b90600052602060002090601f0160209004810192826131295760008555613170565b82601f1061314257805160ff1916838001178555613170565b82800160010185558215613170579182015b8281111561316f578251825591602001919060010190613154565b5b50905061317d9190613181565b5090565b5b8082111561319a576000816000905550600101613182565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131e7816131b2565b81146131f257600080fd5b50565b600081359050613204816131de565b92915050565b6000602082840312156132205761321f6131a8565b5b600061322e848285016131f5565b91505092915050565b60008115159050919050565b61324c81613237565b82525050565b60006020820190506132676000830184613243565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132a757808201518184015260208101905061328c565b838111156132b6576000848401525b50505050565b6000601f19601f8301169050919050565b60006132d88261326d565b6132e28185613278565b93506132f2818560208601613289565b6132fb816132bc565b840191505092915050565b6000602082019050818103600083015261332081846132cd565b905092915050565b6000819050919050565b61333b81613328565b811461334657600080fd5b50565b60008135905061335881613332565b92915050565b600060208284031215613374576133736131a8565b5b600061338284828501613349565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133b68261338b565b9050919050565b6133c6816133ab565b82525050565b60006020820190506133e160008301846133bd565b92915050565b6133f0816133ab565b81146133fb57600080fd5b50565b60008135905061340d816133e7565b92915050565b6000806040838503121561342a576134296131a8565b5b6000613438858286016133fe565b925050602061344985828601613349565b9150509250929050565b61345c81613237565b811461346757600080fd5b50565b60008135905061347981613453565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6134bc826132bc565b810181811067ffffffffffffffff821117156134db576134da613484565b5b80604052505050565b60006134ee61319e565b90506134fa82826134b3565b919050565b600067ffffffffffffffff82111561351a57613519613484565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61354381613530565b811461354e57600080fd5b50565b6000813590506135608161353a565b92915050565b6000613579613574846134ff565b6134e4565b9050808382526020820190506020840283018581111561359c5761359b61352b565b5b835b818110156135c557806135b18882613551565b84526020840193505060208101905061359e565b5050509392505050565b600082601f8301126135e4576135e361347f565b5b81356135f4848260208601613566565b91505092915050565b60008060008060808587031215613617576136166131a8565b5b600061362587828801613349565b945050602061363687828801613349565b93505060406136478782880161346a565b925050606085013567ffffffffffffffff811115613668576136676131ad565b5b613674878288016135cf565b91505092959194509250565b61368981613328565b82525050565b60006020820190506136a46000830184613680565b92915050565b6000806000606084860312156136c3576136c26131a8565b5b60006136d1868287016133fe565b93505060206136e2868287016133fe565b92505060406136f386828701613349565b9150509250925092565b600060208284031215613713576137126131a8565b5b6000613721848285016133fe565b91505092915050565b600080fd5b600067ffffffffffffffff82111561374a57613749613484565b5b613753826132bc565b9050602081019050919050565b82818337600083830152505050565b600061378261377d8461372f565b6134e4565b90508281526020810184848401111561379e5761379d61372a565b5b6137a9848285613760565b509392505050565b600082601f8301126137c6576137c561347f565b5b81356137d684826020860161376f565b91505092915050565b6000602082840312156137f5576137f46131a8565b5b600082013567ffffffffffffffff811115613813576138126131ad565b5b61381f848285016137b1565b91505092915050565b60006020828403121561383e5761383d6131a8565b5b600061384c84828501613551565b91505092915050565b6000806040838503121561386c5761386b6131a8565b5b600061387a858286016133fe565b925050602061388b8582860161346a565b9150509250929050565b600067ffffffffffffffff8211156138b0576138af613484565b5b6138b9826132bc565b9050602081019050919050565b60006138d96138d484613895565b6134e4565b9050828152602081018484840111156138f5576138f461372a565b5b613900848285613760565b509392505050565b600082601f83011261391d5761391c61347f565b5b813561392d8482602086016138c6565b91505092915050565b600080600080608085870312156139505761394f6131a8565b5b600061395e878288016133fe565b945050602061396f878288016133fe565b935050604061398087828801613349565b925050606085013567ffffffffffffffff8111156139a1576139a06131ad565b5b6139ad87828801613908565b91505092959194509250565b6000806000606084860312156139d2576139d16131a8565b5b60006139e0868287016133fe565b93505060206139f186828701613349565b9250506040613a0286828701613349565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a4181613328565b82525050565b6000613a538383613a38565b60208301905092915050565b6000602082019050919050565b6000613a7782613a0c565b613a818185613a17565b9350613a8c83613a28565b8060005b83811015613abd578151613aa48882613a47565b9750613aaf83613a5f565b925050600181019050613a90565b5085935050505092915050565b60006020820190508181036000830152613ae48184613a6c565b905092915050565b600067ffffffffffffffff82169050919050565b613b0981613aec565b82525050565b6000602082019050613b246000830184613b00565b92915050565b60008060408385031215613b4157613b406131a8565b5b6000613b4f858286016133fe565b9250506020613b60858286016133fe565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bb157607f821691505b60208210811415613bc557613bc4613b6a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c27602c83613278565b9150613c3282613bcb565b604082019050919050565b60006020820190508181036000830152613c5681613c1a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cb9602183613278565b9150613cc482613c5d565b604082019050919050565b60006020820190508181036000830152613ce881613cac565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613d4b603883613278565b9150613d5682613cef565b604082019050919050565b60006020820190508181036000830152613d7a81613d3e565b9050919050565b7f5072652d73616c65206d696e74696e67206973206e6f74206163746976650000600082015250565b6000613db7601e83613278565b9150613dc282613d81565b602082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e2782613328565b9150613e3283613328565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6b57613e6a613ded565b5b828202905092915050565b7f596f75206861766520756e73756666696369656e742066756e64210000000000600082015250565b6000613eac601b83613278565b9150613eb782613e76565b602082019050919050565b60006020820190508181036000830152613edb81613e9f565b9050919050565b60008160601b9050919050565b6000613efa82613ee2565b9050919050565b6000613f0c82613eef565b9050919050565b613f24613f1f826133ab565b613f01565b82525050565b6000819050919050565b613f45613f4082613328565b613f2a565b82525050565b60008160f81b9050919050565b6000613f6382613f4b565b9050919050565b6000613f7582613f58565b9050919050565b613f8d613f8882613237565b613f6a565b82525050565b6000613f9f8286613f13565b601482019150613faf8285613f34565b602082019150613fbf8284613f7c565b600182019150819050949350505050565b7f596f75277265206e6f7420696e2077686974656c697374210000000000000000600082015250565b6000614006601883613278565b915061401182613fd0565b602082019050919050565b6000602082019050818103600083015261403581613ff9565b9050919050565b600061404782613328565b915061405283613328565b92508282101561406557614064613ded565b5b828203905092915050565b7f596f7527726520657863656564696e67207265676973746572656420616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b60006140cc602283613278565b91506140d782614070565b604082019050919050565b600060208201905081810360008301526140fb816140bf565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061415e603183613278565b915061416982614102565b604082019050919050565b6000602082019050818103600083015261418d81614151565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141ca602083613278565b91506141d582614194565b602082019050919050565b600060208201905081810360008301526141f9816141bd565b9050919050565b7f57652043616e2774206368616e67652062617365555249000000000000000000600082015250565b6000614236601783613278565b915061424182614200565b602082019050919050565b6000602082019050818103600083015261426581614229565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006142c8602983613278565b91506142d38261426c565b604082019050919050565b600060208201905081810360008301526142f7816142bb565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061435a602a83613278565b9150614365826142fe565b604082019050919050565b600060208201905081810360008301526143898161434d565b9050919050565b7f5075626c69632073616c652077696c6c207374617274206f6e2031337468204460008201527f6563656d6265722031393a30303a303020555443000000000000000000000000602082015250565b60006143ec603483613278565b91506143f782614390565b604082019050919050565b6000602082019050818103600083015261441b816143df565b9050919050565b7f4d6178696d756d206d696e7420616d6f756e7420697320350000000000000000600082015250565b6000614458601883613278565b915061446382614422565b602082019050919050565b600060208201905081810360008301526144878161444b565b9050919050565b600061449982613328565b91506144a483613328565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144d9576144d8613ded565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061451e82613328565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455157614550613ded565b5b600182019050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006145b8602f83613278565b91506145c38261455c565b604082019050919050565b600060208201905081810360008301526145e7816145ab565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461461b81613b99565b61462581866145ee565b94506001821660008114614640576001811461465157614684565b60ff19831686528186019350614684565b61465a856145f9565b60005b8381101561467c5781548189015260018201915060208101905061465d565b838801955050505b50505092915050565b60006146988261326d565b6146a281856145ee565b93506146b2818560208601613289565b80840191505092915050565b60006146ca828661460e565b91506146d6828561468d565b91506146e2828461460e565b9150819050949350505050565b60006146fa826133ab565b9050919050565b61470a816146ef565b811461471557600080fd5b50565b60008151905061472781614701565b92915050565b600060208284031215614743576147426131a8565b5b600061475184828501614718565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147b6602683613278565b91506147c18261475a565b604082019050919050565b600060208201905081810360008301526147e5816147a9565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b6000614822601283613278565b915061482d826147ec565b602082019050919050565b6000602082019050818103600083015261485181614815565b9050919050565b7f596f7527726520657863656564696e67206d6178696d756d20746f6b656e7300600082015250565b600061488e601f83613278565b915061489982614858565b602082019050919050565b600060208201905081810360008301526148bd81614881565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614920602c83613278565b915061492b826148c4565b604082019050919050565b6000602082019050818103600083015261494f81614913565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006149b2602983613278565b91506149bd82614956565b604082019050919050565b600060208201905081810360008301526149e1816149a5565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a44602483613278565b9150614a4f826149e8565b604082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614ab0601983613278565b9150614abb82614a7a565b602082019050919050565b60006020820190508181036000830152614adf81614aa3565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614b42603283613278565b9150614b4d82614ae6565b604082019050919050565b60006020820190508181036000830152614b7181614b35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bb282613328565b9150614bbd83613328565b925082614bcd57614bcc614b78565b5b828204905092915050565b6000614be382613328565b9150614bee83613328565b925082614bfe57614bfd614b78565b5b828206905092915050565b6000819050919050565b614c24614c1f82613530565b614c09565b82525050565b6000614c368285614c13565b602082019150614c468284614c13565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000614c7d82614c56565b614c878185614c61565b9350614c97818560208601613289565b614ca0816132bc565b840191505092915050565b6000608082019050614cc060008301876133bd565b614ccd60208301866133bd565b614cda6040830185613680565b8181036060830152614cec8184614c72565b905095945050505050565b600081519050614d06816131de565b92915050565b600060208284031215614d2257614d216131a8565b5b6000614d3084828501614cf7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d6f602083613278565b9150614d7a82614d39565b602082019050919050565b60006020820190508181036000830152614d9e81614d62565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614ddb601c83613278565b9150614de682614da5565b602082019050919050565b60006020820190508181036000830152614e0a81614dce565b905091905056fea2646970667358221220f1fa7771ed24ff0dcccf2bc46d1823c9e6d03c1f5727dd5c7bedff07d8a4f15f64736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c13401dd53a405b05fd66f05ad200ff381b89fc2014bd4f1ad2b7d1aaaba9ca1c1000000000000000000000000000000000000000000000000000000000000000943727970746f707573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f43544f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a463767565463416836594c4a50574c6b6e74387836383539313847363156754b6b414a427669534333776f2f00000000000000000000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f63727970746f7075736e66742e696f2f636f6e74726163742e6a736f6e000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102465760003560e01c8063715018a611610139578063c6682862116100b6578063da3ef23f1161007a578063da3ef23f1461081d578063e8a3d48514610846578063e985e9c514610871578063efa00ce7146108ae578063f2fde38b146108d7578063fdea8e0b1461090057610246565b8063c668286214610722578063c839fe941461074d578063c87b56dd1461078a578063cd7c0326146107c7578063d5abeb01146107f257610246565b806395d89b41116100fd57806395d89b411461065e578063a22cb46514610689578063b3ab66b0146106b2578063b88d4fde146106ce578063b94805a2146106f757610246565b8063715018a6146105b1578063753868e3146105c85780637cb64759146105df5780638da5cb5b1461060857806392829d741461063357610246565b806342842e0e116101c75780635d148e5c1161018b5780635d148e5c146104b85780636352211e146104e357806365aeb061146105205780636c0360eb1461054957806370a082311461057457610246565b806342842e0e146103e7578063452c1b891461041057806346a7dadc1461043b57806355f804b3146104645780635c975abb1461048d57610246565b806318160ddd1161020e57806318160ddd1461033557806323b872dd146103605780632a23d07d14610389578063309385dc146103b45780633ccfd60b146103dd57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f05780630d6a726614610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061320a565b61092b565b60405161027f9190613252565b60405180910390f35b34801561029457600080fd5b5061029d610a0d565b6040516102aa9190613306565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d5919061335e565b610a9f565b6040516102e791906133cc565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613413565b610b24565b005b610333600480360381019061032e91906135fd565b610c3c565b005b34801561034157600080fd5b5061034a610f3a565b604051610357919061368f565b60405180910390f35b34801561036c57600080fd5b50610387600480360381019061038291906136aa565b610f57565b005b34801561039557600080fd5b5061039e610fb7565b6040516103ab919061368f565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906136fd565b610fbd565b005b6103e5611045565b005b3480156103f357600080fd5b5061040e600480360381019061040991906136aa565b61108c565b005b34801561041c57600080fd5b506104256110ac565b6040516104329190613306565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d91906136fd565b61113a565b005b34801561047057600080fd5b5061048b600480360381019061048691906137df565b6111fa565b005b34801561049957600080fd5b506104a2611317565b6040516104af9190613252565b60405180910390f35b3480156104c457600080fd5b506104cd61132a565b6040516104da9190613252565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061335e565b61133d565b60405161051791906133cc565b60405180910390f35b34801561052c57600080fd5b506105476004803603810190610542919061335e565b6113ef565b005b34801561055557600080fd5b5061055e61150a565b60405161056b9190613306565b60405180910390f35b34801561058057600080fd5b5061059b600480360381019061059691906136fd565b611598565b6040516105a8919061368f565b60405180910390f35b3480156105bd57600080fd5b506105c6611650565b005b3480156105d457600080fd5b506105dd6116d8565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613828565b611771565b005b34801561061457600080fd5b5061061d6117f7565b60405161062a91906133cc565b60405180910390f35b34801561063f57600080fd5b50610648611821565b604051610655919061368f565b60405180910390f35b34801561066a57600080fd5b50610673611827565b6040516106809190613306565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613855565b6118b9565b005b6106cc60048036038101906106c7919061335e565b6118cf565b005b3480156106da57600080fd5b506106f560048036038101906106f09190613936565b611aea565b005b34801561070357600080fd5b5061070c611b4c565b6040516107199190613252565b60405180910390f35b34801561072e57600080fd5b50610737611b5f565b6040516107449190613306565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f91906139b9565b611bed565b6040516107819190613aca565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac919061335e565b611d4d565b6040516107be9190613306565b60405180910390f35b3480156107d357600080fd5b506107dc611df8565b6040516107e991906133cc565b60405180910390f35b3480156107fe57600080fd5b50610807611e1e565b6040516108149190613b0f565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f91906137df565b611e38565b005b34801561085257600080fd5b5061085b611ece565b6040516108689190613306565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613b2a565b611f60565b6040516108a59190613252565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906137df565b612053565b005b3480156108e357600080fd5b506108fe60048036038101906108f991906136fd565b612120565b005b34801561090c57600080fd5b50610915612218565b6040516109229190613252565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109f657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a065750610a058261224f565b5b9050919050565b606060008054610a1c90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4890613b99565b8015610a955780601f10610a6a57610100808354040283529160200191610a95565b820191906000526020600020905b815481529060010190602001808311610a7857829003601f168201915b5050505050905090565b6000610aaa826122b9565b610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613c3d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2f8261133d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790613ccf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bbf612325565b73ffffffffffffffffffffffffffffffffffffffff161480610bee5750610bed81610be8612325565b611f60565b5b610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2490613d61565b60405180910390fd5b610c37838361232d565b505050565b600a601a9054906101000a900460ff16610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290613dcd565b60405180910390fd5b8180610ca4575083600854610ca09190613e1c565b3410155b610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90613ec2565b60405180910390fd5b610d1a81600c54338686604051602001610cff93929190613f93565b604051602081830303815290604052805190602001206123e6565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d509061401c565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e47576001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600084601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e94919061403c565b1015610ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc906140e2565b60405180910390fd5b83601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f24919061403c565b92505081905550610f34846123fd565b50505050565b60006001610f486007612241565b610f52919061403c565b905090565b610f68610f62612325565b826124f7565b610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90614174565b60405180910390fd5b610fb28383836125d5565b505050565b60085481565b610fc5612325565b73ffffffffffffffffffffffffffffffffffffffff16610fe36117f7565b73ffffffffffffffffffffffffffffffffffffffff1614611039576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611030906141e0565b60405180910390fd5b61104281612120565b50565b61104d6117f7565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061108a57600080fd5b565b6110a783838360405180602001604052806000815250611aea565b505050565b600d80546110b990613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546110e590613b99565b80156111325780601f1061110757610100808354040283529160200191611132565b820191906000526020600020905b81548152906001019060200180831161111557829003601f168201915b505050505081565b611142612325565b73ffffffffffffffffffffffffffffffffffffffff166111606117f7565b73ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad906141e0565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611202612325565b73ffffffffffffffffffffffffffffffffffffffff166112206117f7565b73ffffffffffffffffffffffffffffffffffffffff1614611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d906141e0565b60405180910390fd5b600a60199054906101000a900460ff16156112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd9061424c565b60405180910390fd5b80600e90805190602001906112dc9291906130fb565b507f228a3ac0675af69daeaaa5b8d369fe2faae665e7f340f0b78ccbb84e17b4f6948160405161130c9190613306565b60405180910390a150565b600a60189054906101000a900460ff1681565b600a60199054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd906142de565b60405180910390fd5b80915050919050565b6113f7612325565b73ffffffffffffffffffffffffffffffffffffffff166114156117f7565b73ffffffffffffffffffffffffffffffffffffffff161461146b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611462906141e0565b60405180910390fd5b600081141561149f57600a60189054906101000a900460ff1615600a60186101000a81548160ff0219169083151502179055505b60018114156114d357600a601a9054906101000a900460ff1615600a601a6101000a81548160ff0219169083151502179055505b600281141561150757600a601b9054906101000a900460ff1615600a601b6101000a81548160ff0219169083151502179055505b50565b600e805461151790613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461154390613b99565b80156115905780601f1061156557610100808354040283529160200191611590565b820191906000526020600020905b81548152906001019060200180831161157357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614370565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611658612325565b73ffffffffffffffffffffffffffffffffffffffff166116766117f7565b73ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c3906141e0565b60405180910390fd5b6116d66000612831565b565b6116e0612325565b73ffffffffffffffffffffffffffffffffffffffff166116fe6117f7565b73ffffffffffffffffffffffffffffffffffffffff1614611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b906141e0565b60405180910390fd5b6001600a60196101000a81548160ff021916908315150217905550565b611779612325565b73ffffffffffffffffffffffffffffffffffffffff166117976117f7565b73ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906141e0565b60405180910390fd5b80600c8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b60606001805461183690613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461186290613b99565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b5050505050905090565b6118cb6118c4612325565b83836128f7565b5050565b600a601b9054906101000a900460ff1661191e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191590614402565b60405180910390fd5b6000600a60089054906101000a900467ffffffffffffffff1667ffffffffffffffff16905081816fffffffffffffffffffffffffffffffff161015611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f9061446e565b60405180910390fd5b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e3919061448e565b816fffffffffffffffffffffffffffffffff161015611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e9061446e565b60405180910390fd5b81600954611a459190613e1c565b341015611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613ec2565b60405180910390fd5b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ad6919061448e565b92505081905550611ae6826123fd565b5050565b611afb611af5612325565b836124f7565b611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190614174565b60405180910390fd5b611b4684848484612a64565b50505050565b600a601b9054906101000a900460ff1681565b600f8054611b6c90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9890613b99565b8015611be55780601f10611bba57610100808354040283529160200191611be5565b820191906000526020600020905b815481529060010190602001808311611bc857829003601f168201915b505050505081565b60606000611bfa85611598565b90506000811415611c5757600067ffffffffffffffff811115611c2057611c1f613484565b5b604051908082528060200260200182016040528015611c4e5781602001602082028036833780820191505090505b50915050611d46565b60008167ffffffffffffffff811115611c7357611c72613484565b5b604051908082528060200260200182016040528015611ca15781602001602082028036833780820191505090505b5090506000808690505b85811015611d3e5783821415611cc057611d3e565b8773ffffffffffffffffffffffffffffffffffffffff16611ce08261133d565b73ffffffffffffffffffffffffffffffffffffffff161415611d2b5780838381518110611d1057611d0f6144e4565b5b6020026020010181815250508180611d2790614513565b9250505b8080611d3690614513565b915050611cab565b508193505050505b9392505050565b6060611d58826122b9565b611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e906145ce565b60405180910390fd5b6000600e8054611da690613b99565b905011611dc25760405180602001604052806000815250611df1565b600e611dcd83612ac0565b600f604051602001611de1939291906146be565b6040516020818303038152906040525b9050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900467ffffffffffffffff1681565b611e40612325565b73ffffffffffffffffffffffffffffffffffffffff16611e5e6117f7565b73ffffffffffffffffffffffffffffffffffffffff1614611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab906141e0565b60405180910390fd5b80600f9080519060200190611eca9291906130fb565b5050565b6060600d8054611edd90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990613b99565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050905090565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611fd891906133cc565b602060405180830381865afa158015611ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612019919061472d565b73ffffffffffffffffffffffffffffffffffffffff16141561203f57600191505061204d565b6120498484612c21565b9150505b92915050565b61205b612325565b73ffffffffffffffffffffffffffffffffffffffff166120796117f7565b73ffffffffffffffffffffffffffffffffffffffff16146120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906141e0565b60405180910390fd5b80600d90805190602001906120e59291906130fb565b507fd5ee5eaf65263bab5d569890714d123ad48a9e54409d35e71d374f3dd300bba0816040516121159190613306565b60405180910390a150565b612128612325565b73ffffffffffffffffffffffffffffffffffffffff166121466117f7565b73ffffffffffffffffffffffffffffffffffffffff161461219c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612193906141e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906147cc565b60405180910390fd5b61221581612831565b50565b600a601a9054906101000a900460ff1681565b6001816000016000828254019250508190555050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123a08361133d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000826123f38584612cb5565b1490509392505050565b600a60189054906101000a900460ff161561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244490614838565b60405180910390fd5b60006124596007612241565b9050600a60009054906101000a900467ffffffffffffffff1667ffffffffffffffff168282612488919061448e565b11156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c0906148a4565b60405180910390fd5b6000600190505b8281116124f2576124df612d68565b80806124ea90614513565b9150506124d0565b505050565b6000612502826122b9565b612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253890614936565b60405180910390fd5b600061254c8361133d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125bb57508373ffffffffffffffffffffffffffffffffffffffff166125a384610a9f565b73ffffffffffffffffffffffffffffffffffffffff16145b806125cc57506125cb8185611f60565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125f58261133d565b73ffffffffffffffffffffffffffffffffffffffff161461264b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612642906149c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b290614a5a565b60405180910390fd5b6126c6838383612d8d565b6126d160008261232d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612721919061403c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612778919061448e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295d90614ac6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a579190613252565b60405180910390a3505050565b612a6f8484846125d5565b612a7b84848484612d92565b612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614b58565b60405180910390fd5b50505050565b60606000821415612b08576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c1c565b600082905060005b60008214612b3a578080612b2390614513565b915050600a82612b339190614ba7565b9150612b10565b60008167ffffffffffffffff811115612b5657612b55613484565b5b6040519080825280601f01601f191660200182016040528015612b885781602001600182028036833780820191505090505b5090505b60008514612c1557600182612ba1919061403c565b9150600a85612bb09190614bd8565b6030612bbc919061448e565b60f81b818381518110612bd257612bd16144e4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c0e9190614ba7565b9450612b8c565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008082905060005b8451811015612d5d576000858281518110612cdc57612cdb6144e4565b5b60200260200101519050808311612d1d578281604051602001612d00929190614c2a565b604051602081830303815290604052805190602001209250612d49565b8083604051602001612d30929190614c2a565b6040516020818303038152906040528051906020012092505b508080612d5590614513565b915050612cbe565b508091505092915050565b6000612d746007612241565b9050612d80600761222b565b612d8a3382612f1a565b50565b505050565b6000612db38473ffffffffffffffffffffffffffffffffffffffff166130e8565b15612f0d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ddc612325565b8786866040518563ffffffff1660e01b8152600401612dfe9493929190614cab565b6020604051808303816000875af1925050508015612e3a57506040513d601f19601f82011682018060405250810190612e379190614d0c565b60015b612ebd573d8060008114612e6a576040519150601f19603f3d011682016040523d82523d6000602084013e612e6f565b606091505b50600081511415612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac90614b58565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f12565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8190614d85565b60405180910390fd5b612f93816122b9565b15612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90614df1565b60405180910390fd5b612fdf60008383612d8d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461302f919061448e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461310790613b99565b90600052602060002090601f0160209004810192826131295760008555613170565b82601f1061314257805160ff1916838001178555613170565b82800160010185558215613170579182015b8281111561316f578251825591602001919060010190613154565b5b50905061317d9190613181565b5090565b5b8082111561319a576000816000905550600101613182565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131e7816131b2565b81146131f257600080fd5b50565b600081359050613204816131de565b92915050565b6000602082840312156132205761321f6131a8565b5b600061322e848285016131f5565b91505092915050565b60008115159050919050565b61324c81613237565b82525050565b60006020820190506132676000830184613243565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132a757808201518184015260208101905061328c565b838111156132b6576000848401525b50505050565b6000601f19601f8301169050919050565b60006132d88261326d565b6132e28185613278565b93506132f2818560208601613289565b6132fb816132bc565b840191505092915050565b6000602082019050818103600083015261332081846132cd565b905092915050565b6000819050919050565b61333b81613328565b811461334657600080fd5b50565b60008135905061335881613332565b92915050565b600060208284031215613374576133736131a8565b5b600061338284828501613349565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133b68261338b565b9050919050565b6133c6816133ab565b82525050565b60006020820190506133e160008301846133bd565b92915050565b6133f0816133ab565b81146133fb57600080fd5b50565b60008135905061340d816133e7565b92915050565b6000806040838503121561342a576134296131a8565b5b6000613438858286016133fe565b925050602061344985828601613349565b9150509250929050565b61345c81613237565b811461346757600080fd5b50565b60008135905061347981613453565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6134bc826132bc565b810181811067ffffffffffffffff821117156134db576134da613484565b5b80604052505050565b60006134ee61319e565b90506134fa82826134b3565b919050565b600067ffffffffffffffff82111561351a57613519613484565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61354381613530565b811461354e57600080fd5b50565b6000813590506135608161353a565b92915050565b6000613579613574846134ff565b6134e4565b9050808382526020820190506020840283018581111561359c5761359b61352b565b5b835b818110156135c557806135b18882613551565b84526020840193505060208101905061359e565b5050509392505050565b600082601f8301126135e4576135e361347f565b5b81356135f4848260208601613566565b91505092915050565b60008060008060808587031215613617576136166131a8565b5b600061362587828801613349565b945050602061363687828801613349565b93505060406136478782880161346a565b925050606085013567ffffffffffffffff811115613668576136676131ad565b5b613674878288016135cf565b91505092959194509250565b61368981613328565b82525050565b60006020820190506136a46000830184613680565b92915050565b6000806000606084860312156136c3576136c26131a8565b5b60006136d1868287016133fe565b93505060206136e2868287016133fe565b92505060406136f386828701613349565b9150509250925092565b600060208284031215613713576137126131a8565b5b6000613721848285016133fe565b91505092915050565b600080fd5b600067ffffffffffffffff82111561374a57613749613484565b5b613753826132bc565b9050602081019050919050565b82818337600083830152505050565b600061378261377d8461372f565b6134e4565b90508281526020810184848401111561379e5761379d61372a565b5b6137a9848285613760565b509392505050565b600082601f8301126137c6576137c561347f565b5b81356137d684826020860161376f565b91505092915050565b6000602082840312156137f5576137f46131a8565b5b600082013567ffffffffffffffff811115613813576138126131ad565b5b61381f848285016137b1565b91505092915050565b60006020828403121561383e5761383d6131a8565b5b600061384c84828501613551565b91505092915050565b6000806040838503121561386c5761386b6131a8565b5b600061387a858286016133fe565b925050602061388b8582860161346a565b9150509250929050565b600067ffffffffffffffff8211156138b0576138af613484565b5b6138b9826132bc565b9050602081019050919050565b60006138d96138d484613895565b6134e4565b9050828152602081018484840111156138f5576138f461372a565b5b613900848285613760565b509392505050565b600082601f83011261391d5761391c61347f565b5b813561392d8482602086016138c6565b91505092915050565b600080600080608085870312156139505761394f6131a8565b5b600061395e878288016133fe565b945050602061396f878288016133fe565b935050604061398087828801613349565b925050606085013567ffffffffffffffff8111156139a1576139a06131ad565b5b6139ad87828801613908565b91505092959194509250565b6000806000606084860312156139d2576139d16131a8565b5b60006139e0868287016133fe565b93505060206139f186828701613349565b9250506040613a0286828701613349565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a4181613328565b82525050565b6000613a538383613a38565b60208301905092915050565b6000602082019050919050565b6000613a7782613a0c565b613a818185613a17565b9350613a8c83613a28565b8060005b83811015613abd578151613aa48882613a47565b9750613aaf83613a5f565b925050600181019050613a90565b5085935050505092915050565b60006020820190508181036000830152613ae48184613a6c565b905092915050565b600067ffffffffffffffff82169050919050565b613b0981613aec565b82525050565b6000602082019050613b246000830184613b00565b92915050565b60008060408385031215613b4157613b406131a8565b5b6000613b4f858286016133fe565b9250506020613b60858286016133fe565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bb157607f821691505b60208210811415613bc557613bc4613b6a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c27602c83613278565b9150613c3282613bcb565b604082019050919050565b60006020820190508181036000830152613c5681613c1a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cb9602183613278565b9150613cc482613c5d565b604082019050919050565b60006020820190508181036000830152613ce881613cac565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613d4b603883613278565b9150613d5682613cef565b604082019050919050565b60006020820190508181036000830152613d7a81613d3e565b9050919050565b7f5072652d73616c65206d696e74696e67206973206e6f74206163746976650000600082015250565b6000613db7601e83613278565b9150613dc282613d81565b602082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e2782613328565b9150613e3283613328565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6b57613e6a613ded565b5b828202905092915050565b7f596f75206861766520756e73756666696369656e742066756e64210000000000600082015250565b6000613eac601b83613278565b9150613eb782613e76565b602082019050919050565b60006020820190508181036000830152613edb81613e9f565b9050919050565b60008160601b9050919050565b6000613efa82613ee2565b9050919050565b6000613f0c82613eef565b9050919050565b613f24613f1f826133ab565b613f01565b82525050565b6000819050919050565b613f45613f4082613328565b613f2a565b82525050565b60008160f81b9050919050565b6000613f6382613f4b565b9050919050565b6000613f7582613f58565b9050919050565b613f8d613f8882613237565b613f6a565b82525050565b6000613f9f8286613f13565b601482019150613faf8285613f34565b602082019150613fbf8284613f7c565b600182019150819050949350505050565b7f596f75277265206e6f7420696e2077686974656c697374210000000000000000600082015250565b6000614006601883613278565b915061401182613fd0565b602082019050919050565b6000602082019050818103600083015261403581613ff9565b9050919050565b600061404782613328565b915061405283613328565b92508282101561406557614064613ded565b5b828203905092915050565b7f596f7527726520657863656564696e67207265676973746572656420616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b60006140cc602283613278565b91506140d782614070565b604082019050919050565b600060208201905081810360008301526140fb816140bf565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061415e603183613278565b915061416982614102565b604082019050919050565b6000602082019050818103600083015261418d81614151565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141ca602083613278565b91506141d582614194565b602082019050919050565b600060208201905081810360008301526141f9816141bd565b9050919050565b7f57652043616e2774206368616e67652062617365555249000000000000000000600082015250565b6000614236601783613278565b915061424182614200565b602082019050919050565b6000602082019050818103600083015261426581614229565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006142c8602983613278565b91506142d38261426c565b604082019050919050565b600060208201905081810360008301526142f7816142bb565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061435a602a83613278565b9150614365826142fe565b604082019050919050565b600060208201905081810360008301526143898161434d565b9050919050565b7f5075626c69632073616c652077696c6c207374617274206f6e2031337468204460008201527f6563656d6265722031393a30303a303020555443000000000000000000000000602082015250565b60006143ec603483613278565b91506143f782614390565b604082019050919050565b6000602082019050818103600083015261441b816143df565b9050919050565b7f4d6178696d756d206d696e7420616d6f756e7420697320350000000000000000600082015250565b6000614458601883613278565b915061446382614422565b602082019050919050565b600060208201905081810360008301526144878161444b565b9050919050565b600061449982613328565b91506144a483613328565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144d9576144d8613ded565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061451e82613328565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455157614550613ded565b5b600182019050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006145b8602f83613278565b91506145c38261455c565b604082019050919050565b600060208201905081810360008301526145e7816145ab565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461461b81613b99565b61462581866145ee565b94506001821660008114614640576001811461465157614684565b60ff19831686528186019350614684565b61465a856145f9565b60005b8381101561467c5781548189015260018201915060208101905061465d565b838801955050505b50505092915050565b60006146988261326d565b6146a281856145ee565b93506146b2818560208601613289565b80840191505092915050565b60006146ca828661460e565b91506146d6828561468d565b91506146e2828461460e565b9150819050949350505050565b60006146fa826133ab565b9050919050565b61470a816146ef565b811461471557600080fd5b50565b60008151905061472781614701565b92915050565b600060208284031215614743576147426131a8565b5b600061475184828501614718565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147b6602683613278565b91506147c18261475a565b604082019050919050565b600060208201905081810360008301526147e5816147a9565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b6000614822601283613278565b915061482d826147ec565b602082019050919050565b6000602082019050818103600083015261485181614815565b9050919050565b7f596f7527726520657863656564696e67206d6178696d756d20746f6b656e7300600082015250565b600061488e601f83613278565b915061489982614858565b602082019050919050565b600060208201905081810360008301526148bd81614881565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614920602c83613278565b915061492b826148c4565b604082019050919050565b6000602082019050818103600083015261494f81614913565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006149b2602983613278565b91506149bd82614956565b604082019050919050565b600060208201905081810360008301526149e1816149a5565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a44602483613278565b9150614a4f826149e8565b604082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614ab0601983613278565b9150614abb82614a7a565b602082019050919050565b60006020820190508181036000830152614adf81614aa3565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614b42603283613278565b9150614b4d82614ae6565b604082019050919050565b60006020820190508181036000830152614b7181614b35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bb282613328565b9150614bbd83613328565b925082614bcd57614bcc614b78565b5b828204905092915050565b6000614be382613328565b9150614bee83613328565b925082614bfe57614bfd614b78565b5b828206905092915050565b6000819050919050565b614c24614c1f82613530565b614c09565b82525050565b6000614c368285614c13565b602082019150614c468284614c13565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000614c7d82614c56565b614c878185614c61565b9350614c97818560208601613289565b614ca0816132bc565b840191505092915050565b6000608082019050614cc060008301876133bd565b614ccd60208301866133bd565b614cda6040830185613680565b8181036060830152614cec8184614c72565b905095945050505050565b600081519050614d06816131de565b92915050565b600060208284031215614d2257614d216131a8565b5b6000614d3084828501614cf7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d6f602083613278565b9150614d7a82614d39565b602082019050919050565b60006020820190508181036000830152614d9e81614d62565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614ddb601c83613278565b9150614de682614da5565b602082019050919050565b60006020820190508181036000830152614e0a81614dce565b905091905056fea2646970667358221220f1fa7771ed24ff0dcccf2bc46d1823c9e6d03c1f5727dd5c7bedff07d8a4f15f64736f6c634300080a0033

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

00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c13401dd53a405b05fd66f05ad200ff381b89fc2014bd4f1ad2b7d1aaaba9ca1c1000000000000000000000000000000000000000000000000000000000000000943727970746f707573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f43544f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a463767565463416836594c4a50574c6b6e74387836383539313847363156754b6b414a427669534333776f2f00000000000000000000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f63727970746f7075736e66742e696f2f636f6e74726163742e6a736f6e000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Cryptopus
Arg [1] : _symbol (string): OCTO
Arg [2] : _initBaseURI (string): ipfs://QmZF7gVTcAh6YLJPWLknt8x685918G61VuKkAJBviSC3wo/
Arg [3] : _initcontractURI (string): https://cryptopusnft.io/contract.json
Arg [4] : _initProxyAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [5] : _merkleRoot (bytes32): 0x3401dd53a405b05fd66f05ad200ff381b89fc2014bd4f1ad2b7d1aaaba9ca1c1

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [4] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [5] : 3401dd53a405b05fd66f05ad200ff381b89fc2014bd4f1ad2b7d1aaaba9ca1c1
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [7] : 43727970746f7075730000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 4f43544f00000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [11] : 697066733a2f2f516d5a463767565463416836594c4a50574c6b6e7438783638
Arg [12] : 3539313847363156754b6b414a427669534333776f2f00000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [14] : 68747470733a2f2f63727970746f7075736e66742e696f2f636f6e7472616374
Arg [15] : 2e6a736f6e000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

41718:6587:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29078:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30023:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31582:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31105:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43837:812;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43720:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32332:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41869:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45842:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46989:107;;;:::i;:::-;;32742:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42330:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46632:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46083:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42111:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42144:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29717:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46778:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42362:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29447:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10066:103;;;;;;;;;;;;;:::i;:::-;;45753:77;;;;;;;;;;;;;:::i;:::-;;45965:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9415:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41915:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30192:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31875:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44661:611;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32998:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42218:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42390:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47104:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45284:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42255:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41964:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46309:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45612:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47895:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46451:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10324:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42184:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29078:305;29180:4;29232:25;29217:40;;;:11;:40;;;;:105;;;;29289:33;29274:48;;;:11;:48;;;;29217:105;:158;;;;29339:36;29363:11;29339:23;:36::i;:::-;29217:158;29197:178;;29078:305;;;:::o;30023:100::-;30077:13;30110:5;30103:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30023:100;:::o;31582:221::-;31658:7;31686:16;31694:7;31686;:16::i;:::-;31678:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31771:15;:24;31787:7;31771:24;;;;;;;;;;;;;;;;;;;;;31764:31;;31582:221;;;:::o;31105:411::-;31186:13;31202:23;31217:7;31202:14;:23::i;:::-;31186:39;;31250:5;31244:11;;:2;:11;;;;31236:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31344:5;31328:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31353:37;31370:5;31377:12;:10;:12::i;:::-;31353:16;:37::i;:::-;31328:62;31306:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31487:21;31496:2;31500:7;31487:8;:21::i;:::-;31175:341;31105:411;;:::o;43837:812::-;43981:7;;;;;;;;;;;43973:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;44042:12;:54;;;;44085:11;44071;;:25;;;;:::i;:::-;44058:9;:38;;44042:54;44034:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;44147:105;44166:5;44172:10;;44211;44222:14;44237:12;44194:56;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44184:67;;;;;;44147:18;:105::i;:::-;44138:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;44306:13;:25;44320:10;44306:25;;;;;;;;;;;;;;;;;;;;;;;;;44301:148;;44373:4;44347:13;:25;44361:10;44347:25;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;44423:14;44392:18;:30;44411:10;44392:30;;;;;;;;;;;;;;;:45;;;;44301:148;44511:1;44498:11;44467:18;:30;44486:10;44467:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:45;;44459:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;44593:11;44561:18;:30;44580:10;44561:30;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;44615:26;44629:11;44615:13;:26::i;:::-;43837:812;;;;:::o;43720:105::-;43764:4;43816:1;43788:25;:15;:23;:25::i;:::-;:29;;;;:::i;:::-;43781:36;;43720:105;:::o;32332:339::-;32527:41;32546:12;:10;:12::i;:::-;32560:7;32527:18;:41::i;:::-;32519:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32635:28;32645:4;32651:2;32655:7;32635:9;:28::i;:::-;32332:339;;;:::o;41869:39::-;;;;:::o;45842:111::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45917:28:::1;45935:9;45917:17;:28::i;:::-;45842:111:::0;:::o;46989:107::-;47051:7;:5;:7::i;:::-;47043:21;;:44;47065:21;47043:44;;;;;;;;;;;;;;;;;;;;;;;47035:53;;;;;;46989:107::o;32742:185::-;32880:39;32897:4;32903:2;32907:7;32880:39;;;;;;;;;;;;:16;:39::i;:::-;32742:185;;;:::o;42330:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46632:138::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46741:21:::1;46718:20;;:44;;;;;;;;;;;;;;;;;;46632:138:::0;:::o;46083:214::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46169:13:::1;;;;;;;;;;;46168:14;46160:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;46230:11;46220:7;:21;;;;;;;;;;;;:::i;:::-;;46257:32;46277:11;46257:32;;;;;;:::i;:::-;;;;;;;;46083:214:::0;:::o;42111:26::-;;;;;;;;;;;;;:::o;42144:33::-;;;;;;;;;;;;;:::o;29717:239::-;29789:7;29809:13;29825:7;:16;29833:7;29825:16;;;;;;;;;;;;;;;;;;;;;29809:32;;29877:1;29860:19;;:5;:19;;;;29852:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29943:5;29936:12;;;29717:239;;;:::o;46778:197::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46858:1:::1;46849:7;:10;46845:30;;;46869:6;;;;;;;;;;;46868:7;46861:6;;:14;;;;;;;;;;;;;;;;;;46845:30;46899:1;46890:7;:10;46886:32;;;46911:7;;;;;;;;;;;46910:8;46902:7;;:16;;;;;;;;;;;;;;;;;;46886:32;46942:1;46933:7;:10;46929:38;;;46957:10;;;;;;;;;;;46956:11;46945:10;;:22;;;;;;;;;;;;;;;;;;46929:38;46778:197:::0;:::o;42362:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29447:208::-;29519:7;29564:1;29547:19;;:5;:19;;;;29539:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29631:9;:16;29641:5;29631:16;;;;;;;;;;;;;;;;29624:23;;29447:208;;;:::o;10066:103::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10131:30:::1;10158:1;10131:18;:30::i;:::-;10066:103::o:0;45753:77::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45818:4:::1;45804:13;;:18;;;;;;;;;;;;;;;;;;45753:77::o:0;45965:106::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46052:11:::1;46039:10;:24;;;;45965:106:::0;:::o;9415:87::-;9461:7;9488:6;;;;;;;;;;;9481:13;;9415:87;:::o;41915:42::-;;;;:::o;30192:104::-;30248:13;30281:7;30274:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30192:104;:::o;31875:155::-;31970:52;31989:12;:10;:12::i;:::-;32003:8;32013;31970:18;:52::i;:::-;31875:155;;:::o;44661:611::-;44742:10;;;;;;;;;;;44734:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44820:29;44852:19;;;;;;;;;;;44820:51;;;;44915:11;44890:21;:36;;;;44882:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;45030:11;44998:19;:31;45018:10;44998:31;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;44973:21;:68;;;;44965:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;45118:11;45101:14;;:28;;;;:::i;:::-;45088:9;:41;;45080:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;45216:11;45181:19;:31;45201:10;45181:31;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;45238:26;45252:11;45238:13;:26::i;:::-;44723:549;44661:611;:::o;32998:328::-;33173:41;33192:12;:10;:12::i;:::-;33206:7;33173:18;:41::i;:::-;33165:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33279:39;33293:4;33299:2;33303:7;33312:5;33279:13;:39::i;:::-;32998:328;;;;:::o;42218:30::-;;;;;;;;;;;;;:::o;42390:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47104:679::-;47191:16;47221:18;47242:17;47252:6;47242:9;:17::i;:::-;47221:38;;47288:1;47274:10;:15;47270:506;;;47327:1;47313:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47306:23;;;;;47270:506;47362:23;47402:10;47388:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47362:51;;47428:13;47467:15;47485:7;47467:25;;47462:273;47504:5;47494:7;:15;47462:273;;;47554:10;47545:5;:19;47541:30;;;47566:5;;47541:30;47616:6;47596:26;;:16;47604:7;47596;:16::i;:::-;:26;;;47592:128;;;47663:7;47647:6;47654:5;47647:13;;;;;;;;:::i;:::-;;;;;;;:23;;;;;47693:7;;;;;:::i;:::-;;;;47592:128;47511:9;;;;;:::i;:::-;;;;47462:273;;;;47758:6;47751:13;;;;;47104:679;;;;;;:::o;45284:316::-;45357:13;45398:16;45406:7;45398;:16::i;:::-;45388:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;45508:1;45490:7;45484:21;;;;;:::i;:::-;;;:25;:108;;;;;;;;;;;;;;;;;45536:7;45545:25;45562:7;45545:16;:25::i;:::-;45572:13;45519:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45484:108;45477:115;;45284:316;;;:::o;42255:35::-;;;;;;;;;;;;;:::o;41964:31::-;;;;;;;;;;;;;:::o;46309:130::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46414:17:::1;46398:13;:33;;;;;;;;;;;;:::i;:::-;;46309:130:::0;:::o;45612:94::-;45656:13;45687:11;45680:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45612:94;:::o;47895:407::-;47984:4;48069:27;48113:20;;;;;;;;;;;48069:65;;48190:8;48149:49;;48157:13;:21;;;48179:5;48157:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48149:49;;;48145:93;;;48222:4;48215:11;;;;;48145:93;48255:39;48278:5;48285:8;48255:22;:39::i;:::-;48248:46;;;47895:407;;;;;:::o;46451:173::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46550:15:::1;46536:11;:29;;;;;;;;;;;;:::i;:::-;;46581:35;46600:15;46581:35;;;;;;:::i;:::-;;;;;;;;46451:173:::0;:::o;10324:201::-;9646:12;:10;:12::i;:::-;9635:23;;:7;:5;:7::i;:::-;:23;;;9627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10433:1:::1;10413:22;;:8;:22;;;;10405:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10489:28;10508:8;10489:18;:28::i;:::-;10324:201:::0;:::o;42184:27::-;;;;;;;;;;;;;:::o;2697:127::-;2804:1;2786:7;:14;;;:19;;;;;;;;;;;2697:127;:::o;2575:114::-;2640:7;2667;:14;;;2660:21;;2575:114;;;:::o;21847:157::-;21932:4;21971:25;21956:40;;;:11;:40;;;;21949:47;;21847:157;;;:::o;34836:127::-;34901:4;34953:1;34925:30;;:7;:16;34933:7;34925:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34918:37;;34836:127;;;:::o;8139:98::-;8192:7;8219:10;8212:17;;8139:98;:::o;38818:174::-;38920:2;38893:15;:24;38909:7;38893:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38976:7;38972:2;38938:46;;38947:23;38962:7;38947:14;:23::i;:::-;38938:46;;;;;;;;;;;;38818:174;;:::o;4076:190::-;4201:4;4254;4225:25;4238:5;4245:4;4225:12;:25::i;:::-;:33;4218:40;;4076:190;;;;;:::o;43175:342::-;43248:6;;;;;;;;;;;43247:7;43239:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;43287:12;43302:25;:15;:23;:25::i;:::-;43287:40;;43371:9;;;;;;;;;;;43346:34;;43356:11;43346:7;:21;;;;:::i;:::-;:34;;43338:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43433:9;43445:1;43433:13;;43428:82;43453:11;43448:1;:16;43428:82;;43484:14;:12;:14::i;:::-;43466:3;;;;;:::i;:::-;;;;43428:82;;;;43228:289;43175:342;:::o;35130:348::-;35223:4;35248:16;35256:7;35248;:16::i;:::-;35240:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35324:13;35340:23;35355:7;35340:14;:23::i;:::-;35324:39;;35393:5;35382:16;;:7;:16;;;:51;;;;35426:7;35402:31;;:20;35414:7;35402:11;:20::i;:::-;:31;;;35382:51;:87;;;;35437:32;35454:5;35461:7;35437:16;:32::i;:::-;35382:87;35374:96;;;35130:348;;;;:::o;38122:578::-;38281:4;38254:31;;:23;38269:7;38254:14;:23::i;:::-;:31;;;38246:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38364:1;38350:16;;:2;:16;;;;38342:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38420:39;38441:4;38447:2;38451:7;38420:20;:39::i;:::-;38524:29;38541:1;38545:7;38524:8;:29::i;:::-;38585:1;38566:9;:15;38576:4;38566:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38614:1;38597:9;:13;38607:2;38597:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38645:2;38626:7;:16;38634:7;38626:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38684:7;38680:2;38665:27;;38674:4;38665:27;;;;;;;;;;;;38122:578;;;:::o;10685:191::-;10759:16;10778:6;;;;;;;;;;;10759:25;;10804:8;10795:6;;:17;;;;;;;;;;;;;;;;;;10859:8;10828:40;;10849:8;10828:40;;;;;;;;;;;;10748:128;10685:191;:::o;39134:315::-;39289:8;39280:17;;:5;:17;;;;39272:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39376:8;39338:18;:25;39357:5;39338:25;;;;;;;;;;;;;;;:35;39364:8;39338:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39422:8;39400:41;;39415:5;39400:41;;;39432:8;39400:41;;;;;;:::i;:::-;;;;;;;;39134:315;;;:::o;34208:::-;34365:28;34375:4;34381:2;34385:7;34365:9;:28::i;:::-;34412:48;34435:4;34441:2;34445:7;34454:5;34412:22;:48::i;:::-;34404:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34208:315;;;;:::o;5701:723::-;5757:13;5987:1;5978:5;:10;5974:53;;;6005:10;;;;;;;;;;;;;;;;;;;;;5974:53;6037:12;6052:5;6037:20;;6068:14;6093:78;6108:1;6100:4;:9;6093:78;;6126:8;;;;;:::i;:::-;;;;6157:2;6149:10;;;;;:::i;:::-;;;6093:78;;;6181:19;6213:6;6203:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6181:39;;6231:154;6247:1;6238:5;:10;6231:154;;6275:1;6265:11;;;;;:::i;:::-;;;6342:2;6334:5;:10;;;;:::i;:::-;6321:2;:24;;;;:::i;:::-;6308:39;;6291:6;6298;6291:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6371:2;6362:11;;;;;:::i;:::-;;;6231:154;;;6409:6;6395:21;;;;;5701:723;;;;:::o;32101:164::-;32198:4;32222:18;:25;32241:5;32222:25;;;;;;;;;;;;;;;:35;32248:8;32222:35;;;;;;;;;;;;;;;;;;;;;;;;;32215:42;;32101:164;;;;:::o;4628:701::-;4711:7;4731:20;4754:4;4731:27;;4774:9;4769:523;4793:5;:12;4789:1;:16;4769:523;;;4827:20;4850:5;4856:1;4850:8;;;;;;;;:::i;:::-;;;;;;;;4827:31;;4893:12;4877;:28;4873:408;;5047:12;5061;5030:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5020:55;;;;;;5005:70;;4873:408;;;5237:12;5251;5220:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5210:55;;;;;;5195:70;;4873:408;4812:480;4807:3;;;;;:::i;:::-;;;;4769:523;;;;5309:12;5302:19;;;4628:701;;;;:::o;43525:170::-;43569:15;43587:25;:15;:23;:25::i;:::-;43569:43;;43623:27;:15;:25;:27::i;:::-;43661:26;43667:10;43679:7;43661:5;:26::i;:::-;43558:137;43525:170::o;41385:126::-;;;;:::o;40014:799::-;40169:4;40190:15;:2;:13;;;:15::i;:::-;40186:620;;;40242:2;40226:36;;;40263:12;:10;:12::i;:::-;40277:4;40283:7;40292:5;40226:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40222:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40485:1;40468:6;:13;:18;40464:272;;;40511:60;;;;;;;;;;:::i;:::-;;;;;;;;40464:272;40686:6;40680:13;40671:6;40667:2;40663:15;40656:38;40222:529;40359:41;;;40349:51;;;:6;:51;;;;40342:58;;;;;40186:620;40790:4;40783:11;;40014:799;;;;;;;:::o;36814:382::-;36908:1;36894:16;;:2;:16;;;;36886:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36967:16;36975:7;36967;:16::i;:::-;36966:17;36958:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37029:45;37058:1;37062:2;37066:7;37029:20;:45::i;:::-;37104:1;37087:9;:13;37097:2;37087:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37135:2;37116:7;:16;37124:7;37116:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37180:7;37176:2;37155:33;;37172:1;37155:33;;;;;;;;;;;;36814:382;;:::o;11703:387::-;11763:4;11971:12;12038:7;12026:20;12018:28;;12081:1;12074:4;:8;12067:15;;;11703:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:116::-;5008:21;5023:5;5008:21;:::i;:::-;5001:5;4998:32;4988:60;;5044:1;5041;5034:12;4988:60;4938:116;:::o;5060:133::-;5103:5;5141:6;5128:20;5119:29;;5157:30;5181:5;5157:30;:::i;:::-;5060:133;;;;:::o;5199:117::-;5308:1;5305;5298:12;5322:180;5370:77;5367:1;5360:88;5467:4;5464:1;5457:15;5491:4;5488:1;5481:15;5508:281;5591:27;5613:4;5591:27;:::i;:::-;5583:6;5579:40;5721:6;5709:10;5706:22;5685:18;5673:10;5670:34;5667:62;5664:88;;;5732:18;;:::i;:::-;5664:88;5772:10;5768:2;5761:22;5551:238;5508:281;;:::o;5795:129::-;5829:6;5856:20;;:::i;:::-;5846:30;;5885:33;5913:4;5905:6;5885:33;:::i;:::-;5795:129;;;:::o;5930:311::-;6007:4;6097:18;6089:6;6086:30;6083:56;;;6119:18;;:::i;:::-;6083:56;6169:4;6161:6;6157:17;6149:25;;6229:4;6223;6219:15;6211:23;;5930:311;;;:::o;6247:117::-;6356:1;6353;6346:12;6370:77;6407:7;6436:5;6425:16;;6370:77;;;:::o;6453:122::-;6526:24;6544:5;6526:24;:::i;:::-;6519:5;6516:35;6506:63;;6565:1;6562;6555:12;6506:63;6453:122;:::o;6581:139::-;6627:5;6665:6;6652:20;6643:29;;6681:33;6708:5;6681:33;:::i;:::-;6581:139;;;;:::o;6743:710::-;6839:5;6864:81;6880:64;6937:6;6880:64;:::i;:::-;6864:81;:::i;:::-;6855:90;;6965:5;6994:6;6987:5;6980:21;7028:4;7021:5;7017:16;7010:23;;7081:4;7073:6;7069:17;7061:6;7057:30;7110:3;7102:6;7099:15;7096:122;;;7129:79;;:::i;:::-;7096:122;7244:6;7227:220;7261:6;7256:3;7253:15;7227:220;;;7336:3;7365:37;7398:3;7386:10;7365:37;:::i;:::-;7360:3;7353:50;7432:4;7427:3;7423:14;7416:21;;7303:144;7287:4;7282:3;7278:14;7271:21;;7227:220;;;7231:21;6845:608;;6743:710;;;;;:::o;7476:370::-;7547:5;7596:3;7589:4;7581:6;7577:17;7573:27;7563:122;;7604:79;;:::i;:::-;7563:122;7721:6;7708:20;7746:94;7836:3;7828:6;7821:4;7813:6;7809:17;7746:94;:::i;:::-;7737:103;;7553:293;7476:370;;;;:::o;7852:969::-;7960:6;7968;7976;7984;8033:3;8021:9;8012:7;8008:23;8004:33;8001:120;;;8040:79;;:::i;:::-;8001:120;8160:1;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8131:117;8287:2;8313:53;8358:7;8349:6;8338:9;8334:22;8313:53;:::i;:::-;8303:63;;8258:118;8415:2;8441:50;8483:7;8474:6;8463:9;8459:22;8441:50;:::i;:::-;8431:60;;8386:115;8568:2;8557:9;8553:18;8540:32;8599:18;8591:6;8588:30;8585:117;;;8621:79;;:::i;:::-;8585:117;8726:78;8796:7;8787:6;8776:9;8772:22;8726:78;:::i;:::-;8716:88;;8511:303;7852:969;;;;;;;:::o;8827:118::-;8914:24;8932:5;8914:24;:::i;:::-;8909:3;8902:37;8827:118;;:::o;8951:222::-;9044:4;9082:2;9071:9;9067:18;9059:26;;9095:71;9163:1;9152:9;9148:17;9139:6;9095:71;:::i;:::-;8951:222;;;;:::o;9179:619::-;9256:6;9264;9272;9321:2;9309:9;9300:7;9296:23;9292:32;9289:119;;;9327:79;;:::i;:::-;9289:119;9447:1;9472:53;9517:7;9508:6;9497:9;9493:22;9472:53;:::i;:::-;9462:63;;9418:117;9574:2;9600:53;9645:7;9636:6;9625:9;9621:22;9600:53;:::i;:::-;9590:63;;9545:118;9702:2;9728:53;9773:7;9764:6;9753:9;9749:22;9728:53;:::i;:::-;9718:63;;9673:118;9179:619;;;;;:::o;9804:329::-;9863:6;9912:2;9900:9;9891:7;9887:23;9883:32;9880:119;;;9918:79;;:::i;:::-;9880:119;10038:1;10063:53;10108:7;10099:6;10088:9;10084:22;10063:53;:::i;:::-;10053:63;;10009:117;9804:329;;;;:::o;10139:117::-;10248:1;10245;10238:12;10262:308;10324:4;10414:18;10406:6;10403:30;10400:56;;;10436:18;;:::i;:::-;10400:56;10474:29;10496:6;10474:29;:::i;:::-;10466:37;;10558:4;10552;10548:15;10540:23;;10262:308;;;:::o;10576:154::-;10660:6;10655:3;10650;10637:30;10722:1;10713:6;10708:3;10704:16;10697:27;10576:154;;;:::o;10736:412::-;10814:5;10839:66;10855:49;10897:6;10855:49;:::i;:::-;10839:66;:::i;:::-;10830:75;;10928:6;10921:5;10914:21;10966:4;10959:5;10955:16;11004:3;10995:6;10990:3;10986:16;10983:25;10980:112;;;11011:79;;:::i;:::-;10980:112;11101:41;11135:6;11130:3;11125;11101:41;:::i;:::-;10820:328;10736:412;;;;;:::o;11168:340::-;11224:5;11273:3;11266:4;11258:6;11254:17;11250:27;11240:122;;11281:79;;:::i;:::-;11240:122;11398:6;11385:20;11423:79;11498:3;11490:6;11483:4;11475:6;11471:17;11423:79;:::i;:::-;11414:88;;11230:278;11168:340;;;;:::o;11514:509::-;11583:6;11632:2;11620:9;11611:7;11607:23;11603:32;11600:119;;;11638:79;;:::i;:::-;11600:119;11786:1;11775:9;11771:17;11758:31;11816:18;11808:6;11805:30;11802:117;;;11838:79;;:::i;:::-;11802:117;11943:63;11998:7;11989:6;11978:9;11974:22;11943:63;:::i;:::-;11933:73;;11729:287;11514:509;;;;:::o;12029:329::-;12088:6;12137:2;12125:9;12116:7;12112:23;12108:32;12105:119;;;12143:79;;:::i;:::-;12105:119;12263:1;12288:53;12333:7;12324:6;12313:9;12309:22;12288:53;:::i;:::-;12278:63;;12234:117;12029:329;;;;:::o;12364:468::-;12429:6;12437;12486:2;12474:9;12465:7;12461:23;12457:32;12454:119;;;12492:79;;:::i;:::-;12454:119;12612:1;12637:53;12682:7;12673:6;12662:9;12658:22;12637:53;:::i;:::-;12627:63;;12583:117;12739:2;12765:50;12807:7;12798:6;12787:9;12783:22;12765:50;:::i;:::-;12755:60;;12710:115;12364:468;;;;;:::o;12838:307::-;12899:4;12989:18;12981:6;12978:30;12975:56;;;13011:18;;:::i;:::-;12975:56;13049:29;13071:6;13049:29;:::i;:::-;13041:37;;13133:4;13127;13123:15;13115:23;;12838:307;;;:::o;13151:410::-;13228:5;13253:65;13269:48;13310:6;13269:48;:::i;:::-;13253:65;:::i;:::-;13244:74;;13341:6;13334:5;13327:21;13379:4;13372:5;13368:16;13417:3;13408:6;13403:3;13399:16;13396:25;13393:112;;;13424:79;;:::i;:::-;13393:112;13514:41;13548:6;13543:3;13538;13514:41;:::i;:::-;13234:327;13151:410;;;;;:::o;13580:338::-;13635:5;13684:3;13677:4;13669:6;13665:17;13661:27;13651:122;;13692:79;;:::i;:::-;13651:122;13809:6;13796:20;13834:78;13908:3;13900:6;13893:4;13885:6;13881:17;13834:78;:::i;:::-;13825:87;;13641:277;13580:338;;;;:::o;13924:943::-;14019:6;14027;14035;14043;14092:3;14080:9;14071:7;14067:23;14063:33;14060:120;;;14099:79;;:::i;:::-;14060:120;14219:1;14244:53;14289:7;14280:6;14269:9;14265:22;14244:53;:::i;:::-;14234:63;;14190:117;14346:2;14372:53;14417:7;14408:6;14397:9;14393:22;14372:53;:::i;:::-;14362:63;;14317:118;14474:2;14500:53;14545:7;14536:6;14525:9;14521:22;14500:53;:::i;:::-;14490:63;;14445:118;14630:2;14619:9;14615:18;14602:32;14661:18;14653:6;14650:30;14647:117;;;14683:79;;:::i;:::-;14647:117;14788:62;14842:7;14833:6;14822:9;14818:22;14788:62;:::i;:::-;14778:72;;14573:287;13924:943;;;;;;;:::o;14873:619::-;14950:6;14958;14966;15015:2;15003:9;14994:7;14990:23;14986:32;14983:119;;;15021:79;;:::i;:::-;14983:119;15141:1;15166:53;15211:7;15202:6;15191:9;15187:22;15166:53;:::i;:::-;15156:63;;15112:117;15268:2;15294:53;15339:7;15330:6;15319:9;15315:22;15294:53;:::i;:::-;15284:63;;15239:118;15396:2;15422:53;15467:7;15458:6;15447:9;15443:22;15422:53;:::i;:::-;15412:63;;15367:118;14873:619;;;;;:::o;15498:114::-;15565:6;15599:5;15593:12;15583:22;;15498:114;;;:::o;15618:184::-;15717:11;15751:6;15746:3;15739:19;15791:4;15786:3;15782:14;15767:29;;15618:184;;;;:::o;15808:132::-;15875:4;15898:3;15890:11;;15928:4;15923:3;15919:14;15911:22;;15808:132;;;:::o;15946:108::-;16023:24;16041:5;16023:24;:::i;:::-;16018:3;16011:37;15946:108;;:::o;16060:179::-;16129:10;16150:46;16192:3;16184:6;16150:46;:::i;:::-;16228:4;16223:3;16219:14;16205:28;;16060:179;;;;:::o;16245:113::-;16315:4;16347;16342:3;16338:14;16330:22;;16245:113;;;:::o;16394:732::-;16513:3;16542:54;16590:5;16542:54;:::i;:::-;16612:86;16691:6;16686:3;16612:86;:::i;:::-;16605:93;;16722:56;16772:5;16722:56;:::i;:::-;16801:7;16832:1;16817:284;16842:6;16839:1;16836:13;16817:284;;;16918:6;16912:13;16945:63;17004:3;16989:13;16945:63;:::i;:::-;16938:70;;17031:60;17084:6;17031:60;:::i;:::-;17021:70;;16877:224;16864:1;16861;16857:9;16852:14;;16817:284;;;16821:14;17117:3;17110:10;;16518:608;;;16394:732;;;;:::o;17132:373::-;17275:4;17313:2;17302:9;17298:18;17290:26;;17362:9;17356:4;17352:20;17348:1;17337:9;17333:17;17326:47;17390:108;17493:4;17484:6;17390:108;:::i;:::-;17382:116;;17132:373;;;;:::o;17511:101::-;17547:7;17587:18;17580:5;17576:30;17565:41;;17511:101;;;:::o;17618:115::-;17703:23;17720:5;17703:23;:::i;:::-;17698:3;17691:36;17618:115;;:::o;17739:218::-;17830:4;17868:2;17857:9;17853:18;17845:26;;17881:69;17947:1;17936:9;17932:17;17923:6;17881:69;:::i;:::-;17739:218;;;;:::o;17963:474::-;18031:6;18039;18088:2;18076:9;18067:7;18063:23;18059:32;18056:119;;;18094:79;;:::i;:::-;18056:119;18214:1;18239:53;18284:7;18275:6;18264:9;18260:22;18239:53;:::i;:::-;18229:63;;18185:117;18341:2;18367:53;18412:7;18403:6;18392:9;18388:22;18367:53;:::i;:::-;18357:63;;18312:118;17963:474;;;;;:::o;18443:180::-;18491:77;18488:1;18481:88;18588:4;18585:1;18578:15;18612:4;18609:1;18602:15;18629:320;18673:6;18710:1;18704:4;18700:12;18690:22;;18757:1;18751:4;18747:12;18778:18;18768:81;;18834:4;18826:6;18822:17;18812:27;;18768:81;18896:2;18888:6;18885:14;18865:18;18862:38;18859:84;;;18915:18;;:::i;:::-;18859:84;18680:269;18629:320;;;:::o;18955:231::-;19095:34;19091:1;19083:6;19079:14;19072:58;19164:14;19159:2;19151:6;19147:15;19140:39;18955:231;:::o;19192:366::-;19334:3;19355:67;19419:2;19414:3;19355:67;:::i;:::-;19348:74;;19431:93;19520:3;19431:93;:::i;:::-;19549:2;19544:3;19540:12;19533:19;;19192:366;;;:::o;19564:419::-;19730:4;19768:2;19757:9;19753:18;19745:26;;19817:9;19811:4;19807:20;19803:1;19792:9;19788:17;19781:47;19845:131;19971:4;19845:131;:::i;:::-;19837:139;;19564:419;;;:::o;19989:220::-;20129:34;20125:1;20117:6;20113:14;20106:58;20198:3;20193:2;20185:6;20181:15;20174:28;19989:220;:::o;20215:366::-;20357:3;20378:67;20442:2;20437:3;20378:67;:::i;:::-;20371:74;;20454:93;20543:3;20454:93;:::i;:::-;20572:2;20567:3;20563:12;20556:19;;20215:366;;;:::o;20587:419::-;20753:4;20791:2;20780:9;20776:18;20768:26;;20840:9;20834:4;20830:20;20826:1;20815:9;20811:17;20804:47;20868:131;20994:4;20868:131;:::i;:::-;20860:139;;20587:419;;;:::o;21012:243::-;21152:34;21148:1;21140:6;21136:14;21129:58;21221:26;21216:2;21208:6;21204:15;21197:51;21012:243;:::o;21261:366::-;21403:3;21424:67;21488:2;21483:3;21424:67;:::i;:::-;21417:74;;21500:93;21589:3;21500:93;:::i;:::-;21618:2;21613:3;21609:12;21602:19;;21261:366;;;:::o;21633:419::-;21799:4;21837:2;21826:9;21822:18;21814:26;;21886:9;21880:4;21876:20;21872:1;21861:9;21857:17;21850:47;21914:131;22040:4;21914:131;:::i;:::-;21906:139;;21633:419;;;:::o;22058:180::-;22198:32;22194:1;22186:6;22182:14;22175:56;22058:180;:::o;22244:366::-;22386:3;22407:67;22471:2;22466:3;22407:67;:::i;:::-;22400:74;;22483:93;22572:3;22483:93;:::i;:::-;22601:2;22596:3;22592:12;22585:19;;22244:366;;;:::o;22616:419::-;22782:4;22820:2;22809:9;22805:18;22797:26;;22869:9;22863:4;22859:20;22855:1;22844:9;22840:17;22833:47;22897:131;23023:4;22897:131;:::i;:::-;22889:139;;22616:419;;;:::o;23041:180::-;23089:77;23086:1;23079:88;23186:4;23183:1;23176:15;23210:4;23207:1;23200:15;23227:348;23267:7;23290:20;23308:1;23290:20;:::i;:::-;23285:25;;23324:20;23342:1;23324:20;:::i;:::-;23319:25;;23512:1;23444:66;23440:74;23437:1;23434:81;23429:1;23422:9;23415:17;23411:105;23408:131;;;23519:18;;:::i;:::-;23408:131;23567:1;23564;23560:9;23549:20;;23227:348;;;;:::o;23581:177::-;23721:29;23717:1;23709:6;23705:14;23698:53;23581:177;:::o;23764:366::-;23906:3;23927:67;23991:2;23986:3;23927:67;:::i;:::-;23920:74;;24003:93;24092:3;24003:93;:::i;:::-;24121:2;24116:3;24112:12;24105:19;;23764:366;;;:::o;24136:419::-;24302:4;24340:2;24329:9;24325:18;24317:26;;24389:9;24383:4;24379:20;24375:1;24364:9;24360:17;24353:47;24417:131;24543:4;24417:131;:::i;:::-;24409:139;;24136:419;;;:::o;24561:94::-;24594:8;24642:5;24638:2;24634:14;24613:35;;24561:94;;;:::o;24661:::-;24700:7;24729:20;24743:5;24729:20;:::i;:::-;24718:31;;24661:94;;;:::o;24761:100::-;24800:7;24829:26;24849:5;24829:26;:::i;:::-;24818:37;;24761:100;;;:::o;24867:157::-;24972:45;24992:24;25010:5;24992:24;:::i;:::-;24972:45;:::i;:::-;24967:3;24960:58;24867:157;;:::o;25030:79::-;25069:7;25098:5;25087:16;;25030:79;;;:::o;25115:157::-;25220:45;25240:24;25258:5;25240:24;:::i;:::-;25220:45;:::i;:::-;25215:3;25208:58;25115:157;;:::o;25278:96::-;25312:8;25361:5;25356:3;25352:15;25331:36;;25278:96;;;:::o;25380:93::-;25417:7;25446:21;25461:5;25446:21;:::i;:::-;25435:32;;25380:93;;;:::o;25479:95::-;25515:7;25544:24;25562:5;25544:24;:::i;:::-;25533:35;;25479:95;;;:::o;25580:145::-;25679:39;25696:21;25711:5;25696:21;:::i;:::-;25679:39;:::i;:::-;25674:3;25667:52;25580:145;;:::o;25731:525::-;25893:3;25908:75;25979:3;25970:6;25908:75;:::i;:::-;26008:2;26003:3;25999:12;25992:19;;26021:75;26092:3;26083:6;26021:75;:::i;:::-;26121:2;26116:3;26112:12;26105:19;;26134:69;26199:3;26190:6;26134:69;:::i;:::-;26228:1;26223:3;26219:11;26212:18;;26247:3;26240:10;;25731:525;;;;;;:::o;26262:174::-;26402:26;26398:1;26390:6;26386:14;26379:50;26262:174;:::o;26442:366::-;26584:3;26605:67;26669:2;26664:3;26605:67;:::i;:::-;26598:74;;26681:93;26770:3;26681:93;:::i;:::-;26799:2;26794:3;26790:12;26783:19;;26442:366;;;:::o;26814:419::-;26980:4;27018:2;27007:9;27003:18;26995:26;;27067:9;27061:4;27057:20;27053:1;27042:9;27038:17;27031:47;27095:131;27221:4;27095:131;:::i;:::-;27087:139;;26814:419;;;:::o;27239:191::-;27279:4;27299:20;27317:1;27299:20;:::i;:::-;27294:25;;27333:20;27351:1;27333:20;:::i;:::-;27328:25;;27372:1;27369;27366:8;27363:34;;;27377:18;;:::i;:::-;27363:34;27422:1;27419;27415:9;27407:17;;27239:191;;;;:::o;27436:221::-;27576:34;27572:1;27564:6;27560:14;27553:58;27645:4;27640:2;27632:6;27628:15;27621:29;27436:221;:::o;27663:366::-;27805:3;27826:67;27890:2;27885:3;27826:67;:::i;:::-;27819:74;;27902:93;27991:3;27902:93;:::i;:::-;28020:2;28015:3;28011:12;28004:19;;27663:366;;;:::o;28035:419::-;28201:4;28239:2;28228:9;28224:18;28216:26;;28288:9;28282:4;28278:20;28274:1;28263:9;28259:17;28252:47;28316:131;28442:4;28316:131;:::i;:::-;28308:139;;28035:419;;;:::o;28460:236::-;28600:34;28596:1;28588:6;28584:14;28577:58;28669:19;28664:2;28656:6;28652:15;28645:44;28460:236;:::o;28702:366::-;28844:3;28865:67;28929:2;28924:3;28865:67;:::i;:::-;28858:74;;28941:93;29030:3;28941:93;:::i;:::-;29059:2;29054:3;29050:12;29043:19;;28702:366;;;:::o;29074:419::-;29240:4;29278:2;29267:9;29263:18;29255:26;;29327:9;29321:4;29317:20;29313:1;29302:9;29298:17;29291:47;29355:131;29481:4;29355:131;:::i;:::-;29347:139;;29074:419;;;:::o;29499:182::-;29639:34;29635:1;29627:6;29623:14;29616:58;29499:182;:::o;29687:366::-;29829:3;29850:67;29914:2;29909:3;29850:67;:::i;:::-;29843:74;;29926:93;30015:3;29926:93;:::i;:::-;30044:2;30039:3;30035:12;30028:19;;29687:366;;;:::o;30059:419::-;30225:4;30263:2;30252:9;30248:18;30240:26;;30312:9;30306:4;30302:20;30298:1;30287:9;30283:17;30276:47;30340:131;30466:4;30340:131;:::i;:::-;30332:139;;30059:419;;;:::o;30484:173::-;30624:25;30620:1;30612:6;30608:14;30601:49;30484:173;:::o;30663:366::-;30805:3;30826:67;30890:2;30885:3;30826:67;:::i;:::-;30819:74;;30902:93;30991:3;30902:93;:::i;:::-;31020:2;31015:3;31011:12;31004:19;;30663:366;;;:::o;31035:419::-;31201:4;31239:2;31228:9;31224:18;31216:26;;31288:9;31282:4;31278:20;31274:1;31263:9;31259:17;31252:47;31316:131;31442:4;31316:131;:::i;:::-;31308:139;;31035:419;;;:::o;31460:228::-;31600:34;31596:1;31588:6;31584:14;31577:58;31669:11;31664:2;31656:6;31652:15;31645:36;31460:228;:::o;31694:366::-;31836:3;31857:67;31921:2;31916:3;31857:67;:::i;:::-;31850:74;;31933:93;32022:3;31933:93;:::i;:::-;32051:2;32046:3;32042:12;32035:19;;31694:366;;;:::o;32066:419::-;32232:4;32270:2;32259:9;32255:18;32247:26;;32319:9;32313:4;32309:20;32305:1;32294:9;32290:17;32283:47;32347:131;32473:4;32347:131;:::i;:::-;32339:139;;32066:419;;;:::o;32491:229::-;32631:34;32627:1;32619:6;32615:14;32608:58;32700:12;32695:2;32687:6;32683:15;32676:37;32491:229;:::o;32726:366::-;32868:3;32889:67;32953:2;32948:3;32889:67;:::i;:::-;32882:74;;32965:93;33054:3;32965:93;:::i;:::-;33083:2;33078:3;33074:12;33067:19;;32726:366;;;:::o;33098:419::-;33264:4;33302:2;33291:9;33287:18;33279:26;;33351:9;33345:4;33341:20;33337:1;33326:9;33322:17;33315:47;33379:131;33505:4;33379:131;:::i;:::-;33371:139;;33098:419;;;:::o;33523:239::-;33663:34;33659:1;33651:6;33647:14;33640:58;33732:22;33727:2;33719:6;33715:15;33708:47;33523:239;:::o;33768:366::-;33910:3;33931:67;33995:2;33990:3;33931:67;:::i;:::-;33924:74;;34007:93;34096:3;34007:93;:::i;:::-;34125:2;34120:3;34116:12;34109:19;;33768:366;;;:::o;34140:419::-;34306:4;34344:2;34333:9;34329:18;34321:26;;34393:9;34387:4;34383:20;34379:1;34368:9;34364:17;34357:47;34421:131;34547:4;34421:131;:::i;:::-;34413:139;;34140:419;;;:::o;34565:174::-;34705:26;34701:1;34693:6;34689:14;34682:50;34565:174;:::o;34745:366::-;34887:3;34908:67;34972:2;34967:3;34908:67;:::i;:::-;34901:74;;34984:93;35073:3;34984:93;:::i;:::-;35102:2;35097:3;35093:12;35086:19;;34745:366;;;:::o;35117:419::-;35283:4;35321:2;35310:9;35306:18;35298:26;;35370:9;35364:4;35360:20;35356:1;35345:9;35341:17;35334:47;35398:131;35524:4;35398:131;:::i;:::-;35390:139;;35117:419;;;:::o;35542:305::-;35582:3;35601:20;35619:1;35601:20;:::i;:::-;35596:25;;35635:20;35653:1;35635:20;:::i;:::-;35630:25;;35789:1;35721:66;35717:74;35714:1;35711:81;35708:107;;;35795:18;;:::i;:::-;35708:107;35839:1;35836;35832:9;35825:16;;35542:305;;;;:::o;35853:180::-;35901:77;35898:1;35891:88;35998:4;35995:1;35988:15;36022:4;36019:1;36012:15;36039:233;36078:3;36101:24;36119:5;36101:24;:::i;:::-;36092:33;;36147:66;36140:5;36137:77;36134:103;;;36217:18;;:::i;:::-;36134:103;36264:1;36257:5;36253:13;36246:20;;36039:233;;;:::o;36278:234::-;36418:34;36414:1;36406:6;36402:14;36395:58;36487:17;36482:2;36474:6;36470:15;36463:42;36278:234;:::o;36518:366::-;36660:3;36681:67;36745:2;36740:3;36681:67;:::i;:::-;36674:74;;36757:93;36846:3;36757:93;:::i;:::-;36875:2;36870:3;36866:12;36859:19;;36518:366;;;:::o;36890:419::-;37056:4;37094:2;37083:9;37079:18;37071:26;;37143:9;37137:4;37133:20;37129:1;37118:9;37114:17;37107:47;37171:131;37297:4;37171:131;:::i;:::-;37163:139;;36890:419;;;:::o;37315:148::-;37417:11;37454:3;37439:18;;37315:148;;;;:::o;37469:141::-;37518:4;37541:3;37533:11;;37564:3;37561:1;37554:14;37598:4;37595:1;37585:18;37577:26;;37469:141;;;:::o;37640:845::-;37743:3;37780:5;37774:12;37809:36;37835:9;37809:36;:::i;:::-;37861:89;37943:6;37938:3;37861:89;:::i;:::-;37854:96;;37981:1;37970:9;37966:17;37997:1;37992:137;;;;38143:1;38138:341;;;;37959:520;;37992:137;38076:4;38072:9;38061;38057:25;38052:3;38045:38;38112:6;38107:3;38103:16;38096:23;;37992:137;;38138:341;38205:38;38237:5;38205:38;:::i;:::-;38265:1;38279:154;38293:6;38290:1;38287:13;38279:154;;;38367:7;38361:14;38357:1;38352:3;38348:11;38341:35;38417:1;38408:7;38404:15;38393:26;;38315:4;38312:1;38308:12;38303:17;;38279:154;;;38462:6;38457:3;38453:16;38446:23;;38145:334;;37959:520;;37747:738;;37640:845;;;;:::o;38491:377::-;38597:3;38625:39;38658:5;38625:39;:::i;:::-;38680:89;38762:6;38757:3;38680:89;:::i;:::-;38673:96;;38778:52;38823:6;38818:3;38811:4;38804:5;38800:16;38778:52;:::i;:::-;38855:6;38850:3;38846:16;38839:23;;38601:267;38491:377;;;;:::o;38874:583::-;39096:3;39118:92;39206:3;39197:6;39118:92;:::i;:::-;39111:99;;39227:95;39318:3;39309:6;39227:95;:::i;:::-;39220:102;;39339:92;39427:3;39418:6;39339:92;:::i;:::-;39332:99;;39448:3;39441:10;;38874:583;;;;;;:::o;39463:125::-;39529:7;39558:24;39576:5;39558:24;:::i;:::-;39547:35;;39463:125;;;:::o;39594:180::-;39696:53;39743:5;39696:53;:::i;:::-;39689:5;39686:64;39676:92;;39764:1;39761;39754:12;39676:92;39594:180;:::o;39780:201::-;39866:5;39897:6;39891:13;39882:22;;39913:62;39969:5;39913:62;:::i;:::-;39780:201;;;;:::o;39987:409::-;40086:6;40135:2;40123:9;40114:7;40110:23;40106:32;40103:119;;;40141:79;;:::i;:::-;40103:119;40261:1;40286:93;40371:7;40362:6;40351:9;40347:22;40286:93;:::i;:::-;40276:103;;40232:157;39987:409;;;;:::o;40402:225::-;40542:34;40538:1;40530:6;40526:14;40519:58;40611:8;40606:2;40598:6;40594:15;40587:33;40402:225;:::o;40633:366::-;40775:3;40796:67;40860:2;40855:3;40796:67;:::i;:::-;40789:74;;40872:93;40961:3;40872:93;:::i;:::-;40990:2;40985:3;40981:12;40974:19;;40633:366;;;:::o;41005:419::-;41171:4;41209:2;41198:9;41194:18;41186:26;;41258:9;41252:4;41248:20;41244:1;41233:9;41229:17;41222:47;41286:131;41412:4;41286:131;:::i;:::-;41278:139;;41005:419;;;:::o;41430:168::-;41570:20;41566:1;41558:6;41554:14;41547:44;41430:168;:::o;41604:366::-;41746:3;41767:67;41831:2;41826:3;41767:67;:::i;:::-;41760:74;;41843:93;41932:3;41843:93;:::i;:::-;41961:2;41956:3;41952:12;41945:19;;41604:366;;;:::o;41976:419::-;42142:4;42180:2;42169:9;42165:18;42157:26;;42229:9;42223:4;42219:20;42215:1;42204:9;42200:17;42193:47;42257:131;42383:4;42257:131;:::i;:::-;42249:139;;41976:419;;;:::o;42401:181::-;42541:33;42537:1;42529:6;42525:14;42518:57;42401:181;:::o;42588:366::-;42730:3;42751:67;42815:2;42810:3;42751:67;:::i;:::-;42744:74;;42827:93;42916:3;42827:93;:::i;:::-;42945:2;42940:3;42936:12;42929:19;;42588:366;;;:::o;42960:419::-;43126:4;43164:2;43153:9;43149:18;43141:26;;43213:9;43207:4;43203:20;43199:1;43188:9;43184:17;43177:47;43241:131;43367:4;43241:131;:::i;:::-;43233:139;;42960:419;;;:::o;43385:231::-;43525:34;43521:1;43513:6;43509:14;43502:58;43594:14;43589:2;43581:6;43577:15;43570:39;43385:231;:::o;43622:366::-;43764:3;43785:67;43849:2;43844:3;43785:67;:::i;:::-;43778:74;;43861:93;43950:3;43861:93;:::i;:::-;43979:2;43974:3;43970:12;43963:19;;43622:366;;;:::o;43994:419::-;44160:4;44198:2;44187:9;44183:18;44175:26;;44247:9;44241:4;44237:20;44233:1;44222:9;44218:17;44211:47;44275:131;44401:4;44275:131;:::i;:::-;44267:139;;43994:419;;;:::o;44419:228::-;44559:34;44555:1;44547:6;44543:14;44536:58;44628:11;44623:2;44615:6;44611:15;44604:36;44419:228;:::o;44653:366::-;44795:3;44816:67;44880:2;44875:3;44816:67;:::i;:::-;44809:74;;44892:93;44981:3;44892:93;:::i;:::-;45010:2;45005:3;45001:12;44994:19;;44653:366;;;:::o;45025:419::-;45191:4;45229:2;45218:9;45214:18;45206:26;;45278:9;45272:4;45268:20;45264:1;45253:9;45249:17;45242:47;45306:131;45432:4;45306:131;:::i;:::-;45298:139;;45025:419;;;:::o;45450:223::-;45590:34;45586:1;45578:6;45574:14;45567:58;45659:6;45654:2;45646:6;45642:15;45635:31;45450:223;:::o;45679:366::-;45821:3;45842:67;45906:2;45901:3;45842:67;:::i;:::-;45835:74;;45918:93;46007:3;45918:93;:::i;:::-;46036:2;46031:3;46027:12;46020:19;;45679:366;;;:::o;46051:419::-;46217:4;46255:2;46244:9;46240:18;46232:26;;46304:9;46298:4;46294:20;46290:1;46279:9;46275:17;46268:47;46332:131;46458:4;46332:131;:::i;:::-;46324:139;;46051:419;;;:::o;46476:175::-;46616:27;46612:1;46604:6;46600:14;46593:51;46476:175;:::o;46657:366::-;46799:3;46820:67;46884:2;46879:3;46820:67;:::i;:::-;46813:74;;46896:93;46985:3;46896:93;:::i;:::-;47014:2;47009:3;47005:12;46998:19;;46657:366;;;:::o;47029:419::-;47195:4;47233:2;47222:9;47218:18;47210:26;;47282:9;47276:4;47272:20;47268:1;47257:9;47253:17;47246:47;47310:131;47436:4;47310:131;:::i;:::-;47302:139;;47029:419;;;:::o;47454:237::-;47594:34;47590:1;47582:6;47578:14;47571:58;47663:20;47658:2;47650:6;47646:15;47639:45;47454:237;:::o;47697:366::-;47839:3;47860:67;47924:2;47919:3;47860:67;:::i;:::-;47853:74;;47936:93;48025:3;47936:93;:::i;:::-;48054:2;48049:3;48045:12;48038:19;;47697:366;;;:::o;48069:419::-;48235:4;48273:2;48262:9;48258:18;48250:26;;48322:9;48316:4;48312:20;48308:1;48297:9;48293:17;48286:47;48350:131;48476:4;48350:131;:::i;:::-;48342:139;;48069:419;;;:::o;48494:180::-;48542:77;48539:1;48532:88;48639:4;48636:1;48629:15;48663:4;48660:1;48653:15;48680:185;48720:1;48737:20;48755:1;48737:20;:::i;:::-;48732:25;;48771:20;48789:1;48771:20;:::i;:::-;48766:25;;48810:1;48800:35;;48815:18;;:::i;:::-;48800:35;48857:1;48854;48850:9;48845:14;;48680:185;;;;:::o;48871:176::-;48903:1;48920:20;48938:1;48920:20;:::i;:::-;48915:25;;48954:20;48972:1;48954:20;:::i;:::-;48949:25;;48993:1;48983:35;;48998:18;;:::i;:::-;48983:35;49039:1;49036;49032:9;49027:14;;48871:176;;;;:::o;49053:79::-;49092:7;49121:5;49110:16;;49053:79;;;:::o;49138:157::-;49243:45;49263:24;49281:5;49263:24;:::i;:::-;49243:45;:::i;:::-;49238:3;49231:58;49138:157;;:::o;49301:397::-;49441:3;49456:75;49527:3;49518:6;49456:75;:::i;:::-;49556:2;49551:3;49547:12;49540:19;;49569:75;49640:3;49631:6;49569:75;:::i;:::-;49669:2;49664:3;49660:12;49653:19;;49689:3;49682:10;;49301:397;;;;;:::o;49704:98::-;49755:6;49789:5;49783:12;49773:22;;49704:98;;;:::o;49808:168::-;49891:11;49925:6;49920:3;49913:19;49965:4;49960:3;49956:14;49941:29;;49808:168;;;;:::o;49982:360::-;50068:3;50096:38;50128:5;50096:38;:::i;:::-;50150:70;50213:6;50208:3;50150:70;:::i;:::-;50143:77;;50229:52;50274:6;50269:3;50262:4;50255:5;50251:16;50229:52;:::i;:::-;50306:29;50328:6;50306:29;:::i;:::-;50301:3;50297:39;50290:46;;50072:270;49982:360;;;;:::o;50348:640::-;50543:4;50581:3;50570:9;50566:19;50558:27;;50595:71;50663:1;50652:9;50648:17;50639:6;50595:71;:::i;:::-;50676:72;50744:2;50733:9;50729:18;50720:6;50676:72;:::i;:::-;50758;50826:2;50815:9;50811:18;50802:6;50758:72;:::i;:::-;50877:9;50871:4;50867:20;50862:2;50851:9;50847:18;50840:48;50905:76;50976:4;50967:6;50905:76;:::i;:::-;50897:84;;50348:640;;;;;;;:::o;50994:141::-;51050:5;51081:6;51075:13;51066:22;;51097:32;51123:5;51097:32;:::i;:::-;50994:141;;;;:::o;51141:349::-;51210:6;51259:2;51247:9;51238:7;51234:23;51230:32;51227:119;;;51265:79;;:::i;:::-;51227:119;51385:1;51410:63;51465:7;51456:6;51445:9;51441:22;51410:63;:::i;:::-;51400:73;;51356:127;51141:349;;;;:::o;51496:182::-;51636:34;51632:1;51624:6;51620:14;51613:58;51496:182;:::o;51684:366::-;51826:3;51847:67;51911:2;51906:3;51847:67;:::i;:::-;51840:74;;51923:93;52012:3;51923:93;:::i;:::-;52041:2;52036:3;52032:12;52025:19;;51684:366;;;:::o;52056:419::-;52222:4;52260:2;52249:9;52245:18;52237:26;;52309:9;52303:4;52299:20;52295:1;52284:9;52280:17;52273:47;52337:131;52463:4;52337:131;:::i;:::-;52329:139;;52056:419;;;:::o;52481:178::-;52621:30;52617:1;52609:6;52605:14;52598:54;52481:178;:::o;52665:366::-;52807:3;52828:67;52892:2;52887:3;52828:67;:::i;:::-;52821:74;;52904:93;52993:3;52904:93;:::i;:::-;53022:2;53017:3;53013:12;53006:19;;52665:366;;;:::o;53037:419::-;53203:4;53241:2;53230:9;53226:18;53218:26;;53290:9;53284:4;53280:20;53276:1;53265:9;53261:17;53254:47;53318:131;53444:4;53318:131;:::i;:::-;53310:139;;53037:419;;;:::o

Swarm Source

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