Overview
TokenID
170
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTerrarium
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-23 */ // SPDX-License-Identifier: GPL-3.0 /** ╔╗╔╔═╗╔╦╗┌─┐┬─┐┬─┐┌─┐┬─┐┬┬ ┬┌┬┐ ║║║╠╣ ║ ├┤ ├┬┘├┬┘├─┤├┬┘││ ││││ ╝╚╝╚ ╩ └─┘┴└─┴└─┴ ┴┴└─┴└─┘┴ ┴ Contract by @texoid__ */ // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _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) } } } // 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); } } // 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; } } // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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); } } } } // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // 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); } } // 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); } // 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; } // 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; } } // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // 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); } // 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); } // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error AuxQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev See {IERC721Enumerable-totalSupply}. * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { if (owner == address(0)) revert AuxQueryForZeroAddress(); return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { if (owner == address(0)) revert AuxQueryForZeroAddress(); _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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 override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _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 { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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 { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } pragma solidity >=0.8.9 <0.9.0; contract NFTerrarium is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; //---------------[ Whitelist ]---------------\\ bytes32 public merkleRoot; mapping(address => bool) public whitelistClaimed; //---------------[ Token URI ]---------------\\ string public baseURI = ''; string public uriSuffix = '.json'; //---------------[ Cost & Supply ]---------------\\ uint256 public maxSupply = 777; uint256 public maxAmountPerWallet; mapping(address => uint8) public amountClaimed; //---------------[ Setting Toggles ]---------------\\ bool public paused = true; bool public whitelistMintEnabled = false; bool public revealed = false; //---------------[ ]---------------\\ constructor( string memory _tokenName, string memory _tokenSymbol, uint256 _maxAmountPerWallet, string memory _initBaseURI ) ERC721A(_tokenName, _tokenSymbol) { maxAmountPerWallet = _maxAmountPerWallet; baseURI = _initBaseURI; } //---------------[ Modifiers ]---------------\\ modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxAmountPerWallet, 'Invalid mint amount submitted'); require(totalSupply() + _mintAmount <= maxSupply, 'Maximum NFT supply exceeded'); require(amountClaimed[_msgSender()] + _mintAmount <= maxAmountPerWallet, 'Maximum wallet amount exceeded'); _; } //---------------[ Mint Functions ]---------------\\ function whitelistMint(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable mintCompliance(_mintAmount) nonReentrant { // Verify whitelist requirements require(whitelistMintEnabled, 'Whitelist sale is not active'); require(!whitelistClaimed[_msgSender()], 'Address already claimed whitelist'); // cheking merkle proof bytes32 leaf = keccak256(abi.encodePacked(_msgSender())); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), 'Invalid whitelist proof submitted'); // minting whitelistClaimed[_msgSender()] = true; amountClaimed[_msgSender()] += uint8(_mintAmount); _safeMint(_msgSender(), _mintAmount); } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) nonReentrant { require(!paused, 'Minting is currently paused'); amountClaimed[_msgSender()] += uint8(_mintAmount); _safeMint(_msgSender(), _mintAmount); } function airdrop(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner nonReentrant { _safeMint(_receiver, _mintAmount); } //---------------[ Public Functions ]---------------\\ function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = _startTokenId(); uint256 ownedTokenIndex = 0; address latestOwnerAddress; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { TokenOwnership memory ownership = _ownerships[currentTokenId]; if (!ownership.burned && ownership.addr != address(0)) { latestOwnerAddress = ownership.addr; } if (latestOwnerAddress == _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(), uriSuffix)) : ''; } //---------------[ Internal Functions ]---------------\\ function _startTokenId() internal view virtual override returns (uint256) { return 1; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } //---------------[ onlyOwner Functions ]---------------\\ function setmaxAmountPerWallet(uint256 _maxAmountPerWallet) public onlyOwner { maxAmountPerWallet = _maxAmountPerWallet; } function setBaseURI(string memory _newURI) public onlyOwner { baseURI = _newURI; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function flipPaused() public onlyOwner { paused = !paused; } function flipReveal() public onlyOwner { revealed = !revealed; } function flipWhitelistMint() public onlyOwner { whitelistMintEnabled = !whitelistMintEnabled; } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } function withdraw() public onlyOwner nonReentrant { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_maxAmountPerWallet","type":"uint256"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountClaimed","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhitelistMint","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":"maxAmountPerWallet","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":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAmountPerWallet","type":"uint256"}],"name":"setmaxAmountPerWallet","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":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600c9081620000249190620004d0565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90816200006b9190620004d0565b50610309600e556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff021916908315150217905550348015620000d057600080fd5b5060405162005497380380620054978339818101604052810190620000f691906200074c565b83838160029081620001099190620004d0565b5080600390816200011b9190620004d0565b506200012c6200017f60201b60201c565b600081905550505062000154620001486200018860201b60201c565b6200019060201b60201c565b600160098190555081600f8190555080600c9081620001749190620004d0565b50505050506200081b565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002d857607f821691505b602082108103620002ee57620002ed62000290565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000319565b62000364868362000319565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003b1620003ab620003a5846200037c565b62000386565b6200037c565b9050919050565b6000819050919050565b620003cd8362000390565b620003e5620003dc82620003b8565b84845462000326565b825550505050565b600090565b620003fc620003ed565b62000409818484620003c2565b505050565b5b81811015620004315762000425600082620003f2565b6001810190506200040f565b5050565b601f82111562000480576200044a81620002f4565b620004558462000309565b8101602085101562000465578190505b6200047d620004748562000309565b8301826200040e565b50505b505050565b600082821c905092915050565b6000620004a56000198460080262000485565b1980831691505092915050565b6000620004c0838362000492565b9150826002028217905092915050565b620004db8262000256565b67ffffffffffffffff811115620004f757620004f662000261565b5b620005038254620002bf565b6200051082828562000435565b600060209050601f83116001811462000548576000841562000533578287015190505b6200053f8582620004b2565b865550620005af565b601f1984166200055886620002f4565b60005b8281101562000582578489015182556001820191506020850194506020810190506200055b565b86831015620005a257848901516200059e601f89168262000492565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005f182620005d5565b810181811067ffffffffffffffff8211171562000613576200061262000261565b5b80604052505050565b600062000628620005b7565b9050620006368282620005e6565b919050565b600067ffffffffffffffff82111562000659576200065862000261565b5b6200066482620005d5565b9050602081019050919050565b60005b838110156200069157808201518184015260208101905062000674565b60008484015250505050565b6000620006b4620006ae846200063b565b6200061c565b905082815260208101848484011115620006d357620006d2620005d0565b5b620006e084828562000671565b509392505050565b600082601f8301126200070057620006ff620005cb565b5b8151620007128482602086016200069d565b91505092915050565b62000726816200037c565b81146200073257600080fd5b50565b60008151905062000746816200071b565b92915050565b60008060008060808587031215620007695762000768620005c1565b5b600085015167ffffffffffffffff8111156200078a5762000789620005c6565b5b6200079887828801620006e8565b945050602085015167ffffffffffffffff811115620007bc57620007bb620005c6565b5b620007ca87828801620006e8565b9350506040620007dd8782880162000735565b925050606085015167ffffffffffffffff811115620008015762000800620005c6565b5b6200080f87828801620006e8565b91505092959194509250565b614c6c806200082b6000396000f3fe6080604052600436106102305760003560e01c806369cc4f861161012e578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb01146107c1578063d7e1ea17146107ec578063db4bec4414610829578063e985e9c514610866578063f2fde38b146108a357610230565b8063b88d4fde146106ed578063bc63f02e14610716578063c7d2dc1d1461073f578063c87b56dd14610768578063d2cab056146107a557610230565b80637cb64759116100f25780637cb64759146106295780638da5cb5b1461065257806395d89b411461067d578063a0712d68146106a8578063a22cb465146106c457610230565b806369cc4f86146105685780636c0360eb1461057f5780636caede3d146105aa57806370a08231146105d5578063715018a61461061257610230565b806336db7129116101bc578063518302271161018057806351830227146104815780635503a0e8146104ac57806355f804b3146104d75780635c975abb146105005780636352211e1461052b57610230565b806336db7129146103c25780633b84d9c6146103ed5780633ccfd60b1461040457806342842e0e1461041b578063438b63001461044457610230565b806316ba10e01161020357806316ba10e01461030357806318160ddd1461032c57806323b872dd146103575780632eb4a7ab14610380578063333171bb146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906136f0565b6108cc565b6040516102699190613738565b60405180910390f35b34801561027e57600080fd5b506102876109ae565b60405161029491906137e3565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061383b565b610a40565b6040516102d191906138a9565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906138f0565b610abc565b005b34801561030f57600080fd5b5061032a60048036038101906103259190613a65565b610bc6565b005b34801561033857600080fd5b50610341610c55565b60405161034e9190613abd565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190613ad8565b610c6c565b005b34801561038c57600080fd5b50610395610c7c565b6040516103a29190613b44565b60405180910390f35b3480156103b757600080fd5b506103c0610c82565b005b3480156103ce57600080fd5b506103d7610d2a565b6040516103e49190613abd565b60405180910390f35b3480156103f957600080fd5b50610402610d30565b005b34801561041057600080fd5b50610419610dd8565b005b34801561042757600080fd5b50610442600480360381019061043d9190613ad8565b610f22565b005b34801561045057600080fd5b5061046b60048036038101906104669190613b5f565b610f42565b6040516104789190613c4a565b60405180910390f35b34801561048d57600080fd5b5061049661115c565b6040516104a39190613738565b60405180910390f35b3480156104b857600080fd5b506104c161116f565b6040516104ce91906137e3565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f99190613a65565b6111fd565b005b34801561050c57600080fd5b5061051561128c565b6040516105229190613738565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061383b565b61129f565b60405161055f91906138a9565b60405180910390f35b34801561057457600080fd5b5061057d6112b5565b005b34801561058b57600080fd5b5061059461135d565b6040516105a191906137e3565b60405180910390f35b3480156105b657600080fd5b506105bf6113eb565b6040516105cc9190613738565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613b5f565b6113fe565b6040516106099190613abd565b60405180910390f35b34801561061e57600080fd5b506106276114cd565b005b34801561063557600080fd5b50610650600480360381019061064b9190613c98565b611555565b005b34801561065e57600080fd5b506106676115db565b60405161067491906138a9565b60405180910390f35b34801561068957600080fd5b50610692611605565b60405161069f91906137e3565b60405180910390f35b6106c260048036038101906106bd919061383b565b611697565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613cf1565b61191a565b005b3480156106f957600080fd5b50610714600480360381019061070f9190613dd2565b611a91565b005b34801561072257600080fd5b5061073d60048036038101906107389190613e55565b611b0d565b005b34801561074b57600080fd5b506107666004803603810190610761919061383b565b611d3c565b005b34801561077457600080fd5b5061078f600480360381019061078a919061383b565b611dc2565b60405161079c91906137e3565b60405180910390f35b6107bf60048036038101906107ba9190613ef5565b611e6c565b005b3480156107cd57600080fd5b506107d66122a3565b6040516107e39190613abd565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190613b5f565b6122a9565b6040516108209190613f71565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613b5f565b6122c9565b60405161085d9190613738565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613f8c565b6122e9565b60405161089a9190613738565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190613b5f565b61237d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a757506109a682612474565b5b9050919050565b6060600280546109bd90613ffb565b80601f01602080910402602001604051908101604052809291908181526020018280546109e990613ffb565b8015610a365780601f10610a0b57610100808354040283529160200191610a36565b820191906000526020600020905b815481529060010190602001808311610a1957829003601f168201915b5050505050905090565b6000610a4b826124de565b610a81576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac78261129f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b2e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4d61252c565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b7f5750610b7d81610b7861252c565b6122e9565b155b15610bb6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc1838383612534565b505050565b610bce61252c565b73ffffffffffffffffffffffffffffffffffffffff16610bec6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990614078565b60405180910390fd5b80600d9081610c519190614244565b5050565b6000610c5f6125e6565b6001546000540303905090565b610c778383836125ef565b505050565b600a5481565b610c8a61252c565b73ffffffffffffffffffffffffffffffffffffffff16610ca86115db565b73ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590614078565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b600f5481565b610d3861252c565b73ffffffffffffffffffffffffffffffffffffffff16610d566115db565b73ffffffffffffffffffffffffffffffffffffffff1614610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390614078565b60405180910390fd5b601160029054906101000a900460ff1615601160026101000a81548160ff021916908315150217905550565b610de061252c565b73ffffffffffffffffffffffffffffffffffffffff16610dfe6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90614078565b60405180910390fd5b600260095403610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090614362565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610ec7906143b3565b60006040518083038185875af1925050503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b5050905080610f1757600080fd5b506001600981905550565b610f3d83838360405180602001604052806000815250611a91565b505050565b60606000610f4f836113fe565b905060008167ffffffffffffffff811115610f6d57610f6c61393a565b5b604051908082528060200260200182016040528015610f9b5781602001602082028036833780820191505090505b5090506000610fa86125e6565b90506000805b8482108015610fbf5750600e548311155b1561114f576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511580156110cc5750600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614155b156110d957806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361113b57838584815181106111205761111f6143c8565b5b602002602001018181525050828061113790614426565b9350505b838061114690614426565b94505050610fae565b8395505050505050919050565b601160029054906101000a900460ff1681565b600d805461117c90613ffb565b80601f01602080910402602001604051908101604052809291908181526020018280546111a890613ffb565b80156111f55780601f106111ca576101008083540402835291602001916111f5565b820191906000526020600020905b8154815290600101906020018083116111d857829003601f168201915b505050505081565b61120561252c565b73ffffffffffffffffffffffffffffffffffffffff166112236115db565b73ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614078565b60405180910390fd5b80600c90816112889190614244565b5050565b601160009054906101000a900460ff1681565b60006112aa82612ade565b600001519050919050565b6112bd61252c565b73ffffffffffffffffffffffffffffffffffffffff166112db6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132890614078565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b600c805461136a90613ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461139690613ffb565b80156113e35780601f106113b8576101008083540402835291602001916113e3565b820191906000526020600020905b8154815290600101906020018083116113c657829003601f168201915b505050505081565b601160019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611465576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6114d561252c565b73ffffffffffffffffffffffffffffffffffffffff166114f36115db565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090614078565b60405180910390fd5b6115536000612d6d565b565b61155d61252c565b73ffffffffffffffffffffffffffffffffffffffff1661157b6115db565b73ffffffffffffffffffffffffffffffffffffffff16146115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890614078565b60405180910390fd5b80600a8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461161490613ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461164090613ffb565b801561168d5780601f106116625761010080835404028352916020019161168d565b820191906000526020600020905b81548152906001019060200180831161167057829003601f168201915b5050505050905090565b806000811180156116aa5750600f548111155b6116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e0906144ba565b60405180910390fd5b600e54816116f5610c55565b6116ff91906144da565b1115611740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117379061455a565b60405180910390fd5b600f54816010600061175061252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff166117a591906144da565b11156117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd906145c6565b60405180910390fd5b60026009540361182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614362565b60405180910390fd5b6002600981905550601160009054906101000a900460ff1615611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90614632565b60405180910390fd5b816010600061189061252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166118e59190614652565b92506101000a81548160ff021916908360ff16021790555061190e61190861252c565b83612e33565b60016009819055505050565b61192261252c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611986576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061199361252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a4061252c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a859190613738565b60405180910390a35050565b611a9c8484846125ef565b611abb8373ffffffffffffffffffffffffffffffffffffffff16612e51565b8015611ad05750611ace84848484612e74565b155b15611b07576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b81600081118015611b205750600f548111155b611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b56906144ba565b60405180910390fd5b600e5481611b6b610c55565b611b7591906144da565b1115611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad9061455a565b60405180910390fd5b600f548160106000611bc661252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16611c1b91906144da565b1115611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c53906145c6565b60405180910390fd5b611c6461252c565b73ffffffffffffffffffffffffffffffffffffffff16611c826115db565b73ffffffffffffffffffffffffffffffffffffffff1614611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf90614078565b60405180910390fd5b600260095403611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490614362565b60405180910390fd5b6002600981905550611d2f8284612e33565b6001600981905550505050565b611d4461252c565b73ffffffffffffffffffffffffffffffffffffffff16611d626115db565b73ffffffffffffffffffffffffffffffffffffffff1614611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614078565b60405180910390fd5b80600f8190555050565b6060611dcd826124de565b611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e03906146f9565b60405180910390fd5b6000611e16612fc4565b90506000815111611e365760405180602001604052806000815250611e64565b80611e4084613056565b600d604051602001611e54939291906147d8565b6040516020818303038152906040525b915050919050565b82600081118015611e7f5750600f548111155b611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb5906144ba565b60405180910390fd5b600e5481611eca610c55565b611ed491906144da565b1115611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c9061455a565b60405180910390fd5b600f548160106000611f2561252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16611f7a91906144da565b1115611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb2906145c6565b60405180910390fd5b600260095403612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff790614362565b60405180910390fd5b6002600981905550601160019054906101000a900460ff16612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90614855565b60405180910390fd5b600b600061206361252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e2906148e7565b60405180910390fd5b60006120f561252c565b604051602001612105919061494f565b60405160208183030381529060405280519060200120905061216b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a54836131b6565b6121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a1906149dc565b60405180910390fd5b6001600b60006121b861252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550846010600061221661252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff1661226b9190614652565b92506101000a81548160ff021916908360ff16021790555061229461228e61252c565b86612e33565b50600160098190555050505050565b600e5481565b60106020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61238561252c565b73ffffffffffffffffffffffffffffffffffffffff166123a36115db565b73ffffffffffffffffffffffffffffffffffffffff16146123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f090614078565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245f90614a6e565b60405180910390fd5b61247181612d6d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816124e96125e6565b111580156124f8575060005482105b8015612525575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006125fa82612ade565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661262161252c565b73ffffffffffffffffffffffffffffffffffffffff1614806126545750612653826000015161264e61252c565b6122e9565b5b80612699575061266261252c565b73ffffffffffffffffffffffffffffffffffffffff1661268184610a40565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806126d2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461273b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127a1576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127ae85858560016131cd565b6127be6000848460000151612534565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612a6e57600054811015612a6d5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ad785858560016131d3565b5050505050565b612ae6613641565b600082905080612af46125e6565b11158015612b03575060005481105b15612d36576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612d3457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c18578092505050612d68565b5b600115612d3357818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d2e578092505050612d68565b612c19565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e4d8282604051806020016040528060008152506131d9565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e9a61252c565b8786866040518563ffffffff1660e01b8152600401612ebc9493929190614ae3565b6020604051808303816000875af1925050508015612ef857506040513d601f19601f82011682018060405250810190612ef59190614b44565b60015b612f71573d8060008114612f28576040519150601f19603f3d011682016040523d82523d6000602084013e612f2d565b606091505b506000815103612f69576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c8054612fd390613ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612fff90613ffb565b801561304c5780601f106130215761010080835404028352916020019161304c565b820191906000526020600020905b81548152906001019060200180831161302f57829003601f168201915b5050505050905090565b60606000820361309d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131b1565b600082905060005b600082146130cf5780806130b890614426565b915050600a826130c89190614ba0565b91506130a5565b60008167ffffffffffffffff8111156130eb576130ea61393a565b5b6040519080825280601f01601f19166020018201604052801561311d5781602001600182028036833780820191505090505b5090505b600085146131aa576001826131369190614bd1565b9150600a856131459190614c05565b603061315191906144da565b60f81b818381518110613167576131666143c8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131a39190614ba0565b9450613121565b8093505050505b919050565b6000826131c385846131eb565b1490509392505050565b50505050565b50505050565b6131e68383836001613260565b505050565b60008082905060005b8451811015613255576000858281518110613212576132116143c8565b5b602002602001015190508083116132345761322d838261362a565b9250613241565b61323e818461362a565b92505b50808061324d90614426565b9150506131f4565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036132cc576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403613306576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61331360008683876131cd565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156134dd57506134dc8773ffffffffffffffffffffffffffffffffffffffff16612e51565b5b156135a2575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135526000888480600101955088612e74565b613588576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036134e357826000541461359d57600080fd5b61360d565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082036135a3575b81600081905550505061362360008683876131d3565b5050505050565b600082600052816020526040600020905092915050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136cd81613698565b81146136d857600080fd5b50565b6000813590506136ea816136c4565b92915050565b6000602082840312156137065761370561368e565b5b6000613714848285016136db565b91505092915050565b60008115159050919050565b6137328161371d565b82525050565b600060208201905061374d6000830184613729565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561378d578082015181840152602081019050613772565b60008484015250505050565b6000601f19601f8301169050919050565b60006137b582613753565b6137bf818561375e565b93506137cf81856020860161376f565b6137d881613799565b840191505092915050565b600060208201905081810360008301526137fd81846137aa565b905092915050565b6000819050919050565b61381881613805565b811461382357600080fd5b50565b6000813590506138358161380f565b92915050565b6000602082840312156138515761385061368e565b5b600061385f84828501613826565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061389382613868565b9050919050565b6138a381613888565b82525050565b60006020820190506138be600083018461389a565b92915050565b6138cd81613888565b81146138d857600080fd5b50565b6000813590506138ea816138c4565b92915050565b600080604083850312156139075761390661368e565b5b6000613915858286016138db565b925050602061392685828601613826565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61397282613799565b810181811067ffffffffffffffff821117156139915761399061393a565b5b80604052505050565b60006139a4613684565b90506139b08282613969565b919050565b600067ffffffffffffffff8211156139d0576139cf61393a565b5b6139d982613799565b9050602081019050919050565b82818337600083830152505050565b6000613a08613a03846139b5565b61399a565b905082815260208101848484011115613a2457613a23613935565b5b613a2f8482856139e6565b509392505050565b600082601f830112613a4c57613a4b613930565b5b8135613a5c8482602086016139f5565b91505092915050565b600060208284031215613a7b57613a7a61368e565b5b600082013567ffffffffffffffff811115613a9957613a98613693565b5b613aa584828501613a37565b91505092915050565b613ab781613805565b82525050565b6000602082019050613ad26000830184613aae565b92915050565b600080600060608486031215613af157613af061368e565b5b6000613aff868287016138db565b9350506020613b10868287016138db565b9250506040613b2186828701613826565b9150509250925092565b6000819050919050565b613b3e81613b2b565b82525050565b6000602082019050613b596000830184613b35565b92915050565b600060208284031215613b7557613b7461368e565b5b6000613b83848285016138db565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bc181613805565b82525050565b6000613bd38383613bb8565b60208301905092915050565b6000602082019050919050565b6000613bf782613b8c565b613c018185613b97565b9350613c0c83613ba8565b8060005b83811015613c3d578151613c248882613bc7565b9750613c2f83613bdf565b925050600181019050613c10565b5085935050505092915050565b60006020820190508181036000830152613c648184613bec565b905092915050565b613c7581613b2b565b8114613c8057600080fd5b50565b600081359050613c9281613c6c565b92915050565b600060208284031215613cae57613cad61368e565b5b6000613cbc84828501613c83565b91505092915050565b613cce8161371d565b8114613cd957600080fd5b50565b600081359050613ceb81613cc5565b92915050565b60008060408385031215613d0857613d0761368e565b5b6000613d16858286016138db565b9250506020613d2785828601613cdc565b9150509250929050565b600067ffffffffffffffff821115613d4c57613d4b61393a565b5b613d5582613799565b9050602081019050919050565b6000613d75613d7084613d31565b61399a565b905082815260208101848484011115613d9157613d90613935565b5b613d9c8482856139e6565b509392505050565b600082601f830112613db957613db8613930565b5b8135613dc9848260208601613d62565b91505092915050565b60008060008060808587031215613dec57613deb61368e565b5b6000613dfa878288016138db565b9450506020613e0b878288016138db565b9350506040613e1c87828801613826565b925050606085013567ffffffffffffffff811115613e3d57613e3c613693565b5b613e4987828801613da4565b91505092959194509250565b60008060408385031215613e6c57613e6b61368e565b5b6000613e7a85828601613826565b9250506020613e8b858286016138db565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613eb557613eb4613930565b5b8235905067ffffffffffffffff811115613ed257613ed1613e95565b5b602083019150836020820283011115613eee57613eed613e9a565b5b9250929050565b600080600060408486031215613f0e57613f0d61368e565b5b6000613f1c86828701613826565b935050602084013567ffffffffffffffff811115613f3d57613f3c613693565b5b613f4986828701613e9f565b92509250509250925092565b600060ff82169050919050565b613f6b81613f55565b82525050565b6000602082019050613f866000830184613f62565b92915050565b60008060408385031215613fa357613fa261368e565b5b6000613fb1858286016138db565b9250506020613fc2858286016138db565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061401357607f821691505b60208210810361402657614025613fcc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061406260208361375e565b915061406d8261402c565b602082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826140bd565b61410486836140bd565b95508019841693508086168417925050509392505050565b6000819050919050565b600061414161413c61413784613805565b61411c565b613805565b9050919050565b6000819050919050565b61415b83614126565b61416f61416782614148565b8484546140ca565b825550505050565b600090565b614184614177565b61418f818484614152565b505050565b5b818110156141b3576141a860008261417c565b600181019050614195565b5050565b601f8211156141f8576141c981614098565b6141d2846140ad565b810160208510156141e1578190505b6141f56141ed856140ad565b830182614194565b50505b505050565b600082821c905092915050565b600061421b600019846008026141fd565b1980831691505092915050565b6000614234838361420a565b9150826002028217905092915050565b61424d82613753565b67ffffffffffffffff8111156142665761426561393a565b5b6142708254613ffb565b61427b8282856141b7565b600060209050601f8311600181146142ae576000841561429c578287015190505b6142a68582614228565b86555061430e565b601f1984166142bc86614098565b60005b828110156142e4578489015182556001820191506020850194506020810190506142bf565b8683101561430157848901516142fd601f89168261420a565b8355505b6001600288020188555050505b505050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061434c601f8361375e565b915061435782614316565b602082019050919050565b6000602082019050818103600083015261437b8161433f565b9050919050565b600081905092915050565b50565b600061439d600083614382565b91506143a88261438d565b600082019050919050565b60006143be82614390565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061443182613805565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614463576144626143f7565b5b600182019050919050565b7f496e76616c6964206d696e7420616d6f756e74207375626d6974746564000000600082015250565b60006144a4601d8361375e565b91506144af8261446e565b602082019050919050565b600060208201905081810360008301526144d381614497565b9050919050565b60006144e582613805565b91506144f083613805565b9250828201905080821115614508576145076143f7565b5b92915050565b7f4d6178696d756d204e465420737570706c792065786365656465640000000000600082015250565b6000614544601b8361375e565b915061454f8261450e565b602082019050919050565b6000602082019050818103600083015261457381614537565b9050919050565b7f4d6178696d756d2077616c6c657420616d6f756e742065786365656465640000600082015250565b60006145b0601e8361375e565b91506145bb8261457a565b602082019050919050565b600060208201905081810360008301526145df816145a3565b9050919050565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b600061461c601b8361375e565b9150614627826145e6565b602082019050919050565b6000602082019050818103600083015261464b8161460f565b9050919050565b600061465d82613f55565b915061466883613f55565b9250828201905060ff811115614681576146806143f7565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006146e3602f8361375e565b91506146ee82614687565b604082019050919050565b60006020820190508181036000830152614712816146d6565b9050919050565b600081905092915050565b600061472f82613753565b6147398185614719565b935061474981856020860161376f565b80840191505092915050565b6000815461476281613ffb565b61476c8186614719565b94506001821660008114614787576001811461479c576147cf565b60ff19831686528115158202860193506147cf565b6147a585614098565b60005b838110156147c7578154818901526001820191506020810190506147a8565b838801955050505b50505092915050565b60006147e48286614724565b91506147f08285614724565b91506147fc8284614755565b9150819050949350505050565b7f57686974656c6973742073616c65206973206e6f742061637469766500000000600082015250565b600061483f601c8361375e565b915061484a82614809565b602082019050919050565b6000602082019050818103600083015261486e81614832565b9050919050565b7f4164647265737320616c726561647920636c61696d65642077686974656c697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006148d160218361375e565b91506148dc82614875565b604082019050919050565b60006020820190508181036000830152614900816148c4565b9050919050565b60008160601b9050919050565b600061491f82614907565b9050919050565b600061493182614914565b9050919050565b61494961494482613888565b614926565b82525050565b600061495b8284614938565b60148201915081905092915050565b7f496e76616c69642077686974656c6973742070726f6f66207375626d6974746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006149c660218361375e565b91506149d18261496a565b604082019050919050565b600060208201905081810360008301526149f5816149b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a5860268361375e565b9150614a63826149fc565b604082019050919050565b60006020820190508181036000830152614a8781614a4b565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614ab582614a8e565b614abf8185614a99565b9350614acf81856020860161376f565b614ad881613799565b840191505092915050565b6000608082019050614af8600083018761389a565b614b05602083018661389a565b614b126040830185613aae565b8181036060830152614b248184614aaa565b905095945050505050565b600081519050614b3e816136c4565b92915050565b600060208284031215614b5a57614b5961368e565b5b6000614b6884828501614b2f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bab82613805565b9150614bb683613805565b925082614bc657614bc5614b71565b5b828204905092915050565b6000614bdc82613805565b9150614be783613805565b9250828203905081811115614bff57614bfe6143f7565b5b92915050565b6000614c1082613805565b9150614c1b83613805565b925082614c2b57614c2a614b71565b5b82820690509291505056fea2646970667358221220742124a453db74b1ac27350e58889637a6e53b0cbd4bfc23fdfbd1147b17c5cc64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000b4e4654657272617269756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e46545200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6170692e6e6674657272617269756d2e78797a2f67656e657369732f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c806369cc4f861161012e578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb01146107c1578063d7e1ea17146107ec578063db4bec4414610829578063e985e9c514610866578063f2fde38b146108a357610230565b8063b88d4fde146106ed578063bc63f02e14610716578063c7d2dc1d1461073f578063c87b56dd14610768578063d2cab056146107a557610230565b80637cb64759116100f25780637cb64759146106295780638da5cb5b1461065257806395d89b411461067d578063a0712d68146106a8578063a22cb465146106c457610230565b806369cc4f86146105685780636c0360eb1461057f5780636caede3d146105aa57806370a08231146105d5578063715018a61461061257610230565b806336db7129116101bc578063518302271161018057806351830227146104815780635503a0e8146104ac57806355f804b3146104d75780635c975abb146105005780636352211e1461052b57610230565b806336db7129146103c25780633b84d9c6146103ed5780633ccfd60b1461040457806342842e0e1461041b578063438b63001461044457610230565b806316ba10e01161020357806316ba10e01461030357806318160ddd1461032c57806323b872dd146103575780632eb4a7ab14610380578063333171bb146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906136f0565b6108cc565b6040516102699190613738565b60405180910390f35b34801561027e57600080fd5b506102876109ae565b60405161029491906137e3565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061383b565b610a40565b6040516102d191906138a9565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906138f0565b610abc565b005b34801561030f57600080fd5b5061032a60048036038101906103259190613a65565b610bc6565b005b34801561033857600080fd5b50610341610c55565b60405161034e9190613abd565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190613ad8565b610c6c565b005b34801561038c57600080fd5b50610395610c7c565b6040516103a29190613b44565b60405180910390f35b3480156103b757600080fd5b506103c0610c82565b005b3480156103ce57600080fd5b506103d7610d2a565b6040516103e49190613abd565b60405180910390f35b3480156103f957600080fd5b50610402610d30565b005b34801561041057600080fd5b50610419610dd8565b005b34801561042757600080fd5b50610442600480360381019061043d9190613ad8565b610f22565b005b34801561045057600080fd5b5061046b60048036038101906104669190613b5f565b610f42565b6040516104789190613c4a565b60405180910390f35b34801561048d57600080fd5b5061049661115c565b6040516104a39190613738565b60405180910390f35b3480156104b857600080fd5b506104c161116f565b6040516104ce91906137e3565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f99190613a65565b6111fd565b005b34801561050c57600080fd5b5061051561128c565b6040516105229190613738565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061383b565b61129f565b60405161055f91906138a9565b60405180910390f35b34801561057457600080fd5b5061057d6112b5565b005b34801561058b57600080fd5b5061059461135d565b6040516105a191906137e3565b60405180910390f35b3480156105b657600080fd5b506105bf6113eb565b6040516105cc9190613738565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613b5f565b6113fe565b6040516106099190613abd565b60405180910390f35b34801561061e57600080fd5b506106276114cd565b005b34801561063557600080fd5b50610650600480360381019061064b9190613c98565b611555565b005b34801561065e57600080fd5b506106676115db565b60405161067491906138a9565b60405180910390f35b34801561068957600080fd5b50610692611605565b60405161069f91906137e3565b60405180910390f35b6106c260048036038101906106bd919061383b565b611697565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613cf1565b61191a565b005b3480156106f957600080fd5b50610714600480360381019061070f9190613dd2565b611a91565b005b34801561072257600080fd5b5061073d60048036038101906107389190613e55565b611b0d565b005b34801561074b57600080fd5b506107666004803603810190610761919061383b565b611d3c565b005b34801561077457600080fd5b5061078f600480360381019061078a919061383b565b611dc2565b60405161079c91906137e3565b60405180910390f35b6107bf60048036038101906107ba9190613ef5565b611e6c565b005b3480156107cd57600080fd5b506107d66122a3565b6040516107e39190613abd565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190613b5f565b6122a9565b6040516108209190613f71565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613b5f565b6122c9565b60405161085d9190613738565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613f8c565b6122e9565b60405161089a9190613738565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190613b5f565b61237d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a757506109a682612474565b5b9050919050565b6060600280546109bd90613ffb565b80601f01602080910402602001604051908101604052809291908181526020018280546109e990613ffb565b8015610a365780601f10610a0b57610100808354040283529160200191610a36565b820191906000526020600020905b815481529060010190602001808311610a1957829003601f168201915b5050505050905090565b6000610a4b826124de565b610a81576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac78261129f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b2e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4d61252c565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b7f5750610b7d81610b7861252c565b6122e9565b155b15610bb6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc1838383612534565b505050565b610bce61252c565b73ffffffffffffffffffffffffffffffffffffffff16610bec6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990614078565b60405180910390fd5b80600d9081610c519190614244565b5050565b6000610c5f6125e6565b6001546000540303905090565b610c778383836125ef565b505050565b600a5481565b610c8a61252c565b73ffffffffffffffffffffffffffffffffffffffff16610ca86115db565b73ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590614078565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b600f5481565b610d3861252c565b73ffffffffffffffffffffffffffffffffffffffff16610d566115db565b73ffffffffffffffffffffffffffffffffffffffff1614610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390614078565b60405180910390fd5b601160029054906101000a900460ff1615601160026101000a81548160ff021916908315150217905550565b610de061252c565b73ffffffffffffffffffffffffffffffffffffffff16610dfe6115db565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90614078565b60405180910390fd5b600260095403610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090614362565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610ec7906143b3565b60006040518083038185875af1925050503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b5050905080610f1757600080fd5b506001600981905550565b610f3d83838360405180602001604052806000815250611a91565b505050565b60606000610f4f836113fe565b905060008167ffffffffffffffff811115610f6d57610f6c61393a565b5b604051908082528060200260200182016040528015610f9b5781602001602082028036833780820191505090505b5090506000610fa86125e6565b90506000805b8482108015610fbf5750600e548311155b1561114f576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511580156110cc5750600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614155b156110d957806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361113b57838584815181106111205761111f6143c8565b5b602002602001018181525050828061113790614426565b9350505b838061114690614426565b94505050610fae565b8395505050505050919050565b601160029054906101000a900460ff1681565b600d805461117c90613ffb565b80601f01602080910402602001604051908101604052809291908181526020018280546111a890613ffb565b80156111f55780601f106111ca576101008083540402835291602001916111f5565b820191906000526020600020905b8154815290600101906020018083116111d857829003601f168201915b505050505081565b61120561252c565b73ffffffffffffffffffffffffffffffffffffffff166112236115db565b73ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614078565b60405180910390fd5b80600c90816112889190614244565b5050565b601160009054906101000a900460ff1681565b60006112aa82612ade565b600001519050919050565b6112bd61252c565b73ffffffffffffffffffffffffffffffffffffffff166112db6115db565b73ffffffffffffffffffffffffffffffffffffffff1614611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132890614078565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b600c805461136a90613ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461139690613ffb565b80156113e35780601f106113b8576101008083540402835291602001916113e3565b820191906000526020600020905b8154815290600101906020018083116113c657829003601f168201915b505050505081565b601160019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611465576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6114d561252c565b73ffffffffffffffffffffffffffffffffffffffff166114f36115db565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090614078565b60405180910390fd5b6115536000612d6d565b565b61155d61252c565b73ffffffffffffffffffffffffffffffffffffffff1661157b6115db565b73ffffffffffffffffffffffffffffffffffffffff16146115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890614078565b60405180910390fd5b80600a8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461161490613ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461164090613ffb565b801561168d5780601f106116625761010080835404028352916020019161168d565b820191906000526020600020905b81548152906001019060200180831161167057829003601f168201915b5050505050905090565b806000811180156116aa5750600f548111155b6116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e0906144ba565b60405180910390fd5b600e54816116f5610c55565b6116ff91906144da565b1115611740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117379061455a565b60405180910390fd5b600f54816010600061175061252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff166117a591906144da565b11156117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd906145c6565b60405180910390fd5b60026009540361182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614362565b60405180910390fd5b6002600981905550601160009054906101000a900460ff1615611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90614632565b60405180910390fd5b816010600061189061252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166118e59190614652565b92506101000a81548160ff021916908360ff16021790555061190e61190861252c565b83612e33565b60016009819055505050565b61192261252c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611986576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061199361252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a4061252c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a859190613738565b60405180910390a35050565b611a9c8484846125ef565b611abb8373ffffffffffffffffffffffffffffffffffffffff16612e51565b8015611ad05750611ace84848484612e74565b155b15611b07576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b81600081118015611b205750600f548111155b611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b56906144ba565b60405180910390fd5b600e5481611b6b610c55565b611b7591906144da565b1115611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad9061455a565b60405180910390fd5b600f548160106000611bc661252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16611c1b91906144da565b1115611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c53906145c6565b60405180910390fd5b611c6461252c565b73ffffffffffffffffffffffffffffffffffffffff16611c826115db565b73ffffffffffffffffffffffffffffffffffffffff1614611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf90614078565b60405180910390fd5b600260095403611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490614362565b60405180910390fd5b6002600981905550611d2f8284612e33565b6001600981905550505050565b611d4461252c565b73ffffffffffffffffffffffffffffffffffffffff16611d626115db565b73ffffffffffffffffffffffffffffffffffffffff1614611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614078565b60405180910390fd5b80600f8190555050565b6060611dcd826124de565b611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e03906146f9565b60405180910390fd5b6000611e16612fc4565b90506000815111611e365760405180602001604052806000815250611e64565b80611e4084613056565b600d604051602001611e54939291906147d8565b6040516020818303038152906040525b915050919050565b82600081118015611e7f5750600f548111155b611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb5906144ba565b60405180910390fd5b600e5481611eca610c55565b611ed491906144da565b1115611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c9061455a565b60405180910390fd5b600f548160106000611f2561252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16611f7a91906144da565b1115611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb2906145c6565b60405180910390fd5b600260095403612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff790614362565b60405180910390fd5b6002600981905550601160019054906101000a900460ff16612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90614855565b60405180910390fd5b600b600061206361252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e2906148e7565b60405180910390fd5b60006120f561252c565b604051602001612105919061494f565b60405160208183030381529060405280519060200120905061216b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a54836131b6565b6121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a1906149dc565b60405180910390fd5b6001600b60006121b861252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550846010600061221661252c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff1661226b9190614652565b92506101000a81548160ff021916908360ff16021790555061229461228e61252c565b86612e33565b50600160098190555050505050565b600e5481565b60106020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61238561252c565b73ffffffffffffffffffffffffffffffffffffffff166123a36115db565b73ffffffffffffffffffffffffffffffffffffffff16146123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f090614078565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245f90614a6e565b60405180910390fd5b61247181612d6d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816124e96125e6565b111580156124f8575060005482105b8015612525575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006125fa82612ade565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661262161252c565b73ffffffffffffffffffffffffffffffffffffffff1614806126545750612653826000015161264e61252c565b6122e9565b5b80612699575061266261252c565b73ffffffffffffffffffffffffffffffffffffffff1661268184610a40565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806126d2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461273b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127a1576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127ae85858560016131cd565b6127be6000848460000151612534565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612a6e57600054811015612a6d5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ad785858560016131d3565b5050505050565b612ae6613641565b600082905080612af46125e6565b11158015612b03575060005481105b15612d36576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612d3457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c18578092505050612d68565b5b600115612d3357818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d2e578092505050612d68565b612c19565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e4d8282604051806020016040528060008152506131d9565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e9a61252c565b8786866040518563ffffffff1660e01b8152600401612ebc9493929190614ae3565b6020604051808303816000875af1925050508015612ef857506040513d601f19601f82011682018060405250810190612ef59190614b44565b60015b612f71573d8060008114612f28576040519150601f19603f3d011682016040523d82523d6000602084013e612f2d565b606091505b506000815103612f69576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c8054612fd390613ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612fff90613ffb565b801561304c5780601f106130215761010080835404028352916020019161304c565b820191906000526020600020905b81548152906001019060200180831161302f57829003601f168201915b5050505050905090565b60606000820361309d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131b1565b600082905060005b600082146130cf5780806130b890614426565b915050600a826130c89190614ba0565b91506130a5565b60008167ffffffffffffffff8111156130eb576130ea61393a565b5b6040519080825280601f01601f19166020018201604052801561311d5781602001600182028036833780820191505090505b5090505b600085146131aa576001826131369190614bd1565b9150600a856131459190614c05565b603061315191906144da565b60f81b818381518110613167576131666143c8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131a39190614ba0565b9450613121565b8093505050505b919050565b6000826131c385846131eb565b1490509392505050565b50505050565b50505050565b6131e68383836001613260565b505050565b60008082905060005b8451811015613255576000858281518110613212576132116143c8565b5b602002602001015190508083116132345761322d838261362a565b9250613241565b61323e818461362a565b92505b50808061324d90614426565b9150506131f4565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036132cc576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403613306576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61331360008683876131cd565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156134dd57506134dc8773ffffffffffffffffffffffffffffffffffffffff16612e51565b5b156135a2575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135526000888480600101955088612e74565b613588576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036134e357826000541461359d57600080fd5b61360d565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082036135a3575b81600081905550505061362360008683876131d3565b5050505050565b600082600052816020526040600020905092915050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136cd81613698565b81146136d857600080fd5b50565b6000813590506136ea816136c4565b92915050565b6000602082840312156137065761370561368e565b5b6000613714848285016136db565b91505092915050565b60008115159050919050565b6137328161371d565b82525050565b600060208201905061374d6000830184613729565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561378d578082015181840152602081019050613772565b60008484015250505050565b6000601f19601f8301169050919050565b60006137b582613753565b6137bf818561375e565b93506137cf81856020860161376f565b6137d881613799565b840191505092915050565b600060208201905081810360008301526137fd81846137aa565b905092915050565b6000819050919050565b61381881613805565b811461382357600080fd5b50565b6000813590506138358161380f565b92915050565b6000602082840312156138515761385061368e565b5b600061385f84828501613826565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061389382613868565b9050919050565b6138a381613888565b82525050565b60006020820190506138be600083018461389a565b92915050565b6138cd81613888565b81146138d857600080fd5b50565b6000813590506138ea816138c4565b92915050565b600080604083850312156139075761390661368e565b5b6000613915858286016138db565b925050602061392685828601613826565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61397282613799565b810181811067ffffffffffffffff821117156139915761399061393a565b5b80604052505050565b60006139a4613684565b90506139b08282613969565b919050565b600067ffffffffffffffff8211156139d0576139cf61393a565b5b6139d982613799565b9050602081019050919050565b82818337600083830152505050565b6000613a08613a03846139b5565b61399a565b905082815260208101848484011115613a2457613a23613935565b5b613a2f8482856139e6565b509392505050565b600082601f830112613a4c57613a4b613930565b5b8135613a5c8482602086016139f5565b91505092915050565b600060208284031215613a7b57613a7a61368e565b5b600082013567ffffffffffffffff811115613a9957613a98613693565b5b613aa584828501613a37565b91505092915050565b613ab781613805565b82525050565b6000602082019050613ad26000830184613aae565b92915050565b600080600060608486031215613af157613af061368e565b5b6000613aff868287016138db565b9350506020613b10868287016138db565b9250506040613b2186828701613826565b9150509250925092565b6000819050919050565b613b3e81613b2b565b82525050565b6000602082019050613b596000830184613b35565b92915050565b600060208284031215613b7557613b7461368e565b5b6000613b83848285016138db565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bc181613805565b82525050565b6000613bd38383613bb8565b60208301905092915050565b6000602082019050919050565b6000613bf782613b8c565b613c018185613b97565b9350613c0c83613ba8565b8060005b83811015613c3d578151613c248882613bc7565b9750613c2f83613bdf565b925050600181019050613c10565b5085935050505092915050565b60006020820190508181036000830152613c648184613bec565b905092915050565b613c7581613b2b565b8114613c8057600080fd5b50565b600081359050613c9281613c6c565b92915050565b600060208284031215613cae57613cad61368e565b5b6000613cbc84828501613c83565b91505092915050565b613cce8161371d565b8114613cd957600080fd5b50565b600081359050613ceb81613cc5565b92915050565b60008060408385031215613d0857613d0761368e565b5b6000613d16858286016138db565b9250506020613d2785828601613cdc565b9150509250929050565b600067ffffffffffffffff821115613d4c57613d4b61393a565b5b613d5582613799565b9050602081019050919050565b6000613d75613d7084613d31565b61399a565b905082815260208101848484011115613d9157613d90613935565b5b613d9c8482856139e6565b509392505050565b600082601f830112613db957613db8613930565b5b8135613dc9848260208601613d62565b91505092915050565b60008060008060808587031215613dec57613deb61368e565b5b6000613dfa878288016138db565b9450506020613e0b878288016138db565b9350506040613e1c87828801613826565b925050606085013567ffffffffffffffff811115613e3d57613e3c613693565b5b613e4987828801613da4565b91505092959194509250565b60008060408385031215613e6c57613e6b61368e565b5b6000613e7a85828601613826565b9250506020613e8b858286016138db565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613eb557613eb4613930565b5b8235905067ffffffffffffffff811115613ed257613ed1613e95565b5b602083019150836020820283011115613eee57613eed613e9a565b5b9250929050565b600080600060408486031215613f0e57613f0d61368e565b5b6000613f1c86828701613826565b935050602084013567ffffffffffffffff811115613f3d57613f3c613693565b5b613f4986828701613e9f565b92509250509250925092565b600060ff82169050919050565b613f6b81613f55565b82525050565b6000602082019050613f866000830184613f62565b92915050565b60008060408385031215613fa357613fa261368e565b5b6000613fb1858286016138db565b9250506020613fc2858286016138db565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061401357607f821691505b60208210810361402657614025613fcc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061406260208361375e565b915061406d8261402c565b602082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826140bd565b61410486836140bd565b95508019841693508086168417925050509392505050565b6000819050919050565b600061414161413c61413784613805565b61411c565b613805565b9050919050565b6000819050919050565b61415b83614126565b61416f61416782614148565b8484546140ca565b825550505050565b600090565b614184614177565b61418f818484614152565b505050565b5b818110156141b3576141a860008261417c565b600181019050614195565b5050565b601f8211156141f8576141c981614098565b6141d2846140ad565b810160208510156141e1578190505b6141f56141ed856140ad565b830182614194565b50505b505050565b600082821c905092915050565b600061421b600019846008026141fd565b1980831691505092915050565b6000614234838361420a565b9150826002028217905092915050565b61424d82613753565b67ffffffffffffffff8111156142665761426561393a565b5b6142708254613ffb565b61427b8282856141b7565b600060209050601f8311600181146142ae576000841561429c578287015190505b6142a68582614228565b86555061430e565b601f1984166142bc86614098565b60005b828110156142e4578489015182556001820191506020850194506020810190506142bf565b8683101561430157848901516142fd601f89168261420a565b8355505b6001600288020188555050505b505050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061434c601f8361375e565b915061435782614316565b602082019050919050565b6000602082019050818103600083015261437b8161433f565b9050919050565b600081905092915050565b50565b600061439d600083614382565b91506143a88261438d565b600082019050919050565b60006143be82614390565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061443182613805565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614463576144626143f7565b5b600182019050919050565b7f496e76616c6964206d696e7420616d6f756e74207375626d6974746564000000600082015250565b60006144a4601d8361375e565b91506144af8261446e565b602082019050919050565b600060208201905081810360008301526144d381614497565b9050919050565b60006144e582613805565b91506144f083613805565b9250828201905080821115614508576145076143f7565b5b92915050565b7f4d6178696d756d204e465420737570706c792065786365656465640000000000600082015250565b6000614544601b8361375e565b915061454f8261450e565b602082019050919050565b6000602082019050818103600083015261457381614537565b9050919050565b7f4d6178696d756d2077616c6c657420616d6f756e742065786365656465640000600082015250565b60006145b0601e8361375e565b91506145bb8261457a565b602082019050919050565b600060208201905081810360008301526145df816145a3565b9050919050565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b600061461c601b8361375e565b9150614627826145e6565b602082019050919050565b6000602082019050818103600083015261464b8161460f565b9050919050565b600061465d82613f55565b915061466883613f55565b9250828201905060ff811115614681576146806143f7565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006146e3602f8361375e565b91506146ee82614687565b604082019050919050565b60006020820190508181036000830152614712816146d6565b9050919050565b600081905092915050565b600061472f82613753565b6147398185614719565b935061474981856020860161376f565b80840191505092915050565b6000815461476281613ffb565b61476c8186614719565b94506001821660008114614787576001811461479c576147cf565b60ff19831686528115158202860193506147cf565b6147a585614098565b60005b838110156147c7578154818901526001820191506020810190506147a8565b838801955050505b50505092915050565b60006147e48286614724565b91506147f08285614724565b91506147fc8284614755565b9150819050949350505050565b7f57686974656c6973742073616c65206973206e6f742061637469766500000000600082015250565b600061483f601c8361375e565b915061484a82614809565b602082019050919050565b6000602082019050818103600083015261486e81614832565b9050919050565b7f4164647265737320616c726561647920636c61696d65642077686974656c697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006148d160218361375e565b91506148dc82614875565b604082019050919050565b60006020820190508181036000830152614900816148c4565b9050919050565b60008160601b9050919050565b600061491f82614907565b9050919050565b600061493182614914565b9050919050565b61494961494482613888565b614926565b82525050565b600061495b8284614938565b60148201915081905092915050565b7f496e76616c69642077686974656c6973742070726f6f66207375626d6974746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006149c660218361375e565b91506149d18261496a565b604082019050919050565b600060208201905081810360008301526149f5816149b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a5860268361375e565b9150614a63826149fc565b604082019050919050565b60006020820190508181036000830152614a8781614a4b565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614ab582614a8e565b614abf8185614a99565b9350614acf81856020860161376f565b614ad881613799565b840191505092915050565b6000608082019050614af8600083018761389a565b614b05602083018661389a565b614b126040830185613aae565b8181036060830152614b248184614aaa565b905095945050505050565b600081519050614b3e816136c4565b92915050565b600060208284031215614b5a57614b5961368e565b5b6000614b6884828501614b2f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bab82613805565b9150614bb683613805565b925082614bc657614bc5614b71565b5b828204905092915050565b6000614bdc82613805565b9150614be783613805565b9250828203905081811115614bff57614bfe6143f7565b5b92915050565b6000614c1082613805565b9150614c1b83613805565b925082614c2b57614c2a614b71565b5b82820690509291505056fea2646970667358221220742124a453db74b1ac27350e58889637a6e53b0cbd4bfc23fdfbd1147b17c5cc64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000b4e4654657272617269756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e46545200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6170692e6e6674657272617269756d2e78797a2f67656e657369732f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): NFTerrarium
Arg [1] : _tokenSymbol (string): NFTR
Arg [2] : _maxAmountPerWallet (uint256): 3
Arg [3] : _initBaseURI (string): https://api.nfterrarium.xyz/genesis/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 4e4654657272617269756d000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4e46545200000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [9] : 68747470733a2f2f6170692e6e6674657272617269756d2e78797a2f67656e65
Arg [10] : 7369732f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
50376:5404:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32876:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36261:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37764:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37327:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55091:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32125:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38621:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50526:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55205:74;;;;;;;;;;;;;:::i;:::-;;50837:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55287:78;;;;;;;;;;;;;:::i;:::-;;55602:173;;;;;;;;;;;;;:::i;:::-;;38862:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53194:888;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51070:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50701:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54987:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50991:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36070:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55373:109;;;;;;;;;;;;;:::i;:::-;;50668:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51023:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33245:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18356:103;;;;;;;;;;;;;:::i;:::-;;55490:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17705:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36430:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52687:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38040:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39118:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52959:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54843:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54090:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51948:731;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50800:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50877:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50558:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38390:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18614:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32876:305;32978:4;33030:25;33015:40;;;:11;:40;;;;:105;;;;33087:33;33072:48;;;:11;:48;;;;33015:105;:158;;;;33137:36;33161:11;33137:23;:36::i;:::-;33015:158;32995:178;;32876:305;;;:::o;36261:100::-;36315:13;36348:5;36341:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36261:100;:::o;37764:204::-;37832:7;37857:16;37865:7;37857;:16::i;:::-;37852:64;;37882:34;;;;;;;;;;;;;;37852:64;37936:15;:24;37952:7;37936:24;;;;;;;;;;;;;;;;;;;;;37929:31;;37764:204;;;:::o;37327:371::-;37400:13;37416:24;37432:7;37416:15;:24::i;:::-;37400:40;;37461:5;37455:11;;:2;:11;;;37451:48;;37475:24;;;;;;;;;;;;;;37451:48;37532:5;37516:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;37542:37;37559:5;37566:12;:10;:12::i;:::-;37542:16;:37::i;:::-;37541:38;37516:63;37512:138;;;37603:35;;;;;;;;;;;;;;37512:138;37662:28;37671:2;37675:7;37684:5;37662:8;:28::i;:::-;37389:309;37327:371;;:::o;55091:106::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55179:10:::1;55167:9;:22;;;;;;:::i;:::-;;55091:106:::0;:::o;32125:303::-;32169:7;32394:15;:13;:15::i;:::-;32379:12;;32363:13;;:28;:46;32356:53;;32125:303;:::o;38621:170::-;38755:28;38765:4;38771:2;38775:7;38755:9;:28::i;:::-;38621:170;;;:::o;50526:25::-;;;;:::o;55205:74::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55265:6:::1;;;;;;;;;;;55264:7;55255:6;;:16;;;;;;;;;;;;;;;;;;55205:74::o:0;50837:33::-;;;;:::o;55287:78::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55349:8:::1;;;;;;;;;;;55348:9;55337:8;;:20;;;;;;;;;;;;;;;;;;55287:78::o:0;55602:173::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15757:1:::1;16355:7;;:19:::0;16347:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15757:1;16488:7;:18;;;;55664:12:::2;55690:10;55682:24;;55714:21;55682:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55663:77;;;55759:7;55751:16;;;::::0;::::2;;55652:123;15713:1:::1;16667:7;:22;;;;55602:173::o:0;38862:185::-;39000:39;39017:4;39023:2;39027:7;39000:39;;;;;;;;;;;;:16;:39::i;:::-;38862:185;;;:::o;53194:888::-;53254:16;53283:23;53309:17;53319:6;53309:9;:17::i;:::-;53283:43;;53337:30;53384:15;53370:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53337:63;;53411:22;53436:15;:13;:15::i;:::-;53411:40;;53462:23;53500:26;53539:503;53564:15;53546;:33;:64;;;;;53601:9;;53583:14;:27;;53546:64;53539:503;;;53627:31;53661:11;:27;53673:14;53661:27;;;;;;;;;;;53627:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53710:9;:16;;;53709:17;:49;;;;;53756:1;53730:28;;:9;:14;;;:28;;;;53709:49;53705:125;;;53800:9;:14;;;53779:35;;53705:125;53872:6;53850:28;;:18;:28;;;53846:152;;53932:14;53899:13;53913:15;53899:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;53965:17;;;;;:::i;:::-;;;;53846:152;54014:16;;;;;:::i;:::-;;;;53612:430;53539:503;;;54061:13;54054:20;;;;;;;53194:888;;;:::o;51070:28::-;;;;;;;;;;;;;:::o;50701:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;54987:96::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55068:7:::1;55058;:17;;;;;;:::i;:::-;;54987:96:::0;:::o;50991:25::-;;;;;;;;;;;;;:::o;36070:124::-;36134:7;36161:20;36173:7;36161:11;:20::i;:::-;:25;;;36154:32;;36070:124;;;:::o;55373:109::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55454:20:::1;;;;;;;;;;;55453:21;55430:20;;:44;;;;;;;;;;;;;;;;;;55373:109::o:0;50668:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51023:40::-;;;;;;;;;;;;;:::o;33245:206::-;33309:7;33350:1;33333:19;;:5;:19;;;33329:60;;33361:28;;;;;;;;;;;;;;33329:60;33415:12;:19;33428:5;33415:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;33407:36;;33400:43;;33245:206;;;:::o;18356:103::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18421:30:::1;18448:1;18421:18;:30::i;:::-;18356:103::o:0;55490:104::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55575:11:::1;55562:10;:24;;;;55490:104:::0;:::o;17705:87::-;17751:7;17778:6;;;;;;;;;;;17771:13;;17705:87;:::o;36430:104::-;36486:13;36519:7;36512:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36430:104;:::o;52687:264::-;52752:11;51582:1;51568:11;:15;:52;;;;;51602:18;;51587:11;:33;;51568:52;51560:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;51704:9;;51689:11;51673:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;51665:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51809:18;;51794:11;51764:13;:27;51778:12;:10;:12::i;:::-;51764:27;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;;;:::i;:::-;:63;;51756:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;15757:1:::1;16355:7;;:19:::0;16347:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15757:1;16488:7;:18;;;;52798:6:::2;;;;;;;;;;;52797:7;52789:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;52884:11;52847:13;:27;52861:12;:10;:12::i;:::-;52847:27;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;52907:36;52917:12;:10;:12::i;:::-;52931:11;52907:9;:36::i;:::-;15713:1:::1;16667:7;:22;;;;52687:264:::0;;:::o;38040:279::-;38143:12;:10;:12::i;:::-;38131:24;;:8;:24;;;38127:54;;38164:17;;;;;;;;;;;;;;38127:54;38239:8;38194:18;:32;38213:12;:10;:12::i;:::-;38194:32;;;;;;;;;;;;;;;:42;38227:8;38194:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;38292:8;38263:48;;38278:12;:10;:12::i;:::-;38263:48;;;38302:8;38263:48;;;;;;:::i;:::-;;;;;;;;38040:279;;:::o;39118:369::-;39285:28;39295:4;39301:2;39305:7;39285:9;:28::i;:::-;39328:15;:2;:13;;;:15::i;:::-;:76;;;;;39348:56;39379:4;39385:2;39389:7;39398:5;39348:30;:56::i;:::-;39347:57;39328:76;39324:156;;;39428:40;;;;;;;;;;;;;;39324:156;39118:369;;;;:::o;52959:167::-;53038:11;51582:1;51568:11;:15;:52;;;;;51602:18;;51587:11;:33;;51568:52;51560:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;51704:9;;51689:11;51673:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;51665:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51809:18;;51794:11;51764:13;:27;51778:12;:10;:12::i;:::-;51764:27;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;;;:::i;:::-;:63;;51756:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;17936:12:::1;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15757:1:::2;16355:7;;:19:::0;16347:63:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;15757:1;16488:7;:18;;;;53085:33:::3;53095:9;53106:11;53085:9;:33::i;:::-;15713:1:::2;16667:7;:22;;;;52959:167:::0;;;:::o;54843:136::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54952:19:::1;54931:18;:40;;;;54843:136:::0;:::o;54090:395::-;54164:13;54198:17;54206:8;54198:7;:17::i;:::-;54190:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;54280:28;54311:10;:8;:10::i;:::-;54280:41;;54370:1;54345:14;54339:28;:32;:138;;;;;;;;;;;;;;;;;54411:14;54427:19;:8;:17;:19::i;:::-;54448:9;54394:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54339:138;54332:145;;;54090:395;;;:::o;51948:731::-;52055:11;51582:1;51568:11;:15;:52;;;;;51602:18;;51587:11;:33;;51568:52;51560:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;51704:9;;51689:11;51673:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;51665:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51809:18;;51794:11;51764:13;:27;51778:12;:10;:12::i;:::-;51764:27;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;;;:::i;:::-;:63;;51756:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;15757:1:::1;16355:7;;:19:::0;16347:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15757:1;16488:7;:18;;;;52144:20:::2;;;;;;;;;;;52136:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;52217:16;:30;52234:12;:10;:12::i;:::-;52217:30;;;;;;;;;;;;;;;;;;;;;;;;;52216:31;52208:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;52331:12;52373;:10;:12::i;:::-;52356:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;52346:41;;;;;;52331:56;;52406:50;52425:12;;52406:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52439:10;;52451:4;52406:18;:50::i;:::-;52398:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;52560:4;52527:16;:30;52544:12;:10;:12::i;:::-;52527:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;52612:11;52575:13;:27;52589:12;:10;:12::i;:::-;52575:27;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;52635:36;52645:12;:10;:12::i;:::-;52659:11;52635:9;:36::i;:::-;52081:598;15713:1:::1;16667:7;:22;;;;51948:731:::0;;;;:::o;50800:30::-;;;;:::o;50877:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;50558:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;38390:164::-;38487:4;38511:18;:25;38530:5;38511:25;;;;;;;;;;;;;;;:35;38537:8;38511:35;;;;;;;;;;;;;;;;;;;;;;;;;38504:42;;38390:164;;;;:::o;18614:201::-;17936:12;:10;:12::i;:::-;17925:23;;:7;:5;:7::i;:::-;:23;;;17917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18723:1:::1;18703:22;;:8;:22;;::::0;18695:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18779:28;18798:8;18779:18;:28::i;:::-;18614:201:::0;:::o;25605:157::-;25690:4;25729:25;25714:40;;;:11;:40;;;;25707:47;;25605:157;;;:::o;39742:187::-;39799:4;39842:7;39823:15;:13;:15::i;:::-;:26;;:53;;;;;39863:13;;39853:7;:23;39823:53;:98;;;;;39894:11;:20;39906:7;39894:20;;;;;;;;;;;:27;;;;;;;;;;;;39893:28;39823:98;39816:105;;39742:187;;;:::o;5355:98::-;5408:7;5435:10;5428:17;;5355:98;:::o;47353:196::-;47495:2;47468:15;:24;47484:7;47468:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47533:7;47529:2;47513:28;;47522:5;47513:28;;;;;;;;;;;;47353:196;;;:::o;54555:101::-;54620:7;54647:1;54640:8;;54555:101;:::o;42855:2112::-;42970:35;43008:20;43020:7;43008:11;:20::i;:::-;42970:58;;43041:22;43083:13;:18;;;43067:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;43118:50;43135:13;:18;;;43155:12;:10;:12::i;:::-;43118:16;:50::i;:::-;43067:101;:154;;;;43209:12;:10;:12::i;:::-;43185:36;;:20;43197:7;43185:11;:20::i;:::-;:36;;;43067:154;43041:181;;43240:17;43235:66;;43266:35;;;;;;;;;;;;;;43235:66;43338:4;43316:26;;:13;:18;;;:26;;;43312:67;;43351:28;;;;;;;;;;;;;;43312:67;43408:1;43394:16;;:2;:16;;;43390:52;;43419:23;;;;;;;;;;;;;;43390:52;43455:43;43477:4;43483:2;43487:7;43496:1;43455:21;:43::i;:::-;43563:49;43580:1;43584:7;43593:13;:18;;;43563:8;:49::i;:::-;43938:1;43908:12;:18;43921:4;43908:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43982:1;43954:12;:16;43967:2;43954:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44028:2;44000:11;:20;44012:7;44000:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;44090:15;44045:11;:20;44057:7;44045:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;44358:19;44390:1;44380:7;:11;44358:33;;44451:1;44410:43;;:11;:24;44422:11;44410:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;44406:445;;44635:13;;44621:11;:27;44617:219;;;44705:13;:18;;;44673:11;:24;44685:11;44673:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;44788:13;:28;;;44746:11;:24;44758:11;44746:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;44617:219;44406:445;43883:979;44898:7;44894:2;44879:27;;44888:4;44879:27;;;;;;;;;;;;44917:42;44938:4;44944:2;44948:7;44957:1;44917:20;:42::i;:::-;42959:2008;;42855:2112;;;:::o;34900:1108::-;34961:21;;:::i;:::-;34995:12;35010:7;34995:22;;35078:4;35059:15;:13;:15::i;:::-;:23;;:47;;;;;35093:13;;35086:4;:20;35059:47;35055:886;;;35127:31;35161:11;:17;35173:4;35161:17;;;;;;;;;;;35127:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35202:9;:16;;;35197:729;;35273:1;35247:28;;:9;:14;;;:28;;;35243:101;;35311:9;35304:16;;;;;;35243:101;35646:261;35653:4;35646:261;;;35686:6;;;;;;;;35731:11;:17;35743:4;35731:17;;;;;;;;;;;35719:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35805:1;35779:28;;:9;:14;;;:28;;;35775:109;;35847:9;35840:16;;;;;;35775:109;35646:261;;;35197:729;35108:833;35055:886;35969:31;;;;;;;;;;;;;;34900:1108;;;;:::o;18975:191::-;19049:16;19068:6;;;;;;;;;;;19049:25;;19094:8;19085:6;;:17;;;;;;;;;;;;;;;;;;19149:8;19118:40;;19139:8;19118:40;;;;;;;;;;;;19038:128;18975:191;:::o;39937:104::-;40006:27;40016:2;40020:8;40006:27;;;;;;;;;;;;:9;:27::i;:::-;39937:104;;:::o;6744:326::-;6804:4;7061:1;7039:7;:19;;;:23;7032:30;;6744:326;;;:::o;48041:667::-;48204:4;48241:2;48225:36;;;48262:12;:10;:12::i;:::-;48276:4;48282:7;48291:5;48225:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48221:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48476:1;48459:6;:13;:18;48455:235;;48505:40;;;;;;;;;;;;;;48455:235;48648:6;48642:13;48633:6;48629:2;48625:15;48618:38;48221:480;48354:45;;;48344:55;;;:6;:55;;;;48337:62;;;48041:667;;;;;;:::o;54664:108::-;54724:13;54757:7;54750:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54664:108;:::o;2975:723::-;3031:13;3261:1;3252:5;:10;3248:53;;3279:10;;;;;;;;;;;;;;;;;;;;;3248:53;3311:12;3326:5;3311:20;;3342:14;3367:78;3382:1;3374:4;:9;3367:78;;3400:8;;;;;:::i;:::-;;;;3431:2;3423:10;;;;;:::i;:::-;;;3367:78;;;3455:19;3487:6;3477:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3455:39;;3505:154;3521:1;3512:5;:10;3505:154;;3549:1;3539:11;;;;;:::i;:::-;;;3616:2;3608:5;:10;;;;:::i;:::-;3595:2;:24;;;;:::i;:::-;3582:39;;3565:6;3572;3565:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3645:2;3636:11;;;;;:::i;:::-;;;3505:154;;;3683:6;3669:21;;;;;2975:723;;;;:::o;1200:190::-;1325:4;1378;1349:25;1362:5;1369:4;1349:12;:25::i;:::-;:33;1342:40;;1200:190;;;;;:::o;49356:159::-;;;;;:::o;50174:158::-;;;;;:::o;40404:163::-;40527:32;40533:2;40537:8;40547:5;40554:4;40527:5;:32::i;:::-;40404:163;;;:::o;1752:675::-;1835:7;1855:20;1878:4;1855:27;;1898:9;1893:497;1917:5;:12;1913:1;:16;1893:497;;;1951:20;1974:5;1980:1;1974:8;;;;;;;;:::i;:::-;;;;;;;;1951:31;;2017:12;2001;:28;1997:382;;2144:42;2159:12;2173;2144:14;:42::i;:::-;2129:57;;1997:382;;;2321:42;2336:12;2350;2321:14;:42::i;:::-;2306:57;;1997:382;1936:454;1931:3;;;;;:::i;:::-;;;;1893:497;;;;2407:12;2400:19;;;1752:675;;;;:::o;40826:1775::-;40965:20;40988:13;;40965:36;;41030:1;41016:16;;:2;:16;;;41012:48;;41041:19;;;;;;;;;;;;;;41012:48;41087:1;41075:8;:13;41071:44;;41097:18;;;;;;;;;;;;;;41071:44;41128:61;41158:1;41162:2;41166:12;41180:8;41128:21;:61::i;:::-;41501:8;41466:12;:16;41479:2;41466:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41565:8;41525:12;:16;41538:2;41525:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41624:2;41591:11;:25;41603:12;41591:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;41691:15;41641:11;:25;41653:12;41641:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;41724:20;41747:12;41724:35;;41774:11;41803:8;41788:12;:23;41774:37;;41832:4;:23;;;;;41840:15;:2;:13;;;:15::i;:::-;41832:23;41828:641;;;41876:314;41932:12;41928:2;41907:38;;41924:1;41907:38;;;;;;;;;;;;41973:69;42012:1;42016:2;42020:14;;;;;;42036:5;41973:30;:69::i;:::-;41968:174;;42078:40;;;;;;;;;;;;;;41968:174;42185:3;42169:12;:19;41876:314;;42271:12;42254:13;;:29;42250:43;;42285:8;;;42250:43;41828:641;;;42334:120;42390:14;;;;;;42386:2;42365:40;;42382:1;42365:40;;;;;;;;;;;;42449:3;42433:12;:19;42334:120;;41828:641;42499:12;42483:13;:28;;;;41441:1082;;42533:60;42562:1;42566:2;42570:12;42584:8;42533:20;:60::i;:::-;40954:1647;40826:1775;;;;:::o;2435:224::-;2503:13;2566:1;2560:4;2553:15;2595:1;2589:4;2582:15;2636:4;2630;2620:21;2611:30;;2435:224;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:117;5122:1;5119;5112:12;5136:180;5184:77;5181:1;5174:88;5281:4;5278:1;5271:15;5305:4;5302:1;5295:15;5322:281;5405:27;5427:4;5405:27;:::i;:::-;5397:6;5393:40;5535:6;5523:10;5520:22;5499:18;5487:10;5484:34;5481:62;5478:88;;;5546:18;;:::i;:::-;5478:88;5586:10;5582:2;5575:22;5365:238;5322:281;;:::o;5609:129::-;5643:6;5670:20;;:::i;:::-;5660:30;;5699:33;5727:4;5719:6;5699:33;:::i;:::-;5609:129;;;:::o;5744:308::-;5806:4;5896:18;5888:6;5885:30;5882:56;;;5918:18;;:::i;:::-;5882:56;5956:29;5978:6;5956:29;:::i;:::-;5948:37;;6040:4;6034;6030:15;6022:23;;5744:308;;;:::o;6058:146::-;6155:6;6150:3;6145;6132:30;6196:1;6187:6;6182:3;6178:16;6171:27;6058:146;;;:::o;6210:425::-;6288:5;6313:66;6329:49;6371:6;6329:49;:::i;:::-;6313:66;:::i;:::-;6304:75;;6402:6;6395:5;6388:21;6440:4;6433:5;6429:16;6478:3;6469:6;6464:3;6460:16;6457:25;6454:112;;;6485:79;;:::i;:::-;6454:112;6575:54;6622:6;6617:3;6612;6575:54;:::i;:::-;6294:341;6210:425;;;;;:::o;6655:340::-;6711:5;6760:3;6753:4;6745:6;6741:17;6737:27;6727:122;;6768:79;;:::i;:::-;6727:122;6885:6;6872:20;6910:79;6985:3;6977:6;6970:4;6962:6;6958:17;6910:79;:::i;:::-;6901:88;;6717:278;6655:340;;;;:::o;7001:509::-;7070:6;7119:2;7107:9;7098:7;7094:23;7090:32;7087:119;;;7125:79;;:::i;:::-;7087:119;7273:1;7262:9;7258:17;7245:31;7303:18;7295:6;7292:30;7289:117;;;7325:79;;:::i;:::-;7289:117;7430:63;7485:7;7476:6;7465:9;7461:22;7430:63;:::i;:::-;7420:73;;7216:287;7001:509;;;;:::o;7516:118::-;7603:24;7621:5;7603:24;:::i;:::-;7598:3;7591:37;7516:118;;:::o;7640:222::-;7733:4;7771:2;7760:9;7756:18;7748:26;;7784:71;7852:1;7841:9;7837:17;7828:6;7784:71;:::i;:::-;7640:222;;;;:::o;7868:619::-;7945:6;7953;7961;8010:2;7998:9;7989:7;7985:23;7981:32;7978:119;;;8016:79;;:::i;:::-;7978:119;8136:1;8161:53;8206:7;8197:6;8186:9;8182:22;8161:53;:::i;:::-;8151:63;;8107:117;8263:2;8289:53;8334:7;8325:6;8314:9;8310:22;8289:53;:::i;:::-;8279:63;;8234:118;8391:2;8417:53;8462:7;8453:6;8442:9;8438:22;8417:53;:::i;:::-;8407:63;;8362:118;7868:619;;;;;:::o;8493:77::-;8530:7;8559:5;8548:16;;8493:77;;;:::o;8576:118::-;8663:24;8681:5;8663:24;:::i;:::-;8658:3;8651:37;8576:118;;:::o;8700:222::-;8793:4;8831:2;8820:9;8816:18;8808:26;;8844:71;8912:1;8901:9;8897:17;8888:6;8844:71;:::i;:::-;8700:222;;;;:::o;8928:329::-;8987:6;9036:2;9024:9;9015:7;9011:23;9007:32;9004:119;;;9042:79;;:::i;:::-;9004:119;9162:1;9187:53;9232:7;9223:6;9212:9;9208:22;9187:53;:::i;:::-;9177:63;;9133:117;8928:329;;;;:::o;9263:114::-;9330:6;9364:5;9358:12;9348:22;;9263:114;;;:::o;9383:184::-;9482:11;9516:6;9511:3;9504:19;9556:4;9551:3;9547:14;9532:29;;9383:184;;;;:::o;9573:132::-;9640:4;9663:3;9655:11;;9693:4;9688:3;9684:14;9676:22;;9573:132;;;:::o;9711:108::-;9788:24;9806:5;9788:24;:::i;:::-;9783:3;9776:37;9711:108;;:::o;9825:179::-;9894:10;9915:46;9957:3;9949:6;9915:46;:::i;:::-;9993:4;9988:3;9984:14;9970:28;;9825:179;;;;:::o;10010:113::-;10080:4;10112;10107:3;10103:14;10095:22;;10010:113;;;:::o;10159:732::-;10278:3;10307:54;10355:5;10307:54;:::i;:::-;10377:86;10456:6;10451:3;10377:86;:::i;:::-;10370:93;;10487:56;10537:5;10487:56;:::i;:::-;10566:7;10597:1;10582:284;10607:6;10604:1;10601:13;10582:284;;;10683:6;10677:13;10710:63;10769:3;10754:13;10710:63;:::i;:::-;10703:70;;10796:60;10849:6;10796:60;:::i;:::-;10786:70;;10642:224;10629:1;10626;10622:9;10617:14;;10582:284;;;10586:14;10882:3;10875:10;;10283:608;;;10159:732;;;;:::o;10897:373::-;11040:4;11078:2;11067:9;11063:18;11055:26;;11127:9;11121:4;11117:20;11113:1;11102:9;11098:17;11091:47;11155:108;11258:4;11249:6;11155:108;:::i;:::-;11147:116;;10897:373;;;;:::o;11276:122::-;11349:24;11367:5;11349:24;:::i;:::-;11342:5;11339:35;11329:63;;11388:1;11385;11378:12;11329:63;11276:122;:::o;11404:139::-;11450:5;11488:6;11475:20;11466:29;;11504:33;11531:5;11504:33;:::i;:::-;11404:139;;;;:::o;11549:329::-;11608:6;11657:2;11645:9;11636:7;11632:23;11628:32;11625:119;;;11663:79;;:::i;:::-;11625:119;11783:1;11808:53;11853:7;11844:6;11833:9;11829:22;11808:53;:::i;:::-;11798:63;;11754:117;11549:329;;;;:::o;11884:116::-;11954:21;11969:5;11954:21;:::i;:::-;11947:5;11944:32;11934:60;;11990:1;11987;11980:12;11934:60;11884:116;:::o;12006:133::-;12049:5;12087:6;12074:20;12065:29;;12103:30;12127:5;12103:30;:::i;:::-;12006:133;;;;:::o;12145:468::-;12210:6;12218;12267:2;12255:9;12246:7;12242:23;12238:32;12235:119;;;12273:79;;:::i;:::-;12235:119;12393:1;12418:53;12463:7;12454:6;12443:9;12439:22;12418:53;:::i;:::-;12408:63;;12364:117;12520:2;12546:50;12588:7;12579:6;12568:9;12564:22;12546:50;:::i;:::-;12536:60;;12491:115;12145:468;;;;;:::o;12619:307::-;12680:4;12770:18;12762:6;12759:30;12756:56;;;12792:18;;:::i;:::-;12756:56;12830:29;12852:6;12830:29;:::i;:::-;12822:37;;12914:4;12908;12904:15;12896:23;;12619:307;;;:::o;12932:423::-;13009:5;13034:65;13050:48;13091:6;13050:48;:::i;:::-;13034:65;:::i;:::-;13025:74;;13122:6;13115:5;13108:21;13160:4;13153:5;13149:16;13198:3;13189:6;13184:3;13180:16;13177:25;13174:112;;;13205:79;;:::i;:::-;13174:112;13295:54;13342:6;13337:3;13332;13295:54;:::i;:::-;13015:340;12932:423;;;;;:::o;13374:338::-;13429:5;13478:3;13471:4;13463:6;13459:17;13455:27;13445:122;;13486:79;;:::i;:::-;13445:122;13603:6;13590:20;13628:78;13702:3;13694:6;13687:4;13679:6;13675:17;13628:78;:::i;:::-;13619:87;;13435:277;13374:338;;;;:::o;13718:943::-;13813:6;13821;13829;13837;13886:3;13874:9;13865:7;13861:23;13857:33;13854:120;;;13893:79;;:::i;:::-;13854:120;14013:1;14038:53;14083:7;14074:6;14063:9;14059:22;14038:53;:::i;:::-;14028:63;;13984:117;14140:2;14166:53;14211:7;14202:6;14191:9;14187:22;14166:53;:::i;:::-;14156:63;;14111:118;14268:2;14294:53;14339:7;14330:6;14319:9;14315:22;14294:53;:::i;:::-;14284:63;;14239:118;14424:2;14413:9;14409:18;14396:32;14455:18;14447:6;14444:30;14441:117;;;14477:79;;:::i;:::-;14441:117;14582:62;14636:7;14627:6;14616:9;14612:22;14582:62;:::i;:::-;14572:72;;14367:287;13718:943;;;;;;;:::o;14667:474::-;14735:6;14743;14792:2;14780:9;14771:7;14767:23;14763:32;14760:119;;;14798:79;;:::i;:::-;14760:119;14918:1;14943:53;14988:7;14979:6;14968:9;14964:22;14943:53;:::i;:::-;14933:63;;14889:117;15045:2;15071:53;15116:7;15107:6;15096:9;15092:22;15071:53;:::i;:::-;15061:63;;15016:118;14667:474;;;;;:::o;15147:117::-;15256:1;15253;15246:12;15270:117;15379:1;15376;15369:12;15410:568;15483:8;15493:6;15543:3;15536:4;15528:6;15524:17;15520:27;15510:122;;15551:79;;:::i;:::-;15510:122;15664:6;15651:20;15641:30;;15694:18;15686:6;15683:30;15680:117;;;15716:79;;:::i;:::-;15680:117;15830:4;15822:6;15818:17;15806:29;;15884:3;15876:4;15868:6;15864:17;15854:8;15850:32;15847:41;15844:128;;;15891:79;;:::i;:::-;15844:128;15410:568;;;;;:::o;15984:704::-;16079:6;16087;16095;16144:2;16132:9;16123:7;16119:23;16115:32;16112:119;;;16150:79;;:::i;:::-;16112:119;16270:1;16295:53;16340:7;16331:6;16320:9;16316:22;16295:53;:::i;:::-;16285:63;;16241:117;16425:2;16414:9;16410:18;16397:32;16456:18;16448:6;16445:30;16442:117;;;16478:79;;:::i;:::-;16442:117;16591:80;16663:7;16654:6;16643:9;16639:22;16591:80;:::i;:::-;16573:98;;;;16368:313;15984:704;;;;;:::o;16694:86::-;16729:7;16769:4;16762:5;16758:16;16747:27;;16694:86;;;:::o;16786:112::-;16869:22;16885:5;16869:22;:::i;:::-;16864:3;16857:35;16786:112;;:::o;16904:214::-;16993:4;17031:2;17020:9;17016:18;17008:26;;17044:67;17108:1;17097:9;17093:17;17084:6;17044:67;:::i;:::-;16904:214;;;;:::o;17124:474::-;17192:6;17200;17249:2;17237:9;17228:7;17224:23;17220:32;17217:119;;;17255:79;;:::i;:::-;17217:119;17375:1;17400:53;17445:7;17436:6;17425:9;17421:22;17400:53;:::i;:::-;17390:63;;17346:117;17502:2;17528:53;17573:7;17564:6;17553:9;17549:22;17528:53;:::i;:::-;17518:63;;17473:118;17124:474;;;;;:::o;17604:180::-;17652:77;17649:1;17642:88;17749:4;17746:1;17739:15;17773:4;17770:1;17763:15;17790:320;17834:6;17871:1;17865:4;17861:12;17851:22;;17918:1;17912:4;17908:12;17939:18;17929:81;;17995:4;17987:6;17983:17;17973:27;;17929:81;18057:2;18049:6;18046:14;18026:18;18023:38;18020:84;;18076:18;;:::i;:::-;18020:84;17841:269;17790:320;;;:::o;18116:182::-;18256:34;18252:1;18244:6;18240:14;18233:58;18116:182;:::o;18304:366::-;18446:3;18467:67;18531:2;18526:3;18467:67;:::i;:::-;18460:74;;18543:93;18632:3;18543:93;:::i;:::-;18661:2;18656:3;18652:12;18645:19;;18304:366;;;:::o;18676:419::-;18842:4;18880:2;18869:9;18865:18;18857:26;;18929:9;18923:4;18919:20;18915:1;18904:9;18900:17;18893:47;18957:131;19083:4;18957:131;:::i;:::-;18949:139;;18676:419;;;:::o;19101:141::-;19150:4;19173:3;19165:11;;19196:3;19193:1;19186:14;19230:4;19227:1;19217:18;19209:26;;19101:141;;;:::o;19248:93::-;19285:6;19332:2;19327;19320:5;19316:14;19312:23;19302:33;;19248:93;;;:::o;19347:107::-;19391:8;19441:5;19435:4;19431:16;19410:37;;19347:107;;;;:::o;19460:393::-;19529:6;19579:1;19567:10;19563:18;19602:97;19632:66;19621:9;19602:97;:::i;:::-;19720:39;19750:8;19739:9;19720:39;:::i;:::-;19708:51;;19792:4;19788:9;19781:5;19777:21;19768:30;;19841:4;19831:8;19827:19;19820:5;19817:30;19807:40;;19536:317;;19460:393;;;;;:::o;19859:60::-;19887:3;19908:5;19901:12;;19859:60;;;:::o;19925:142::-;19975:9;20008:53;20026:34;20035:24;20053:5;20035:24;:::i;:::-;20026:34;:::i;:::-;20008:53;:::i;:::-;19995:66;;19925:142;;;:::o;20073:75::-;20116:3;20137:5;20130:12;;20073:75;;;:::o;20154:269::-;20264:39;20295:7;20264:39;:::i;:::-;20325:91;20374:41;20398:16;20374:41;:::i;:::-;20366:6;20359:4;20353:11;20325:91;:::i;:::-;20319:4;20312:105;20230:193;20154:269;;;:::o;20429:73::-;20474:3;20429:73;:::o;20508:189::-;20585:32;;:::i;:::-;20626:65;20684:6;20676;20670:4;20626:65;:::i;:::-;20561:136;20508:189;;:::o;20703:186::-;20763:120;20780:3;20773:5;20770:14;20763:120;;;20834:39;20871:1;20864:5;20834:39;:::i;:::-;20807:1;20800:5;20796:13;20787:22;;20763:120;;;20703:186;;:::o;20895:543::-;20996:2;20991:3;20988:11;20985:446;;;21030:38;21062:5;21030:38;:::i;:::-;21114:29;21132:10;21114:29;:::i;:::-;21104:8;21100:44;21297:2;21285:10;21282:18;21279:49;;;21318:8;21303:23;;21279:49;21341:80;21397:22;21415:3;21397:22;:::i;:::-;21387:8;21383:37;21370:11;21341:80;:::i;:::-;21000:431;;20985:446;20895:543;;;:::o;21444:117::-;21498:8;21548:5;21542:4;21538:16;21517:37;;21444:117;;;;:::o;21567:169::-;21611:6;21644:51;21692:1;21688:6;21680:5;21677:1;21673:13;21644:51;:::i;:::-;21640:56;21725:4;21719;21715:15;21705:25;;21618:118;21567:169;;;;:::o;21741:295::-;21817:4;21963:29;21988:3;21982:4;21963:29;:::i;:::-;21955:37;;22025:3;22022:1;22018:11;22012:4;22009:21;22001:29;;21741:295;;;;:::o;22041:1395::-;22158:37;22191:3;22158:37;:::i;:::-;22260:18;22252:6;22249:30;22246:56;;;22282:18;;:::i;:::-;22246:56;22326:38;22358:4;22352:11;22326:38;:::i;:::-;22411:67;22471:6;22463;22457:4;22411:67;:::i;:::-;22505:1;22529:4;22516:17;;22561:2;22553:6;22550:14;22578:1;22573:618;;;;23235:1;23252:6;23249:77;;;23301:9;23296:3;23292:19;23286:26;23277:35;;23249:77;23352:67;23412:6;23405:5;23352:67;:::i;:::-;23346:4;23339:81;23208:222;22543:887;;22573:618;22625:4;22621:9;22613:6;22609:22;22659:37;22691:4;22659:37;:::i;:::-;22718:1;22732:208;22746:7;22743:1;22740:14;22732:208;;;22825:9;22820:3;22816:19;22810:26;22802:6;22795:42;22876:1;22868:6;22864:14;22854:24;;22923:2;22912:9;22908:18;22895:31;;22769:4;22766:1;22762:12;22757:17;;22732:208;;;22968:6;22959:7;22956:19;22953:179;;;23026:9;23021:3;23017:19;23011:26;23069:48;23111:4;23103:6;23099:17;23088:9;23069:48;:::i;:::-;23061:6;23054:64;22976:156;22953:179;23178:1;23174;23166:6;23162:14;23158:22;23152:4;23145:36;22580:611;;;22543:887;;22133:1303;;;22041:1395;;:::o;23442:181::-;23582:33;23578:1;23570:6;23566:14;23559:57;23442:181;:::o;23629:366::-;23771:3;23792:67;23856:2;23851:3;23792:67;:::i;:::-;23785:74;;23868:93;23957:3;23868:93;:::i;:::-;23986:2;23981:3;23977:12;23970:19;;23629:366;;;:::o;24001:419::-;24167:4;24205:2;24194:9;24190:18;24182:26;;24254:9;24248:4;24244:20;24240:1;24229:9;24225:17;24218:47;24282:131;24408:4;24282:131;:::i;:::-;24274:139;;24001:419;;;:::o;24426:147::-;24527:11;24564:3;24549:18;;24426:147;;;;:::o;24579:114::-;;:::o;24699:398::-;24858:3;24879:83;24960:1;24955:3;24879:83;:::i;:::-;24872:90;;24971:93;25060:3;24971:93;:::i;:::-;25089:1;25084:3;25080:11;25073:18;;24699:398;;;:::o;25103:379::-;25287:3;25309:147;25452:3;25309:147;:::i;:::-;25302:154;;25473:3;25466:10;;25103:379;;;:::o;25488:180::-;25536:77;25533:1;25526:88;25633:4;25630:1;25623:15;25657:4;25654:1;25647:15;25674:180;25722:77;25719:1;25712:88;25819:4;25816:1;25809:15;25843:4;25840:1;25833:15;25860:233;25899:3;25922:24;25940:5;25922:24;:::i;:::-;25913:33;;25968:66;25961:5;25958:77;25955:103;;26038:18;;:::i;:::-;25955:103;26085:1;26078:5;26074:13;26067:20;;25860:233;;;:::o;26099:179::-;26239:31;26235:1;26227:6;26223:14;26216:55;26099:179;:::o;26284:366::-;26426:3;26447:67;26511:2;26506:3;26447:67;:::i;:::-;26440:74;;26523:93;26612:3;26523:93;:::i;:::-;26641:2;26636:3;26632:12;26625:19;;26284:366;;;:::o;26656:419::-;26822:4;26860:2;26849:9;26845:18;26837:26;;26909:9;26903:4;26899:20;26895:1;26884:9;26880:17;26873:47;26937:131;27063:4;26937:131;:::i;:::-;26929:139;;26656:419;;;:::o;27081:191::-;27121:3;27140:20;27158:1;27140:20;:::i;:::-;27135:25;;27174:20;27192:1;27174:20;:::i;:::-;27169:25;;27217:1;27214;27210:9;27203:16;;27238:3;27235:1;27232:10;27229:36;;;27245:18;;:::i;:::-;27229:36;27081:191;;;;:::o;27278:177::-;27418:29;27414:1;27406:6;27402:14;27395:53;27278:177;:::o;27461:366::-;27603:3;27624:67;27688:2;27683:3;27624:67;:::i;:::-;27617:74;;27700:93;27789:3;27700:93;:::i;:::-;27818:2;27813:3;27809:12;27802:19;;27461:366;;;:::o;27833:419::-;27999:4;28037:2;28026:9;28022:18;28014:26;;28086:9;28080:4;28076:20;28072:1;28061:9;28057:17;28050:47;28114:131;28240:4;28114:131;:::i;:::-;28106:139;;27833:419;;;:::o;28258:180::-;28398:32;28394:1;28386:6;28382:14;28375:56;28258:180;:::o;28444:366::-;28586:3;28607:67;28671:2;28666:3;28607:67;:::i;:::-;28600:74;;28683:93;28772:3;28683:93;:::i;:::-;28801:2;28796:3;28792:12;28785:19;;28444:366;;;:::o;28816:419::-;28982:4;29020:2;29009:9;29005:18;28997:26;;29069:9;29063:4;29059:20;29055:1;29044:9;29040:17;29033:47;29097:131;29223:4;29097:131;:::i;:::-;29089:139;;28816:419;;;:::o;29241:177::-;29381:29;29377:1;29369:6;29365:14;29358:53;29241:177;:::o;29424:366::-;29566:3;29587:67;29651:2;29646:3;29587:67;:::i;:::-;29580:74;;29663:93;29752:3;29663:93;:::i;:::-;29781:2;29776:3;29772:12;29765:19;;29424:366;;;:::o;29796:419::-;29962:4;30000:2;29989:9;29985:18;29977:26;;30049:9;30043:4;30039:20;30035:1;30024:9;30020:17;30013:47;30077:131;30203:4;30077:131;:::i;:::-;30069:139;;29796:419;;;:::o;30221:188::-;30259:3;30278:18;30294:1;30278:18;:::i;:::-;30273:23;;30310:18;30326:1;30310:18;:::i;:::-;30305:23;;30351:1;30348;30344:9;30337:16;;30374:4;30369:3;30366:13;30363:39;;;30382:18;;:::i;:::-;30363:39;30221:188;;;;:::o;30415:234::-;30555:34;30551:1;30543:6;30539:14;30532:58;30624:17;30619:2;30611:6;30607:15;30600:42;30415:234;:::o;30655:366::-;30797:3;30818:67;30882:2;30877:3;30818:67;:::i;:::-;30811:74;;30894:93;30983:3;30894:93;:::i;:::-;31012:2;31007:3;31003:12;30996:19;;30655:366;;;:::o;31027:419::-;31193:4;31231:2;31220:9;31216:18;31208:26;;31280:9;31274:4;31270:20;31266:1;31255:9;31251:17;31244:47;31308:131;31434:4;31308:131;:::i;:::-;31300:139;;31027:419;;;:::o;31452:148::-;31554:11;31591:3;31576:18;;31452:148;;;;:::o;31606:390::-;31712:3;31740:39;31773:5;31740:39;:::i;:::-;31795:89;31877:6;31872:3;31795:89;:::i;:::-;31788:96;;31893:65;31951:6;31946:3;31939:4;31932:5;31928:16;31893:65;:::i;:::-;31983:6;31978:3;31974:16;31967:23;;31716:280;31606:390;;;;:::o;32026:874::-;32129:3;32166:5;32160:12;32195:36;32221:9;32195:36;:::i;:::-;32247:89;32329:6;32324:3;32247:89;:::i;:::-;32240:96;;32367:1;32356:9;32352:17;32383:1;32378:166;;;;32558:1;32553:341;;;;32345:549;;32378:166;32462:4;32458:9;32447;32443:25;32438:3;32431:38;32524:6;32517:14;32510:22;32502:6;32498:35;32493:3;32489:45;32482:52;;32378:166;;32553:341;32620:38;32652:5;32620:38;:::i;:::-;32680:1;32694:154;32708:6;32705:1;32702:13;32694:154;;;32782:7;32776:14;32772:1;32767:3;32763:11;32756:35;32832:1;32823:7;32819:15;32808:26;;32730:4;32727:1;32723:12;32718:17;;32694:154;;;32877:6;32872:3;32868:16;32861:23;;32560:334;;32345:549;;32133:767;;32026:874;;;;:::o;32906:589::-;33131:3;33153:95;33244:3;33235:6;33153:95;:::i;:::-;33146:102;;33265:95;33356:3;33347:6;33265:95;:::i;:::-;33258:102;;33377:92;33465:3;33456:6;33377:92;:::i;:::-;33370:99;;33486:3;33479:10;;32906:589;;;;;;:::o;33501:178::-;33641:30;33637:1;33629:6;33625:14;33618:54;33501:178;:::o;33685:366::-;33827:3;33848:67;33912:2;33907:3;33848:67;:::i;:::-;33841:74;;33924:93;34013:3;33924:93;:::i;:::-;34042:2;34037:3;34033:12;34026:19;;33685:366;;;:::o;34057:419::-;34223:4;34261:2;34250:9;34246:18;34238:26;;34310:9;34304:4;34300:20;34296:1;34285:9;34281:17;34274:47;34338:131;34464:4;34338:131;:::i;:::-;34330:139;;34057:419;;;:::o;34482:220::-;34622:34;34618:1;34610:6;34606:14;34599:58;34691:3;34686:2;34678:6;34674:15;34667:28;34482:220;:::o;34708:366::-;34850:3;34871:67;34935:2;34930:3;34871:67;:::i;:::-;34864:74;;34947:93;35036:3;34947:93;:::i;:::-;35065:2;35060:3;35056:12;35049:19;;34708:366;;;:::o;35080:419::-;35246:4;35284:2;35273:9;35269:18;35261:26;;35333:9;35327:4;35323:20;35319:1;35308:9;35304:17;35297:47;35361:131;35487:4;35361:131;:::i;:::-;35353:139;;35080:419;;;:::o;35505:94::-;35538:8;35586:5;35582:2;35578:14;35557:35;;35505:94;;;:::o;35605:::-;35644:7;35673:20;35687:5;35673:20;:::i;:::-;35662:31;;35605:94;;;:::o;35705:100::-;35744:7;35773:26;35793:5;35773:26;:::i;:::-;35762:37;;35705:100;;;:::o;35811:157::-;35916:45;35936:24;35954:5;35936:24;:::i;:::-;35916:45;:::i;:::-;35911:3;35904:58;35811:157;;:::o;35974:256::-;36086:3;36101:75;36172:3;36163:6;36101:75;:::i;:::-;36201:2;36196:3;36192:12;36185:19;;36221:3;36214:10;;35974:256;;;;:::o;36236:220::-;36376:34;36372:1;36364:6;36360:14;36353:58;36445:3;36440:2;36432:6;36428:15;36421:28;36236:220;:::o;36462:366::-;36604:3;36625:67;36689:2;36684:3;36625:67;:::i;:::-;36618:74;;36701:93;36790:3;36701:93;:::i;:::-;36819:2;36814:3;36810:12;36803:19;;36462:366;;;:::o;36834:419::-;37000:4;37038:2;37027:9;37023:18;37015:26;;37087:9;37081:4;37077:20;37073:1;37062:9;37058:17;37051:47;37115:131;37241:4;37115:131;:::i;:::-;37107:139;;36834:419;;;:::o;37259:225::-;37399:34;37395:1;37387:6;37383:14;37376:58;37468:8;37463:2;37455:6;37451:15;37444:33;37259:225;:::o;37490:366::-;37632:3;37653:67;37717:2;37712:3;37653:67;:::i;:::-;37646:74;;37729:93;37818:3;37729:93;:::i;:::-;37847:2;37842:3;37838:12;37831:19;;37490:366;;;:::o;37862:419::-;38028:4;38066:2;38055:9;38051:18;38043:26;;38115:9;38109:4;38105:20;38101:1;38090:9;38086:17;38079:47;38143:131;38269:4;38143:131;:::i;:::-;38135:139;;37862:419;;;:::o;38287:98::-;38338:6;38372:5;38366:12;38356:22;;38287:98;;;:::o;38391:168::-;38474:11;38508:6;38503:3;38496:19;38548:4;38543:3;38539:14;38524:29;;38391:168;;;;:::o;38565:373::-;38651:3;38679:38;38711:5;38679:38;:::i;:::-;38733:70;38796:6;38791:3;38733:70;:::i;:::-;38726:77;;38812:65;38870:6;38865:3;38858:4;38851:5;38847:16;38812:65;:::i;:::-;38902:29;38924:6;38902:29;:::i;:::-;38897:3;38893:39;38886:46;;38655:283;38565:373;;;;:::o;38944:640::-;39139:4;39177:3;39166:9;39162:19;39154:27;;39191:71;39259:1;39248:9;39244:17;39235:6;39191:71;:::i;:::-;39272:72;39340:2;39329:9;39325:18;39316:6;39272:72;:::i;:::-;39354;39422:2;39411:9;39407:18;39398:6;39354:72;:::i;:::-;39473:9;39467:4;39463:20;39458:2;39447:9;39443:18;39436:48;39501:76;39572:4;39563:6;39501:76;:::i;:::-;39493:84;;38944:640;;;;;;;:::o;39590:141::-;39646:5;39677:6;39671:13;39662:22;;39693:32;39719:5;39693:32;:::i;:::-;39590:141;;;;:::o;39737:349::-;39806:6;39855:2;39843:9;39834:7;39830:23;39826:32;39823:119;;;39861:79;;:::i;:::-;39823:119;39981:1;40006:63;40061:7;40052:6;40041:9;40037:22;40006:63;:::i;:::-;39996:73;;39952:127;39737:349;;;;:::o;40092:180::-;40140:77;40137:1;40130:88;40237:4;40234:1;40227:15;40261:4;40258:1;40251:15;40278:185;40318:1;40335:20;40353:1;40335:20;:::i;:::-;40330:25;;40369:20;40387:1;40369:20;:::i;:::-;40364:25;;40408:1;40398:35;;40413:18;;:::i;:::-;40398:35;40455:1;40452;40448:9;40443:14;;40278:185;;;;:::o;40469:194::-;40509:4;40529:20;40547:1;40529:20;:::i;:::-;40524:25;;40563:20;40581:1;40563:20;:::i;:::-;40558:25;;40607:1;40604;40600:9;40592:17;;40631:1;40625:4;40622:11;40619:37;;;40636:18;;:::i;:::-;40619:37;40469:194;;;;:::o;40669:176::-;40701:1;40718:20;40736:1;40718:20;:::i;:::-;40713:25;;40752:20;40770:1;40752:20;:::i;:::-;40747:25;;40791:1;40781:35;;40796:18;;:::i;:::-;40781:35;40837:1;40834;40830:9;40825:14;;40669:176;;;;:::o
Swarm Source
ipfs://742124a453db74b1ac27350e58889637a6e53b0cbd4bfc23fdfbd1147b17c5cc
Loading...
Loading
Loading...
Loading
[ 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.