ETH Price: $2,630.31 (-0.45%)

Token

Ape Poo Club (APC)
 

Overview

Max Total Supply

686 APC

Holders

314

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
shiny275.eth
Balance
1 APC
0x118bAAd26E33D6322B43a61b09085140a943797C
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ApePooClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT




pragma solidity ^0.8.0;

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol

// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

/**
 * @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.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
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 Merkle 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 = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// File: contracts/Tiny_Frens.sol


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


// OpenZeppelin Contracts v4.4.1 (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/Strings.sol


// OpenZeppelin Contracts v4.4.1 (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.1 (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.1 (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.1 (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.1 (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.1 (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.1 (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.1 (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.1 (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.1 (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: contracts/contract.sol





pragma solidity >=0.7.0 <0.9.0;


contract ApePooClub is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "";
  
  uint256 public vipSaleCost = 0.1 ether;
  uint256 public presaleCost = 0.12 ether;
  uint256 public publicSaleCost = 0.15 ether;

  uint256 public maxSupply = 10015;
  uint256 public maxMintAmountPerPublicAccount = 5;
  uint256 public maxMintAmountPerPresaleAccount = 3;
  uint256 public maxMintAmountPerVipAccount = 3;


  bool public paused = true;
  bool public vipSaleActive=true;
  bool public presaleActive=false;
  bool public publicSaleActive=false;

  bytes32 public merkleRoot= 0x0de6c9f4b501d88b442db96c4f3653e394ef2ce0c67fc9d33527d625663f633c;

  constructor() ERC721("Ape Poo Club", "APC") {
    
    

  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }

  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function mint(bytes32[] calldata _merkleProof, uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    if(vipSaleActive==true){
      require(msg.value >= vipSaleCost * _mintAmount, "Insufficient funds!");
      require(balanceOf(msg.sender) + _mintAmount <= maxMintAmountPerVipAccount, "Mint limit exceeded." );

      //verify the provided _merkleProof
      bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
      require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Not part of the VIP whitelist.");
    }
    else if(presaleActive==true){
      require(msg.value >= presaleCost * _mintAmount, "Insufficient funds!");
      require(balanceOf(msg.sender) + _mintAmount <= maxMintAmountPerPresaleAccount, "Mint limit exceeded." );

      //verify the provided _merkleProof
      bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
      require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Not part of the Presale whitelist.");
    }
    else{
      require(msg.value >= publicSaleCost * _mintAmount, "Insufficient funds!");
      require(balanceOf(msg.sender) + _mintAmount <= maxMintAmountPerPublicAccount, "Mint limit exceeded." );
    }
    _mintLoop(msg.sender, _mintAmount);
  }

  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

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

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

  function setPublicSaleCost(uint256 _publicSaleCost) public onlyOwner {
    publicSaleCost = _publicSaleCost;
  }

  function setPresaleCost(uint256 _presaleCost) public onlyOwner {
    presaleCost = _presaleCost;
  }

  function setVipSaleCost(uint256 _vipSaleCost) public onlyOwner {
    vipSaleCost = _vipSaleCost;
  }


  function setMaxMintPerVipAccount(uint256 _maxMintPerVipAccount) public onlyOwner {
    maxMintAmountPerVipAccount = _maxMintPerVipAccount;
  }

  function setMaxMintPerPresaleAccount(uint256 _maxMintPerPresaleAccount) public onlyOwner {
    maxMintAmountPerPresaleAccount = _maxMintPerPresaleAccount;
  }
   
  function setMaxMintPerPublicAccount(uint256 _maxMintPerPublicAccount) public onlyOwner {
    maxMintAmountPerPublicAccount = _maxMintPerPublicAccount;
  }

  function endVipSale() public onlyOwner {
    vipSaleActive = false;
    presaleActive = true;
    paused=true;
  }

  function endPresale() public onlyOwner {
    require(vipSaleActive==false);
    presaleActive=false;
    publicSaleActive=true;
    paused=true;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
    merkleRoot = _merkleRoot;
  }

  function withdraw() public onlyOwner {
   
    // This will transfer the remaining contract balance to the owner.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endVipSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerPresaleAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerPublicAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerVipAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","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":"publicSaleActive","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":"uint256","name":"_maxMintPerPresaleAccount","type":"uint256"}],"name":"setMaxMintPerPresaleAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerPublicAccount","type":"uint256"}],"name":"setMaxMintPerPublicAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerVipAccount","type":"uint256"}],"name":"setMaxMintPerVipAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleCost","type":"uint256"}],"name":"setPublicSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vipSaleCost","type":"uint256"}],"name":"setVipSaleCost","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":[],"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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vipSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vipSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600890805190602001906200002b9291906200029a565b5067016345785d8a00006009556701aa535d3d0c0000600a55670214e8348c4f0000600b5561271f600c556005600d556003600e556003600f556001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506000601060036101000a81548160ff0219169083151502179055507f0de6c9f4b501d88b442db96c4f3653e394ef2ce0c67fc9d33527d625663f633c60001b6011553480156200010557600080fd5b506040518060400160405280600c81526020017f41706520506f6f20436c756200000000000000000000000000000000000000008152506040518060400160405280600381526020017f415043000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200018a9291906200029a565b508060019080519060200190620001a39291906200029a565b505050620001c6620001ba620001cc60201b60201c565b620001d460201b60201c565b620003af565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002a8906200034a565b90600052602060002090601f016020900481019282620002cc576000855562000318565b82601f10620002e757805160ff191683800117855562000318565b8280016001018555821562000318579182015b8281111562000317578251825591602001919060010190620002fa565b5b5090506200032791906200032b565b5090565b5b80821115620003465760008160009055506001016200032c565b5090565b600060028204905060018216806200036357607f821691505b602082108114156200037a576200037962000380565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614b4d80620003bf6000396000f3fe6080604052600436106102725760003560e01c8063715018a61161014f578063a0c67b29116100c1578063c87b56dd1161007a578063c87b56dd146108e3578063d5abeb0114610920578063e985e9c51461094b578063efbd73f414610988578063f2f4e824146109b1578063f2fde38b146109dc57610272565b8063a0c67b291461080d578063a22cb46514610838578063a43be57b14610861578063a966448314610878578063b88d4fde1461088f578063bc8893b4146108b857610272565b80637ec4a659116101135780637ec4a659146107135780638da5cb5b1461073c5780638dbb7c06146107675780638fdcf9421461079057806395d89b41146107b957806399bc27cb146107e457610272565b8063715018a614610656578063718cd6741461066d578063785448af146106965780637cb64759146106c15780637d0a7529146106ea57610272565b80632eb4a7ab116101e857806345de0d9b116101ac57806345de0d9b1461053f57806353135ca01461055b5780635c975abb1461058657806362b99ad4146105b15780636352211e146105dc57806370a082311461061957610272565b80632eb4a7ab1461046c5780633ccfd60b1461049757806342842e0e146104ae578063438b6300146104d7578063453afb0f1461051457610272565b80631418fac61161023a5780631418fac61461037057806316c38b3c1461039b57806318160ddd146103c45780631bc796b0146103ef57806323b872dd146104185780632a23d07d1461044157610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c5780630b85d4ef14610345575b600080fd5b34801561028357600080fd5b5061029e6004803603810190610299919061359f565b610a05565b6040516102ab9190613c7d565b60405180910390f35b3480156102c057600080fd5b506102c9610ae7565b6040516102d69190613cb3565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613642565b610b79565b6040516103139190613bf4565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906134a5565b610bfe565b005b34801561035157600080fd5b5061035a610d16565b6040516103679190613fb5565b60405180910390f35b34801561037c57600080fd5b50610385610d1c565b6040516103929190613fb5565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190613545565b610d22565b005b3480156103d057600080fd5b506103d9610dbb565b6040516103e69190613fb5565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613642565b610dcc565b005b34801561042457600080fd5b5061043f600480360381019061043a919061338f565b610e52565b005b34801561044d57600080fd5b50610456610eb2565b6040516104639190613fb5565b60405180910390f35b34801561047857600080fd5b50610481610eb8565b60405161048e9190613c98565b60405180910390f35b3480156104a357600080fd5b506104ac610ebe565b005b3480156104ba57600080fd5b506104d560048036038101906104d0919061338f565b610fba565b005b3480156104e357600080fd5b506104fe60048036038101906104f99190613322565b610fda565b60405161050b9190613c5b565b60405180910390f35b34801561052057600080fd5b506105296110e5565b6040516105369190613fb5565b60405180910390f35b610559600480360381019061055491906134e5565b6110eb565b005b34801561056757600080fd5b50610570611596565b60405161057d9190613c7d565b60405180910390f35b34801561059257600080fd5b5061059b6115a9565b6040516105a89190613c7d565b60405180910390f35b3480156105bd57600080fd5b506105c66115bc565b6040516105d39190613cb3565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190613642565b61164a565b6040516106109190613bf4565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613322565b6116fc565b60405161064d9190613fb5565b60405180910390f35b34801561066257600080fd5b5061066b6117b4565b005b34801561067957600080fd5b50610694600480360381019061068f9190613642565b61183c565b005b3480156106a257600080fd5b506106ab6118c2565b6040516106b89190613c7d565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613572565b6118d5565b005b3480156106f657600080fd5b50610711600480360381019061070c9190613642565b61195b565b005b34801561071f57600080fd5b5061073a600480360381019061073591906135f9565b6119e1565b005b34801561074857600080fd5b50610751611a77565b60405161075e9190613bf4565b60405180910390f35b34801561077357600080fd5b5061078e60048036038101906107899190613642565b611aa1565b005b34801561079c57600080fd5b506107b760048036038101906107b29190613642565b611b27565b005b3480156107c557600080fd5b506107ce611bad565b6040516107db9190613cb3565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190613642565b611c3f565b005b34801561081957600080fd5b50610822611cc5565b60405161082f9190613fb5565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190613465565b611ccb565b005b34801561086d57600080fd5b50610876611ce1565b005b34801561088457600080fd5b5061088d611dd0565b005b34801561089b57600080fd5b506108b660048036038101906108b191906133e2565b611e9f565b005b3480156108c457600080fd5b506108cd611f01565b6040516108da9190613c7d565b60405180910390f35b3480156108ef57600080fd5b5061090a60048036038101906109059190613642565b611f14565b6040516109179190613cb3565b60405180910390f35b34801561092c57600080fd5b50610935611fbb565b6040516109429190613fb5565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d919061334f565b611fc1565b60405161097f9190613c7d565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa919061366f565b612055565b005b3480156109bd57600080fd5b506109c661217d565b6040516109d39190613fb5565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190613322565b612183565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae05750610adf8261227b565b5b9050919050565b606060008054610af6906142b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b22906142b3565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b5050505050905090565b6000610b84826122e5565b610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613e75565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c098261164a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613f35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c99612351565b73ffffffffffffffffffffffffffffffffffffffff161480610cc85750610cc781610cc2612351565b611fc1565b5b610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613df5565b60405180910390fd5b610d118383612359565b505050565b600d5481565b60095481565b610d2a612351565b73ffffffffffffffffffffffffffffffffffffffff16610d48611a77565b73ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e95565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610dc76007612412565b905090565b610dd4612351565b73ffffffffffffffffffffffffffffffffffffffff16610df2611a77565b73ffffffffffffffffffffffffffffffffffffffff1614610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90613e95565b60405180910390fd5b80600f8190555050565b610e63610e5d612351565b82612420565b610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990613f75565b60405180910390fd5b610ead8383836124fe565b505050565b600a5481565b60115481565b610ec6612351565b73ffffffffffffffffffffffffffffffffffffffff16610ee4611a77565b73ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613e95565b60405180910390fd5b6000610f44611a77565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f6790613bdf565b60006040518083038185875af1925050503d8060008114610fa4576040519150601f19603f3d011682016040523d82523d6000602084013e610fa9565b606091505b5050905080610fb757600080fd5b50565b610fd583838360405180602001604052806000815250611e9f565b505050565b60606000610fe7836116fc565b905060008167ffffffffffffffff81111561100557611004614470565b5b6040519080825280602002602001820160405280156110335781602001602082028036833780820191505090505b50905060006001905060005b83811080156110505750600c548211155b156110d95760006110608361164a565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c557828483815181106110aa576110a9614441565b5b60200260200101818152505081806110c190614316565b9250505b82806110d090614316565b9350505061103f565b82945050505050919050565b600b5481565b806000811161112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690613d55565b60405180910390fd5b600c548161113d6007612412565b61114791906140de565b1115611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90613f55565b60405180910390fd5b601060009054906101000a900460ff16156111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90613eb5565b60405180910390fd5b60011515601060019054906101000a900460ff161515141561135a57816009546112029190614165565b341015611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613f95565b60405180910390fd5b600f5482611251336116fc565b61125b91906140de565b111561129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129390613cd5565b60405180910390fd5b6000336040516020016112af9190613b95565b604051602081830303815290604052805190602001209050611315858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361275a565b611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b90613ed5565b60405180910390fd5b50611586565b60011515601060029054906101000a900460ff16151514156114dc5781600a546113849190614165565b3410156113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd90613f95565b60405180910390fd5b600e54826113d3336116fc565b6113dd91906140de565b111561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613cd5565b60405180910390fd5b6000336040516020016114319190613b95565b604051602081830303815290604052805190602001209050611497858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361275a565b6114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90613dd5565b60405180910390fd5b50611585565b81600b546114ea9190614165565b34101561152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390613f95565b60405180910390fd5b600d5482611539336116fc565b61154391906140de565b1115611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90613cd5565b60405180910390fd5b5b5b6115903383612771565b50505050565b601060029054906101000a900460ff1681565b601060009054906101000a900460ff1681565b600880546115c9906142b3565b80601f01602080910402602001604051908101604052809291908181526020018280546115f5906142b3565b80156116425780601f1061161757610100808354040283529160200191611642565b820191906000526020600020905b81548152906001019060200180831161162557829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90613e35565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490613e15565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117bc612351565b73ffffffffffffffffffffffffffffffffffffffff166117da611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790613e95565b60405180910390fd5b61183a60006127b1565b565b611844612351565b73ffffffffffffffffffffffffffffffffffffffff16611862611a77565b73ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af90613e95565b60405180910390fd5b80600d8190555050565b601060019054906101000a900460ff1681565b6118dd612351565b73ffffffffffffffffffffffffffffffffffffffff166118fb611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890613e95565b60405180910390fd5b8060118190555050565b611963612351565b73ffffffffffffffffffffffffffffffffffffffff16611981611a77565b73ffffffffffffffffffffffffffffffffffffffff16146119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90613e95565b60405180910390fd5b80600e8190555050565b6119e9612351565b73ffffffffffffffffffffffffffffffffffffffff16611a07611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613e95565b60405180910390fd5b8060089080519060200190611a739291906130cb565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611aa9612351565b73ffffffffffffffffffffffffffffffffffffffff16611ac7611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490613e95565b60405180910390fd5b80600b8190555050565b611b2f612351565b73ffffffffffffffffffffffffffffffffffffffff16611b4d611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a90613e95565b60405180910390fd5b80600a8190555050565b606060018054611bbc906142b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611be8906142b3565b8015611c355780601f10611c0a57610100808354040283529160200191611c35565b820191906000526020600020905b815481529060010190602001808311611c1857829003601f168201915b5050505050905090565b611c47612351565b73ffffffffffffffffffffffffffffffffffffffff16611c65611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290613e95565b60405180910390fd5b8060098190555050565b600f5481565b611cdd611cd6612351565b8383612877565b5050565b611ce9612351565b73ffffffffffffffffffffffffffffffffffffffff16611d07611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5490613e95565b60405180910390fd5b60001515601060019054906101000a900460ff16151514611d7d57600080fd5b6000601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550565b611dd8612351565b73ffffffffffffffffffffffffffffffffffffffff16611df6611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390613e95565b60405180910390fd5b6000601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550565b611eb0611eaa612351565b83612420565b611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee690613f75565b60405180910390fd5b611efb848484846129e4565b50505050565b601060039054906101000a900460ff1681565b6060611f1f826122e5565b611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5590613f15565b60405180910390fd5b6000611f68612a40565b90506000815111611f885760405180602001604052806000815250611fb3565b80611f9284612ad2565b604051602001611fa3929190613bb0565b6040516020818303038152906040525b915050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8160008111612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613d55565b60405180910390fd5b600c54816120a76007612412565b6120b191906140de565b11156120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613f55565b60405180910390fd5b6120fa612351565b73ffffffffffffffffffffffffffffffffffffffff16612118611a77565b73ffffffffffffffffffffffffffffffffffffffff161461216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590613e95565b60405180910390fd5b6121788284612771565b505050565b600e5481565b61218b612351565b73ffffffffffffffffffffffffffffffffffffffff166121a9611a77565b73ffffffffffffffffffffffffffffffffffffffff16146121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690613d15565b60405180910390fd5b612278816127b1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123cc8361164a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061242b826122e5565b61246a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246190613db5565b60405180910390fd5b60006124758361164a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124e457508373ffffffffffffffffffffffffffffffffffffffff166124cc84610b79565b73ffffffffffffffffffffffffffffffffffffffff16145b806124f557506124f48185611fc1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661251e8261164a565b73ffffffffffffffffffffffffffffffffffffffff1614612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b90613ef5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90613d75565b60405180910390fd5b6125ef838383612c33565b6125fa600082612359565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461264a91906141bf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a191906140de565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000826127678584612c38565b1490509392505050565b60005b818110156127ac576127866007612cad565b612799836127946007612412565b612cc3565b80806127a490614316565b915050612774565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dd90613d95565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129d79190613c7d565b60405180910390a3505050565b6129ef8484846124fe565b6129fb84848484612ce1565b612a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3190613cf5565b60405180910390fd5b50505050565b606060088054612a4f906142b3565b80601f0160208091040260200160405190810160405280929190818152602001828054612a7b906142b3565b8015612ac85780601f10612a9d57610100808354040283529160200191612ac8565b820191906000526020600020905b815481529060010190602001808311612aab57829003601f168201915b5050505050905090565b60606000821415612b1a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c2e565b600082905060005b60008214612b4c578080612b3590614316565b915050600a82612b459190614134565b9150612b22565b60008167ffffffffffffffff811115612b6857612b67614470565b5b6040519080825280601f01601f191660200182016040528015612b9a5781602001600182028036833780820191505090505b5090505b60008514612c2757600182612bb391906141bf565b9150600a85612bc29190614383565b6030612bce91906140de565b60f81b818381518110612be457612be3614441565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c209190614134565b9450612b9e565b8093505050505b919050565b505050565b60008082905060005b8451811015612ca2576000858281518110612c5f57612c5e614441565b5b60200260200101519050808311612c8157612c7a8382612e78565b9250612c8e565b612c8b8184612e78565b92505b508080612c9a90614316565b915050612c41565b508091505092915050565b6001816000016000828254019250508190555050565b612cdd828260405180602001604052806000815250612e8f565b5050565b6000612d028473ffffffffffffffffffffffffffffffffffffffff16612eea565b15612e6b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d2b612351565b8786866040518563ffffffff1660e01b8152600401612d4d9493929190613c0f565b602060405180830381600087803b158015612d6757600080fd5b505af1925050508015612d9857506040513d601f19601f82011682018060405250810190612d9591906135cc565b60015b612e1b573d8060008114612dc8576040519150601f19603f3d011682016040523d82523d6000602084013e612dcd565b606091505b50600081511415612e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0a90613cf5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e70565b600190505b949350505050565b600082600052816020526040600020905092915050565b612e998383612efd565b612ea66000848484612ce1565b612ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edc90613cf5565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490613e55565b60405180910390fd5b612f76816122e5565b15612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad90613d35565b60405180910390fd5b612fc260008383612c33565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461301291906140de565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546130d7906142b3565b90600052602060002090601f0160209004810192826130f95760008555613140565b82601f1061311257805160ff1916838001178555613140565b82800160010185558215613140579182015b8281111561313f578251825591602001919060010190613124565b5b50905061314d9190613151565b5090565b5b8082111561316a576000816000905550600101613152565b5090565b600061318161317c84613ff5565b613fd0565b90508281526020810184848401111561319d5761319c6144ae565b5b6131a8848285614271565b509392505050565b60006131c36131be84614026565b613fd0565b9050828152602081018484840111156131df576131de6144ae565b5b6131ea848285614271565b509392505050565b60008135905061320181614aa4565b92915050565b60008083601f84011261321d5761321c6144a4565b5b8235905067ffffffffffffffff81111561323a5761323961449f565b5b602083019150836020820283011115613256576132556144a9565b5b9250929050565b60008135905061326c81614abb565b92915050565b60008135905061328181614ad2565b92915050565b60008135905061329681614ae9565b92915050565b6000815190506132ab81614ae9565b92915050565b600082601f8301126132c6576132c56144a4565b5b81356132d684826020860161316e565b91505092915050565b600082601f8301126132f4576132f36144a4565b5b81356133048482602086016131b0565b91505092915050565b60008135905061331c81614b00565b92915050565b600060208284031215613338576133376144b8565b5b6000613346848285016131f2565b91505092915050565b60008060408385031215613366576133656144b8565b5b6000613374858286016131f2565b9250506020613385858286016131f2565b9150509250929050565b6000806000606084860312156133a8576133a76144b8565b5b60006133b6868287016131f2565b93505060206133c7868287016131f2565b92505060406133d88682870161330d565b9150509250925092565b600080600080608085870312156133fc576133fb6144b8565b5b600061340a878288016131f2565b945050602061341b878288016131f2565b935050604061342c8782880161330d565b925050606085013567ffffffffffffffff81111561344d5761344c6144b3565b5b613459878288016132b1565b91505092959194509250565b6000806040838503121561347c5761347b6144b8565b5b600061348a858286016131f2565b925050602061349b8582860161325d565b9150509250929050565b600080604083850312156134bc576134bb6144b8565b5b60006134ca858286016131f2565b92505060206134db8582860161330d565b9150509250929050565b6000806000604084860312156134fe576134fd6144b8565b5b600084013567ffffffffffffffff81111561351c5761351b6144b3565b5b61352886828701613207565b9350935050602061353b8682870161330d565b9150509250925092565b60006020828403121561355b5761355a6144b8565b5b60006135698482850161325d565b91505092915050565b600060208284031215613588576135876144b8565b5b600061359684828501613272565b91505092915050565b6000602082840312156135b5576135b46144b8565b5b60006135c384828501613287565b91505092915050565b6000602082840312156135e2576135e16144b8565b5b60006135f08482850161329c565b91505092915050565b60006020828403121561360f5761360e6144b8565b5b600082013567ffffffffffffffff81111561362d5761362c6144b3565b5b613639848285016132df565b91505092915050565b600060208284031215613658576136576144b8565b5b60006136668482850161330d565b91505092915050565b60008060408385031215613686576136856144b8565b5b60006136948582860161330d565b92505060206136a5858286016131f2565b9150509250929050565b60006136bb8383613b77565b60208301905092915050565b6136d0816141f3565b82525050565b6136e76136e2826141f3565b61435f565b82525050565b60006136f882614067565b6137028185614095565b935061370d83614057565b8060005b8381101561373e57815161372588826136af565b975061373083614088565b925050600181019050613711565b5085935050505092915050565b61375481614205565b82525050565b61376381614211565b82525050565b600061377482614072565b61377e81856140a6565b935061378e818560208601614280565b613797816144bd565b840191505092915050565b60006137ad8261407d565b6137b781856140c2565b93506137c7818560208601614280565b6137d0816144bd565b840191505092915050565b60006137e68261407d565b6137f081856140d3565b9350613800818560208601614280565b80840191505092915050565b60006138196014836140c2565b9150613824826144db565b602082019050919050565b600061383c6032836140c2565b915061384782614504565b604082019050919050565b600061385f6026836140c2565b915061386a82614553565b604082019050919050565b6000613882601c836140c2565b915061388d826145a2565b602082019050919050565b60006138a56014836140c2565b91506138b0826145cb565b602082019050919050565b60006138c86024836140c2565b91506138d3826145f4565b604082019050919050565b60006138eb6019836140c2565b91506138f682614643565b602082019050919050565b600061390e602c836140c2565b91506139198261466c565b604082019050919050565b60006139316022836140c2565b915061393c826146bb565b604082019050919050565b60006139546038836140c2565b915061395f8261470a565b604082019050919050565b6000613977602a836140c2565b915061398282614759565b604082019050919050565b600061399a6029836140c2565b91506139a5826147a8565b604082019050919050565b60006139bd6020836140c2565b91506139c8826147f7565b602082019050919050565b60006139e0602c836140c2565b91506139eb82614820565b604082019050919050565b6000613a036005836140d3565b9150613a0e8261486f565b600582019050919050565b6000613a266020836140c2565b9150613a3182614898565b602082019050919050565b6000613a496017836140c2565b9150613a54826148c1565b602082019050919050565b6000613a6c601e836140c2565b9150613a77826148ea565b602082019050919050565b6000613a8f6029836140c2565b9150613a9a82614913565b604082019050919050565b6000613ab2602f836140c2565b9150613abd82614962565b604082019050919050565b6000613ad56021836140c2565b9150613ae0826149b1565b604082019050919050565b6000613af86000836140b7565b9150613b0382614a00565b600082019050919050565b6000613b1b6014836140c2565b9150613b2682614a03565b602082019050919050565b6000613b3e6031836140c2565b9150613b4982614a2c565b604082019050919050565b6000613b616013836140c2565b9150613b6c82614a7b565b602082019050919050565b613b8081614267565b82525050565b613b8f81614267565b82525050565b6000613ba182846136d6565b60148201915081905092915050565b6000613bbc82856137db565b9150613bc882846137db565b9150613bd3826139f6565b91508190509392505050565b6000613bea82613aeb565b9150819050919050565b6000602082019050613c0960008301846136c7565b92915050565b6000608082019050613c2460008301876136c7565b613c3160208301866136c7565b613c3e6040830185613b86565b8181036060830152613c508184613769565b905095945050505050565b60006020820190508181036000830152613c7581846136ed565b905092915050565b6000602082019050613c92600083018461374b565b92915050565b6000602082019050613cad600083018461375a565b92915050565b60006020820190508181036000830152613ccd81846137a2565b905092915050565b60006020820190508181036000830152613cee8161380c565b9050919050565b60006020820190508181036000830152613d0e8161382f565b9050919050565b60006020820190508181036000830152613d2e81613852565b9050919050565b60006020820190508181036000830152613d4e81613875565b9050919050565b60006020820190508181036000830152613d6e81613898565b9050919050565b60006020820190508181036000830152613d8e816138bb565b9050919050565b60006020820190508181036000830152613dae816138de565b9050919050565b60006020820190508181036000830152613dce81613901565b9050919050565b60006020820190508181036000830152613dee81613924565b9050919050565b60006020820190508181036000830152613e0e81613947565b9050919050565b60006020820190508181036000830152613e2e8161396a565b9050919050565b60006020820190508181036000830152613e4e8161398d565b9050919050565b60006020820190508181036000830152613e6e816139b0565b9050919050565b60006020820190508181036000830152613e8e816139d3565b9050919050565b60006020820190508181036000830152613eae81613a19565b9050919050565b60006020820190508181036000830152613ece81613a3c565b9050919050565b60006020820190508181036000830152613eee81613a5f565b9050919050565b60006020820190508181036000830152613f0e81613a82565b9050919050565b60006020820190508181036000830152613f2e81613aa5565b9050919050565b60006020820190508181036000830152613f4e81613ac8565b9050919050565b60006020820190508181036000830152613f6e81613b0e565b9050919050565b60006020820190508181036000830152613f8e81613b31565b9050919050565b60006020820190508181036000830152613fae81613b54565b9050919050565b6000602082019050613fca6000830184613b86565b92915050565b6000613fda613feb565b9050613fe682826142e5565b919050565b6000604051905090565b600067ffffffffffffffff8211156140105761400f614470565b5b614019826144bd565b9050602081019050919050565b600067ffffffffffffffff82111561404157614040614470565b5b61404a826144bd565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140e982614267565b91506140f483614267565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614129576141286143b4565b5b828201905092915050565b600061413f82614267565b915061414a83614267565b92508261415a576141596143e3565b5b828204905092915050565b600061417082614267565b915061417b83614267565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141b4576141b36143b4565b5b828202905092915050565b60006141ca82614267565b91506141d583614267565b9250828210156141e8576141e76143b4565b5b828203905092915050565b60006141fe82614247565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561429e578082015181840152602081019050614283565b838111156142ad576000848401525b50505050565b600060028204905060018216806142cb57607f821691505b602082108114156142df576142de614412565b5b50919050565b6142ee826144bd565b810181811067ffffffffffffffff8211171561430d5761430c614470565b5b80604052505050565b600061432182614267565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614354576143536143b4565b5b600182019050919050565b600061436a82614371565b9050919050565b600061437c826144ce565b9050919050565b600061438e82614267565b915061439983614267565b9250826143a9576143a86143e3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f742070617274206f66207468652050726573616c652077686974656c697360008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4e6f742070617274206f6620746865205649502077686974656c6973742e0000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614aad816141f3565b8114614ab857600080fd5b50565b614ac481614205565b8114614acf57600080fd5b50565b614adb81614211565b8114614ae657600080fd5b50565b614af28161421b565b8114614afd57600080fd5b50565b614b0981614267565b8114614b1457600080fd5b5056fea264697066735822122094f2130be6e794d8e6fe70434add56e42c2a5d4f72d8162ca6a9a34876c5505064736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102725760003560e01c8063715018a61161014f578063a0c67b29116100c1578063c87b56dd1161007a578063c87b56dd146108e3578063d5abeb0114610920578063e985e9c51461094b578063efbd73f414610988578063f2f4e824146109b1578063f2fde38b146109dc57610272565b8063a0c67b291461080d578063a22cb46514610838578063a43be57b14610861578063a966448314610878578063b88d4fde1461088f578063bc8893b4146108b857610272565b80637ec4a659116101135780637ec4a659146107135780638da5cb5b1461073c5780638dbb7c06146107675780638fdcf9421461079057806395d89b41146107b957806399bc27cb146107e457610272565b8063715018a614610656578063718cd6741461066d578063785448af146106965780637cb64759146106c15780637d0a7529146106ea57610272565b80632eb4a7ab116101e857806345de0d9b116101ac57806345de0d9b1461053f57806353135ca01461055b5780635c975abb1461058657806362b99ad4146105b15780636352211e146105dc57806370a082311461061957610272565b80632eb4a7ab1461046c5780633ccfd60b1461049757806342842e0e146104ae578063438b6300146104d7578063453afb0f1461051457610272565b80631418fac61161023a5780631418fac61461037057806316c38b3c1461039b57806318160ddd146103c45780631bc796b0146103ef57806323b872dd146104185780632a23d07d1461044157610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c5780630b85d4ef14610345575b600080fd5b34801561028357600080fd5b5061029e6004803603810190610299919061359f565b610a05565b6040516102ab9190613c7d565b60405180910390f35b3480156102c057600080fd5b506102c9610ae7565b6040516102d69190613cb3565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613642565b610b79565b6040516103139190613bf4565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906134a5565b610bfe565b005b34801561035157600080fd5b5061035a610d16565b6040516103679190613fb5565b60405180910390f35b34801561037c57600080fd5b50610385610d1c565b6040516103929190613fb5565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190613545565b610d22565b005b3480156103d057600080fd5b506103d9610dbb565b6040516103e69190613fb5565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613642565b610dcc565b005b34801561042457600080fd5b5061043f600480360381019061043a919061338f565b610e52565b005b34801561044d57600080fd5b50610456610eb2565b6040516104639190613fb5565b60405180910390f35b34801561047857600080fd5b50610481610eb8565b60405161048e9190613c98565b60405180910390f35b3480156104a357600080fd5b506104ac610ebe565b005b3480156104ba57600080fd5b506104d560048036038101906104d0919061338f565b610fba565b005b3480156104e357600080fd5b506104fe60048036038101906104f99190613322565b610fda565b60405161050b9190613c5b565b60405180910390f35b34801561052057600080fd5b506105296110e5565b6040516105369190613fb5565b60405180910390f35b610559600480360381019061055491906134e5565b6110eb565b005b34801561056757600080fd5b50610570611596565b60405161057d9190613c7d565b60405180910390f35b34801561059257600080fd5b5061059b6115a9565b6040516105a89190613c7d565b60405180910390f35b3480156105bd57600080fd5b506105c66115bc565b6040516105d39190613cb3565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190613642565b61164a565b6040516106109190613bf4565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613322565b6116fc565b60405161064d9190613fb5565b60405180910390f35b34801561066257600080fd5b5061066b6117b4565b005b34801561067957600080fd5b50610694600480360381019061068f9190613642565b61183c565b005b3480156106a257600080fd5b506106ab6118c2565b6040516106b89190613c7d565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613572565b6118d5565b005b3480156106f657600080fd5b50610711600480360381019061070c9190613642565b61195b565b005b34801561071f57600080fd5b5061073a600480360381019061073591906135f9565b6119e1565b005b34801561074857600080fd5b50610751611a77565b60405161075e9190613bf4565b60405180910390f35b34801561077357600080fd5b5061078e60048036038101906107899190613642565b611aa1565b005b34801561079c57600080fd5b506107b760048036038101906107b29190613642565b611b27565b005b3480156107c557600080fd5b506107ce611bad565b6040516107db9190613cb3565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190613642565b611c3f565b005b34801561081957600080fd5b50610822611cc5565b60405161082f9190613fb5565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190613465565b611ccb565b005b34801561086d57600080fd5b50610876611ce1565b005b34801561088457600080fd5b5061088d611dd0565b005b34801561089b57600080fd5b506108b660048036038101906108b191906133e2565b611e9f565b005b3480156108c457600080fd5b506108cd611f01565b6040516108da9190613c7d565b60405180910390f35b3480156108ef57600080fd5b5061090a60048036038101906109059190613642565b611f14565b6040516109179190613cb3565b60405180910390f35b34801561092c57600080fd5b50610935611fbb565b6040516109429190613fb5565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d919061334f565b611fc1565b60405161097f9190613c7d565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa919061366f565b612055565b005b3480156109bd57600080fd5b506109c661217d565b6040516109d39190613fb5565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190613322565b612183565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae05750610adf8261227b565b5b9050919050565b606060008054610af6906142b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b22906142b3565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b5050505050905090565b6000610b84826122e5565b610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613e75565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c098261164a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613f35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c99612351565b73ffffffffffffffffffffffffffffffffffffffff161480610cc85750610cc781610cc2612351565b611fc1565b5b610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613df5565b60405180910390fd5b610d118383612359565b505050565b600d5481565b60095481565b610d2a612351565b73ffffffffffffffffffffffffffffffffffffffff16610d48611a77565b73ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e95565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610dc76007612412565b905090565b610dd4612351565b73ffffffffffffffffffffffffffffffffffffffff16610df2611a77565b73ffffffffffffffffffffffffffffffffffffffff1614610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90613e95565b60405180910390fd5b80600f8190555050565b610e63610e5d612351565b82612420565b610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990613f75565b60405180910390fd5b610ead8383836124fe565b505050565b600a5481565b60115481565b610ec6612351565b73ffffffffffffffffffffffffffffffffffffffff16610ee4611a77565b73ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613e95565b60405180910390fd5b6000610f44611a77565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f6790613bdf565b60006040518083038185875af1925050503d8060008114610fa4576040519150601f19603f3d011682016040523d82523d6000602084013e610fa9565b606091505b5050905080610fb757600080fd5b50565b610fd583838360405180602001604052806000815250611e9f565b505050565b60606000610fe7836116fc565b905060008167ffffffffffffffff81111561100557611004614470565b5b6040519080825280602002602001820160405280156110335781602001602082028036833780820191505090505b50905060006001905060005b83811080156110505750600c548211155b156110d95760006110608361164a565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c557828483815181106110aa576110a9614441565b5b60200260200101818152505081806110c190614316565b9250505b82806110d090614316565b9350505061103f565b82945050505050919050565b600b5481565b806000811161112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690613d55565b60405180910390fd5b600c548161113d6007612412565b61114791906140de565b1115611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90613f55565b60405180910390fd5b601060009054906101000a900460ff16156111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90613eb5565b60405180910390fd5b60011515601060019054906101000a900460ff161515141561135a57816009546112029190614165565b341015611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613f95565b60405180910390fd5b600f5482611251336116fc565b61125b91906140de565b111561129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129390613cd5565b60405180910390fd5b6000336040516020016112af9190613b95565b604051602081830303815290604052805190602001209050611315858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361275a565b611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b90613ed5565b60405180910390fd5b50611586565b60011515601060029054906101000a900460ff16151514156114dc5781600a546113849190614165565b3410156113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd90613f95565b60405180910390fd5b600e54826113d3336116fc565b6113dd91906140de565b111561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613cd5565b60405180910390fd5b6000336040516020016114319190613b95565b604051602081830303815290604052805190602001209050611497858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361275a565b6114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90613dd5565b60405180910390fd5b50611585565b81600b546114ea9190614165565b34101561152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390613f95565b60405180910390fd5b600d5482611539336116fc565b61154391906140de565b1115611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90613cd5565b60405180910390fd5b5b5b6115903383612771565b50505050565b601060029054906101000a900460ff1681565b601060009054906101000a900460ff1681565b600880546115c9906142b3565b80601f01602080910402602001604051908101604052809291908181526020018280546115f5906142b3565b80156116425780601f1061161757610100808354040283529160200191611642565b820191906000526020600020905b81548152906001019060200180831161162557829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90613e35565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490613e15565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117bc612351565b73ffffffffffffffffffffffffffffffffffffffff166117da611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790613e95565b60405180910390fd5b61183a60006127b1565b565b611844612351565b73ffffffffffffffffffffffffffffffffffffffff16611862611a77565b73ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af90613e95565b60405180910390fd5b80600d8190555050565b601060019054906101000a900460ff1681565b6118dd612351565b73ffffffffffffffffffffffffffffffffffffffff166118fb611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890613e95565b60405180910390fd5b8060118190555050565b611963612351565b73ffffffffffffffffffffffffffffffffffffffff16611981611a77565b73ffffffffffffffffffffffffffffffffffffffff16146119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90613e95565b60405180910390fd5b80600e8190555050565b6119e9612351565b73ffffffffffffffffffffffffffffffffffffffff16611a07611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613e95565b60405180910390fd5b8060089080519060200190611a739291906130cb565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611aa9612351565b73ffffffffffffffffffffffffffffffffffffffff16611ac7611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490613e95565b60405180910390fd5b80600b8190555050565b611b2f612351565b73ffffffffffffffffffffffffffffffffffffffff16611b4d611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a90613e95565b60405180910390fd5b80600a8190555050565b606060018054611bbc906142b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611be8906142b3565b8015611c355780601f10611c0a57610100808354040283529160200191611c35565b820191906000526020600020905b815481529060010190602001808311611c1857829003601f168201915b5050505050905090565b611c47612351565b73ffffffffffffffffffffffffffffffffffffffff16611c65611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290613e95565b60405180910390fd5b8060098190555050565b600f5481565b611cdd611cd6612351565b8383612877565b5050565b611ce9612351565b73ffffffffffffffffffffffffffffffffffffffff16611d07611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5490613e95565b60405180910390fd5b60001515601060019054906101000a900460ff16151514611d7d57600080fd5b6000601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550565b611dd8612351565b73ffffffffffffffffffffffffffffffffffffffff16611df6611a77565b73ffffffffffffffffffffffffffffffffffffffff1614611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390613e95565b60405180910390fd5b6000601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550565b611eb0611eaa612351565b83612420565b611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee690613f75565b60405180910390fd5b611efb848484846129e4565b50505050565b601060039054906101000a900460ff1681565b6060611f1f826122e5565b611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5590613f15565b60405180910390fd5b6000611f68612a40565b90506000815111611f885760405180602001604052806000815250611fb3565b80611f9284612ad2565b604051602001611fa3929190613bb0565b6040516020818303038152906040525b915050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8160008111612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613d55565b60405180910390fd5b600c54816120a76007612412565b6120b191906140de565b11156120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613f55565b60405180910390fd5b6120fa612351565b73ffffffffffffffffffffffffffffffffffffffff16612118611a77565b73ffffffffffffffffffffffffffffffffffffffff161461216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590613e95565b60405180910390fd5b6121788284612771565b505050565b600e5481565b61218b612351565b73ffffffffffffffffffffffffffffffffffffffff166121a9611a77565b73ffffffffffffffffffffffffffffffffffffffff16146121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690613d15565b60405180910390fd5b612278816127b1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123cc8361164a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061242b826122e5565b61246a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246190613db5565b60405180910390fd5b60006124758361164a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124e457508373ffffffffffffffffffffffffffffffffffffffff166124cc84610b79565b73ffffffffffffffffffffffffffffffffffffffff16145b806124f557506124f48185611fc1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661251e8261164a565b73ffffffffffffffffffffffffffffffffffffffff1614612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b90613ef5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90613d75565b60405180910390fd5b6125ef838383612c33565b6125fa600082612359565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461264a91906141bf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a191906140de565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000826127678584612c38565b1490509392505050565b60005b818110156127ac576127866007612cad565b612799836127946007612412565b612cc3565b80806127a490614316565b915050612774565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dd90613d95565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129d79190613c7d565b60405180910390a3505050565b6129ef8484846124fe565b6129fb84848484612ce1565b612a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3190613cf5565b60405180910390fd5b50505050565b606060088054612a4f906142b3565b80601f0160208091040260200160405190810160405280929190818152602001828054612a7b906142b3565b8015612ac85780601f10612a9d57610100808354040283529160200191612ac8565b820191906000526020600020905b815481529060010190602001808311612aab57829003601f168201915b5050505050905090565b60606000821415612b1a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c2e565b600082905060005b60008214612b4c578080612b3590614316565b915050600a82612b459190614134565b9150612b22565b60008167ffffffffffffffff811115612b6857612b67614470565b5b6040519080825280601f01601f191660200182016040528015612b9a5781602001600182028036833780820191505090505b5090505b60008514612c2757600182612bb391906141bf565b9150600a85612bc29190614383565b6030612bce91906140de565b60f81b818381518110612be457612be3614441565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c209190614134565b9450612b9e565b8093505050505b919050565b505050565b60008082905060005b8451811015612ca2576000858281518110612c5f57612c5e614441565b5b60200260200101519050808311612c8157612c7a8382612e78565b9250612c8e565b612c8b8184612e78565b92505b508080612c9a90614316565b915050612c41565b508091505092915050565b6001816000016000828254019250508190555050565b612cdd828260405180602001604052806000815250612e8f565b5050565b6000612d028473ffffffffffffffffffffffffffffffffffffffff16612eea565b15612e6b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d2b612351565b8786866040518563ffffffff1660e01b8152600401612d4d9493929190613c0f565b602060405180830381600087803b158015612d6757600080fd5b505af1925050508015612d9857506040513d601f19601f82011682018060405250810190612d9591906135cc565b60015b612e1b573d8060008114612dc8576040519150601f19603f3d011682016040523d82523d6000602084013e612dcd565b606091505b50600081511415612e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0a90613cf5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e70565b600190505b949350505050565b600082600052816020526040600020905092915050565b612e998383612efd565b612ea66000848484612ce1565b612ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edc90613cf5565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490613e55565b60405180910390fd5b612f76816122e5565b15612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad90613d35565b60405180910390fd5b612fc260008383612c33565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461301291906140de565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546130d7906142b3565b90600052602060002090601f0160209004810192826130f95760008555613140565b82601f1061311257805160ff1916838001178555613140565b82800160010185558215613140579182015b8281111561313f578251825591602001919060010190613124565b5b50905061314d9190613151565b5090565b5b8082111561316a576000816000905550600101613152565b5090565b600061318161317c84613ff5565b613fd0565b90508281526020810184848401111561319d5761319c6144ae565b5b6131a8848285614271565b509392505050565b60006131c36131be84614026565b613fd0565b9050828152602081018484840111156131df576131de6144ae565b5b6131ea848285614271565b509392505050565b60008135905061320181614aa4565b92915050565b60008083601f84011261321d5761321c6144a4565b5b8235905067ffffffffffffffff81111561323a5761323961449f565b5b602083019150836020820283011115613256576132556144a9565b5b9250929050565b60008135905061326c81614abb565b92915050565b60008135905061328181614ad2565b92915050565b60008135905061329681614ae9565b92915050565b6000815190506132ab81614ae9565b92915050565b600082601f8301126132c6576132c56144a4565b5b81356132d684826020860161316e565b91505092915050565b600082601f8301126132f4576132f36144a4565b5b81356133048482602086016131b0565b91505092915050565b60008135905061331c81614b00565b92915050565b600060208284031215613338576133376144b8565b5b6000613346848285016131f2565b91505092915050565b60008060408385031215613366576133656144b8565b5b6000613374858286016131f2565b9250506020613385858286016131f2565b9150509250929050565b6000806000606084860312156133a8576133a76144b8565b5b60006133b6868287016131f2565b93505060206133c7868287016131f2565b92505060406133d88682870161330d565b9150509250925092565b600080600080608085870312156133fc576133fb6144b8565b5b600061340a878288016131f2565b945050602061341b878288016131f2565b935050604061342c8782880161330d565b925050606085013567ffffffffffffffff81111561344d5761344c6144b3565b5b613459878288016132b1565b91505092959194509250565b6000806040838503121561347c5761347b6144b8565b5b600061348a858286016131f2565b925050602061349b8582860161325d565b9150509250929050565b600080604083850312156134bc576134bb6144b8565b5b60006134ca858286016131f2565b92505060206134db8582860161330d565b9150509250929050565b6000806000604084860312156134fe576134fd6144b8565b5b600084013567ffffffffffffffff81111561351c5761351b6144b3565b5b61352886828701613207565b9350935050602061353b8682870161330d565b9150509250925092565b60006020828403121561355b5761355a6144b8565b5b60006135698482850161325d565b91505092915050565b600060208284031215613588576135876144b8565b5b600061359684828501613272565b91505092915050565b6000602082840312156135b5576135b46144b8565b5b60006135c384828501613287565b91505092915050565b6000602082840312156135e2576135e16144b8565b5b60006135f08482850161329c565b91505092915050565b60006020828403121561360f5761360e6144b8565b5b600082013567ffffffffffffffff81111561362d5761362c6144b3565b5b613639848285016132df565b91505092915050565b600060208284031215613658576136576144b8565b5b60006136668482850161330d565b91505092915050565b60008060408385031215613686576136856144b8565b5b60006136948582860161330d565b92505060206136a5858286016131f2565b9150509250929050565b60006136bb8383613b77565b60208301905092915050565b6136d0816141f3565b82525050565b6136e76136e2826141f3565b61435f565b82525050565b60006136f882614067565b6137028185614095565b935061370d83614057565b8060005b8381101561373e57815161372588826136af565b975061373083614088565b925050600181019050613711565b5085935050505092915050565b61375481614205565b82525050565b61376381614211565b82525050565b600061377482614072565b61377e81856140a6565b935061378e818560208601614280565b613797816144bd565b840191505092915050565b60006137ad8261407d565b6137b781856140c2565b93506137c7818560208601614280565b6137d0816144bd565b840191505092915050565b60006137e68261407d565b6137f081856140d3565b9350613800818560208601614280565b80840191505092915050565b60006138196014836140c2565b9150613824826144db565b602082019050919050565b600061383c6032836140c2565b915061384782614504565b604082019050919050565b600061385f6026836140c2565b915061386a82614553565b604082019050919050565b6000613882601c836140c2565b915061388d826145a2565b602082019050919050565b60006138a56014836140c2565b91506138b0826145cb565b602082019050919050565b60006138c86024836140c2565b91506138d3826145f4565b604082019050919050565b60006138eb6019836140c2565b91506138f682614643565b602082019050919050565b600061390e602c836140c2565b91506139198261466c565b604082019050919050565b60006139316022836140c2565b915061393c826146bb565b604082019050919050565b60006139546038836140c2565b915061395f8261470a565b604082019050919050565b6000613977602a836140c2565b915061398282614759565b604082019050919050565b600061399a6029836140c2565b91506139a5826147a8565b604082019050919050565b60006139bd6020836140c2565b91506139c8826147f7565b602082019050919050565b60006139e0602c836140c2565b91506139eb82614820565b604082019050919050565b6000613a036005836140d3565b9150613a0e8261486f565b600582019050919050565b6000613a266020836140c2565b9150613a3182614898565b602082019050919050565b6000613a496017836140c2565b9150613a54826148c1565b602082019050919050565b6000613a6c601e836140c2565b9150613a77826148ea565b602082019050919050565b6000613a8f6029836140c2565b9150613a9a82614913565b604082019050919050565b6000613ab2602f836140c2565b9150613abd82614962565b604082019050919050565b6000613ad56021836140c2565b9150613ae0826149b1565b604082019050919050565b6000613af86000836140b7565b9150613b0382614a00565b600082019050919050565b6000613b1b6014836140c2565b9150613b2682614a03565b602082019050919050565b6000613b3e6031836140c2565b9150613b4982614a2c565b604082019050919050565b6000613b616013836140c2565b9150613b6c82614a7b565b602082019050919050565b613b8081614267565b82525050565b613b8f81614267565b82525050565b6000613ba182846136d6565b60148201915081905092915050565b6000613bbc82856137db565b9150613bc882846137db565b9150613bd3826139f6565b91508190509392505050565b6000613bea82613aeb565b9150819050919050565b6000602082019050613c0960008301846136c7565b92915050565b6000608082019050613c2460008301876136c7565b613c3160208301866136c7565b613c3e6040830185613b86565b8181036060830152613c508184613769565b905095945050505050565b60006020820190508181036000830152613c7581846136ed565b905092915050565b6000602082019050613c92600083018461374b565b92915050565b6000602082019050613cad600083018461375a565b92915050565b60006020820190508181036000830152613ccd81846137a2565b905092915050565b60006020820190508181036000830152613cee8161380c565b9050919050565b60006020820190508181036000830152613d0e8161382f565b9050919050565b60006020820190508181036000830152613d2e81613852565b9050919050565b60006020820190508181036000830152613d4e81613875565b9050919050565b60006020820190508181036000830152613d6e81613898565b9050919050565b60006020820190508181036000830152613d8e816138bb565b9050919050565b60006020820190508181036000830152613dae816138de565b9050919050565b60006020820190508181036000830152613dce81613901565b9050919050565b60006020820190508181036000830152613dee81613924565b9050919050565b60006020820190508181036000830152613e0e81613947565b9050919050565b60006020820190508181036000830152613e2e8161396a565b9050919050565b60006020820190508181036000830152613e4e8161398d565b9050919050565b60006020820190508181036000830152613e6e816139b0565b9050919050565b60006020820190508181036000830152613e8e816139d3565b9050919050565b60006020820190508181036000830152613eae81613a19565b9050919050565b60006020820190508181036000830152613ece81613a3c565b9050919050565b60006020820190508181036000830152613eee81613a5f565b9050919050565b60006020820190508181036000830152613f0e81613a82565b9050919050565b60006020820190508181036000830152613f2e81613aa5565b9050919050565b60006020820190508181036000830152613f4e81613ac8565b9050919050565b60006020820190508181036000830152613f6e81613b0e565b9050919050565b60006020820190508181036000830152613f8e81613b31565b9050919050565b60006020820190508181036000830152613fae81613b54565b9050919050565b6000602082019050613fca6000830184613b86565b92915050565b6000613fda613feb565b9050613fe682826142e5565b919050565b6000604051905090565b600067ffffffffffffffff8211156140105761400f614470565b5b614019826144bd565b9050602081019050919050565b600067ffffffffffffffff82111561404157614040614470565b5b61404a826144bd565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140e982614267565b91506140f483614267565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614129576141286143b4565b5b828201905092915050565b600061413f82614267565b915061414a83614267565b92508261415a576141596143e3565b5b828204905092915050565b600061417082614267565b915061417b83614267565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141b4576141b36143b4565b5b828202905092915050565b60006141ca82614267565b91506141d583614267565b9250828210156141e8576141e76143b4565b5b828203905092915050565b60006141fe82614247565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561429e578082015181840152602081019050614283565b838111156142ad576000848401525b50505050565b600060028204905060018216806142cb57607f821691505b602082108114156142df576142de614412565b5b50919050565b6142ee826144bd565b810181811067ffffffffffffffff8211171561430d5761430c614470565b5b80604052505050565b600061432182614267565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614354576143536143b4565b5b600182019050919050565b600061436a82614371565b9050919050565b600061437c826144ce565b9050919050565b600061438e82614267565b915061439983614267565b9250826143a9576143a86143e3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f742070617274206f66207468652050726573616c652077686974656c697360008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4e6f742070617274206f6620746865205649502077686974656c6973742e0000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614aad816141f3565b8114614ab857600080fd5b50565b614ac481614205565b8114614acf57600080fd5b50565b614adb81614211565b8114614ae657600080fd5b50565b614af28161421b565b8114614afd57600080fd5b50565b614b0981614267565b8114614b1457600080fd5b5056fea264697066735822122094f2130be6e794d8e6fe70434add56e42c2a5d4f72d8162ca6a9a34876c5505064736f6c63430008070033

Deployed Bytecode Sourcemap

40543:5852:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28023:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28968:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30527:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30050:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40907:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40734:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45418:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41583:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44548:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31277:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40777:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41210:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45605:467;;;;;;;;;;;;;:::i;:::-;;31687:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43143:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40821:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41678:1298;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41133:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41068:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40697:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28662:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28392:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9011:103;;;;;;;;;;;;;:::i;:::-;;44867:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41098:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45501:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44698:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45312:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8360:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44210:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44330:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29137:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44438:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41014:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30820:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45153:153;;;;;;;;;;;;;:::i;:::-;;45029:118;;;;;;;;;;;;;:::i;:::-;;31943:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41169:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43784:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40870:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31046:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42982:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40960:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9269:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28023:305;28125:4;28177:25;28162:40;;;:11;:40;;;;:105;;;;28234:33;28219:48;;;:11;:48;;;;28162:105;:158;;;;28284:36;28308:11;28284:23;:36::i;:::-;28162:158;28142:178;;28023:305;;;:::o;28968:100::-;29022:13;29055:5;29048:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28968:100;:::o;30527:221::-;30603:7;30631:16;30639:7;30631;:16::i;:::-;30623:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30716:15;:24;30732:7;30716:24;;;;;;;;;;;;;;;;;;;;;30709:31;;30527:221;;;:::o;30050:411::-;30131:13;30147:23;30162:7;30147:14;:23::i;:::-;30131:39;;30195:5;30189:11;;:2;:11;;;;30181:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30289:5;30273:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30298:37;30315:5;30322:12;:10;:12::i;:::-;30298:16;:37::i;:::-;30273:62;30251:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30432:21;30441:2;30445:7;30432:8;:21::i;:::-;30120:341;30050:411;;:::o;40907:48::-;;;;:::o;40734:38::-;;;;:::o;45418:77::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45483:6:::1;45474;;:15;;;;;;;;;;;;;;;;;;45418:77:::0;:::o;41583:89::-;41627:7;41650:16;:6;:14;:16::i;:::-;41643:23;;41583:89;:::o;44548:144::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44665:21:::1;44636:26;:50;;;;44548:144:::0;:::o;31277:339::-;31472:41;31491:12;:10;:12::i;:::-;31505:7;31472:18;:41::i;:::-;31464:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31580:28;31590:4;31596:2;31600:7;31580:9;:28::i;:::-;31277:339;;;:::o;40777:39::-;;;;:::o;41210:93::-;;;;:::o;45605:467::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45894:7:::1;45915;:5;:7::i;:::-;45907:21;;45936;45907:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45893:69;;;45977:2;45969:11;;;::::0;::::1;;45642:430;45605:467::o:0;31687:185::-;31825:39;31842:4;31848:2;31852:7;31825:39;;;;;;;;;;;;:16;:39::i;:::-;31687:185;;;:::o;43143:635::-;43218:16;43246:23;43272:17;43282:6;43272:9;:17::i;:::-;43246:43;;43296:30;43343:15;43329:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43296:63;;43366:22;43391:1;43366:26;;43399:23;43435:309;43460:15;43442;:33;:64;;;;;43497:9;;43479:14;:27;;43442:64;43435:309;;;43517:25;43545:23;43553:14;43545:7;:23::i;:::-;43517:51;;43604:6;43583:27;;:17;:27;;;43579:131;;;43656:14;43623:13;43637:15;43623:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;43683:17;;;;;:::i;:::-;;;;43579:131;43720:16;;;;;:::i;:::-;;;;43508:236;43435:309;;;43759:13;43752:20;;;;;;43143:635;;;:::o;40821:42::-;;;;:::o;41678:1298::-;41776:11;41454:1;41440:11;:15;41432:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41529:9;;41514:11;41495:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;41487:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41805:6:::1;;;;;;;;;;;41804:7;41796:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41864:4;41849:19;;:13;;;;;;;;;;;:19;;;41846:1084;;;41913:11;41899;;:25;;;;:::i;:::-;41886:9;:38;;41878:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42004:26;;41989:11;41965:21;41975:10;41965:9;:21::i;:::-;:35;;;;:::i;:::-;:65;;41957:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;42109:12;42151:10;42134:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;42124:39;;;;;;42109:54;;42180:50;42199:12;;42180:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42213:10;;42225:4;42180:18;:50::i;:::-;42172:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;41869:404;41846:1084;;;42302:4;42287:19;;:13;;;;;;;;;;;:19;;;42284:646;;;42351:11;42337;;:25;;;;:::i;:::-;42324:9;:38;;42316:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42442:30;;42427:11;42403:21;42413:10;42403:9;:21::i;:::-;:35;;;;:::i;:::-;:69;;42395:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;42551:12;42593:10;42576:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;42566:39;;;;;;42551:54;;42622:50;42641:12;;42622:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42655:10;;42667:4;42622:18;:50::i;:::-;42614:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;42307:412;42284:646;;;42776:11;42759:14;;:28;;;;:::i;:::-;42746:9;:41;;42738:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42867:29;;42852:11;42828:21;42838:10;42828:9;:21::i;:::-;:35;;;;:::i;:::-;:68;;42820:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;42284:646;41846:1084;42936:34;42946:10;42958:11;42936:9;:34::i;:::-;41678:1298:::0;;;;:::o;41133:31::-;;;;;;;;;;;;;:::o;41068:25::-;;;;;;;;;;;;;:::o;40697:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28662:239::-;28734:7;28754:13;28770:7;:16;28778:7;28770:16;;;;;;;;;;;;;;;;;;;;;28754:32;;28822:1;28805:19;;:5;:19;;;;28797:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28888:5;28881:12;;;28662:239;;;:::o;28392:208::-;28464:7;28509:1;28492:19;;:5;:19;;;;28484:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28576:9;:16;28586:5;28576:16;;;;;;;;;;;;;;;;28569:23;;28392:208;;;:::o;9011:103::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9076:30:::1;9103:1;9076:18;:30::i;:::-;9011:103::o:0;44867:156::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44993:24:::1;44961:29;:56;;;;44867:156:::0;:::o;41098:30::-;;;;;;;;;;;;;:::o;45501:98::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45582:11:::1;45569:10;:24;;;;45501:98:::0;:::o;44698:160::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44827:25:::1;44794:30;:58;;;;44698:160:::0;:::o;45312:100::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45396:10:::1;45384:9;:22;;;;;;;;;;;;:::i;:::-;;45312:100:::0;:::o;8360:87::-;8406:7;8433:6;;;;;;;;;;;8426:13;;8360:87;:::o;44210:114::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44303:15:::1;44286:14;:32;;;;44210:114:::0;:::o;44330:102::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44414:12:::1;44400:11;:26;;;;44330:102:::0;:::o;29137:104::-;29193:13;29226:7;29219:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29137:104;:::o;44438:102::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44522:12:::1;44508:11;:26;;;;44438:102:::0;:::o;41014:45::-;;;;:::o;30820:155::-;30915:52;30934:12;:10;:12::i;:::-;30948:8;30958;30915:18;:52::i;:::-;30820:155;;:::o;45153:153::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45222:5:::1;45207:20;;:13;;;;;;;;;;;:20;;;45199:29;;;::::0;::::1;;45249:5;45235:13;;:19;;;;;;;;;;;;;;;;;;45278:4;45261:16;;:21;;;;;;;;;;;;;;;;;;45296:4;45289:6;;:11;;;;;;;;;;;;;;;;;;45153:153::o:0;45029:118::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45091:5:::1;45075:13;;:21;;;;;;;;;;;;;;;;;;45119:4;45103:13;;:20;;;;;;;;;;;;;;;;;;45137:4;45130:6;;:11;;;;;;;;;;;;;;;;;;45029:118::o:0;31943:328::-;32118:41;32137:12;:10;:12::i;:::-;32151:7;32118:18;:41::i;:::-;32110:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32224:39;32238:4;32244:2;32248:7;32257:5;32224:13;:39::i;:::-;31943:328;;;;:::o;41169:34::-;;;;;;;;;;;;;:::o;43784:420::-;43883:13;43924:17;43932:8;43924:7;:17::i;:::-;43908:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;44015:28;44046:10;:8;:10::i;:::-;44015:41;;44101:1;44076:14;44070:28;:32;:128;;;;;;;;;;;;;;;;;44138:14;44154:19;:8;:17;:19::i;:::-;44121:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44070:128;44063:135;;;43784:420;;;:::o;40870:32::-;;;;:::o;31046:164::-;31143:4;31167:18;:25;31186:5;31167:25;;;;;;;;;;;;;;;:35;31193:8;31167:35;;;;;;;;;;;;;;;;;;;;;;;;;31160:42;;31046:164;;;;:::o;42982:155::-;43068:11;41454:1;41440:11;:15;41432:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41529:9;;41514:11;41495:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;41487:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;8591:12:::1;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43098:33:::2;43108:9;43119:11;43098:9;:33::i;:::-;42982:155:::0;;;:::o;40960:49::-;;;;:::o;9269:201::-;8591:12;:10;:12::i;:::-;8580:23;;:7;:5;:7::i;:::-;:23;;;8572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9378:1:::1;9358:22;;:8;:22;;;;9350:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9434:28;9453:8;9434:18;:28::i;:::-;9269:201:::0;:::o;20792:157::-;20877:4;20916:25;20901:40;;;:11;:40;;;;20894:47;;20792:157;;;:::o;33781:127::-;33846:4;33898:1;33870:30;;:7;:16;33878:7;33870:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33863:37;;33781:127;;;:::o;7084:98::-;7137:7;7164:10;7157:17;;7084:98;:::o;37763:174::-;37865:2;37838:15;:24;37854:7;37838:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37921:7;37917:2;37883:46;;37892:23;37907:7;37892:14;:23::i;:::-;37883:46;;;;;;;;;;;;37763:174;;:::o;3688:114::-;3753:7;3780;:14;;;3773:21;;3688:114;;;:::o;34075:348::-;34168:4;34193:16;34201:7;34193;:16::i;:::-;34185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34269:13;34285:23;34300:7;34285:14;:23::i;:::-;34269:39;;34338:5;34327:16;;:7;:16;;;:51;;;;34371:7;34347:31;;:20;34359:7;34347:11;:20::i;:::-;:31;;;34327:51;:87;;;;34382:32;34399:5;34406:7;34382:16;:32::i;:::-;34327:87;34319:96;;;34075:348;;;;:::o;37067:578::-;37226:4;37199:31;;:23;37214:7;37199:14;:23::i;:::-;:31;;;37191:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37309:1;37295:16;;:2;:16;;;;37287:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37365:39;37386:4;37392:2;37396:7;37365:20;:39::i;:::-;37469:29;37486:1;37490:7;37469:8;:29::i;:::-;37530:1;37511:9;:15;37521:4;37511:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37559:1;37542:9;:13;37552:2;37542:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37590:2;37571:7;:16;37579:7;37571:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37629:7;37625:2;37610:27;;37619:4;37610:27;;;;;;;;;;;;37067:578;;;:::o;1312:190::-;1437:4;1490;1461:25;1474:5;1481:4;1461:12;:25::i;:::-;:33;1454:40;;1312:190;;;;;:::o;46078:204::-;46158:9;46153:124;46177:11;46173:1;:15;46153:124;;;46204:18;:6;:16;:18::i;:::-;46231:38;46241:9;46252:16;:6;:14;:16::i;:::-;46231:9;:38::i;:::-;46190:3;;;;;:::i;:::-;;;;46153:124;;;;46078:204;;:::o;9630:191::-;9704:16;9723:6;;;;;;;;;;;9704:25;;9749:8;9740:6;;:17;;;;;;;;;;;;;;;;;;9804:8;9773:40;;9794:8;9773:40;;;;;;;;;;;;9693:128;9630:191;:::o;38079:315::-;38234:8;38225:17;;:5;:17;;;;38217:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38321:8;38283:18;:25;38302:5;38283:25;;;;;;;;;;;;;;;:35;38309:8;38283:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38367:8;38345:41;;38360:5;38345:41;;;38377:8;38345:41;;;;;;:::i;:::-;;;;;;;;38079:315;;;:::o;33153:::-;33310:28;33320:4;33326:2;33330:7;33310:9;:28::i;:::-;33357:48;33380:4;33386:2;33390:7;33399:5;33357:22;:48::i;:::-;33349:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33153:315;;;;:::o;46288:104::-;46348:13;46377:9;46370:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46288:104;:::o;4646:723::-;4702:13;4932:1;4923:5;:10;4919:53;;;4950:10;;;;;;;;;;;;;;;;;;;;;4919:53;4982:12;4997:5;4982:20;;5013:14;5038:78;5053:1;5045:4;:9;5038:78;;5071:8;;;;;:::i;:::-;;;;5102:2;5094:10;;;;;:::i;:::-;;;5038:78;;;5126:19;5158:6;5148:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5126:39;;5176:154;5192:1;5183:5;:10;5176:154;;5220:1;5210:11;;;;;:::i;:::-;;;5287:2;5279:5;:10;;;;:::i;:::-;5266:2;:24;;;;:::i;:::-;5253:39;;5236:6;5243;5236:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5316:2;5307:11;;;;;:::i;:::-;;;5176:154;;;5354:6;5340:21;;;;;4646:723;;;;:::o;40330:126::-;;;;:::o;1863:675::-;1946:7;1966:20;1989:4;1966:27;;2009:9;2004:497;2028:5;:12;2024:1;:16;2004:497;;;2062:20;2085:5;2091:1;2085:8;;;;;;;;:::i;:::-;;;;;;;;2062:31;;2128:12;2112;:28;2108:382;;2255:42;2270:12;2284;2255:14;:42::i;:::-;2240:57;;2108:382;;;2432:42;2447:12;2461;2432:14;:42::i;:::-;2417:57;;2108:382;2047:454;2042:3;;;;;:::i;:::-;;;;2004:497;;;;2518:12;2511:19;;;1863:675;;;;:::o;3810:127::-;3917:1;3899:7;:14;;;:19;;;;;;;;;;;3810:127;:::o;34765:110::-;34841:26;34851:2;34855:7;34841:26;;;;;;;;;;;;:9;:26::i;:::-;34765:110;;:::o;38959:799::-;39114:4;39135:15;:2;:13;;;:15::i;:::-;39131:620;;;39187:2;39171:36;;;39208:12;:10;:12::i;:::-;39222:4;39228:7;39237:5;39171:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39167:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39430:1;39413:6;:13;:18;39409:272;;;39456:60;;;;;;;;;;:::i;:::-;;;;;;;;39409:272;39631:6;39625:13;39616:6;39612:2;39608:15;39601:38;39167:529;39304:41;;;39294:51;;;:6;:51;;;;39287:58;;;;;39131:620;39735:4;39728:11;;38959:799;;;;;;;:::o;2546:224::-;2614:13;2677:1;2671:4;2664:15;2706:1;2700:4;2693:15;2747:4;2741;2731:21;2722:30;;2546:224;;;;:::o;35102:321::-;35232:18;35238:2;35242:7;35232:5;:18::i;:::-;35283:54;35314:1;35318:2;35322:7;35331:5;35283:22;:54::i;:::-;35261:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35102:321;;;:::o;10648:387::-;10708:4;10916:12;10983:7;10971:20;10963:28;;11026:1;11019:4;:8;11012:15;;;10648:387;;;:::o;35759:382::-;35853:1;35839:16;;:2;:16;;;;35831:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35912:16;35920:7;35912;:16::i;:::-;35911:17;35903:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35974:45;36003:1;36007:2;36011:7;35974:20;:45::i;:::-;36049:1;36032:9;:13;36042:2;36032:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36080:2;36061:7;:16;36069:7;36061:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36125:7;36121:2;36100:33;;36117:1;36100:33;;;;;;;;;;;;35759:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:704::-;6451:6;6459;6467;6516:2;6504:9;6495:7;6491:23;6487:32;6484:119;;;6522:79;;:::i;:::-;6484:119;6670:1;6659:9;6655:17;6642:31;6700:18;6692:6;6689:30;6686:117;;;6722:79;;:::i;:::-;6686:117;6835:80;6907:7;6898:6;6887:9;6883:22;6835:80;:::i;:::-;6817:98;;;;6613:312;6964:2;6990:53;7035:7;7026:6;7015:9;7011:22;6990:53;:::i;:::-;6980:63;;6935:118;6356:704;;;;;:::o;7066:323::-;7122:6;7171:2;7159:9;7150:7;7146:23;7142:32;7139:119;;;7177:79;;:::i;:::-;7139:119;7297:1;7322:50;7364:7;7355:6;7344:9;7340:22;7322:50;:::i;:::-;7312:60;;7268:114;7066:323;;;;:::o;7395:329::-;7454:6;7503:2;7491:9;7482:7;7478:23;7474:32;7471:119;;;7509:79;;:::i;:::-;7471:119;7629:1;7654:53;7699:7;7690:6;7679:9;7675:22;7654:53;:::i;:::-;7644:63;;7600:117;7395:329;;;;:::o;7730:327::-;7788:6;7837:2;7825:9;7816:7;7812:23;7808:32;7805:119;;;7843:79;;:::i;:::-;7805:119;7963:1;7988:52;8032:7;8023:6;8012:9;8008:22;7988:52;:::i;:::-;7978:62;;7934:116;7730:327;;;;:::o;8063:349::-;8132:6;8181:2;8169:9;8160:7;8156:23;8152:32;8149:119;;;8187:79;;:::i;:::-;8149:119;8307:1;8332:63;8387:7;8378:6;8367:9;8363:22;8332:63;:::i;:::-;8322:73;;8278:127;8063:349;;;;:::o;8418:509::-;8487:6;8536:2;8524:9;8515:7;8511:23;8507:32;8504:119;;;8542:79;;:::i;:::-;8504:119;8690:1;8679:9;8675:17;8662:31;8720:18;8712:6;8709:30;8706:117;;;8742:79;;:::i;:::-;8706:117;8847:63;8902:7;8893:6;8882:9;8878:22;8847:63;:::i;:::-;8837:73;;8633:287;8418:509;;;;:::o;8933:329::-;8992:6;9041:2;9029:9;9020:7;9016:23;9012:32;9009:119;;;9047:79;;:::i;:::-;9009:119;9167:1;9192:53;9237:7;9228:6;9217:9;9213:22;9192:53;:::i;:::-;9182:63;;9138:117;8933:329;;;;:::o;9268:474::-;9336:6;9344;9393:2;9381:9;9372:7;9368:23;9364:32;9361:119;;;9399:79;;:::i;:::-;9361:119;9519:1;9544:53;9589:7;9580:6;9569:9;9565:22;9544:53;:::i;:::-;9534:63;;9490:117;9646:2;9672:53;9717:7;9708:6;9697:9;9693:22;9672:53;:::i;:::-;9662:63;;9617:118;9268:474;;;;;:::o;9748:179::-;9817:10;9838:46;9880:3;9872:6;9838:46;:::i;:::-;9916:4;9911:3;9907:14;9893:28;;9748:179;;;;:::o;9933:118::-;10020:24;10038:5;10020:24;:::i;:::-;10015:3;10008:37;9933:118;;:::o;10057:157::-;10162:45;10182:24;10200:5;10182:24;:::i;:::-;10162:45;:::i;:::-;10157:3;10150:58;10057:157;;:::o;10250:732::-;10369:3;10398:54;10446:5;10398:54;:::i;:::-;10468:86;10547:6;10542:3;10468:86;:::i;:::-;10461:93;;10578:56;10628:5;10578:56;:::i;:::-;10657:7;10688:1;10673:284;10698:6;10695:1;10692:13;10673:284;;;10774:6;10768:13;10801:63;10860:3;10845:13;10801:63;:::i;:::-;10794:70;;10887:60;10940:6;10887:60;:::i;:::-;10877:70;;10733:224;10720:1;10717;10713:9;10708:14;;10673:284;;;10677:14;10973:3;10966:10;;10374:608;;;10250:732;;;;:::o;10988:109::-;11069:21;11084:5;11069:21;:::i;:::-;11064:3;11057:34;10988:109;;:::o;11103:118::-;11190:24;11208:5;11190:24;:::i;:::-;11185:3;11178:37;11103:118;;:::o;11227:360::-;11313:3;11341:38;11373:5;11341:38;:::i;:::-;11395:70;11458:6;11453:3;11395:70;:::i;:::-;11388:77;;11474:52;11519:6;11514:3;11507:4;11500:5;11496:16;11474:52;:::i;:::-;11551:29;11573:6;11551:29;:::i;:::-;11546:3;11542:39;11535:46;;11317:270;11227:360;;;;:::o;11593:364::-;11681:3;11709:39;11742:5;11709:39;:::i;:::-;11764:71;11828:6;11823:3;11764:71;:::i;:::-;11757:78;;11844:52;11889:6;11884:3;11877:4;11870:5;11866:16;11844:52;:::i;:::-;11921:29;11943:6;11921:29;:::i;:::-;11916:3;11912:39;11905:46;;11685:272;11593:364;;;;:::o;11963:377::-;12069:3;12097:39;12130:5;12097:39;:::i;:::-;12152:89;12234:6;12229:3;12152:89;:::i;:::-;12145:96;;12250:52;12295:6;12290:3;12283:4;12276:5;12272:16;12250:52;:::i;:::-;12327:6;12322:3;12318:16;12311:23;;12073:267;11963:377;;;;:::o;12346:366::-;12488:3;12509:67;12573:2;12568:3;12509:67;:::i;:::-;12502:74;;12585:93;12674:3;12585:93;:::i;:::-;12703:2;12698:3;12694:12;12687:19;;12346:366;;;:::o;12718:::-;12860:3;12881:67;12945:2;12940:3;12881:67;:::i;:::-;12874:74;;12957:93;13046:3;12957:93;:::i;:::-;13075:2;13070:3;13066:12;13059:19;;12718:366;;;:::o;13090:::-;13232:3;13253:67;13317:2;13312:3;13253:67;:::i;:::-;13246:74;;13329:93;13418:3;13329:93;:::i;:::-;13447:2;13442:3;13438:12;13431:19;;13090:366;;;:::o;13462:::-;13604:3;13625:67;13689:2;13684:3;13625:67;:::i;:::-;13618:74;;13701:93;13790:3;13701:93;:::i;:::-;13819:2;13814:3;13810:12;13803:19;;13462:366;;;:::o;13834:::-;13976:3;13997:67;14061:2;14056:3;13997:67;:::i;:::-;13990:74;;14073:93;14162:3;14073:93;:::i;:::-;14191:2;14186:3;14182:12;14175:19;;13834:366;;;:::o;14206:::-;14348:3;14369:67;14433:2;14428:3;14369:67;:::i;:::-;14362:74;;14445:93;14534:3;14445:93;:::i;:::-;14563:2;14558:3;14554:12;14547:19;;14206:366;;;:::o;14578:::-;14720:3;14741:67;14805:2;14800:3;14741:67;:::i;:::-;14734:74;;14817:93;14906:3;14817:93;:::i;:::-;14935:2;14930:3;14926:12;14919:19;;14578:366;;;:::o;14950:::-;15092:3;15113:67;15177:2;15172:3;15113:67;:::i;:::-;15106:74;;15189:93;15278:3;15189:93;:::i;:::-;15307:2;15302:3;15298:12;15291:19;;14950:366;;;:::o;15322:::-;15464:3;15485:67;15549:2;15544:3;15485:67;:::i;:::-;15478:74;;15561:93;15650:3;15561:93;:::i;:::-;15679:2;15674:3;15670:12;15663:19;;15322:366;;;:::o;15694:::-;15836:3;15857:67;15921:2;15916:3;15857:67;:::i;:::-;15850:74;;15933:93;16022:3;15933:93;:::i;:::-;16051:2;16046:3;16042:12;16035:19;;15694:366;;;:::o;16066:::-;16208:3;16229:67;16293:2;16288:3;16229:67;:::i;:::-;16222:74;;16305:93;16394:3;16305:93;:::i;:::-;16423:2;16418:3;16414:12;16407:19;;16066:366;;;:::o;16438:::-;16580:3;16601:67;16665:2;16660:3;16601:67;:::i;:::-;16594:74;;16677:93;16766:3;16677:93;:::i;:::-;16795:2;16790:3;16786:12;16779:19;;16438:366;;;:::o;16810:::-;16952:3;16973:67;17037:2;17032:3;16973:67;:::i;:::-;16966:74;;17049:93;17138:3;17049:93;:::i;:::-;17167:2;17162:3;17158:12;17151:19;;16810:366;;;:::o;17182:::-;17324:3;17345:67;17409:2;17404:3;17345:67;:::i;:::-;17338:74;;17421:93;17510:3;17421:93;:::i;:::-;17539:2;17534:3;17530:12;17523:19;;17182:366;;;:::o;17554:400::-;17714:3;17735:84;17817:1;17812:3;17735:84;:::i;:::-;17728:91;;17828:93;17917:3;17828:93;:::i;:::-;17946:1;17941:3;17937:11;17930:18;;17554:400;;;:::o;17960:366::-;18102:3;18123:67;18187:2;18182:3;18123:67;:::i;:::-;18116:74;;18199:93;18288:3;18199:93;:::i;:::-;18317:2;18312:3;18308:12;18301:19;;17960:366;;;:::o;18332:::-;18474:3;18495:67;18559:2;18554:3;18495:67;:::i;:::-;18488:74;;18571:93;18660:3;18571:93;:::i;:::-;18689:2;18684:3;18680:12;18673:19;;18332:366;;;:::o;18704:::-;18846:3;18867:67;18931:2;18926:3;18867:67;:::i;:::-;18860:74;;18943:93;19032:3;18943:93;:::i;:::-;19061:2;19056:3;19052:12;19045:19;;18704:366;;;:::o;19076:::-;19218:3;19239:67;19303:2;19298:3;19239:67;:::i;:::-;19232:74;;19315:93;19404:3;19315:93;:::i;:::-;19433:2;19428:3;19424:12;19417:19;;19076:366;;;:::o;19448:::-;19590:3;19611:67;19675:2;19670:3;19611:67;:::i;:::-;19604:74;;19687:93;19776:3;19687:93;:::i;:::-;19805:2;19800:3;19796:12;19789:19;;19448:366;;;:::o;19820:::-;19962:3;19983:67;20047:2;20042:3;19983:67;:::i;:::-;19976:74;;20059:93;20148:3;20059:93;:::i;:::-;20177:2;20172:3;20168:12;20161:19;;19820:366;;;:::o;20192:398::-;20351:3;20372:83;20453:1;20448:3;20372:83;:::i;:::-;20365:90;;20464:93;20553:3;20464:93;:::i;:::-;20582:1;20577:3;20573:11;20566:18;;20192:398;;;:::o;20596:366::-;20738:3;20759:67;20823:2;20818:3;20759:67;:::i;:::-;20752:74;;20835:93;20924:3;20835:93;:::i;:::-;20953:2;20948:3;20944:12;20937:19;;20596:366;;;:::o;20968:::-;21110:3;21131:67;21195:2;21190:3;21131:67;:::i;:::-;21124:74;;21207:93;21296:3;21207:93;:::i;:::-;21325:2;21320:3;21316:12;21309:19;;20968:366;;;:::o;21340:::-;21482:3;21503:67;21567:2;21562:3;21503:67;:::i;:::-;21496:74;;21579:93;21668:3;21579:93;:::i;:::-;21697:2;21692:3;21688:12;21681:19;;21340:366;;;:::o;21712:108::-;21789:24;21807:5;21789:24;:::i;:::-;21784:3;21777:37;21712:108;;:::o;21826:118::-;21913:24;21931:5;21913:24;:::i;:::-;21908:3;21901:37;21826:118;;:::o;21950:256::-;22062:3;22077:75;22148:3;22139:6;22077:75;:::i;:::-;22177:2;22172:3;22168:12;22161:19;;22197:3;22190:10;;21950:256;;;;:::o;22212:701::-;22493:3;22515:95;22606:3;22597:6;22515:95;:::i;:::-;22508:102;;22627:95;22718:3;22709:6;22627:95;:::i;:::-;22620:102;;22739:148;22883:3;22739:148;:::i;:::-;22732:155;;22904:3;22897:10;;22212:701;;;;;:::o;22919:379::-;23103:3;23125:147;23268:3;23125:147;:::i;:::-;23118:154;;23289:3;23282:10;;22919:379;;;:::o;23304:222::-;23397:4;23435:2;23424:9;23420:18;23412:26;;23448:71;23516:1;23505:9;23501:17;23492:6;23448:71;:::i;:::-;23304:222;;;;:::o;23532:640::-;23727:4;23765:3;23754:9;23750:19;23742:27;;23779:71;23847:1;23836:9;23832:17;23823:6;23779:71;:::i;:::-;23860:72;23928:2;23917:9;23913:18;23904:6;23860:72;:::i;:::-;23942;24010:2;23999:9;23995:18;23986:6;23942:72;:::i;:::-;24061:9;24055:4;24051:20;24046:2;24035:9;24031:18;24024:48;24089:76;24160:4;24151:6;24089:76;:::i;:::-;24081:84;;23532:640;;;;;;;:::o;24178:373::-;24321:4;24359:2;24348:9;24344:18;24336:26;;24408:9;24402:4;24398:20;24394:1;24383:9;24379:17;24372:47;24436:108;24539:4;24530:6;24436:108;:::i;:::-;24428:116;;24178:373;;;;:::o;24557:210::-;24644:4;24682:2;24671:9;24667:18;24659:26;;24695:65;24757:1;24746:9;24742:17;24733:6;24695:65;:::i;:::-;24557:210;;;;:::o;24773:222::-;24866:4;24904:2;24893:9;24889:18;24881:26;;24917:71;24985:1;24974:9;24970:17;24961:6;24917:71;:::i;:::-;24773:222;;;;:::o;25001:313::-;25114:4;25152:2;25141:9;25137:18;25129:26;;25201:9;25195:4;25191:20;25187:1;25176:9;25172:17;25165:47;25229:78;25302:4;25293:6;25229:78;:::i;:::-;25221:86;;25001:313;;;;:::o;25320:419::-;25486:4;25524:2;25513:9;25509:18;25501:26;;25573:9;25567:4;25563:20;25559:1;25548:9;25544:17;25537:47;25601:131;25727:4;25601:131;:::i;:::-;25593:139;;25320:419;;;:::o;25745:::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:::-;26336:4;26374:2;26363:9;26359:18;26351:26;;26423:9;26417:4;26413:20;26409:1;26398:9;26394:17;26387:47;26451:131;26577:4;26451:131;:::i;:::-;26443:139;;26170:419;;;:::o;26595:::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26595:419;;;:::o;27020:::-;27186:4;27224:2;27213:9;27209:18;27201:26;;27273:9;27267:4;27263:20;27259:1;27248:9;27244:17;27237:47;27301:131;27427:4;27301:131;:::i;:::-;27293:139;;27020:419;;;:::o;27445:::-;27611:4;27649:2;27638:9;27634:18;27626:26;;27698:9;27692:4;27688:20;27684:1;27673:9;27669:17;27662:47;27726:131;27852:4;27726:131;:::i;:::-;27718:139;;27445:419;;;:::o;27870:::-;28036:4;28074:2;28063:9;28059:18;28051:26;;28123:9;28117:4;28113:20;28109:1;28098:9;28094:17;28087:47;28151:131;28277:4;28151:131;:::i;:::-;28143:139;;27870:419;;;:::o;28295:::-;28461:4;28499:2;28488:9;28484:18;28476:26;;28548:9;28542:4;28538:20;28534:1;28523:9;28519:17;28512:47;28576:131;28702:4;28576:131;:::i;:::-;28568:139;;28295:419;;;:::o;28720:::-;28886:4;28924:2;28913:9;28909:18;28901:26;;28973:9;28967:4;28963:20;28959:1;28948:9;28944:17;28937:47;29001:131;29127:4;29001:131;:::i;:::-;28993:139;;28720:419;;;:::o;29145:::-;29311:4;29349:2;29338:9;29334:18;29326:26;;29398:9;29392:4;29388:20;29384:1;29373:9;29369:17;29362:47;29426:131;29552:4;29426:131;:::i;:::-;29418:139;;29145:419;;;:::o;29570:::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29570:419;;;:::o;29995:::-;30161:4;30199:2;30188:9;30184:18;30176:26;;30248:9;30242:4;30238:20;30234:1;30223:9;30219:17;30212:47;30276:131;30402:4;30276:131;:::i;:::-;30268:139;;29995:419;;;:::o;30420:::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30420:419;;;:::o;30845:::-;31011:4;31049:2;31038:9;31034:18;31026:26;;31098:9;31092:4;31088:20;31084:1;31073:9;31069:17;31062:47;31126:131;31252:4;31126:131;:::i;:::-;31118:139;;30845:419;;;:::o;31270:::-;31436:4;31474:2;31463:9;31459:18;31451:26;;31523:9;31517:4;31513:20;31509:1;31498:9;31494:17;31487:47;31551:131;31677:4;31551:131;:::i;:::-;31543:139;;31270:419;;;:::o;31695:::-;31861:4;31899:2;31888:9;31884:18;31876:26;;31948:9;31942:4;31938:20;31934:1;31923:9;31919:17;31912:47;31976:131;32102:4;31976:131;:::i;:::-;31968:139;;31695:419;;;:::o;32120:::-;32286:4;32324:2;32313:9;32309:18;32301:26;;32373:9;32367:4;32363:20;32359:1;32348:9;32344:17;32337:47;32401:131;32527:4;32401:131;:::i;:::-;32393:139;;32120:419;;;:::o;32545:::-;32711:4;32749:2;32738:9;32734:18;32726:26;;32798:9;32792:4;32788:20;32784:1;32773:9;32769:17;32762:47;32826:131;32952:4;32826:131;:::i;:::-;32818:139;;32545:419;;;:::o;32970:::-;33136:4;33174:2;33163:9;33159:18;33151:26;;33223:9;33217:4;33213:20;33209:1;33198:9;33194:17;33187:47;33251:131;33377:4;33251:131;:::i;:::-;33243:139;;32970:419;;;:::o;33395:::-;33561:4;33599:2;33588:9;33584:18;33576:26;;33648:9;33642:4;33638:20;33634:1;33623:9;33619:17;33612:47;33676:131;33802:4;33676:131;:::i;:::-;33668:139;;33395:419;;;:::o;33820:::-;33986:4;34024:2;34013:9;34009:18;34001:26;;34073:9;34067:4;34063:20;34059:1;34048:9;34044:17;34037:47;34101:131;34227:4;34101:131;:::i;:::-;34093:139;;33820:419;;;:::o;34245:::-;34411:4;34449:2;34438:9;34434:18;34426:26;;34498:9;34492:4;34488:20;34484:1;34473:9;34469:17;34462:47;34526:131;34652:4;34526:131;:::i;:::-;34518:139;;34245:419;;;:::o;34670:::-;34836:4;34874:2;34863:9;34859:18;34851:26;;34923:9;34917:4;34913:20;34909:1;34898:9;34894:17;34887:47;34951:131;35077:4;34951:131;:::i;:::-;34943:139;;34670:419;;;:::o;35095:222::-;35188:4;35226:2;35215:9;35211:18;35203:26;;35239:71;35307:1;35296:9;35292:17;35283:6;35239:71;:::i;:::-;35095:222;;;;:::o;35323:129::-;35357:6;35384:20;;:::i;:::-;35374:30;;35413:33;35441:4;35433:6;35413:33;:::i;:::-;35323:129;;;:::o;35458:75::-;35491:6;35524:2;35518:9;35508:19;;35458:75;:::o;35539:307::-;35600:4;35690:18;35682:6;35679:30;35676:56;;;35712:18;;:::i;:::-;35676:56;35750:29;35772:6;35750:29;:::i;:::-;35742:37;;35834:4;35828;35824:15;35816:23;;35539:307;;;:::o;35852:308::-;35914:4;36004:18;35996:6;35993:30;35990:56;;;36026:18;;:::i;:::-;35990:56;36064:29;36086:6;36064:29;:::i;:::-;36056:37;;36148:4;36142;36138:15;36130:23;;35852:308;;;:::o;36166:132::-;36233:4;36256:3;36248:11;;36286:4;36281:3;36277:14;36269:22;;36166:132;;;:::o;36304:114::-;36371:6;36405:5;36399:12;36389:22;;36304:114;;;:::o;36424:98::-;36475:6;36509:5;36503:12;36493:22;;36424:98;;;:::o;36528:99::-;36580:6;36614:5;36608:12;36598:22;;36528:99;;;:::o;36633:113::-;36703:4;36735;36730:3;36726:14;36718:22;;36633:113;;;:::o;36752:184::-;36851:11;36885:6;36880:3;36873:19;36925:4;36920:3;36916:14;36901:29;;36752:184;;;;:::o;36942:168::-;37025:11;37059:6;37054:3;37047:19;37099:4;37094:3;37090:14;37075:29;;36942:168;;;;:::o;37116:147::-;37217:11;37254:3;37239:18;;37116:147;;;;:::o;37269:169::-;37353:11;37387:6;37382:3;37375:19;37427:4;37422:3;37418:14;37403:29;;37269:169;;;;:::o;37444:148::-;37546:11;37583:3;37568:18;;37444:148;;;;:::o;37598:305::-;37638:3;37657:20;37675:1;37657:20;:::i;:::-;37652:25;;37691:20;37709:1;37691:20;:::i;:::-;37686:25;;37845:1;37777:66;37773:74;37770:1;37767:81;37764:107;;;37851:18;;:::i;:::-;37764:107;37895:1;37892;37888:9;37881:16;;37598:305;;;;:::o;37909:185::-;37949:1;37966:20;37984:1;37966:20;:::i;:::-;37961:25;;38000:20;38018:1;38000:20;:::i;:::-;37995:25;;38039:1;38029:35;;38044:18;;:::i;:::-;38029:35;38086:1;38083;38079:9;38074:14;;37909:185;;;;:::o;38100:348::-;38140:7;38163:20;38181:1;38163:20;:::i;:::-;38158:25;;38197:20;38215:1;38197:20;:::i;:::-;38192:25;;38385:1;38317:66;38313:74;38310:1;38307:81;38302:1;38295:9;38288:17;38284:105;38281:131;;;38392:18;;:::i;:::-;38281:131;38440:1;38437;38433:9;38422:20;;38100:348;;;;:::o;38454:191::-;38494:4;38514:20;38532:1;38514:20;:::i;:::-;38509:25;;38548:20;38566:1;38548:20;:::i;:::-;38543:25;;38587:1;38584;38581:8;38578:34;;;38592:18;;:::i;:::-;38578:34;38637:1;38634;38630:9;38622:17;;38454:191;;;;:::o;38651:96::-;38688:7;38717:24;38735:5;38717:24;:::i;:::-;38706:35;;38651:96;;;:::o;38753:90::-;38787:7;38830:5;38823:13;38816:21;38805:32;;38753:90;;;:::o;38849:77::-;38886:7;38915:5;38904:16;;38849:77;;;:::o;38932:149::-;38968:7;39008:66;39001:5;38997:78;38986:89;;38932:149;;;:::o;39087:126::-;39124:7;39164:42;39157:5;39153:54;39142:65;;39087:126;;;:::o;39219:77::-;39256:7;39285:5;39274:16;;39219:77;;;:::o;39302:154::-;39386:6;39381:3;39376;39363:30;39448:1;39439:6;39434:3;39430:16;39423:27;39302:154;;;:::o;39462:307::-;39530:1;39540:113;39554:6;39551:1;39548:13;39540:113;;;39639:1;39634:3;39630:11;39624:18;39620:1;39615:3;39611:11;39604:39;39576:2;39573:1;39569:10;39564:15;;39540:113;;;39671:6;39668:1;39665:13;39662:101;;;39751:1;39742:6;39737:3;39733:16;39726:27;39662:101;39511:258;39462:307;;;:::o;39775:320::-;39819:6;39856:1;39850:4;39846:12;39836:22;;39903:1;39897:4;39893:12;39924:18;39914:81;;39980:4;39972:6;39968:17;39958:27;;39914:81;40042:2;40034:6;40031:14;40011:18;40008:38;40005:84;;;40061:18;;:::i;:::-;40005:84;39826:269;39775:320;;;:::o;40101:281::-;40184:27;40206:4;40184:27;:::i;:::-;40176:6;40172:40;40314:6;40302:10;40299:22;40278:18;40266:10;40263:34;40260:62;40257:88;;;40325:18;;:::i;:::-;40257:88;40365:10;40361:2;40354:22;40144:238;40101:281;;:::o;40388:233::-;40427:3;40450:24;40468:5;40450:24;:::i;:::-;40441:33;;40496:66;40489:5;40486:77;40483:103;;;40566:18;;:::i;:::-;40483:103;40613:1;40606:5;40602:13;40595:20;;40388:233;;;:::o;40627:100::-;40666:7;40695:26;40715:5;40695:26;:::i;:::-;40684:37;;40627:100;;;:::o;40733:94::-;40772:7;40801:20;40815:5;40801:20;:::i;:::-;40790:31;;40733:94;;;:::o;40833:176::-;40865:1;40882:20;40900:1;40882:20;:::i;:::-;40877:25;;40916:20;40934:1;40916:20;:::i;:::-;40911:25;;40955:1;40945:35;;40960:18;;:::i;:::-;40945:35;41001:1;40998;40994:9;40989:14;;40833:176;;;;:::o;41015:180::-;41063:77;41060:1;41053:88;41160:4;41157:1;41150:15;41184:4;41181:1;41174:15;41201:180;41249:77;41246:1;41239:88;41346:4;41343:1;41336:15;41370:4;41367:1;41360:15;41387:180;41435:77;41432:1;41425:88;41532:4;41529:1;41522:15;41556:4;41553:1;41546:15;41573:180;41621:77;41618:1;41611:88;41718:4;41715:1;41708:15;41742:4;41739:1;41732:15;41759:180;41807:77;41804:1;41797:88;41904:4;41901:1;41894:15;41928:4;41925:1;41918:15;41945:117;42054:1;42051;42044:12;42068:117;42177:1;42174;42167:12;42191:117;42300:1;42297;42290:12;42314:117;42423:1;42420;42413:12;42437:117;42546:1;42543;42536:12;42560:117;42669:1;42666;42659:12;42683:102;42724:6;42775:2;42771:7;42766:2;42759:5;42755:14;42751:28;42741:38;;42683:102;;;:::o;42791:94::-;42824:8;42872:5;42868:2;42864:14;42843:35;;42791:94;;;:::o;42891:170::-;43031:22;43027:1;43019:6;43015:14;43008:46;42891:170;:::o;43067:237::-;43207:34;43203:1;43195:6;43191:14;43184:58;43276:20;43271:2;43263:6;43259:15;43252:45;43067:237;:::o;43310:225::-;43450:34;43446:1;43438:6;43434:14;43427:58;43519:8;43514:2;43506:6;43502:15;43495:33;43310:225;:::o;43541:178::-;43681:30;43677:1;43669:6;43665:14;43658:54;43541:178;:::o;43725:170::-;43865:22;43861:1;43853:6;43849:14;43842:46;43725:170;:::o;43901:223::-;44041:34;44037:1;44029:6;44025:14;44018:58;44110:6;44105:2;44097:6;44093:15;44086:31;43901:223;:::o;44130:175::-;44270:27;44266:1;44258:6;44254:14;44247:51;44130:175;:::o;44311:231::-;44451:34;44447:1;44439:6;44435:14;44428:58;44520:14;44515:2;44507:6;44503:15;44496:39;44311:231;:::o;44548:221::-;44688:34;44684:1;44676:6;44672:14;44665:58;44757:4;44752:2;44744:6;44740:15;44733:29;44548:221;:::o;44775:243::-;44915:34;44911:1;44903:6;44899:14;44892:58;44984:26;44979:2;44971:6;44967:15;44960:51;44775:243;:::o;45024:229::-;45164:34;45160:1;45152:6;45148:14;45141:58;45233:12;45228:2;45220:6;45216:15;45209:37;45024:229;:::o;45259:228::-;45399:34;45395:1;45387:6;45383:14;45376:58;45468:11;45463:2;45455:6;45451:15;45444:36;45259:228;:::o;45493:182::-;45633:34;45629:1;45621:6;45617:14;45610:58;45493:182;:::o;45681:231::-;45821:34;45817:1;45809:6;45805:14;45798:58;45890:14;45885:2;45877:6;45873:15;45866:39;45681:231;:::o;45918:155::-;46058:7;46054:1;46046:6;46042:14;46035:31;45918:155;:::o;46079:182::-;46219:34;46215:1;46207:6;46203:14;46196:58;46079:182;:::o;46267:173::-;46407:25;46403:1;46395:6;46391:14;46384:49;46267:173;:::o;46446:180::-;46586:32;46582:1;46574:6;46570:14;46563:56;46446:180;:::o;46632:228::-;46772:34;46768:1;46760:6;46756:14;46749:58;46841:11;46836:2;46828:6;46824:15;46817:36;46632:228;:::o;46866:234::-;47006:34;47002:1;46994:6;46990:14;46983:58;47075:17;47070:2;47062:6;47058:15;47051:42;46866:234;:::o;47106:220::-;47246:34;47242:1;47234:6;47230:14;47223:58;47315:3;47310:2;47302:6;47298:15;47291:28;47106:220;:::o;47332:114::-;;:::o;47452:170::-;47592:22;47588:1;47580:6;47576:14;47569:46;47452:170;:::o;47628:236::-;47768:34;47764:1;47756:6;47752:14;47745:58;47837:19;47832:2;47824:6;47820:15;47813:44;47628:236;:::o;47870:169::-;48010:21;48006:1;47998:6;47994:14;47987:45;47870:169;:::o;48045:122::-;48118:24;48136:5;48118:24;:::i;:::-;48111:5;48108:35;48098:63;;48157:1;48154;48147:12;48098:63;48045:122;:::o;48173:116::-;48243:21;48258:5;48243:21;:::i;:::-;48236:5;48233:32;48223:60;;48279:1;48276;48269:12;48223:60;48173:116;:::o;48295:122::-;48368:24;48386:5;48368:24;:::i;:::-;48361:5;48358:35;48348:63;;48407:1;48404;48397:12;48348:63;48295:122;:::o;48423:120::-;48495:23;48512:5;48495:23;:::i;:::-;48488:5;48485:34;48475:62;;48533:1;48530;48523:12;48475:62;48423:120;:::o;48549:122::-;48622:24;48640:5;48622:24;:::i;:::-;48615:5;48612:35;48602:63;;48661:1;48658;48651:12;48602:63;48549:122;:::o

Swarm Source

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