Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
134 PUMPkins
Holders
42
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 PUMPkinsLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PUMPkins
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-26 */ // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // 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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: Templates/includes/IReverseRegistrar.sol pragma solidity >=0.8.4; interface IReverseRegistrar { function setDefaultResolver(address resolver) external; function claim(address owner) external returns (bytes32); function claimForAddr( address addr, address owner, address resolver ) external returns (bytes32); function claimWithResolver(address owner, address resolver) external returns (bytes32); function setName(string memory name) external returns (bytes32); function setNameForAddr( address addr, address owner, address resolver, string memory name ) external returns (bytes32); function node(address addr) external pure returns (bytes32); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v4.7.3) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: Templates/includes/ERC721.sol // Creator: Chiru Labs pragma solidity ^0.8.10; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Base URI string private _baseURI; // 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) private _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; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_ ) { require(maxBatchSize_ > 0, "b"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "g"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "b"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("u"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "0"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), "0"); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "t"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("o"); } /** * @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) { require(_exists(tokenId), "z"); 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() public view virtual returns (string memory) { return _baseURI; } /** * @dev Internal function to set the base URI for all token IDs. It is * automatically added as a prefix to the value returned in {tokenURI}, * or to the token ID if {tokenURI} is empty. */ function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "o"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "a" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "a"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "a"); _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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "z" ); } /** * @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 tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "0"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "a"); require(quantity <= maxBatchSize, "m"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "z" ); updatedIndex++; } 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 || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, "a"); require(prevOwnership.addr == from, "o"); require(to != address(0), "0"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, 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)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership(prevOwnership.addr, prevOwnership.startTimestamp); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "q"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > currentIndex - 1) { endIndex = currentIndex - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "n"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership(ownership.addr, ownership.startTimestamp); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("z"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * 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`. */ 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. * * 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` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: Templates/PUMPkins.sol pragma solidity ^0.8.10; contract PUMPkins is ERC721, Ownable { using ECDSA for bytes32; string public PROVENANCE; uint256 public mintPrice; uint256 public maxPossibleSupply; uint256 public allowListMintPrice; uint256 public maxAllowedMints; address public immutable currency; address immutable wrappedNativeCoinAddress; address private signerAddress; bool public paused; address immutable ENSReverseRegistrar = 0x084b1c3C81545d370f3634392De611CaaBFf8148; enum MintStatus { PreMint, AllowList, Public, Finished } MintStatus public mintStatus = MintStatus.PreMint; mapping (address => uint256) totalMintsPerAddress; constructor( string memory _name, string memory _symbol, uint256 _maxPossibleSupply, uint256 _mintPrice, uint256 _allowListMintPrice, uint256 _maxAllowedMints, address _signerAddress, address _currency, address _wrappedNativeCoinAddress ) ERC721(_name, _symbol, _maxAllowedMints) { maxPossibleSupply = _maxPossibleSupply; mintPrice = _mintPrice; allowListMintPrice = _allowListMintPrice; maxAllowedMints = _maxAllowedMints; signerAddress = _signerAddress; currency = _currency; wrappedNativeCoinAddress = _wrappedNativeCoinAddress; } function flipPaused() external onlyOwner { paused = !paused; } function preMint(uint amount) public onlyOwner { require(mintStatus == MintStatus.PreMint, "s"); require(totalSupply() + amount <= maxPossibleSupply, "m"); _safeMint(msg.sender, amount); } function setProvenanceHash(string memory provenanceHash) public onlyOwner { PROVENANCE = provenanceHash; } function setBaseURI(string memory baseURI) public onlyOwner { _setBaseURI(baseURI); } function changeMintStatus(MintStatus _status) external onlyOwner { require(_status != MintStatus.PreMint); mintStatus = _status; } function mintAllowList( bytes32 messageHash, bytes calldata signature, uint amount ) public payable { require(mintStatus == MintStatus.AllowList && !paused, "s"); require(totalSupply() + amount <= maxPossibleSupply, "m"); require(hashMessage(msg.sender, address(this)) == messageHash, "i"); require(verifyAddressSigner(messageHash, signature), "f"); require(totalMintsPerAddress[msg.sender] + amount <= maxAllowedMints, "l"); if (currency == wrappedNativeCoinAddress) { require(allowListMintPrice * amount <= msg.value, "a"); } else { IERC20 _currency = IERC20(currency); _currency.transferFrom(msg.sender, address(this), amount * allowListMintPrice); } totalMintsPerAddress[msg.sender] = totalMintsPerAddress[msg.sender] + amount; _safeMint(msg.sender, amount); } function mintPublic(uint amount) public payable { require(mintStatus == MintStatus.Public && !paused, "s"); require(totalSupply() + amount <= maxPossibleSupply, "m"); require(totalMintsPerAddress[msg.sender] + amount <= maxAllowedMints, "l"); if (currency == wrappedNativeCoinAddress) { require(mintPrice * amount <= msg.value, "a"); } else { IERC20 _currency = IERC20(currency); _currency.transferFrom(msg.sender, address(this), amount * mintPrice); } totalMintsPerAddress[msg.sender] = totalMintsPerAddress[msg.sender] + amount; _safeMint(msg.sender, amount); if (totalSupply() == maxPossibleSupply) { mintStatus = MintStatus.Finished; } } function addReverseENSRecord(string memory name) external onlyOwner{ IReverseRegistrar(ENSReverseRegistrar).setName(name); } receive() external payable { mintPublic(msg.value / mintPrice); } function verifyAddressSigner(bytes32 messageHash, bytes memory signature) private view returns (bool) { return signerAddress == messageHash.toEthSignedMessageHash().recover(signature); } function hashMessage(address sender, address thisContract) public pure returns (bytes32) { return keccak256(abi.encodePacked(sender, thisContract)); } function withdraw() external onlyOwner() { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } function withdrawTokens(address tokenAddress) external onlyOwner() { IERC20(tokenAddress).transfer(msg.sender, IERC20(tokenAddress).balanceOf(address(this))); } function setMintPrice(uint256 _newPrice) public onlyOwner { mintPrice = _newPrice; } function setAllowPrice(uint256 _newPrice) public onlyOwner { allowListMintPrice = _newPrice; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_maxPossibleSupply","type":"uint256"},{"internalType":"uint256","name":"_mintPrice","type":"uint256"},{"internalType":"uint256","name":"_allowListMintPrice","type":"uint256"},{"internalType":"uint256","name":"_maxAllowedMints","type":"uint256"},{"internalType":"address","name":"_signerAddress","type":"address"},{"internalType":"address","name":"_currency","type":"address"},{"internalType":"address","name":"_wrappedNativeCoinAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"addReverseENSRecord","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowListMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum PUMPkins.MintStatus","name":"_status","type":"uint8"}],"name":"changeMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPaused","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":"sender","type":"address"},{"internalType":"address","name":"thisContract","type":"address"}],"name":"hashMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","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":"maxAllowedMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPossibleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"messageHash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintAllowList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintStatus","outputs":[{"internalType":"enum PUMPkins.MintStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setAllowPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
61010060405260008055600060085573084b1c3c81545d370f3634392de611caabff814873ffffffffffffffffffffffffffffffffffffffff1660e09073ffffffffffffffffffffffffffffffffffffffff168152506000600f60156101000a81548160ff021916908360038111156200007e576200007d620002f0565b5b02179055503480156200009057600080fd5b5060405162005f2838038062005f288339818101604052810190620000b6919062000552565b88888560008111620000ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f690620006d0565b60405180910390fd5b826001908162000110919062000933565b50816002908162000122919062000933565b5080608081815250505050506200014e620001426200022260201b60201c565b6200022a60201b60201c565b86600c8190555085600b8190555084600d8190555083600e8190555082600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050505050505050505062000a1a565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000388826200033d565b810181811067ffffffffffffffff82111715620003aa57620003a96200034e565b5b80604052505050565b6000620003bf6200031f565b9050620003cd82826200037d565b919050565b600067ffffffffffffffff821115620003f057620003ef6200034e565b5b620003fb826200033d565b9050602081019050919050565b60005b83811015620004285780820151818401526020810190506200040b565b60008484015250505050565b60006200044b6200044584620003d2565b620003b3565b9050828152602081018484840111156200046a576200046962000338565b5b6200047784828562000408565b509392505050565b600082601f83011262000497576200049662000333565b5b8151620004a984826020860162000434565b91505092915050565b6000819050919050565b620004c781620004b2565b8114620004d357600080fd5b50565b600081519050620004e781620004bc565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200051a82620004ed565b9050919050565b6200052c816200050d565b81146200053857600080fd5b50565b6000815190506200054c8162000521565b92915050565b60008060008060008060008060006101208a8c03121562000578576200057762000329565b5b60008a015167ffffffffffffffff8111156200059957620005986200032e565b5b620005a78c828d016200047f565b99505060208a015167ffffffffffffffff811115620005cb57620005ca6200032e565b5b620005d98c828d016200047f565b9850506040620005ec8c828d01620004d6565b9750506060620005ff8c828d01620004d6565b9650506080620006128c828d01620004d6565b95505060a0620006258c828d01620004d6565b94505060c0620006388c828d016200053b565b93505060e06200064b8c828d016200053b565b9250506101006200065f8c828d016200053b565b9150509295985092959850929598565b600082825260208201905092915050565b7f6200000000000000000000000000000000000000000000000000000000000000600082015250565b6000620006b86001836200066f565b9150620006c58262000680565b602082019050919050565b60006020820190508181036000830152620006eb81620006a9565b9050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200074557607f821691505b6020821081036200075b576200075a620006fd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000786565b620007d1868362000786565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008146200080e6200080884620004b2565b620007e9565b620004b2565b9050919050565b6000819050919050565b6200083083620007f3565b620008486200083f826200081b565b84845462000793565b825550505050565b600090565b6200085f62000850565b6200086c81848462000825565b505050565b5b8181101562000894576200088860008262000855565b60018101905062000872565b5050565b601f821115620008e357620008ad8162000761565b620008b88462000776565b81016020851015620008c8578190505b620008e0620008d78562000776565b83018262000871565b50505b505050565b600082821c905092915050565b60006200090860001984600802620008e8565b1980831691505092915050565b6000620009238383620008f5565b9150826002028217905092915050565b6200093e82620006f2565b67ffffffffffffffff8111156200095a57620009596200034e565b5b6200096682546200072c565b6200097382828562000898565b600060209050601f831160018114620009ab576000841562000996578287015190505b620009a2858262000915565b86555062000a12565b601f198416620009bb8662000761565b60005b82811015620009e557848901518255600182019150602085019450602081019050620009be565b8683101562000a05578489015162000a01601f891682620008f5565b8355505b6001600288020188555050505b505050505050565b60805160a05160c05160e0516154a362000a8560003960006120ed015260008181610b280152611dae015260008181610b5f01528181610bf201528181611de501528181611e78015261218d015260008181612ac301528181612aec015261315401526154a36000f3fe6080604052600436106102555760003560e01c80636c0360eb11610139578063a9cbd06d116100b6578063dfb5259c1161007a578063dfb5259c146108b2578063e5a6b10f146108db578063e985e9c514610906578063efd0cbf914610943578063f2fde38b1461095f578063f4a0a5281461098857610272565b8063a9cbd06d146107dc578063b88d4fde146107f8578063c87b56dd14610821578063cd094fb11461085e578063d7224ba01461088757610272565b80638ad433ac116100fd5780638ad433ac146107095780638da5cb5b1461073257806395d89b411461075d5780639da3f8fd14610788578063a22cb465146107b357610272565b80636c0360eb146106245780636c82054b1461064f57806370a082311461068c578063715018a6146106c95780637cac2602146106e057610272565b80633ccfd60b116101d257806355f804b31161019657806355f804b3146105125780635c975abb1461053b5780636352211e146105665780636373a6b1146105a35780636817c76c146105ce57806368855b64146105f957610272565b80633ccfd60b1461044157806342842e0e1461045857806344fead9e1461048157806349df728c146104ac5780634f6ccce7146104d557610272565b806318160ddd1161021957806318160ddd1461036e57806323b872dd146103995780632f745c59146103c2578063333171bb146103ff578063386b76911461041657610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c578063109695231461034557610272565b3661027257610270600b543461026b91906139c3565b6109b1565b005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613a60565b610d7a565b6040516102ab9190613aa8565b60405180910390f35b3480156102c057600080fd5b506102c9610ec4565b6040516102d69190613b53565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613ba1565b610f56565b6040516103139190613c0f565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613c56565b610fdb565b005b34801561035157600080fd5b5061036c60048036038101906103679190613dcb565b6110f3565b005b34801561037a57600080fd5b5061038361110e565b6040516103909190613e23565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190613e3e565b611117565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190613c56565b611127565b6040516103f69190613e23565b60405180910390f35b34801561040b57600080fd5b50610414611323565b005b34801561042257600080fd5b5061042b611357565b6040516104389190613e23565b60405180910390f35b34801561044d57600080fd5b5061045661135d565b005b34801561046457600080fd5b5061047f600480360381019061047a9190613e3e565b6113b4565b005b34801561048d57600080fd5b506104966113d4565b6040516104a39190613e23565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613e91565b6113da565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613ba1565b6114dd565b6040516105099190613e23565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613dcb565b611530565b005b34801561054757600080fd5b50610550611544565b60405161055d9190613aa8565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190613ba1565b611557565b60405161059a9190613c0f565b60405180910390f35b3480156105af57600080fd5b506105b861156d565b6040516105c59190613b53565b60405180910390f35b3480156105da57600080fd5b506105e36115fb565b6040516105f09190613e23565b60405180910390f35b34801561060557600080fd5b5061060e611601565b60405161061b9190613e23565b60405180910390f35b34801561063057600080fd5b50610639611607565b6040516106469190613b53565b60405180910390f35b34801561065b57600080fd5b5061067660048036038101906106719190613ebe565b611699565b6040516106839190613f17565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190613e91565b6116cc565b6040516106c09190613e23565b60405180910390f35b3480156106d557600080fd5b506106de6117b4565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613f57565b6117c8565b005b34801561071557600080fd5b50610730600480360381019061072b9190613ba1565b61182e565b005b34801561073e57600080fd5b50610747611910565b6040516107549190613c0f565b60405180910390f35b34801561076957600080fd5b5061077261193a565b60405161077f9190613b53565b60405180910390f35b34801561079457600080fd5b5061079d6119cc565b6040516107aa9190613ffb565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190614042565b6119df565b005b6107f660048036038101906107f1919061410e565b611b5f565b005b34801561080457600080fd5b5061081f600480360381019061081a9190614223565b611fc7565b005b34801561082d57600080fd5b5061084860048036038101906108439190613ba1565b612023565b6040516108559190613b53565b60405180910390f35b34801561086a57600080fd5b5061088560048036038101906108809190613ba1565b6120cb565b005b34801561089357600080fd5b5061089c6120dd565b6040516108a99190613e23565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d49190613dcb565b6120e3565b005b3480156108e757600080fd5b506108f061218b565b6040516108fd9190613c0f565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190613ebe565b6121af565b60405161093a9190613aa8565b60405180910390f35b61095d60048036038101906109589190613ba1565b6109b1565b005b34801561096b57600080fd5b5061098660048036038101906109819190613e91565b612243565b005b34801561099457600080fd5b506109af60048036038101906109aa9190613ba1565b6122c6565b005b600260038111156109c5576109c4613f84565b5b600f60159054906101000a900460ff1660038111156109e7576109e6613f84565b5b148015610a015750600f60149054906101000a900460ff16155b610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a37906142f2565b60405180910390fd5b600c5481610a4c61110e565b610a569190614312565b1115610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90614392565b60405180910390fd5b600e5481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae59190614312565b1115610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d906143fe565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603610bee573481600b54610ba8919061441e565b1115610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be0906144ac565b60405180910390fd5b610ca3565b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600b5486610c3f919061441e565b6040518463ffffffff1660e01b8152600401610c5d939291906144cc565b6020604051808303816000875af1158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614518565b50505b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cee9190614312565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d3b33826122d8565b600c54610d4661110e565b03610d77576003600f60156101000a81548160ff02191690836003811115610d7157610d70613f84565b5b02179055505b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e4557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ead57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ebd5750610ebc826122f6565b5b9050919050565b606060018054610ed390614574565b80601f0160208091040260200160405190810160405280929190818152602001828054610eff90614574565b8015610f4c5780601f10610f2157610100808354040283529160200191610f4c565b820191906000526020600020905b815481529060010190602001808311610f2f57829003601f168201915b5050505050905090565b6000610f6182612360565b610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906144ac565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fe682611557565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d906145f1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661107561236d565b73ffffffffffffffffffffffffffffffffffffffff1614806110a457506110a38161109e61236d565b6121af565b5b6110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906144ac565b60405180910390fd5b6110ee838383612375565b505050565b6110fb612427565b80600a908161110a91906147bd565b5050565b60008054905090565b6111228383836124a5565b505050565b6000611132836116cc565b8210611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a906148db565b60405180910390fd5b600061117d61110e565b905060008060005b838110156112e1576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461127757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112cd578684036112be57819550505050505061131d565b83806112c9906148fb565b9450505b5080806112d9906148fb565b915050611185565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113149061498f565b60405180910390fd5b92915050565b61132b612427565b600f60149054906101000a900460ff1615600f60146101000a81548160ff021916908315150217905550565b600c5481565b611365612427565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113b0573d6000803e3d6000fd5b5050565b6113cf83838360405180602001604052806000815250611fc7565b505050565b600e5481565b6113e2612427565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114389190613c0f565b602060405180830381865afa158015611455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147991906149c4565b6040518363ffffffff1660e01b81526004016114969291906149f1565b6020604051808303816000875af11580156114b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d99190614518565b5050565b60006114e761110e565b8210611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90614a66565b60405180910390fd5b819050919050565b611538612427565b61154181612a5c565b50565b600f60149054906101000a900460ff1681565b600061156282612a6f565b600001519050919050565b600a805461157a90614574565b80601f01602080910402602001604051908101604052809291908181526020018280546115a690614574565b80156115f35780601f106115c8576101008083540402835291602001916115f3565b820191906000526020600020905b8154815290600101906020018083116115d657829003601f168201915b505050505081565b600b5481565b600d5481565b60606003805461161690614574565b80601f016020809104026020016040519081016040528092919081815260200182805461164290614574565b801561168f5780601f106116645761010080835404028352916020019161168f565b820191906000526020600020905b81548152906001019060200180831161167257829003601f168201915b5050505050905090565b600082826040516020016116ae929190614ace565b60405160208183030381529060405280519060200120905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614b46565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117bc612427565b6117c66000612c72565b565b6117d0612427565b600060038111156117e4576117e3613f84565b5b8160038111156117f7576117f6613f84565b5b0361180157600080fd5b80600f60156101000a81548160ff0219169083600381111561182657611825613f84565b5b021790555050565b611836612427565b6000600381111561184a57611849613f84565b5b600f60159054906101000a900460ff16600381111561186c5761186b613f84565b5b146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a3906142f2565b60405180910390fd5b600c54816118b861110e565b6118c29190614312565b1115611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90614392565b60405180910390fd5b61190d33826122d8565b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461194990614574565b80601f016020809104026020016040519081016040528092919081815260200182805461197590614574565b80156119c25780601f10611997576101008083540402835291602001916119c2565b820191906000526020600020905b8154815290600101906020018083116119a557829003601f168201915b5050505050905090565b600f60159054906101000a900460ff1681565b6119e761236d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b906144ac565b60405180910390fd5b8060076000611a6161236d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b0e61236d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b539190613aa8565b60405180910390a35050565b60016003811115611b7357611b72613f84565b5b600f60159054906101000a900460ff166003811115611b9557611b94613f84565b5b148015611baf5750600f60149054906101000a900460ff16155b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be5906142f2565b60405180910390fd5b600c5481611bfa61110e565b611c049190614312565b1115611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c90614392565b60405180910390fd5b83611c503330611699565b14611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8790614bb2565b60405180910390fd5b611cde8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612d38565b611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490614c1e565b60405180910390fd5b600e5481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6b9190614312565b1115611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da3906143fe565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603611e74573481600d54611e2e919061441e565b1115611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e66906144ac565b60405180910390fd5b611f29565b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600d5486611ec5919061441e565b6040518463ffffffff1660e01b8152600401611ee3939291906144cc565b6020604051808303816000875af1158015611f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f269190614518565b50505b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f749190614312565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fc133826122d8565b50505050565b611fd28484846124a5565b611fde84848484612dad565b61201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614c8a565b60405180910390fd5b50505050565b606061202e82612360565b61206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614c8a565b60405180910390fd5b60006003805461207c90614574565b90501161209857604051806020016040528060008152506120c4565b60036120a383612f34565b6040516020016120b4929190614d69565b6040516020818303038152906040525b9050919050565b6120d3612427565b80600d8190555050565b60085481565b6120eb612427565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c47f0027826040518263ffffffff1660e01b81526004016121449190613b53565b6020604051808303816000875af1158015612163573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121879190614da2565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61224b612427565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b190614e41565b60405180910390fd5b6122c381612c72565b50565b6122ce612427565b80600b8190555050565b6122f2828260405180602001604052806000815250613094565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61242f61236d565b73ffffffffffffffffffffffffffffffffffffffff1661244d611910565b73ffffffffffffffffffffffffffffffffffffffff16146124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a90614ead565b60405180910390fd5b565b60006124b082612a6f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166124d761236d565b73ffffffffffffffffffffffffffffffffffffffff16148061253357506124fc61236d565b73ffffffffffffffffffffffffffffffffffffffff1661251b84610f56565b73ffffffffffffffffffffffffffffffffffffffff16145b8061254f575061254e826000015161254961236d565b6121af565b5b905080612591576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612588906144ac565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa906145f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614b46565b60405180910390fd5b61267f8585856001613572565b61268f6000848460000151612375565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126fd9190614ee9565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127a19190614f2d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846128a79190614312565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129ec5761291c81612360565b156129eb576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a548686866001613578565b505050505050565b8060039081612a6b91906147bd565b5050565b612a77613921565b612a8082612360565b612abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab690614fbd565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612b235760017f000000000000000000000000000000000000000000000000000000000000000084612b169190614fdd565b612b209190614312565b90505b60008390505b818110612c31576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c1d57809350505050612c6d565b508080612c2990615011565b915050612b29565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c64906145f1565b60405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612d5582612d478561357e565b6135ae90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000612dce8473ffffffffffffffffffffffffffffffffffffffff166135d5565b15612f27578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612df761236d565b8786866040518563ffffffff1660e01b8152600401612e19949392919061508f565b6020604051808303816000875af1925050508015612e5557506040513d601f19601f82011682018060405250810190612e5291906150f0565b60015b612ed7573d8060008114612e85576040519150601f19603f3d011682016040523d82523d6000602084013e612e8a565b606091505b506000815103612ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec690614c8a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f2c565b600190505b949350505050565b606060008203612f7b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061308f565b600082905060005b60008214612fad578080612f96906148fb565b915050600a82612fa691906139c3565b9150612f83565b60008167ffffffffffffffff811115612fc957612fc8613ca0565b5b6040519080825280601f01601f191660200182016040528015612ffb5781602001600182028036833780820191505090505b5090505b60008514613088576001826130149190614fdd565b9150600a85613023919061511d565b603061302f9190614312565b60f81b8183815181106130455761304461514e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561308191906139c3565b9450612fff565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310090614b46565b60405180910390fd5b61311281612360565b15613152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613149906144ac565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156131b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ac90614392565b60405180910390fd5b6131c26000858386613572565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132bf9190614f2d565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132e69190614f2d565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561355557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134f56000888488612dad565b613534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352b90614c8a565b60405180910390fd5b818061353f906148fb565b925050808061354d906148fb565b915050613484565b508060008190555061356a6000878588613578565b505050505050565b50505050565b50505050565b60008160405160200161359191906151ea565b604051602081830303815290604052805190602001209050919050565b60008060006135bd85856135f8565b915091506135ca81613649565b819250505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060418351036136395760008060006020860151925060408601519150606086015160001a905061362d87828585613815565b94509450505050613642565b60006002915091505b9250929050565b6000600481111561365d5761365c613f84565b5b8160048111156136705761366f613f84565b5b0315613812576001600481111561368a57613689613f84565b5b81600481111561369d5761369c613f84565b5b036136dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d49061525c565b60405180910390fd5b600260048111156136f1576136f0613f84565b5b81600481111561370457613703613f84565b5b03613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373b906152c8565b60405180910390fd5b6003600481111561375857613757613f84565b5b81600481111561376b5761376a613f84565b5b036137ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a29061535a565b60405180910390fd5b6004808111156137be576137bd613f84565b5b8160048111156137d1576137d0613f84565b5b03613811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613808906153ec565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613850576000600391509150613918565b601b8560ff16141580156138685750601c8560ff1614155b1561387a576000600491509150613918565b60006001878787876040516000815260200160405260405161389f9493929190615428565b6020604051602081039080840390855afa1580156138c1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361390f57600060019250925050613918565b80600092509250505b94509492505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139ce8261395b565b91506139d98361395b565b9250826139e9576139e8613965565b5b828204905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613a3d81613a08565b8114613a4857600080fd5b50565b600081359050613a5a81613a34565b92915050565b600060208284031215613a7657613a756139fe565b5b6000613a8484828501613a4b565b91505092915050565b60008115159050919050565b613aa281613a8d565b82525050565b6000602082019050613abd6000830184613a99565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613afd578082015181840152602081019050613ae2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b2582613ac3565b613b2f8185613ace565b9350613b3f818560208601613adf565b613b4881613b09565b840191505092915050565b60006020820190508181036000830152613b6d8184613b1a565b905092915050565b613b7e8161395b565b8114613b8957600080fd5b50565b600081359050613b9b81613b75565b92915050565b600060208284031215613bb757613bb66139fe565b5b6000613bc584828501613b8c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bf982613bce565b9050919050565b613c0981613bee565b82525050565b6000602082019050613c246000830184613c00565b92915050565b613c3381613bee565b8114613c3e57600080fd5b50565b600081359050613c5081613c2a565b92915050565b60008060408385031215613c6d57613c6c6139fe565b5b6000613c7b85828601613c41565b9250506020613c8c85828601613b8c565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613cd882613b09565b810181811067ffffffffffffffff82111715613cf757613cf6613ca0565b5b80604052505050565b6000613d0a6139f4565b9050613d168282613ccf565b919050565b600067ffffffffffffffff821115613d3657613d35613ca0565b5b613d3f82613b09565b9050602081019050919050565b82818337600083830152505050565b6000613d6e613d6984613d1b565b613d00565b905082815260208101848484011115613d8a57613d89613c9b565b5b613d95848285613d4c565b509392505050565b600082601f830112613db257613db1613c96565b5b8135613dc2848260208601613d5b565b91505092915050565b600060208284031215613de157613de06139fe565b5b600082013567ffffffffffffffff811115613dff57613dfe613a03565b5b613e0b84828501613d9d565b91505092915050565b613e1d8161395b565b82525050565b6000602082019050613e386000830184613e14565b92915050565b600080600060608486031215613e5757613e566139fe565b5b6000613e6586828701613c41565b9350506020613e7686828701613c41565b9250506040613e8786828701613b8c565b9150509250925092565b600060208284031215613ea757613ea66139fe565b5b6000613eb584828501613c41565b91505092915050565b60008060408385031215613ed557613ed46139fe565b5b6000613ee385828601613c41565b9250506020613ef485828601613c41565b9150509250929050565b6000819050919050565b613f1181613efe565b82525050565b6000602082019050613f2c6000830184613f08565b92915050565b60048110613f3f57600080fd5b50565b600081359050613f5181613f32565b92915050565b600060208284031215613f6d57613f6c6139fe565b5b6000613f7b84828501613f42565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110613fc457613fc3613f84565b5b50565b6000819050613fd582613fb3565b919050565b6000613fe582613fc7565b9050919050565b613ff581613fda565b82525050565b60006020820190506140106000830184613fec565b92915050565b61401f81613a8d565b811461402a57600080fd5b50565b60008135905061403c81614016565b92915050565b60008060408385031215614059576140586139fe565b5b600061406785828601613c41565b92505060206140788582860161402d565b9150509250929050565b61408b81613efe565b811461409657600080fd5b50565b6000813590506140a881614082565b92915050565b600080fd5b600080fd5b60008083601f8401126140ce576140cd613c96565b5b8235905067ffffffffffffffff8111156140eb576140ea6140ae565b5b602083019150836001820283011115614107576141066140b3565b5b9250929050565b60008060008060608587031215614128576141276139fe565b5b600061413687828801614099565b945050602085013567ffffffffffffffff81111561415757614156613a03565b5b614163878288016140b8565b9350935050604061417687828801613b8c565b91505092959194509250565b600067ffffffffffffffff82111561419d5761419c613ca0565b5b6141a682613b09565b9050602081019050919050565b60006141c66141c184614182565b613d00565b9050828152602081018484840111156141e2576141e1613c9b565b5b6141ed848285613d4c565b509392505050565b600082601f83011261420a57614209613c96565b5b813561421a8482602086016141b3565b91505092915050565b6000806000806080858703121561423d5761423c6139fe565b5b600061424b87828801613c41565b945050602061425c87828801613c41565b935050604061426d87828801613b8c565b925050606085013567ffffffffffffffff81111561428e5761428d613a03565b5b61429a878288016141f5565b91505092959194509250565b7f7300000000000000000000000000000000000000000000000000000000000000600082015250565b60006142dc600183613ace565b91506142e7826142a6565b602082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b600061431d8261395b565b91506143288361395b565b92508282019050808211156143405761433f613994565b5b92915050565b7f6d00000000000000000000000000000000000000000000000000000000000000600082015250565b600061437c600183613ace565b915061438782614346565b602082019050919050565b600060208201905081810360008301526143ab8161436f565b9050919050565b7f6c00000000000000000000000000000000000000000000000000000000000000600082015250565b60006143e8600183613ace565b91506143f3826143b2565b602082019050919050565b60006020820190508181036000830152614417816143db565b9050919050565b60006144298261395b565b91506144348361395b565b92508282026144428161395b565b9150828204841483151761445957614458613994565b5b5092915050565b7f6100000000000000000000000000000000000000000000000000000000000000600082015250565b6000614496600183613ace565b91506144a182614460565b602082019050919050565b600060208201905081810360008301526144c581614489565b9050919050565b60006060820190506144e16000830186613c00565b6144ee6020830185613c00565b6144fb6040830184613e14565b949350505050565b60008151905061451281614016565b92915050565b60006020828403121561452e5761452d6139fe565b5b600061453c84828501614503565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061458c57607f821691505b60208210810361459f5761459e614545565b5b50919050565b7f6f00000000000000000000000000000000000000000000000000000000000000600082015250565b60006145db600183613ace565b91506145e6826145a5565b602082019050919050565b6000602082019050818103600083015261460a816145ce565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026146737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614636565b61467d8683614636565b95508019841693508086168417925050509392505050565b6000819050919050565b60006146ba6146b56146b08461395b565b614695565b61395b565b9050919050565b6000819050919050565b6146d48361469f565b6146e86146e0826146c1565b848454614643565b825550505050565b600090565b6146fd6146f0565b6147088184846146cb565b505050565b5b8181101561472c576147216000826146f5565b60018101905061470e565b5050565b601f8211156147715761474281614611565b61474b84614626565b8101602085101561475a578190505b61476e61476685614626565b83018261470d565b50505b505050565b600082821c905092915050565b600061479460001984600802614776565b1980831691505092915050565b60006147ad8383614783565b9150826002028217905092915050565b6147c682613ac3565b67ffffffffffffffff8111156147df576147de613ca0565b5b6147e98254614574565b6147f4828285614730565b600060209050601f8311600181146148275760008415614815578287015190505b61481f85826147a1565b865550614887565b601f19841661483586614611565b60005b8281101561485d57848901518255600182019150602085019450602081019050614838565b8683101561487a5784890151614876601f891682614783565b8355505b6001600288020188555050505b505050505050565b7f6200000000000000000000000000000000000000000000000000000000000000600082015250565b60006148c5600183613ace565b91506148d08261488f565b602082019050919050565b600060208201905081810360008301526148f4816148b8565b9050919050565b60006149068261395b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361493857614937613994565b5b600182019050919050565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b6000614979600183613ace565b915061498482614943565b602082019050919050565b600060208201905081810360008301526149a88161496c565b9050919050565b6000815190506149be81613b75565b92915050565b6000602082840312156149da576149d96139fe565b5b60006149e8848285016149af565b91505092915050565b6000604082019050614a066000830185613c00565b614a136020830184613e14565b9392505050565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a50600183613ace565b9150614a5b82614a1a565b602082019050919050565b60006020820190508181036000830152614a7f81614a43565b9050919050565b60008160601b9050919050565b6000614a9e82614a86565b9050919050565b6000614ab082614a93565b9050919050565b614ac8614ac382613bee565b614aa5565b82525050565b6000614ada8285614ab7565b601482019150614aea8284614ab7565b6014820191508190509392505050565b7f3000000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b30600183613ace565b9150614b3b82614afa565b602082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b7f6900000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b9c600183613ace565b9150614ba782614b66565b602082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f6600000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c08600183613ace565b9150614c1382614bd2565b602082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f7a00000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c74600183613ace565b9150614c7f82614c3e565b602082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b600081905092915050565b60008154614cc281614574565b614ccc8186614caa565b94506001821660008114614ce75760018114614cfc57614d2f565b60ff1983168652811515820286019350614d2f565b614d0585614611565b60005b83811015614d2757815481890152600182019150602081019050614d08565b838801955050505b50505092915050565b6000614d4382613ac3565b614d4d8185614caa565b9350614d5d818560208601613adf565b80840191505092915050565b6000614d758285614cb5565b9150614d818284614d38565b91508190509392505050565b600081519050614d9c81614082565b92915050565b600060208284031215614db857614db76139fe565b5b6000614dc684828501614d8d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e2b602683613ace565b9150614e3682614dcf565b604082019050919050565b60006020820190508181036000830152614e5a81614e1e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e97602083613ace565b9150614ea282614e61565b602082019050919050565b60006020820190508181036000830152614ec681614e8a565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000614ef482614ecd565b9150614eff83614ecd565b925082820390506fffffffffffffffffffffffffffffffff811115614f2757614f26613994565b5b92915050565b6000614f3882614ecd565b9150614f4383614ecd565b925082820190506fffffffffffffffffffffffffffffffff811115614f6b57614f6a613994565b5b92915050565b7f7400000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fa7600183613ace565b9150614fb282614f71565b602082019050919050565b60006020820190508181036000830152614fd681614f9a565b9050919050565b6000614fe88261395b565b9150614ff38361395b565b925082820390508181111561500b5761500a613994565b5b92915050565b600061501c8261395b565b91506000820361502f5761502e613994565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006150618261503a565b61506b8185615045565b935061507b818560208601613adf565b61508481613b09565b840191505092915050565b60006080820190506150a46000830187613c00565b6150b16020830186613c00565b6150be6040830185613e14565b81810360608301526150d08184615056565b905095945050505050565b6000815190506150ea81613a34565b92915050565b600060208284031215615106576151056139fe565b5b6000615114848285016150db565b91505092915050565b60006151288261395b565b91506151338361395b565b92508261514357615142613965565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006151b3601c83614caa565b91506151be8261517d565b601c82019050919050565b6000819050919050565b6151e46151df82613efe565b6151c9565b82525050565b60006151f5826151a6565b915061520182846151d3565b60208201915081905092915050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615246601883613ace565b915061525182615210565b602082019050919050565b6000602082019050818103600083015261527581615239565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006152b2601f83613ace565b91506152bd8261527c565b602082019050919050565b600060208201905081810360008301526152e1816152a5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615344602283613ace565b915061534f826152e8565b604082019050919050565b6000602082019050818103600083015261537381615337565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006153d6602283613ace565b91506153e18261537a565b604082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b600060ff82169050919050565b6154228161540c565b82525050565b600060808201905061543d6000830187613f08565b61544a6020830186615419565b6154576040830185613f08565b6154646060830184613f08565b9594505050505056fea2646970667358221220ae3119776cb9963b2965ef18968613a0a3dd1dd8e285c3a7a1c129600707a40f64736f6c6343000811003300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000089a0000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000000000000000019000000000000000000000000a5823bc070739ccaada3a9ed3215a7ef660ab3f4000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000001b50554d506b696e73206279204d696e744d616368696e652e4172740000000000000000000000000000000000000000000000000000000000000000000000000850554d506b696e73000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102555760003560e01c80636c0360eb11610139578063a9cbd06d116100b6578063dfb5259c1161007a578063dfb5259c146108b2578063e5a6b10f146108db578063e985e9c514610906578063efd0cbf914610943578063f2fde38b1461095f578063f4a0a5281461098857610272565b8063a9cbd06d146107dc578063b88d4fde146107f8578063c87b56dd14610821578063cd094fb11461085e578063d7224ba01461088757610272565b80638ad433ac116100fd5780638ad433ac146107095780638da5cb5b1461073257806395d89b411461075d5780639da3f8fd14610788578063a22cb465146107b357610272565b80636c0360eb146106245780636c82054b1461064f57806370a082311461068c578063715018a6146106c95780637cac2602146106e057610272565b80633ccfd60b116101d257806355f804b31161019657806355f804b3146105125780635c975abb1461053b5780636352211e146105665780636373a6b1146105a35780636817c76c146105ce57806368855b64146105f957610272565b80633ccfd60b1461044157806342842e0e1461045857806344fead9e1461048157806349df728c146104ac5780634f6ccce7146104d557610272565b806318160ddd1161021957806318160ddd1461036e57806323b872dd146103995780632f745c59146103c2578063333171bb146103ff578063386b76911461041657610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c578063109695231461034557610272565b3661027257610270600b543461026b91906139c3565b6109b1565b005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613a60565b610d7a565b6040516102ab9190613aa8565b60405180910390f35b3480156102c057600080fd5b506102c9610ec4565b6040516102d69190613b53565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613ba1565b610f56565b6040516103139190613c0f565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613c56565b610fdb565b005b34801561035157600080fd5b5061036c60048036038101906103679190613dcb565b6110f3565b005b34801561037a57600080fd5b5061038361110e565b6040516103909190613e23565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190613e3e565b611117565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190613c56565b611127565b6040516103f69190613e23565b60405180910390f35b34801561040b57600080fd5b50610414611323565b005b34801561042257600080fd5b5061042b611357565b6040516104389190613e23565b60405180910390f35b34801561044d57600080fd5b5061045661135d565b005b34801561046457600080fd5b5061047f600480360381019061047a9190613e3e565b6113b4565b005b34801561048d57600080fd5b506104966113d4565b6040516104a39190613e23565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613e91565b6113da565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613ba1565b6114dd565b6040516105099190613e23565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613dcb565b611530565b005b34801561054757600080fd5b50610550611544565b60405161055d9190613aa8565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190613ba1565b611557565b60405161059a9190613c0f565b60405180910390f35b3480156105af57600080fd5b506105b861156d565b6040516105c59190613b53565b60405180910390f35b3480156105da57600080fd5b506105e36115fb565b6040516105f09190613e23565b60405180910390f35b34801561060557600080fd5b5061060e611601565b60405161061b9190613e23565b60405180910390f35b34801561063057600080fd5b50610639611607565b6040516106469190613b53565b60405180910390f35b34801561065b57600080fd5b5061067660048036038101906106719190613ebe565b611699565b6040516106839190613f17565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190613e91565b6116cc565b6040516106c09190613e23565b60405180910390f35b3480156106d557600080fd5b506106de6117b4565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613f57565b6117c8565b005b34801561071557600080fd5b50610730600480360381019061072b9190613ba1565b61182e565b005b34801561073e57600080fd5b50610747611910565b6040516107549190613c0f565b60405180910390f35b34801561076957600080fd5b5061077261193a565b60405161077f9190613b53565b60405180910390f35b34801561079457600080fd5b5061079d6119cc565b6040516107aa9190613ffb565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190614042565b6119df565b005b6107f660048036038101906107f1919061410e565b611b5f565b005b34801561080457600080fd5b5061081f600480360381019061081a9190614223565b611fc7565b005b34801561082d57600080fd5b5061084860048036038101906108439190613ba1565b612023565b6040516108559190613b53565b60405180910390f35b34801561086a57600080fd5b5061088560048036038101906108809190613ba1565b6120cb565b005b34801561089357600080fd5b5061089c6120dd565b6040516108a99190613e23565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d49190613dcb565b6120e3565b005b3480156108e757600080fd5b506108f061218b565b6040516108fd9190613c0f565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190613ebe565b6121af565b60405161093a9190613aa8565b60405180910390f35b61095d60048036038101906109589190613ba1565b6109b1565b005b34801561096b57600080fd5b5061098660048036038101906109819190613e91565b612243565b005b34801561099457600080fd5b506109af60048036038101906109aa9190613ba1565b6122c6565b005b600260038111156109c5576109c4613f84565b5b600f60159054906101000a900460ff1660038111156109e7576109e6613f84565b5b148015610a015750600f60149054906101000a900460ff16155b610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a37906142f2565b60405180910390fd5b600c5481610a4c61110e565b610a569190614312565b1115610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90614392565b60405180910390fd5b600e5481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae59190614312565b1115610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d906143fe565b60405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1603610bee573481600b54610ba8919061441e565b1115610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be0906144ac565b60405180910390fd5b610ca3565b60007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600b5486610c3f919061441e565b6040518463ffffffff1660e01b8152600401610c5d939291906144cc565b6020604051808303816000875af1158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614518565b50505b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cee9190614312565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d3b33826122d8565b600c54610d4661110e565b03610d77576003600f60156101000a81548160ff02191690836003811115610d7157610d70613f84565b5b02179055505b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e4557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ead57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ebd5750610ebc826122f6565b5b9050919050565b606060018054610ed390614574565b80601f0160208091040260200160405190810160405280929190818152602001828054610eff90614574565b8015610f4c5780601f10610f2157610100808354040283529160200191610f4c565b820191906000526020600020905b815481529060010190602001808311610f2f57829003601f168201915b5050505050905090565b6000610f6182612360565b610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906144ac565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fe682611557565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d906145f1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661107561236d565b73ffffffffffffffffffffffffffffffffffffffff1614806110a457506110a38161109e61236d565b6121af565b5b6110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906144ac565b60405180910390fd5b6110ee838383612375565b505050565b6110fb612427565b80600a908161110a91906147bd565b5050565b60008054905090565b6111228383836124a5565b505050565b6000611132836116cc565b8210611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a906148db565b60405180910390fd5b600061117d61110e565b905060008060005b838110156112e1576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461127757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112cd578684036112be57819550505050505061131d565b83806112c9906148fb565b9450505b5080806112d9906148fb565b915050611185565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113149061498f565b60405180910390fd5b92915050565b61132b612427565b600f60149054906101000a900460ff1615600f60146101000a81548160ff021916908315150217905550565b600c5481565b611365612427565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113b0573d6000803e3d6000fd5b5050565b6113cf83838360405180602001604052806000815250611fc7565b505050565b600e5481565b6113e2612427565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114389190613c0f565b602060405180830381865afa158015611455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147991906149c4565b6040518363ffffffff1660e01b81526004016114969291906149f1565b6020604051808303816000875af11580156114b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d99190614518565b5050565b60006114e761110e565b8210611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90614a66565b60405180910390fd5b819050919050565b611538612427565b61154181612a5c565b50565b600f60149054906101000a900460ff1681565b600061156282612a6f565b600001519050919050565b600a805461157a90614574565b80601f01602080910402602001604051908101604052809291908181526020018280546115a690614574565b80156115f35780601f106115c8576101008083540402835291602001916115f3565b820191906000526020600020905b8154815290600101906020018083116115d657829003601f168201915b505050505081565b600b5481565b600d5481565b60606003805461161690614574565b80601f016020809104026020016040519081016040528092919081815260200182805461164290614574565b801561168f5780601f106116645761010080835404028352916020019161168f565b820191906000526020600020905b81548152906001019060200180831161167257829003601f168201915b5050505050905090565b600082826040516020016116ae929190614ace565b60405160208183030381529060405280519060200120905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614b46565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117bc612427565b6117c66000612c72565b565b6117d0612427565b600060038111156117e4576117e3613f84565b5b8160038111156117f7576117f6613f84565b5b0361180157600080fd5b80600f60156101000a81548160ff0219169083600381111561182657611825613f84565b5b021790555050565b611836612427565b6000600381111561184a57611849613f84565b5b600f60159054906101000a900460ff16600381111561186c5761186b613f84565b5b146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a3906142f2565b60405180910390fd5b600c54816118b861110e565b6118c29190614312565b1115611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90614392565b60405180910390fd5b61190d33826122d8565b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461194990614574565b80601f016020809104026020016040519081016040528092919081815260200182805461197590614574565b80156119c25780601f10611997576101008083540402835291602001916119c2565b820191906000526020600020905b8154815290600101906020018083116119a557829003601f168201915b5050505050905090565b600f60159054906101000a900460ff1681565b6119e761236d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b906144ac565b60405180910390fd5b8060076000611a6161236d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b0e61236d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b539190613aa8565b60405180910390a35050565b60016003811115611b7357611b72613f84565b5b600f60159054906101000a900460ff166003811115611b9557611b94613f84565b5b148015611baf5750600f60149054906101000a900460ff16155b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be5906142f2565b60405180910390fd5b600c5481611bfa61110e565b611c049190614312565b1115611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c90614392565b60405180910390fd5b83611c503330611699565b14611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8790614bb2565b60405180910390fd5b611cde8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612d38565b611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490614c1e565b60405180910390fd5b600e5481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6b9190614312565b1115611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da3906143fe565b60405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1603611e74573481600d54611e2e919061441e565b1115611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e66906144ac565b60405180910390fd5b611f29565b60007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600d5486611ec5919061441e565b6040518463ffffffff1660e01b8152600401611ee3939291906144cc565b6020604051808303816000875af1158015611f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f269190614518565b50505b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f749190614312565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fc133826122d8565b50505050565b611fd28484846124a5565b611fde84848484612dad565b61201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614c8a565b60405180910390fd5b50505050565b606061202e82612360565b61206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614c8a565b60405180910390fd5b60006003805461207c90614574565b90501161209857604051806020016040528060008152506120c4565b60036120a383612f34565b6040516020016120b4929190614d69565b6040516020818303038152906040525b9050919050565b6120d3612427565b80600d8190555050565b60085481565b6120eb612427565b7f000000000000000000000000084b1c3c81545d370f3634392de611caabff814873ffffffffffffffffffffffffffffffffffffffff1663c47f0027826040518263ffffffff1660e01b81526004016121449190613b53565b6020604051808303816000875af1158015612163573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121879190614da2565b5050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61224b612427565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b190614e41565b60405180910390fd5b6122c381612c72565b50565b6122ce612427565b80600b8190555050565b6122f2828260405180602001604052806000815250613094565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61242f61236d565b73ffffffffffffffffffffffffffffffffffffffff1661244d611910565b73ffffffffffffffffffffffffffffffffffffffff16146124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a90614ead565b60405180910390fd5b565b60006124b082612a6f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166124d761236d565b73ffffffffffffffffffffffffffffffffffffffff16148061253357506124fc61236d565b73ffffffffffffffffffffffffffffffffffffffff1661251b84610f56565b73ffffffffffffffffffffffffffffffffffffffff16145b8061254f575061254e826000015161254961236d565b6121af565b5b905080612591576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612588906144ac565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa906145f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614b46565b60405180910390fd5b61267f8585856001613572565b61268f6000848460000151612375565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126fd9190614ee9565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166127a19190614f2d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846128a79190614312565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129ec5761291c81612360565b156129eb576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a548686866001613578565b505050505050565b8060039081612a6b91906147bd565b5050565b612a77613921565b612a8082612360565b612abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab690614fbd565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000198310612b235760017f000000000000000000000000000000000000000000000000000000000000001984612b169190614fdd565b612b209190614312565b90505b60008390505b818110612c31576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c1d57809350505050612c6d565b508080612c2990615011565b915050612b29565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c64906145f1565b60405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612d5582612d478561357e565b6135ae90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000612dce8473ffffffffffffffffffffffffffffffffffffffff166135d5565b15612f27578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612df761236d565b8786866040518563ffffffff1660e01b8152600401612e19949392919061508f565b6020604051808303816000875af1925050508015612e5557506040513d601f19601f82011682018060405250810190612e5291906150f0565b60015b612ed7573d8060008114612e85576040519150601f19603f3d011682016040523d82523d6000602084013e612e8a565b606091505b506000815103612ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec690614c8a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f2c565b600190505b949350505050565b606060008203612f7b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061308f565b600082905060005b60008214612fad578080612f96906148fb565b915050600a82612fa691906139c3565b9150612f83565b60008167ffffffffffffffff811115612fc957612fc8613ca0565b5b6040519080825280601f01601f191660200182016040528015612ffb5781602001600182028036833780820191505090505b5090505b60008514613088576001826130149190614fdd565b9150600a85613023919061511d565b603061302f9190614312565b60f81b8183815181106130455761304461514e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561308191906139c3565b9450612fff565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310090614b46565b60405180910390fd5b61311281612360565b15613152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613149906144ac565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000198311156131b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ac90614392565b60405180910390fd5b6131c26000858386613572565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132bf9190614f2d565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132e69190614f2d565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561355557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134f56000888488612dad565b613534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352b90614c8a565b60405180910390fd5b818061353f906148fb565b925050808061354d906148fb565b915050613484565b508060008190555061356a6000878588613578565b505050505050565b50505050565b50505050565b60008160405160200161359191906151ea565b604051602081830303815290604052805190602001209050919050565b60008060006135bd85856135f8565b915091506135ca81613649565b819250505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060418351036136395760008060006020860151925060408601519150606086015160001a905061362d87828585613815565b94509450505050613642565b60006002915091505b9250929050565b6000600481111561365d5761365c613f84565b5b8160048111156136705761366f613f84565b5b0315613812576001600481111561368a57613689613f84565b5b81600481111561369d5761369c613f84565b5b036136dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d49061525c565b60405180910390fd5b600260048111156136f1576136f0613f84565b5b81600481111561370457613703613f84565b5b03613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373b906152c8565b60405180910390fd5b6003600481111561375857613757613f84565b5b81600481111561376b5761376a613f84565b5b036137ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a29061535a565b60405180910390fd5b6004808111156137be576137bd613f84565b5b8160048111156137d1576137d0613f84565b5b03613811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613808906153ec565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613850576000600391509150613918565b601b8560ff16141580156138685750601c8560ff1614155b1561387a576000600491509150613918565b60006001878787876040516000815260200160405260405161389f9493929190615428565b6020604051602081039080840390855afa1580156138c1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361390f57600060019250925050613918565b80600092509250505b94509492505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139ce8261395b565b91506139d98361395b565b9250826139e9576139e8613965565b5b828204905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613a3d81613a08565b8114613a4857600080fd5b50565b600081359050613a5a81613a34565b92915050565b600060208284031215613a7657613a756139fe565b5b6000613a8484828501613a4b565b91505092915050565b60008115159050919050565b613aa281613a8d565b82525050565b6000602082019050613abd6000830184613a99565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613afd578082015181840152602081019050613ae2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b2582613ac3565b613b2f8185613ace565b9350613b3f818560208601613adf565b613b4881613b09565b840191505092915050565b60006020820190508181036000830152613b6d8184613b1a565b905092915050565b613b7e8161395b565b8114613b8957600080fd5b50565b600081359050613b9b81613b75565b92915050565b600060208284031215613bb757613bb66139fe565b5b6000613bc584828501613b8c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bf982613bce565b9050919050565b613c0981613bee565b82525050565b6000602082019050613c246000830184613c00565b92915050565b613c3381613bee565b8114613c3e57600080fd5b50565b600081359050613c5081613c2a565b92915050565b60008060408385031215613c6d57613c6c6139fe565b5b6000613c7b85828601613c41565b9250506020613c8c85828601613b8c565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613cd882613b09565b810181811067ffffffffffffffff82111715613cf757613cf6613ca0565b5b80604052505050565b6000613d0a6139f4565b9050613d168282613ccf565b919050565b600067ffffffffffffffff821115613d3657613d35613ca0565b5b613d3f82613b09565b9050602081019050919050565b82818337600083830152505050565b6000613d6e613d6984613d1b565b613d00565b905082815260208101848484011115613d8a57613d89613c9b565b5b613d95848285613d4c565b509392505050565b600082601f830112613db257613db1613c96565b5b8135613dc2848260208601613d5b565b91505092915050565b600060208284031215613de157613de06139fe565b5b600082013567ffffffffffffffff811115613dff57613dfe613a03565b5b613e0b84828501613d9d565b91505092915050565b613e1d8161395b565b82525050565b6000602082019050613e386000830184613e14565b92915050565b600080600060608486031215613e5757613e566139fe565b5b6000613e6586828701613c41565b9350506020613e7686828701613c41565b9250506040613e8786828701613b8c565b9150509250925092565b600060208284031215613ea757613ea66139fe565b5b6000613eb584828501613c41565b91505092915050565b60008060408385031215613ed557613ed46139fe565b5b6000613ee385828601613c41565b9250506020613ef485828601613c41565b9150509250929050565b6000819050919050565b613f1181613efe565b82525050565b6000602082019050613f2c6000830184613f08565b92915050565b60048110613f3f57600080fd5b50565b600081359050613f5181613f32565b92915050565b600060208284031215613f6d57613f6c6139fe565b5b6000613f7b84828501613f42565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110613fc457613fc3613f84565b5b50565b6000819050613fd582613fb3565b919050565b6000613fe582613fc7565b9050919050565b613ff581613fda565b82525050565b60006020820190506140106000830184613fec565b92915050565b61401f81613a8d565b811461402a57600080fd5b50565b60008135905061403c81614016565b92915050565b60008060408385031215614059576140586139fe565b5b600061406785828601613c41565b92505060206140788582860161402d565b9150509250929050565b61408b81613efe565b811461409657600080fd5b50565b6000813590506140a881614082565b92915050565b600080fd5b600080fd5b60008083601f8401126140ce576140cd613c96565b5b8235905067ffffffffffffffff8111156140eb576140ea6140ae565b5b602083019150836001820283011115614107576141066140b3565b5b9250929050565b60008060008060608587031215614128576141276139fe565b5b600061413687828801614099565b945050602085013567ffffffffffffffff81111561415757614156613a03565b5b614163878288016140b8565b9350935050604061417687828801613b8c565b91505092959194509250565b600067ffffffffffffffff82111561419d5761419c613ca0565b5b6141a682613b09565b9050602081019050919050565b60006141c66141c184614182565b613d00565b9050828152602081018484840111156141e2576141e1613c9b565b5b6141ed848285613d4c565b509392505050565b600082601f83011261420a57614209613c96565b5b813561421a8482602086016141b3565b91505092915050565b6000806000806080858703121561423d5761423c6139fe565b5b600061424b87828801613c41565b945050602061425c87828801613c41565b935050604061426d87828801613b8c565b925050606085013567ffffffffffffffff81111561428e5761428d613a03565b5b61429a878288016141f5565b91505092959194509250565b7f7300000000000000000000000000000000000000000000000000000000000000600082015250565b60006142dc600183613ace565b91506142e7826142a6565b602082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b600061431d8261395b565b91506143288361395b565b92508282019050808211156143405761433f613994565b5b92915050565b7f6d00000000000000000000000000000000000000000000000000000000000000600082015250565b600061437c600183613ace565b915061438782614346565b602082019050919050565b600060208201905081810360008301526143ab8161436f565b9050919050565b7f6c00000000000000000000000000000000000000000000000000000000000000600082015250565b60006143e8600183613ace565b91506143f3826143b2565b602082019050919050565b60006020820190508181036000830152614417816143db565b9050919050565b60006144298261395b565b91506144348361395b565b92508282026144428161395b565b9150828204841483151761445957614458613994565b5b5092915050565b7f6100000000000000000000000000000000000000000000000000000000000000600082015250565b6000614496600183613ace565b91506144a182614460565b602082019050919050565b600060208201905081810360008301526144c581614489565b9050919050565b60006060820190506144e16000830186613c00565b6144ee6020830185613c00565b6144fb6040830184613e14565b949350505050565b60008151905061451281614016565b92915050565b60006020828403121561452e5761452d6139fe565b5b600061453c84828501614503565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061458c57607f821691505b60208210810361459f5761459e614545565b5b50919050565b7f6f00000000000000000000000000000000000000000000000000000000000000600082015250565b60006145db600183613ace565b91506145e6826145a5565b602082019050919050565b6000602082019050818103600083015261460a816145ce565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026146737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614636565b61467d8683614636565b95508019841693508086168417925050509392505050565b6000819050919050565b60006146ba6146b56146b08461395b565b614695565b61395b565b9050919050565b6000819050919050565b6146d48361469f565b6146e86146e0826146c1565b848454614643565b825550505050565b600090565b6146fd6146f0565b6147088184846146cb565b505050565b5b8181101561472c576147216000826146f5565b60018101905061470e565b5050565b601f8211156147715761474281614611565b61474b84614626565b8101602085101561475a578190505b61476e61476685614626565b83018261470d565b50505b505050565b600082821c905092915050565b600061479460001984600802614776565b1980831691505092915050565b60006147ad8383614783565b9150826002028217905092915050565b6147c682613ac3565b67ffffffffffffffff8111156147df576147de613ca0565b5b6147e98254614574565b6147f4828285614730565b600060209050601f8311600181146148275760008415614815578287015190505b61481f85826147a1565b865550614887565b601f19841661483586614611565b60005b8281101561485d57848901518255600182019150602085019450602081019050614838565b8683101561487a5784890151614876601f891682614783565b8355505b6001600288020188555050505b505050505050565b7f6200000000000000000000000000000000000000000000000000000000000000600082015250565b60006148c5600183613ace565b91506148d08261488f565b602082019050919050565b600060208201905081810360008301526148f4816148b8565b9050919050565b60006149068261395b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361493857614937613994565b5b600182019050919050565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b6000614979600183613ace565b915061498482614943565b602082019050919050565b600060208201905081810360008301526149a88161496c565b9050919050565b6000815190506149be81613b75565b92915050565b6000602082840312156149da576149d96139fe565b5b60006149e8848285016149af565b91505092915050565b6000604082019050614a066000830185613c00565b614a136020830184613e14565b9392505050565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a50600183613ace565b9150614a5b82614a1a565b602082019050919050565b60006020820190508181036000830152614a7f81614a43565b9050919050565b60008160601b9050919050565b6000614a9e82614a86565b9050919050565b6000614ab082614a93565b9050919050565b614ac8614ac382613bee565b614aa5565b82525050565b6000614ada8285614ab7565b601482019150614aea8284614ab7565b6014820191508190509392505050565b7f3000000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b30600183613ace565b9150614b3b82614afa565b602082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b7f6900000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b9c600183613ace565b9150614ba782614b66565b602082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f6600000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c08600183613ace565b9150614c1382614bd2565b602082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f7a00000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c74600183613ace565b9150614c7f82614c3e565b602082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b600081905092915050565b60008154614cc281614574565b614ccc8186614caa565b94506001821660008114614ce75760018114614cfc57614d2f565b60ff1983168652811515820286019350614d2f565b614d0585614611565b60005b83811015614d2757815481890152600182019150602081019050614d08565b838801955050505b50505092915050565b6000614d4382613ac3565b614d4d8185614caa565b9350614d5d818560208601613adf565b80840191505092915050565b6000614d758285614cb5565b9150614d818284614d38565b91508190509392505050565b600081519050614d9c81614082565b92915050565b600060208284031215614db857614db76139fe565b5b6000614dc684828501614d8d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e2b602683613ace565b9150614e3682614dcf565b604082019050919050565b60006020820190508181036000830152614e5a81614e1e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e97602083613ace565b9150614ea282614e61565b602082019050919050565b60006020820190508181036000830152614ec681614e8a565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000614ef482614ecd565b9150614eff83614ecd565b925082820390506fffffffffffffffffffffffffffffffff811115614f2757614f26613994565b5b92915050565b6000614f3882614ecd565b9150614f4383614ecd565b925082820190506fffffffffffffffffffffffffffffffff811115614f6b57614f6a613994565b5b92915050565b7f7400000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fa7600183613ace565b9150614fb282614f71565b602082019050919050565b60006020820190508181036000830152614fd681614f9a565b9050919050565b6000614fe88261395b565b9150614ff38361395b565b925082820390508181111561500b5761500a613994565b5b92915050565b600061501c8261395b565b91506000820361502f5761502e613994565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006150618261503a565b61506b8185615045565b935061507b818560208601613adf565b61508481613b09565b840191505092915050565b60006080820190506150a46000830187613c00565b6150b16020830186613c00565b6150be6040830185613e14565b81810360608301526150d08184615056565b905095945050505050565b6000815190506150ea81613a34565b92915050565b600060208284031215615106576151056139fe565b5b6000615114848285016150db565b91505092915050565b60006151288261395b565b91506151338361395b565b92508261514357615142613965565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006151b3601c83614caa565b91506151be8261517d565b601c82019050919050565b6000819050919050565b6151e46151df82613efe565b6151c9565b82525050565b60006151f5826151a6565b915061520182846151d3565b60208201915081905092915050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615246601883613ace565b915061525182615210565b602082019050919050565b6000602082019050818103600083015261527581615239565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006152b2601f83613ace565b91506152bd8261527c565b602082019050919050565b600060208201905081810360008301526152e1816152a5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615344602283613ace565b915061534f826152e8565b604082019050919050565b6000602082019050818103600083015261537381615337565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006153d6602283613ace565b91506153e18261537a565b604082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b600060ff82169050919050565b6154228161540c565b82525050565b600060808201905061543d6000830187613f08565b61544a6020830186615419565b6154576040830185613f08565b6154646060830184613f08565b9594505050505056fea2646970667358221220ae3119776cb9963b2965ef18968613a0a3dd1dd8e285c3a7a1c129600707a40f64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000089a0000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000000000000000019000000000000000000000000a5823bc070739ccaada3a9ed3215a7ef660ab3f4000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000001b50554d506b696e73206279204d696e744d616368696e652e4172740000000000000000000000000000000000000000000000000000000000000000000000000850554d506b696e73000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): PUMPkins by MintMachine.Art
Arg [1] : _symbol (string): PUMPkins
Arg [2] : _maxPossibleSupply (uint256): 2202
Arg [3] : _mintPrice (uint256): 5000000000000000
Arg [4] : _allowListMintPrice (uint256): 5000000000000000
Arg [5] : _maxAllowedMints (uint256): 25
Arg [6] : _signerAddress (address): 0xa5823bc070739ccAada3A9eD3215A7eF660ab3f4
Arg [7] : _currency (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [8] : _wrappedNativeCoinAddress (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 000000000000000000000000000000000000000000000000000000000000089a
Arg [3] : 0000000000000000000000000000000000000000000000000011c37937e08000
Arg [4] : 0000000000000000000000000000000000000000000000000011c37937e08000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [6] : 000000000000000000000000a5823bc070739ccaada3a9ed3215a7ef660ab3f4
Arg [7] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [8] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [9] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [10] : 50554d506b696e73206279204d696e744d616368696e652e4172740000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [12] : 50554d506b696e73000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
53151:4677:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56900:33;56923:9;;56911;:21;;;;:::i;:::-;56900:10;:33::i;:::-;53151:4677;;;;;37874:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39502:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41221:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40832:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54758:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36427:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42028:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37057:745;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54468:70;;;;;;;;;;;;;:::i;:::-;;53281:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57309:134;;;;;;;;;;;;;:::i;:::-;;42261:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53356:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57449:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36604:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54878:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53514:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39311:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53221:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53252;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53318:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40339:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57145:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38310:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52259:103;;;;;;;;;;;;;:::i;:::-;;54979:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54544:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51611:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39671:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53713:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41463:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55128:860;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42509:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39846:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57721:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46854:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56728:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53393:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41797:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55994:728;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52517:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57623:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55994:728;56071:17;56057:31;;;;;;;;:::i;:::-;;:10;;;;;;;;;;;:31;;;;;;;;:::i;:::-;;;:42;;;;;56093:6;;;;;;;;;;;56092:7;56057:42;56049:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;56146:17;;56136:6;56120:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:43;;56112:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;56229:15;;56219:6;56184:20;:32;56205:10;56184:32;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:60;;56176:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;56275:24;56263:36;;:8;:36;;;56259:240;;56340:9;56330:6;56318:9;;:18;;;;:::i;:::-;:31;;56310:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;56259:240;;;56378:16;56404:8;56378:35;;56422:9;:22;;;56445:10;56465:4;56481:9;;56472:6;:18;;;;:::i;:::-;56422:69;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;56369:130;56259:240;56577:6;56542:20;:32;56563:10;56542:32;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;56507:20;:32;56528:10;56507:32;;;;;;;;;;;;;;;:76;;;;56590:29;56600:10;56612:6;56590:9;:29::i;:::-;56649:17;;56632:13;:11;:13::i;:::-;:34;56628:89;;56690:19;56677:10;;:32;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;56628:89;55994:728;:::o;37874:372::-;37976:4;38028:25;38013:40;;;:11;:40;;;;:105;;;;38085:33;38070:48;;;:11;:48;;;;38013:105;:172;;;;38150:35;38135:50;;;:11;:50;;;;38013:172;:225;;;;38202:36;38226:11;38202:23;:36::i;:::-;38013:225;37993:245;;37874:372;;;:::o;39502:100::-;39556:13;39589:5;39582:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39502:100;:::o;41221:170::-;41289:7;41317:16;41325:7;41317;:16::i;:::-;41309:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;41359:15;:24;41375:7;41359:24;;;;;;;;;;;;;;;;;;;;;41352:31;;41221:170;;;:::o;40832:323::-;40905:13;40921:23;40936:7;40921:14;:23::i;:::-;40905:39;;40969:5;40963:11;;:2;:11;;;40955:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;41031:5;41015:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;41040:37;41057:5;41064:12;:10;:12::i;:::-;41040:16;:37::i;:::-;41015:62;40993:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;41119:28;41128:2;41132:7;41141:5;41119:8;:28::i;:::-;40894:261;40832:323;;:::o;54758:114::-;51497:13;:11;:13::i;:::-;54852:14:::1;54839:10;:27;;;;;;:::i;:::-;;54758:114:::0;:::o;36427:100::-;36480:7;36507:12;;36500:19;;36427:100;:::o;42028:162::-;42154:28;42164:4;42170:2;42174:7;42154:9;:28::i;:::-;42028:162;;;:::o;37057:745::-;37146:7;37182:16;37192:5;37182:9;:16::i;:::-;37174:5;:24;37166:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37215:22;37240:13;:11;:13::i;:::-;37215:38;;37264:19;37298:25;37352:9;37347:426;37371:14;37367:1;:18;37347:426;;;37407:31;37441:11;:14;37453:1;37441:14;;;;;;;;;;;37407:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37500:1;37474:28;;:9;:14;;;:28;;;37470:103;;37543:9;:14;;;37523:34;;37470:103;37612:5;37591:26;;:17;:26;;;37587:175;;37657:5;37642:11;:20;37638:77;;37694:1;37687:8;;;;;;;;;37638:77;37733:13;;;;;:::i;:::-;;;;37587:175;37392:381;37387:3;;;;;:::i;:::-;;;;37347:426;;;;37783:11;;;;;;;;;;:::i;:::-;;;;;;;;37057:745;;;;;:::o;54468:70::-;51497:13;:11;:13::i;:::-;54526:6:::1;;;;;;;;;;;54525:7;54516:6;;:16;;;;;;;;;;;;;;;;;;54468:70::o:0;53281:32::-;;;;:::o;57309:134::-;51497:13;:11;:13::i;:::-;57357:12:::1;57372:21;57357:36;;57408:10;57400:28;;:37;57429:7;57400:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;57350:93;57309:134::o:0;42261:177::-;42391:39;42408:4;42414:2;42418:7;42391:39;;;;;;;;;;;;:16;:39::i;:::-;42261:177;;;:::o;53356:30::-;;;;:::o;57449:168::-;51497:13;:11;:13::i;:::-;57530:12:::1;57523:29;;;57553:10;57572:12;57565:30;;;57604:4;57565:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57523:88;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;57449:168:::0;:::o;36604:153::-;36671:7;36707:13;:11;:13::i;:::-;36699:5;:21;36691:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;36744:5;36737:12;;36604:153;;;:::o;54878:93::-;51497:13;:11;:13::i;:::-;54945:20:::1;54957:7;54945:11;:20::i;:::-;54878:93:::0;:::o;53514:18::-;;;;;;;;;;;;;:::o;39311:124::-;39375:7;39402:20;39414:7;39402:11;:20::i;:::-;:25;;;39395:32;;39311:124;;;:::o;53221:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53252:::-;;;;:::o;53318:33::-;;;;:::o;40339:97::-;40387:13;40420:8;40413:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40339:97;:::o;57145:158::-;57225:7;57275:6;57283:12;57258:38;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57248:49;;;;;;57241:56;;57145:158;;;;:::o;38310:179::-;38374:7;38419:1;38402:19;;:5;:19;;;38394:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;38453:12;:19;38466:5;38453:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;38445:36;;38438:43;;38310:179;;;:::o;52259:103::-;51497:13;:11;:13::i;:::-;52324:30:::1;52351:1;52324:18;:30::i;:::-;52259:103::o:0;54979:143::-;51497:13;:11;:13::i;:::-;55070:18:::1;55059:29;;;;;;;;:::i;:::-;;:7;:29;;;;;;;;:::i;:::-;;::::0;55051:38:::1;;;::::0;::::1;;55109:7;55096:10;;:20;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;54979:143:::0;:::o;54544:208::-;51497:13;:11;:13::i;:::-;54620:18:::1;54606:32;;;;;;;;:::i;:::-;;:10;;;;;;;;;;;:32;;;;;;;;:::i;:::-;;;54598:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;54685:17;;54675:6;54659:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:43;;54651:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;54717:29;54727:10;54739:6;54717:9;:29::i;:::-;54544:208:::0;:::o;51611:87::-;51657:7;51684:6;;;;;;;;;;;51677:13;;51611:87;:::o;39671:104::-;39727:13;39760:7;39753:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39671:104;:::o;53713:49::-;;;;;;;;;;;;;:::o;41463:263::-;41570:12;:10;:12::i;:::-;41558:24;;:8;:24;;;41550:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;41646:8;41601:18;:32;41620:12;:10;:12::i;:::-;41601:32;;;;;;;;;;;;;;;:42;41634:8;41601:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;41699:8;41670:48;;41685:12;:10;:12::i;:::-;41670:48;;;41709:8;41670:48;;;;;;:::i;:::-;;;;;;;;41463:263;;:::o;55128:860::-;55275:20;55261:34;;;;;;;;:::i;:::-;;:10;;;;;;;;;;;:34;;;;;;;;:::i;:::-;;;:45;;;;;55300:6;;;;;;;;;;;55299:7;55261:45;55253:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;55353:17;;55343:6;55327:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:43;;55319:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;55433:11;55391:38;55403:10;55423:4;55391:11;:38::i;:::-;:53;55383:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;55465:43;55485:11;55498:9;;55465:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:19;:43::i;:::-;55457:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;55574:15;;55564:6;55529:20;:32;55550:10;55529:32;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:60;;55521:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;55620:24;55608:36;;:8;:36;;;55604:258;;55694:9;55684:6;55663:18;;:27;;;;:::i;:::-;:40;;55655:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;55604:258;;;55732:16;55758:8;55732:35;;55776:9;:22;;;55799:10;55819:4;55835:18;;55826:6;:27;;;;:::i;:::-;55776:78;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;55723:139;55604:258;55940:6;55905:20;:32;55926:10;55905:32;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;55870:20;:32;55891:10;55870:32;;;;;;;;;;;;;;;:76;;;;55953:29;55963:10;55975:6;55953:9;:29::i;:::-;55128:860;;;;:::o;42509:305::-;42668:28;42678:4;42684:2;42688:7;42668:9;:28::i;:::-;42729:48;42752:4;42758:2;42762:7;42771:5;42729:22;:48::i;:::-;42707:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;42509:305;;;;:::o;39846:245::-;39919:13;39953:16;39961:7;39953;:16::i;:::-;39945:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;40020:1;40001:8;39995:22;;;;;:::i;:::-;;;:26;:88;;;;;;;;;;;;;;;;;40048:8;40058:18;:7;:16;:18::i;:::-;40031:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39995:88;39988:95;;39846:245;;;:::o;57721:102::-;51497:13;:11;:13::i;:::-;57808:9:::1;57787:18;:30;;;;57721:102:::0;:::o;46854:43::-;;;;:::o;56728:132::-;51497:13;:11;:13::i;:::-;56820:19:::1;56802:46;;;56849:4;56802:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;56728:132:::0;:::o;53393:33::-;;;:::o;41797:164::-;41894:4;41918:18;:25;41937:5;41918:25;;;;;;;;;;;;;;;:35;41944:8;41918:35;;;;;;;;;;;;;;;;;;;;;;;;;41911:42;;41797:164;;;;:::o;52517:201::-;51497:13;:11;:13::i;:::-;52626:1:::1;52606:22;;:8;:22;;::::0;52598:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;52682:28;52701:8;52682:18;:28::i;:::-;52517:201:::0;:::o;57623:92::-;51497:13;:11;:13::i;:::-;57700:9:::1;57688;:21;;;;57623:92:::0;:::o;43188:104::-;43257:27;43267:2;43271:8;43257:27;;;;;;;;;;;;:9;:27::i;:::-;43188:104;;:::o;11389:157::-;11474:4;11513:25;11498:40;;;:11;:40;;;;11491:47;;11389:157;;;:::o;43069:111::-;43126:4;43160:12;;43150:7;:22;43143:29;;43069:111;;;:::o;34153:98::-;34206:7;34233:10;34226:17;;34153:98;:::o;46650:196::-;46792:2;46765:15;:24;46781:7;46765:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46830:7;46826:2;46810:28;;46819:5;46810:28;;;;;;;;;;;;46650:196;;;:::o;51776:132::-;51851:12;:10;:12::i;:::-;51840:23;;:7;:5;:7::i;:::-;:23;;;51832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51776:132::o;45080:1452::-;45195:35;45233:20;45245:7;45233:11;:20::i;:::-;45195:58;;45266:22;45308:13;:18;;;45292:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;45367:12;:10;:12::i;:::-;45343:36;;:20;45355:7;45343:11;:20::i;:::-;:36;;;45292:87;:154;;;;45396:50;45413:13;:18;;;45433:12;:10;:12::i;:::-;45396:16;:50::i;:::-;45292:154;45266:181;;45468:17;45460:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;45534:4;45512:26;;:13;:18;;;:26;;;45504:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;45577:1;45563:16;;:2;:16;;;45555:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;45598:43;45620:4;45626:2;45630:7;45639:1;45598:21;:43::i;:::-;45706:49;45723:1;45727:7;45736:13;:18;;;45706:8;:49::i;:::-;45798:1;45768:12;:18;45781:4;45768:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45838:1;45810:12;:16;45823:2;45810:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45873:43;;;;;;;;45888:2;45873:43;;;;;;45899:15;45873:43;;;;;45850:11;:20;45862:7;45850:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46156:19;46188:1;46178:7;:11;;;;:::i;:::-;46156:33;;46245:1;46204:43;;:11;:24;46216:11;46204:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;46200:227;;46268:20;46276:11;46268:7;:20::i;:::-;46264:152;;;46336:64;;;;;;;;46351:13;:18;;;46336:64;;;;;;46371:13;:28;;;46336:64;;;;;46309:11;:24;46321:11;46309:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46264:152;46200:227;46463:7;46459:2;46444:27;;46453:4;46444:27;;;;;;;;;;;;46482:42;46503:4;46509:2;46513:7;46522:1;46482:20;:42::i;:::-;45184:1348;;;45080:1452;;;:::o;40666:100::-;40750:8;40739;:19;;;;;;:::i;:::-;;40666:100;:::o;38686:563::-;38747:21;;:::i;:::-;38789:16;38797:7;38789;:16::i;:::-;38781:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;38824:26;38876:12;38865:7;:23;38861:103;;38951:1;38936:12;38926:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;38905:47;;38861:103;38981:12;38996:7;38981:22;;38976:242;39013:18;39005:4;:26;38976:242;;39056:31;39090:11;:17;39102:4;39090:17;;;;;;;;;;;39056:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39152:1;39126:28;;:9;:14;;;:28;;;39122:85;;39182:9;39175:16;;;;;;;39122:85;39041:177;39033:6;;;;;:::i;:::-;;;;38976:242;;;;39230:11;;;;;;;;;;:::i;:::-;;;;;;;;38686:563;;;;:::o;52878:191::-;52952:16;52971:6;;;;;;;;;;;52952:25;;52997:8;52988:6;;:17;;;;;;;;;;;;;;;;;;53052:8;53021:40;;53042:8;53021:40;;;;;;;;;;;;52941:128;52878:191;:::o;56945:194::-;57041:4;57078:55;57123:9;57078:36;:11;:34;:36::i;:::-;:44;;:55;;;;:::i;:::-;57061:72;;:13;;;;;;;;;;;:72;;;57054:79;;56945:194;;;;:::o;48400:754::-;48555:4;48576:15;:2;:13;;;:15::i;:::-;48572:575;;;48628:2;48612:36;;;48649:12;:10;:12::i;:::-;48663:4;48669:7;48678:5;48612:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48608:484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48875:1;48858:6;:13;:18;48854:223;;48901:11;;;;;;;;;;:::i;:::-;;;;;;;;48854:223;49027:6;49021:13;49012:6;49008:2;49004:15;48997:38;48608:484;48745:45;;;48735:55;;;:6;:55;;;;48728:62;;;;;48572:575;49131:4;49124:11;;48400:754;;;;;;;:::o;19555:723::-;19611:13;19841:1;19832:5;:10;19828:53;;19859:10;;;;;;;;;;;;;;;;;;;;;19828:53;19891:12;19906:5;19891:20;;19922:14;19947:78;19962:1;19954:4;:9;19947:78;;19980:8;;;;;:::i;:::-;;;;20011:2;20003:10;;;;;:::i;:::-;;;19947:78;;;20035:19;20067:6;20057:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20035:39;;20085:154;20101:1;20092:5;:10;20085:154;;20129:1;20119:11;;;;;:::i;:::-;;;20196:2;20188:5;:10;;;;:::i;:::-;20175:2;:24;;;;:::i;:::-;20162:39;;20145:6;20152;20145:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;20225:2;20216:11;;;;;:::i;:::-;;;20085:154;;;20263:6;20249:21;;;;;19555:723;;;;:::o;43569:1257::-;43692:20;43715:12;;43692:35;;43760:1;43746:16;;:2;:16;;;43738:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;43913:21;43921:12;43913:7;:21::i;:::-;43912:22;43904:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;43971:12;43959:8;:24;;43951:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44002:61;44032:1;44036:2;44040:12;44054:8;44002:21;:61::i;:::-;44076:30;44109:12;:16;44122:2;44109:16;;;;;;;;;;;;;;;44076:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44155:135;;;;;;;;44211:8;44181:11;:19;;;:39;;;;:::i;:::-;44155:135;;;;;;44270:8;44235:11;:24;;;:44;;;;:::i;:::-;44155:135;;;;;44136:12;:16;44149:2;44136:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44329:43;;;;;;;;44344:2;44329:43;;;;;;44355:15;44329:43;;;;;44301:11;:25;44313:12;44301:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44385:20;44408:12;44385:35;;44438:9;44433:275;44457:8;44453:1;:12;44433:275;;;44517:12;44513:2;44492:38;;44509:1;44492:38;;;;;;;;;;;;44571:59;44602:1;44606:2;44610:12;44624:5;44571:22;:59::i;:::-;44545:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;44682:14;;;;;:::i;:::-;;;;44467:3;;;;;:::i;:::-;;;;44433:275;;;;44735:12;44720;:27;;;;44758:60;44787:1;44791:2;44795:12;44809:8;44758:20;:60::i;:::-;43681:1145;;;43569:1257;;;:::o;49642:159::-;;;;;:::o;50213:158::-;;;;;:::o;29280:269::-;29349:7;29535:4;29482:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;29472:69;;;;;;29465:76;;29280:269;;;:::o;25478:231::-;25556:7;25577:17;25596:18;25618:27;25629:4;25635:9;25618:10;:27::i;:::-;25576:69;;;;25656:18;25668:5;25656:11;:18::i;:::-;25692:9;25685:16;;;;25478:231;;;;:::o;1233:326::-;1293:4;1550:1;1528:7;:19;;;:23;1521:30;;1233:326;;;:::o;23929:747::-;24010:7;24019:12;24068:2;24048:9;:16;:22;24044:625;;24087:9;24111;24135:7;24392:4;24381:9;24377:20;24371:27;24366:32;;24442:4;24431:9;24427:20;24421:27;24416:32;;24500:4;24489:9;24485:20;24479:27;24476:1;24471:36;24466:41;;24543:25;24554:4;24560:1;24563;24566;24543:10;:25::i;:::-;24536:32;;;;;;;;;24044:625;24617:1;24621:35;24601:56;;;;23929:747;;;;;;:::o;22200:643::-;22278:20;22269:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;22265:571;22315:7;22265:571;22376:29;22367:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;22363:473;;22422:34;;;;;;;;;;:::i;:::-;;;;;;;;22363:473;22487:35;22478:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;22474:362;;22539:41;;;;;;;;;;:::i;:::-;;;;;;;;22474:362;22611:30;22602:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;22598:238;;22658:44;;;;;;;;;;:::i;:::-;;;;;;;;22598:238;22733:30;22724:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;22720:116;;22780:44;;;;;;;;;;:::i;:::-;;;;;;;;22720:116;22200:643;;:::o;26930:1632::-;27061:7;27070:12;27995:66;27990:1;27982:10;;:79;27978:163;;;28094:1;28098:30;28078:51;;;;;;27978:163;28160:2;28155:1;:7;;;;:18;;;;;28171:2;28166:1;:7;;;;28155:18;28151:102;;;28206:1;28210:30;28190:51;;;;;;28151:102;28350:14;28367:24;28377:4;28383:1;28386;28389;28367:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28350:41;;28424:1;28406:20;;:6;:20;;;28402:103;;28459:1;28463:29;28443:50;;;;;;;28402:103;28525:6;28533:20;28517:37;;;;;26930:1632;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:180;324:77;321:1;314:88;421:4;418:1;411:15;445:4;442:1;435:15;462:185;502:1;519:20;537:1;519:20;:::i;:::-;514:25;;553:20;571:1;553:20;:::i;:::-;548:25;;592:1;582:35;;597:18;;:::i;:::-;582:35;639:1;636;632:9;627:14;;462:185;;;;:::o;653:75::-;686:6;719:2;713:9;703:19;;653:75;:::o;734:117::-;843:1;840;833:12;857:117;966:1;963;956:12;980:149;1016:7;1056:66;1049:5;1045:78;1034:89;;980:149;;;:::o;1135:120::-;1207:23;1224:5;1207:23;:::i;:::-;1200:5;1197:34;1187:62;;1245:1;1242;1235:12;1187:62;1135:120;:::o;1261:137::-;1306:5;1344:6;1331:20;1322:29;;1360:32;1386:5;1360:32;:::i;:::-;1261:137;;;;:::o;1404:327::-;1462:6;1511:2;1499:9;1490:7;1486:23;1482:32;1479:119;;;1517:79;;:::i;:::-;1479:119;1637:1;1662:52;1706:7;1697:6;1686:9;1682:22;1662:52;:::i;:::-;1652:62;;1608:116;1404:327;;;;:::o;1737:90::-;1771:7;1814:5;1807:13;1800:21;1789:32;;1737:90;;;:::o;1833:109::-;1914:21;1929:5;1914:21;:::i;:::-;1909:3;1902:34;1833:109;;:::o;1948:210::-;2035:4;2073:2;2062:9;2058:18;2050:26;;2086:65;2148:1;2137:9;2133:17;2124:6;2086:65;:::i;:::-;1948:210;;;;:::o;2164:99::-;2216:6;2250:5;2244:12;2234:22;;2164:99;;;:::o;2269:169::-;2353:11;2387:6;2382:3;2375:19;2427:4;2422:3;2418:14;2403:29;;2269:169;;;;:::o;2444:246::-;2525:1;2535:113;2549:6;2546:1;2543:13;2535:113;;;2634:1;2629:3;2625:11;2619:18;2615:1;2610:3;2606:11;2599:39;2571:2;2568:1;2564:10;2559:15;;2535:113;;;2682:1;2673:6;2668:3;2664:16;2657:27;2506:184;2444:246;;;:::o;2696:102::-;2737:6;2788:2;2784:7;2779:2;2772:5;2768:14;2764:28;2754:38;;2696:102;;;:::o;2804:377::-;2892:3;2920:39;2953:5;2920:39;:::i;:::-;2975:71;3039:6;3034:3;2975:71;:::i;:::-;2968:78;;3055:65;3113:6;3108:3;3101:4;3094:5;3090:16;3055:65;:::i;:::-;3145:29;3167:6;3145:29;:::i;:::-;3140:3;3136:39;3129:46;;2896:285;2804:377;;;;:::o;3187:313::-;3300:4;3338:2;3327:9;3323:18;3315:26;;3387:9;3381:4;3377:20;3373:1;3362:9;3358:17;3351:47;3415:78;3488:4;3479:6;3415:78;:::i;:::-;3407:86;;3187:313;;;;:::o;3506:122::-;3579:24;3597:5;3579:24;:::i;:::-;3572:5;3569:35;3559:63;;3618:1;3615;3608:12;3559:63;3506:122;:::o;3634:139::-;3680:5;3718:6;3705:20;3696:29;;3734:33;3761:5;3734:33;:::i;:::-;3634:139;;;;:::o;3779:329::-;3838:6;3887:2;3875:9;3866:7;3862:23;3858:32;3855:119;;;3893:79;;:::i;:::-;3855:119;4013:1;4038:53;4083:7;4074:6;4063:9;4059:22;4038:53;:::i;:::-;4028:63;;3984:117;3779:329;;;;:::o;4114:126::-;4151:7;4191:42;4184:5;4180:54;4169:65;;4114:126;;;:::o;4246:96::-;4283:7;4312:24;4330:5;4312:24;:::i;:::-;4301:35;;4246:96;;;:::o;4348:118::-;4435:24;4453:5;4435:24;:::i;:::-;4430:3;4423:37;4348:118;;:::o;4472:222::-;4565:4;4603:2;4592:9;4588:18;4580:26;;4616:71;4684:1;4673:9;4669:17;4660:6;4616:71;:::i;:::-;4472:222;;;;:::o;4700:122::-;4773:24;4791:5;4773:24;:::i;:::-;4766:5;4763:35;4753:63;;4812:1;4809;4802:12;4753:63;4700:122;:::o;4828:139::-;4874:5;4912:6;4899:20;4890:29;;4928:33;4955:5;4928:33;:::i;:::-;4828:139;;;;:::o;4973:474::-;5041:6;5049;5098:2;5086:9;5077:7;5073:23;5069:32;5066:119;;;5104:79;;:::i;:::-;5066:119;5224:1;5249:53;5294:7;5285:6;5274:9;5270:22;5249:53;:::i;:::-;5239:63;;5195:117;5351:2;5377:53;5422:7;5413:6;5402:9;5398:22;5377:53;:::i;:::-;5367:63;;5322:118;4973:474;;;;;:::o;5453:117::-;5562:1;5559;5552:12;5576:117;5685:1;5682;5675:12;5699:180;5747:77;5744:1;5737:88;5844:4;5841:1;5834:15;5868:4;5865:1;5858:15;5885:281;5968:27;5990:4;5968:27;:::i;:::-;5960:6;5956:40;6098:6;6086:10;6083:22;6062:18;6050:10;6047:34;6044:62;6041:88;;;6109:18;;:::i;:::-;6041:88;6149:10;6145:2;6138:22;5928:238;5885:281;;:::o;6172:129::-;6206:6;6233:20;;:::i;:::-;6223:30;;6262:33;6290:4;6282:6;6262:33;:::i;:::-;6172:129;;;:::o;6307:308::-;6369:4;6459:18;6451:6;6448:30;6445:56;;;6481:18;;:::i;:::-;6445:56;6519:29;6541:6;6519:29;:::i;:::-;6511:37;;6603:4;6597;6593:15;6585:23;;6307:308;;;:::o;6621:146::-;6718:6;6713:3;6708;6695:30;6759:1;6750:6;6745:3;6741:16;6734:27;6621:146;;;:::o;6773:425::-;6851:5;6876:66;6892:49;6934:6;6892:49;:::i;:::-;6876:66;:::i;:::-;6867:75;;6965:6;6958:5;6951:21;7003:4;6996:5;6992:16;7041:3;7032:6;7027:3;7023:16;7020:25;7017:112;;;7048:79;;:::i;:::-;7017:112;7138:54;7185:6;7180:3;7175;7138:54;:::i;:::-;6857:341;6773:425;;;;;:::o;7218:340::-;7274:5;7323:3;7316:4;7308:6;7304:17;7300:27;7290:122;;7331:79;;:::i;:::-;7290:122;7448:6;7435:20;7473:79;7548:3;7540:6;7533:4;7525:6;7521:17;7473:79;:::i;:::-;7464:88;;7280:278;7218:340;;;;:::o;7564:509::-;7633:6;7682:2;7670:9;7661:7;7657:23;7653:32;7650:119;;;7688:79;;:::i;:::-;7650:119;7836:1;7825:9;7821:17;7808:31;7866:18;7858:6;7855:30;7852:117;;;7888:79;;:::i;:::-;7852:117;7993:63;8048:7;8039:6;8028:9;8024:22;7993:63;:::i;:::-;7983:73;;7779:287;7564:509;;;;:::o;8079:118::-;8166:24;8184:5;8166:24;:::i;:::-;8161:3;8154:37;8079:118;;:::o;8203:222::-;8296:4;8334:2;8323:9;8319:18;8311:26;;8347:71;8415:1;8404:9;8400:17;8391:6;8347:71;:::i;:::-;8203:222;;;;:::o;8431:619::-;8508:6;8516;8524;8573:2;8561:9;8552:7;8548:23;8544:32;8541:119;;;8579:79;;:::i;:::-;8541:119;8699:1;8724:53;8769:7;8760:6;8749:9;8745:22;8724:53;:::i;:::-;8714:63;;8670:117;8826:2;8852:53;8897:7;8888:6;8877:9;8873:22;8852:53;:::i;:::-;8842:63;;8797:118;8954:2;8980:53;9025:7;9016:6;9005:9;9001:22;8980:53;:::i;:::-;8970:63;;8925:118;8431:619;;;;;:::o;9056:329::-;9115:6;9164:2;9152:9;9143:7;9139:23;9135:32;9132:119;;;9170:79;;:::i;:::-;9132:119;9290:1;9315:53;9360:7;9351:6;9340:9;9336:22;9315:53;:::i;:::-;9305:63;;9261:117;9056:329;;;;:::o;9391:474::-;9459:6;9467;9516:2;9504:9;9495:7;9491:23;9487:32;9484:119;;;9522:79;;:::i;:::-;9484:119;9642:1;9667:53;9712:7;9703:6;9692:9;9688:22;9667:53;:::i;:::-;9657:63;;9613:117;9769:2;9795:53;9840:7;9831:6;9820:9;9816:22;9795:53;:::i;:::-;9785:63;;9740:118;9391:474;;;;;:::o;9871:77::-;9908:7;9937:5;9926:16;;9871:77;;;:::o;9954:118::-;10041:24;10059:5;10041:24;:::i;:::-;10036:3;10029:37;9954:118;;:::o;10078:222::-;10171:4;10209:2;10198:9;10194:18;10186:26;;10222:71;10290:1;10279:9;10275:17;10266:6;10222:71;:::i;:::-;10078:222;;;;:::o;10306:114::-;10394:1;10387:5;10384:12;10374:40;;10410:1;10407;10400:12;10374:40;10306:114;:::o;10426:169::-;10487:5;10525:6;10512:20;10503:29;;10541:48;10583:5;10541:48;:::i;:::-;10426:169;;;;:::o;10601:359::-;10675:6;10724:2;10712:9;10703:7;10699:23;10695:32;10692:119;;;10730:79;;:::i;:::-;10692:119;10850:1;10875:68;10935:7;10926:6;10915:9;10911:22;10875:68;:::i;:::-;10865:78;;10821:132;10601:359;;;;:::o;10966:180::-;11014:77;11011:1;11004:88;11111:4;11108:1;11101:15;11135:4;11132:1;11125:15;11152:120;11240:1;11233:5;11230:12;11220:46;;11246:18;;:::i;:::-;11220:46;11152:120;:::o;11278:141::-;11330:7;11359:5;11348:16;;11365:48;11407:5;11365:48;:::i;:::-;11278:141;;;:::o;11425:::-;11488:9;11521:39;11554:5;11521:39;:::i;:::-;11508:52;;11425:141;;;:::o;11572:157::-;11672:50;11716:5;11672:50;:::i;:::-;11667:3;11660:63;11572:157;;:::o;11735:248::-;11841:4;11879:2;11868:9;11864:18;11856:26;;11892:84;11973:1;11962:9;11958:17;11949:6;11892:84;:::i;:::-;11735:248;;;;:::o;11989:116::-;12059:21;12074:5;12059:21;:::i;:::-;12052:5;12049:32;12039:60;;12095:1;12092;12085:12;12039:60;11989:116;:::o;12111:133::-;12154:5;12192:6;12179:20;12170:29;;12208:30;12232:5;12208:30;:::i;:::-;12111:133;;;;:::o;12250:468::-;12315:6;12323;12372:2;12360:9;12351:7;12347:23;12343:32;12340:119;;;12378:79;;:::i;:::-;12340:119;12498:1;12523:53;12568:7;12559:6;12548:9;12544:22;12523:53;:::i;:::-;12513:63;;12469:117;12625:2;12651:50;12693:7;12684:6;12673:9;12669:22;12651:50;:::i;:::-;12641:60;;12596:115;12250:468;;;;;:::o;12724:122::-;12797:24;12815:5;12797:24;:::i;:::-;12790:5;12787:35;12777:63;;12836:1;12833;12826:12;12777:63;12724:122;:::o;12852:139::-;12898:5;12936:6;12923:20;12914:29;;12952:33;12979:5;12952:33;:::i;:::-;12852:139;;;;:::o;12997:117::-;13106:1;13103;13096:12;13120:117;13229:1;13226;13219:12;13256:552;13313:8;13323:6;13373:3;13366:4;13358:6;13354:17;13350:27;13340:122;;13381:79;;:::i;:::-;13340:122;13494:6;13481:20;13471:30;;13524:18;13516:6;13513:30;13510:117;;;13546:79;;:::i;:::-;13510:117;13660:4;13652:6;13648:17;13636:29;;13714:3;13706:4;13698:6;13694:17;13684:8;13680:32;13677:41;13674:128;;;13721:79;;:::i;:::-;13674:128;13256:552;;;;;:::o;13814:817::-;13902:6;13910;13918;13926;13975:2;13963:9;13954:7;13950:23;13946:32;13943:119;;;13981:79;;:::i;:::-;13943:119;14101:1;14126:53;14171:7;14162:6;14151:9;14147:22;14126:53;:::i;:::-;14116:63;;14072:117;14256:2;14245:9;14241:18;14228:32;14287:18;14279:6;14276:30;14273:117;;;14309:79;;:::i;:::-;14273:117;14422:64;14478:7;14469:6;14458:9;14454:22;14422:64;:::i;:::-;14404:82;;;;14199:297;14535:2;14561:53;14606:7;14597:6;14586:9;14582:22;14561:53;:::i;:::-;14551:63;;14506:118;13814:817;;;;;;;:::o;14637:307::-;14698:4;14788:18;14780:6;14777:30;14774:56;;;14810:18;;:::i;:::-;14774:56;14848:29;14870:6;14848:29;:::i;:::-;14840:37;;14932:4;14926;14922:15;14914:23;;14637:307;;;:::o;14950:423::-;15027:5;15052:65;15068:48;15109:6;15068:48;:::i;:::-;15052:65;:::i;:::-;15043:74;;15140:6;15133:5;15126:21;15178:4;15171:5;15167:16;15216:3;15207:6;15202:3;15198:16;15195:25;15192:112;;;15223:79;;:::i;:::-;15192:112;15313:54;15360:6;15355:3;15350;15313:54;:::i;:::-;15033:340;14950:423;;;;;:::o;15392:338::-;15447:5;15496:3;15489:4;15481:6;15477:17;15473:27;15463:122;;15504:79;;:::i;:::-;15463:122;15621:6;15608:20;15646:78;15720:3;15712:6;15705:4;15697:6;15693:17;15646:78;:::i;:::-;15637:87;;15453:277;15392:338;;;;:::o;15736:943::-;15831:6;15839;15847;15855;15904:3;15892:9;15883:7;15879:23;15875:33;15872:120;;;15911:79;;:::i;:::-;15872:120;16031:1;16056:53;16101:7;16092:6;16081:9;16077:22;16056:53;:::i;:::-;16046:63;;16002:117;16158:2;16184:53;16229:7;16220:6;16209:9;16205:22;16184:53;:::i;:::-;16174:63;;16129:118;16286:2;16312:53;16357:7;16348:6;16337:9;16333:22;16312:53;:::i;:::-;16302:63;;16257:118;16442:2;16431:9;16427:18;16414:32;16473:18;16465:6;16462:30;16459:117;;;16495:79;;:::i;:::-;16459:117;16600:62;16654:7;16645:6;16634:9;16630:22;16600:62;:::i;:::-;16590:72;;16385:287;15736:943;;;;;;;:::o;16685:151::-;16825:3;16821:1;16813:6;16809:14;16802:27;16685:151;:::o;16842:365::-;16984:3;17005:66;17069:1;17064:3;17005:66;:::i;:::-;16998:73;;17080:93;17169:3;17080:93;:::i;:::-;17198:2;17193:3;17189:12;17182:19;;16842:365;;;:::o;17213:419::-;17379:4;17417:2;17406:9;17402:18;17394:26;;17466:9;17460:4;17456:20;17452:1;17441:9;17437:17;17430:47;17494:131;17620:4;17494:131;:::i;:::-;17486:139;;17213:419;;;:::o;17638:191::-;17678:3;17697:20;17715:1;17697:20;:::i;:::-;17692:25;;17731:20;17749:1;17731:20;:::i;:::-;17726:25;;17774:1;17771;17767:9;17760:16;;17795:3;17792:1;17789:10;17786:36;;;17802:18;;:::i;:::-;17786:36;17638:191;;;;:::o;17835:151::-;17975:3;17971:1;17963:6;17959:14;17952:27;17835:151;:::o;17992:365::-;18134:3;18155:66;18219:1;18214:3;18155:66;:::i;:::-;18148:73;;18230:93;18319:3;18230:93;:::i;:::-;18348:2;18343:3;18339:12;18332:19;;17992:365;;;:::o;18363:419::-;18529:4;18567:2;18556:9;18552:18;18544:26;;18616:9;18610:4;18606:20;18602:1;18591:9;18587:17;18580:47;18644:131;18770:4;18644:131;:::i;:::-;18636:139;;18363:419;;;:::o;18788:151::-;18928:3;18924:1;18916:6;18912:14;18905:27;18788:151;:::o;18945:365::-;19087:3;19108:66;19172:1;19167:3;19108:66;:::i;:::-;19101:73;;19183:93;19272:3;19183:93;:::i;:::-;19301:2;19296:3;19292:12;19285:19;;18945:365;;;:::o;19316:419::-;19482:4;19520:2;19509:9;19505:18;19497:26;;19569:9;19563:4;19559:20;19555:1;19544:9;19540:17;19533:47;19597:131;19723:4;19597:131;:::i;:::-;19589:139;;19316:419;;;:::o;19741:410::-;19781:7;19804:20;19822:1;19804:20;:::i;:::-;19799:25;;19838:20;19856:1;19838:20;:::i;:::-;19833:25;;19893:1;19890;19886:9;19915:30;19933:11;19915:30;:::i;:::-;19904:41;;20094:1;20085:7;20081:15;20078:1;20075:22;20055:1;20048:9;20028:83;20005:139;;20124:18;;:::i;:::-;20005:139;19789:362;19741:410;;;;:::o;20157:151::-;20297:3;20293:1;20285:6;20281:14;20274:27;20157:151;:::o;20314:365::-;20456:3;20477:66;20541:1;20536:3;20477:66;:::i;:::-;20470:73;;20552:93;20641:3;20552:93;:::i;:::-;20670:2;20665:3;20661:12;20654:19;;20314:365;;;:::o;20685:419::-;20851:4;20889:2;20878:9;20874:18;20866:26;;20938:9;20932:4;20928:20;20924:1;20913:9;20909:17;20902:47;20966:131;21092:4;20966:131;:::i;:::-;20958:139;;20685:419;;;:::o;21110:442::-;21259:4;21297:2;21286:9;21282:18;21274:26;;21310:71;21378:1;21367:9;21363:17;21354:6;21310:71;:::i;:::-;21391:72;21459:2;21448:9;21444:18;21435:6;21391:72;:::i;:::-;21473;21541:2;21530:9;21526:18;21517:6;21473:72;:::i;:::-;21110:442;;;;;;:::o;21558:137::-;21612:5;21643:6;21637:13;21628:22;;21659:30;21683:5;21659:30;:::i;:::-;21558:137;;;;:::o;21701:345::-;21768:6;21817:2;21805:9;21796:7;21792:23;21788:32;21785:119;;;21823:79;;:::i;:::-;21785:119;21943:1;21968:61;22021:7;22012:6;22001:9;21997:22;21968:61;:::i;:::-;21958:71;;21914:125;21701:345;;;;:::o;22052:180::-;22100:77;22097:1;22090:88;22197:4;22194:1;22187:15;22221:4;22218:1;22211:15;22238:320;22282:6;22319:1;22313:4;22309:12;22299:22;;22366:1;22360:4;22356:12;22387:18;22377:81;;22443:4;22435:6;22431:17;22421:27;;22377:81;22505:2;22497:6;22494:14;22474:18;22471:38;22468:84;;22524:18;;:::i;:::-;22468:84;22289:269;22238:320;;;:::o;22564:151::-;22704:3;22700:1;22692:6;22688:14;22681:27;22564:151;:::o;22721:365::-;22863:3;22884:66;22948:1;22943:3;22884:66;:::i;:::-;22877:73;;22959:93;23048:3;22959:93;:::i;:::-;23077:2;23072:3;23068:12;23061:19;;22721:365;;;:::o;23092:419::-;23258:4;23296:2;23285:9;23281:18;23273:26;;23345:9;23339:4;23335:20;23331:1;23320:9;23316:17;23309:47;23373:131;23499:4;23373:131;:::i;:::-;23365:139;;23092:419;;;:::o;23517:141::-;23566:4;23589:3;23581:11;;23612:3;23609:1;23602:14;23646:4;23643:1;23633:18;23625:26;;23517:141;;;:::o;23664:93::-;23701:6;23748:2;23743;23736:5;23732:14;23728:23;23718:33;;23664:93;;;:::o;23763:107::-;23807:8;23857:5;23851:4;23847:16;23826:37;;23763:107;;;;:::o;23876:393::-;23945:6;23995:1;23983:10;23979:18;24018:97;24048:66;24037:9;24018:97;:::i;:::-;24136:39;24166:8;24155:9;24136:39;:::i;:::-;24124:51;;24208:4;24204:9;24197:5;24193:21;24184:30;;24257:4;24247:8;24243:19;24236:5;24233:30;24223:40;;23952:317;;23876:393;;;;;:::o;24275:60::-;24303:3;24324:5;24317:12;;24275:60;;;:::o;24341:142::-;24391:9;24424:53;24442:34;24451:24;24469:5;24451:24;:::i;:::-;24442:34;:::i;:::-;24424:53;:::i;:::-;24411:66;;24341:142;;;:::o;24489:75::-;24532:3;24553:5;24546:12;;24489:75;;;:::o;24570:269::-;24680:39;24711:7;24680:39;:::i;:::-;24741:91;24790:41;24814:16;24790:41;:::i;:::-;24782:6;24775:4;24769:11;24741:91;:::i;:::-;24735:4;24728:105;24646:193;24570:269;;;:::o;24845:73::-;24890:3;24845:73;:::o;24924:189::-;25001:32;;:::i;:::-;25042:65;25100:6;25092;25086:4;25042:65;:::i;:::-;24977:136;24924:189;;:::o;25119:186::-;25179:120;25196:3;25189:5;25186:14;25179:120;;;25250:39;25287:1;25280:5;25250:39;:::i;:::-;25223:1;25216:5;25212:13;25203:22;;25179:120;;;25119:186;;:::o;25311:543::-;25412:2;25407:3;25404:11;25401:446;;;25446:38;25478:5;25446:38;:::i;:::-;25530:29;25548:10;25530:29;:::i;:::-;25520:8;25516:44;25713:2;25701:10;25698:18;25695:49;;;25734:8;25719:23;;25695:49;25757:80;25813:22;25831:3;25813:22;:::i;:::-;25803:8;25799:37;25786:11;25757:80;:::i;:::-;25416:431;;25401:446;25311:543;;;:::o;25860:117::-;25914:8;25964:5;25958:4;25954:16;25933:37;;25860:117;;;;:::o;25983:169::-;26027:6;26060:51;26108:1;26104:6;26096:5;26093:1;26089:13;26060:51;:::i;:::-;26056:56;26141:4;26135;26131:15;26121:25;;26034:118;25983:169;;;;:::o;26157:295::-;26233:4;26379:29;26404:3;26398:4;26379:29;:::i;:::-;26371:37;;26441:3;26438:1;26434:11;26428:4;26425:21;26417:29;;26157:295;;;;:::o;26457:1395::-;26574:37;26607:3;26574:37;:::i;:::-;26676:18;26668:6;26665:30;26662:56;;;26698:18;;:::i;:::-;26662:56;26742:38;26774:4;26768:11;26742:38;:::i;:::-;26827:67;26887:6;26879;26873:4;26827:67;:::i;:::-;26921:1;26945:4;26932:17;;26977:2;26969:6;26966:14;26994:1;26989:618;;;;27651:1;27668:6;27665:77;;;27717:9;27712:3;27708:19;27702:26;27693:35;;27665:77;27768:67;27828:6;27821:5;27768:67;:::i;:::-;27762:4;27755:81;27624:222;26959:887;;26989:618;27041:4;27037:9;27029:6;27025:22;27075:37;27107:4;27075:37;:::i;:::-;27134:1;27148:208;27162:7;27159:1;27156:14;27148:208;;;27241:9;27236:3;27232:19;27226:26;27218:6;27211:42;27292:1;27284:6;27280:14;27270:24;;27339:2;27328:9;27324:18;27311:31;;27185:4;27182:1;27178:12;27173:17;;27148:208;;;27384:6;27375:7;27372:19;27369:179;;;27442:9;27437:3;27433:19;27427:26;27485:48;27527:4;27519:6;27515:17;27504:9;27485:48;:::i;:::-;27477:6;27470:64;27392:156;27369:179;27594:1;27590;27582:6;27578:14;27574:22;27568:4;27561:36;26996:611;;;26959:887;;26549:1303;;;26457:1395;;:::o;27858:151::-;27998:3;27994:1;27986:6;27982:14;27975:27;27858:151;:::o;28015:365::-;28157:3;28178:66;28242:1;28237:3;28178:66;:::i;:::-;28171:73;;28253:93;28342:3;28253:93;:::i;:::-;28371:2;28366:3;28362:12;28355:19;;28015:365;;;:::o;28386:419::-;28552:4;28590:2;28579:9;28575:18;28567:26;;28639:9;28633:4;28629:20;28625:1;28614:9;28610:17;28603:47;28667:131;28793:4;28667:131;:::i;:::-;28659:139;;28386:419;;;:::o;28811:233::-;28850:3;28873:24;28891:5;28873:24;:::i;:::-;28864:33;;28919:66;28912:5;28909:77;28906:103;;28989:18;;:::i;:::-;28906:103;29036:1;29029:5;29025:13;29018:20;;28811:233;;;:::o;29050:151::-;29190:3;29186:1;29178:6;29174:14;29167:27;29050:151;:::o;29207:365::-;29349:3;29370:66;29434:1;29429:3;29370:66;:::i;:::-;29363:73;;29445:93;29534:3;29445:93;:::i;:::-;29563:2;29558:3;29554:12;29547:19;;29207:365;;;:::o;29578:419::-;29744:4;29782:2;29771:9;29767:18;29759:26;;29831:9;29825:4;29821:20;29817:1;29806:9;29802:17;29795:47;29859:131;29985:4;29859:131;:::i;:::-;29851:139;;29578:419;;;:::o;30003:143::-;30060:5;30091:6;30085:13;30076:22;;30107:33;30134:5;30107:33;:::i;:::-;30003:143;;;;:::o;30152:351::-;30222:6;30271:2;30259:9;30250:7;30246:23;30242:32;30239:119;;;30277:79;;:::i;:::-;30239:119;30397:1;30422:64;30478:7;30469:6;30458:9;30454:22;30422:64;:::i;:::-;30412:74;;30368:128;30152:351;;;;:::o;30509:332::-;30630:4;30668:2;30657:9;30653:18;30645:26;;30681:71;30749:1;30738:9;30734:17;30725:6;30681:71;:::i;:::-;30762:72;30830:2;30819:9;30815:18;30806:6;30762:72;:::i;:::-;30509:332;;;;;:::o;30847:151::-;30987:3;30983:1;30975:6;30971:14;30964:27;30847:151;:::o;31004:365::-;31146:3;31167:66;31231:1;31226:3;31167:66;:::i;:::-;31160:73;;31242:93;31331:3;31242:93;:::i;:::-;31360:2;31355:3;31351:12;31344:19;;31004:365;;;:::o;31375:419::-;31541:4;31579:2;31568:9;31564:18;31556:26;;31628:9;31622:4;31618:20;31614:1;31603:9;31599:17;31592:47;31656:131;31782:4;31656:131;:::i;:::-;31648:139;;31375:419;;;:::o;31800:94::-;31833:8;31881:5;31877:2;31873:14;31852:35;;31800:94;;;:::o;31900:::-;31939:7;31968:20;31982:5;31968:20;:::i;:::-;31957:31;;31900:94;;;:::o;32000:100::-;32039:7;32068:26;32088:5;32068:26;:::i;:::-;32057:37;;32000:100;;;:::o;32106:157::-;32211:45;32231:24;32249:5;32231:24;:::i;:::-;32211:45;:::i;:::-;32206:3;32199:58;32106:157;;:::o;32269:397::-;32409:3;32424:75;32495:3;32486:6;32424:75;:::i;:::-;32524:2;32519:3;32515:12;32508:19;;32537:75;32608:3;32599:6;32537:75;:::i;:::-;32637:2;32632:3;32628:12;32621:19;;32657:3;32650:10;;32269:397;;;;;:::o;32672:151::-;32812:3;32808:1;32800:6;32796:14;32789:27;32672:151;:::o;32829:365::-;32971:3;32992:66;33056:1;33051:3;32992:66;:::i;:::-;32985:73;;33067:93;33156:3;33067:93;:::i;:::-;33185:2;33180:3;33176:12;33169:19;;32829:365;;;:::o;33200:419::-;33366:4;33404:2;33393:9;33389:18;33381:26;;33453:9;33447:4;33443:20;33439:1;33428:9;33424:17;33417:47;33481:131;33607:4;33481:131;:::i;:::-;33473:139;;33200:419;;;:::o;33625:151::-;33765:3;33761:1;33753:6;33749:14;33742:27;33625:151;:::o;33782:365::-;33924:3;33945:66;34009:1;34004:3;33945:66;:::i;:::-;33938:73;;34020:93;34109:3;34020:93;:::i;:::-;34138:2;34133:3;34129:12;34122:19;;33782:365;;;:::o;34153:419::-;34319:4;34357:2;34346:9;34342:18;34334:26;;34406:9;34400:4;34396:20;34392:1;34381:9;34377:17;34370:47;34434:131;34560:4;34434:131;:::i;:::-;34426:139;;34153:419;;;:::o;34578:151::-;34718:3;34714:1;34706:6;34702:14;34695:27;34578:151;:::o;34735:365::-;34877:3;34898:66;34962:1;34957:3;34898:66;:::i;:::-;34891:73;;34973:93;35062:3;34973:93;:::i;:::-;35091:2;35086:3;35082:12;35075:19;;34735:365;;;:::o;35106:419::-;35272:4;35310:2;35299:9;35295:18;35287:26;;35359:9;35353:4;35349:20;35345:1;35334:9;35330:17;35323:47;35387:131;35513:4;35387:131;:::i;:::-;35379:139;;35106:419;;;:::o;35531:151::-;35671:3;35667:1;35659:6;35655:14;35648:27;35531:151;:::o;35688:365::-;35830:3;35851:66;35915:1;35910:3;35851:66;:::i;:::-;35844:73;;35926:93;36015:3;35926:93;:::i;:::-;36044:2;36039:3;36035:12;36028:19;;35688:365;;;:::o;36059:419::-;36225:4;36263:2;36252:9;36248:18;36240:26;;36312:9;36306:4;36302:20;36298:1;36287:9;36283:17;36276:47;36340:131;36466:4;36340:131;:::i;:::-;36332:139;;36059:419;;;:::o;36484:148::-;36586:11;36623:3;36608:18;;36484:148;;;;:::o;36662:874::-;36765:3;36802:5;36796:12;36831:36;36857:9;36831:36;:::i;:::-;36883:89;36965:6;36960:3;36883:89;:::i;:::-;36876:96;;37003:1;36992:9;36988:17;37019:1;37014:166;;;;37194:1;37189:341;;;;36981:549;;37014:166;37098:4;37094:9;37083;37079:25;37074:3;37067:38;37160:6;37153:14;37146:22;37138:6;37134:35;37129:3;37125:45;37118:52;;37014:166;;37189:341;37256:38;37288:5;37256:38;:::i;:::-;37316:1;37330:154;37344:6;37341:1;37338:13;37330:154;;;37418:7;37412:14;37408:1;37403:3;37399:11;37392:35;37468:1;37459:7;37455:15;37444:26;;37366:4;37363:1;37359:12;37354:17;;37330:154;;;37513:6;37508:3;37504:16;37497:23;;37196:334;;36981:549;;36769:767;;36662:874;;;;:::o;37542:390::-;37648:3;37676:39;37709:5;37676:39;:::i;:::-;37731:89;37813:6;37808:3;37731:89;:::i;:::-;37724:96;;37829:65;37887:6;37882:3;37875:4;37868:5;37864:16;37829:65;:::i;:::-;37919:6;37914:3;37910:16;37903:23;;37652:280;37542:390;;;;:::o;37938:429::-;38115:3;38137:92;38225:3;38216:6;38137:92;:::i;:::-;38130:99;;38246:95;38337:3;38328:6;38246:95;:::i;:::-;38239:102;;38358:3;38351:10;;37938:429;;;;;:::o;38373:143::-;38430:5;38461:6;38455:13;38446:22;;38477:33;38504:5;38477:33;:::i;:::-;38373:143;;;;:::o;38522:351::-;38592:6;38641:2;38629:9;38620:7;38616:23;38612:32;38609:119;;;38647:79;;:::i;:::-;38609:119;38767:1;38792:64;38848:7;38839:6;38828:9;38824:22;38792:64;:::i;:::-;38782:74;;38738:128;38522:351;;;;:::o;38879:225::-;39019:34;39015:1;39007:6;39003:14;38996:58;39088:8;39083:2;39075:6;39071:15;39064:33;38879:225;:::o;39110:366::-;39252:3;39273:67;39337:2;39332:3;39273:67;:::i;:::-;39266:74;;39349:93;39438:3;39349:93;:::i;:::-;39467:2;39462:3;39458:12;39451:19;;39110:366;;;:::o;39482:419::-;39648:4;39686:2;39675:9;39671:18;39663:26;;39735:9;39729:4;39725:20;39721:1;39710:9;39706:17;39699:47;39763:131;39889:4;39763:131;:::i;:::-;39755:139;;39482:419;;;:::o;39907:182::-;40047:34;40043:1;40035:6;40031:14;40024:58;39907:182;:::o;40095:366::-;40237:3;40258:67;40322:2;40317:3;40258:67;:::i;:::-;40251:74;;40334:93;40423:3;40334:93;:::i;:::-;40452:2;40447:3;40443:12;40436:19;;40095:366;;;:::o;40467:419::-;40633:4;40671:2;40660:9;40656:18;40648:26;;40720:9;40714:4;40710:20;40706:1;40695:9;40691:17;40684:47;40748:131;40874:4;40748:131;:::i;:::-;40740:139;;40467:419;;;:::o;40892:118::-;40929:7;40969:34;40962:5;40958:46;40947:57;;40892:118;;;:::o;41016:227::-;41056:4;41076:20;41094:1;41076:20;:::i;:::-;41071:25;;41110:20;41128:1;41110:20;:::i;:::-;41105:25;;41154:1;41151;41147:9;41139:17;;41178:34;41172:4;41169:44;41166:70;;;41216:18;;:::i;:::-;41166:70;41016:227;;;;:::o;41249:224::-;41289:3;41308:20;41326:1;41308:20;:::i;:::-;41303:25;;41342:20;41360:1;41342:20;:::i;:::-;41337:25;;41385:1;41382;41378:9;41371:16;;41408:34;41403:3;41400:43;41397:69;;;41446:18;;:::i;:::-;41397:69;41249:224;;;;:::o;41479:151::-;41619:3;41615:1;41607:6;41603:14;41596:27;41479:151;:::o;41636:365::-;41778:3;41799:66;41863:1;41858:3;41799:66;:::i;:::-;41792:73;;41874:93;41963:3;41874:93;:::i;:::-;41992:2;41987:3;41983:12;41976:19;;41636:365;;;:::o;42007:419::-;42173:4;42211:2;42200:9;42196:18;42188:26;;42260:9;42254:4;42250:20;42246:1;42235:9;42231:17;42224:47;42288:131;42414:4;42288:131;:::i;:::-;42280:139;;42007:419;;;:::o;42432:194::-;42472:4;42492:20;42510:1;42492:20;:::i;:::-;42487:25;;42526:20;42544:1;42526:20;:::i;:::-;42521:25;;42570:1;42567;42563:9;42555:17;;42594:1;42588:4;42585:11;42582:37;;;42599:18;;:::i;:::-;42582:37;42432:194;;;;:::o;42632:171::-;42671:3;42694:24;42712:5;42694:24;:::i;:::-;42685:33;;42740:4;42733:5;42730:15;42727:41;;42748:18;;:::i;:::-;42727:41;42795:1;42788:5;42784:13;42777:20;;42632:171;;;:::o;42809:98::-;42860:6;42894:5;42888:12;42878:22;;42809:98;;;:::o;42913:168::-;42996:11;43030:6;43025:3;43018:19;43070:4;43065:3;43061:14;43046:29;;42913:168;;;;:::o;43087:373::-;43173:3;43201:38;43233:5;43201:38;:::i;:::-;43255:70;43318:6;43313:3;43255:70;:::i;:::-;43248:77;;43334:65;43392:6;43387:3;43380:4;43373:5;43369:16;43334:65;:::i;:::-;43424:29;43446:6;43424:29;:::i;:::-;43419:3;43415:39;43408:46;;43177:283;43087:373;;;;:::o;43466:640::-;43661:4;43699:3;43688:9;43684:19;43676:27;;43713:71;43781:1;43770:9;43766:17;43757:6;43713:71;:::i;:::-;43794:72;43862:2;43851:9;43847:18;43838:6;43794:72;:::i;:::-;43876;43944:2;43933:9;43929:18;43920:6;43876:72;:::i;:::-;43995:9;43989:4;43985:20;43980:2;43969:9;43965:18;43958:48;44023:76;44094:4;44085:6;44023:76;:::i;:::-;44015:84;;43466:640;;;;;;;:::o;44112:141::-;44168:5;44199:6;44193:13;44184:22;;44215:32;44241:5;44215:32;:::i;:::-;44112:141;;;;:::o;44259:349::-;44328:6;44377:2;44365:9;44356:7;44352:23;44348:32;44345:119;;;44383:79;;:::i;:::-;44345:119;44503:1;44528:63;44583:7;44574:6;44563:9;44559:22;44528:63;:::i;:::-;44518:73;;44474:127;44259:349;;;;:::o;44614:176::-;44646:1;44663:20;44681:1;44663:20;:::i;:::-;44658:25;;44697:20;44715:1;44697:20;:::i;:::-;44692:25;;44736:1;44726:35;;44741:18;;:::i;:::-;44726:35;44782:1;44779;44775:9;44770:14;;44614:176;;;;:::o;44796:180::-;44844:77;44841:1;44834:88;44941:4;44938:1;44931:15;44965:4;44962:1;44955:15;44982:214;45122:66;45118:1;45110:6;45106:14;45099:90;44982:214;:::o;45202:402::-;45362:3;45383:85;45465:2;45460:3;45383:85;:::i;:::-;45376:92;;45477:93;45566:3;45477:93;:::i;:::-;45595:2;45590:3;45586:12;45579:19;;45202:402;;;:::o;45610:79::-;45649:7;45678:5;45667:16;;45610:79;;;:::o;45695:157::-;45800:45;45820:24;45838:5;45820:24;:::i;:::-;45800:45;:::i;:::-;45795:3;45788:58;45695:157;;:::o;45858:522::-;46071:3;46093:148;46237:3;46093:148;:::i;:::-;46086:155;;46251:75;46322:3;46313:6;46251:75;:::i;:::-;46351:2;46346:3;46342:12;46335:19;;46371:3;46364:10;;45858:522;;;;:::o;46386:174::-;46526:26;46522:1;46514:6;46510:14;46503:50;46386:174;:::o;46566:366::-;46708:3;46729:67;46793:2;46788:3;46729:67;:::i;:::-;46722:74;;46805:93;46894:3;46805:93;:::i;:::-;46923:2;46918:3;46914:12;46907:19;;46566:366;;;:::o;46938:419::-;47104:4;47142:2;47131:9;47127:18;47119:26;;47191:9;47185:4;47181:20;47177:1;47166:9;47162:17;47155:47;47219:131;47345:4;47219:131;:::i;:::-;47211:139;;46938:419;;;:::o;47363:181::-;47503:33;47499:1;47491:6;47487:14;47480:57;47363:181;:::o;47550:366::-;47692:3;47713:67;47777:2;47772:3;47713:67;:::i;:::-;47706:74;;47789:93;47878:3;47789:93;:::i;:::-;47907:2;47902:3;47898:12;47891:19;;47550:366;;;:::o;47922:419::-;48088:4;48126:2;48115:9;48111:18;48103:26;;48175:9;48169:4;48165:20;48161:1;48150:9;48146:17;48139:47;48203:131;48329:4;48203:131;:::i;:::-;48195:139;;47922:419;;;:::o;48347:221::-;48487:34;48483:1;48475:6;48471:14;48464:58;48556:4;48551:2;48543:6;48539:15;48532:29;48347:221;:::o;48574:366::-;48716:3;48737:67;48801:2;48796:3;48737:67;:::i;:::-;48730:74;;48813:93;48902:3;48813:93;:::i;:::-;48931:2;48926:3;48922:12;48915:19;;48574:366;;;:::o;48946:419::-;49112:4;49150:2;49139:9;49135:18;49127:26;;49199:9;49193:4;49189:20;49185:1;49174:9;49170:17;49163:47;49227:131;49353:4;49227:131;:::i;:::-;49219:139;;48946:419;;;:::o;49371:221::-;49511:34;49507:1;49499:6;49495:14;49488:58;49580:4;49575:2;49567:6;49563:15;49556:29;49371:221;:::o;49598:366::-;49740:3;49761:67;49825:2;49820:3;49761:67;:::i;:::-;49754:74;;49837:93;49926:3;49837:93;:::i;:::-;49955:2;49950:3;49946:12;49939:19;;49598:366;;;:::o;49970:419::-;50136:4;50174:2;50163:9;50159:18;50151:26;;50223:9;50217:4;50213:20;50209:1;50198:9;50194:17;50187:47;50251:131;50377:4;50251:131;:::i;:::-;50243:139;;49970:419;;;:::o;50395:86::-;50430:7;50470:4;50463:5;50459:16;50448:27;;50395:86;;;:::o;50487:112::-;50570:22;50586:5;50570:22;:::i;:::-;50565:3;50558:35;50487:112;;:::o;50605:545::-;50778:4;50816:3;50805:9;50801:19;50793:27;;50830:71;50898:1;50887:9;50883:17;50874:6;50830:71;:::i;:::-;50911:68;50975:2;50964:9;50960:18;50951:6;50911:68;:::i;:::-;50989:72;51057:2;51046:9;51042:18;51033:6;50989:72;:::i;:::-;51071;51139:2;51128:9;51124:18;51115:6;51071:72;:::i;:::-;50605:545;;;;;;;:::o
Swarm Source
ipfs://ae3119776cb9963b2965ef18968613a0a3dd1dd8e285c3a7a1c129600707a40f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.