Overview
TokenID
54
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
WINTERMEMORIES
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-03-10 */ // File: @openzeppelin/[email protected]/interfaces/draft-IERC6093.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // File: @openzeppelin/[email protected]/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/[email protected]/utils/math/Math.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } } // File: @openzeppelin/[email protected]/utils/Strings.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; 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_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } 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); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } } // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.20; /** * @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/[email protected]/utils/introspection/IERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @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/[email protected]/interfaces/IERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol) pragma solidity ^0.8.20; // File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; /** * @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); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/[email protected]/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; /** * @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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * 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 address zero. * * 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/[email protected]/interfaces/IERC721.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721.sol) pragma solidity ^0.8.20; // File: @openzeppelin/[email protected]/interfaces/IERC4906.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4906.sol) pragma solidity ^0.8.20; /// @title EIP-721 Metadata Update Extension interface IERC4906 is IERC165, IERC721 { /// @dev This event emits when the metadata of a token is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFT. event MetadataUpdate(uint256 _tokenId); /// @dev This event emits when the metadata of a range of tokens is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFTs. event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId); } // File: @openzeppelin/[email protected]/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.20; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/[email protected]/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.20; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors { using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; mapping(uint256 tokenId => address) private _owners; mapping(address owner => uint256) private _balances; mapping(uint256 tokenId => address) private _tokenApprovals; mapping(address owner => mapping(address operator => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual returns (uint256) { if (owner == address(0)) { revert ERC721InvalidOwner(address(0)); } return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual returns (address) { return _requireOwned(tokenId); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual returns (string memory) { _requireOwned(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string.concat(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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual { _approve(to, tokenId, _msgSender()); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual returns (address) { _requireOwned(tokenId); return _getApproved(tokenId); } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual { if (to == address(0)) { revert ERC721InvalidReceiver(address(0)); } // Setting an "auth" arguments enables the `_isAuthorized` check which verifies that the token exists // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here. address previousOwner = _update(to, tokenId, _msgSender()); if (previousOwner != from) { revert ERC721IncorrectOwner(from, tokenId, previousOwner); } } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual { transferFrom(from, to, tokenId); _checkOnERC721Received(from, to, tokenId, data); } /** * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist * * IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the * core ERC721 logic MUST be matched with the use of {_increaseBalance} to keep balances * consistent with ownership. The invariant to preserve is that for any address `a` the value returned by * `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`. */ function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } /** * @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted. */ function _getApproved(uint256 tokenId) internal view virtual returns (address) { return _tokenApprovals[tokenId]; } /** * @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in * particular (ignoring whether it is owned by `owner`). * * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this * assumption. */ function _isAuthorized(address owner, address spender, uint256 tokenId) internal view virtual returns (bool) { return spender != address(0) && (owner == spender || isApprovedForAll(owner, spender) || _getApproved(tokenId) == spender); } /** * @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner. * Reverts if `spender` does not have approval from the provided `owner` for the given token or for all its assets * the `spender` for the specific `tokenId`. * * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this * assumption. */ function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual { if (!_isAuthorized(owner, spender, tokenId)) { if (owner == address(0)) { revert ERC721NonexistentToken(tokenId); } else { revert ERC721InsufficientApproval(spender, tokenId); } } } /** * @dev Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override. * * NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that * a uint256 would ever overflow from increments when these increments are bounded to uint128 values. * * WARNING: Increasing an account's balance using this function tends to be paired with an override of the * {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership * remain consistent with one another. */ function _increaseBalance(address account, uint128 value) internal virtual { unchecked { _balances[account] += value; } } /** * @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner * (or `to`) is the zero address. Returns the owner of the `tokenId` before the update. * * The `auth` argument is optional. If the value passed is non 0, then this function will check that * `auth` is either the owner of the token, or approved to operate on the token (by the owner). * * Emits a {Transfer} event. * * NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}. */ function _update(address to, uint256 tokenId, address auth) internal virtual returns (address) { address from = _ownerOf(tokenId); // Perform (optional) operator check if (auth != address(0)) { _checkAuthorized(from, auth, tokenId); } // Execute the update if (from != address(0)) { // Clear approval. No need to re-authorize or emit the Approval event _approve(address(0), tokenId, address(0), false); unchecked { _balances[from] -= 1; } } if (to != address(0)) { unchecked { _balances[to] += 1; } } _owners[tokenId] = to; emit Transfer(from, to, tokenId); return from; } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal { if (to == address(0)) { revert ERC721InvalidReceiver(address(0)); } address previousOwner = _update(to, tokenId, address(0)); if (previousOwner != address(0)) { revert ERC721InvalidSender(address(0)); } } /** * @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual { _mint(to, tokenId); _checkOnERC721Received(address(0), to, tokenId, data); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * This is an internal function that does not check if the sender is authorized to operate on the token. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal { address previousOwner = _update(address(0), tokenId, address(0)); if (previousOwner == address(0)) { revert ERC721NonexistentToken(tokenId); } } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal { if (to == address(0)) { revert ERC721InvalidReceiver(address(0)); } address previousOwner = _update(to, tokenId, address(0)); if (previousOwner == address(0)) { revert ERC721NonexistentToken(tokenId); } else if (previousOwner != from) { revert ERC721IncorrectOwner(from, tokenId, previousOwner); } } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients * are aware of the ERC721 standard to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is like {safeTransferFrom} in the sense that it invokes * {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `tokenId` token must exist and be owned by `from`. * - `to` cannot be the zero address. * - `from` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId) internal { _safeTransfer(from, to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual { _transfer(from, to, tokenId); _checkOnERC721Received(from, to, tokenId, data); } /** * @dev Approve `to` to operate on `tokenId` * * The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is * either the owner of the token, or approved to operate on all tokens held by this owner. * * Emits an {Approval} event. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address to, uint256 tokenId, address auth) internal virtual { _approve(to, tokenId, auth, true); } /** * @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not * emitted in the context of transfers. */ function _approve(address to, uint256 tokenId, address auth, bool emitEvent) internal virtual { // Avoid reading the owner unless necessary if (emitEvent || auth != address(0)) { address owner = _requireOwned(tokenId); // We do not use _isAuthorized because single-token approvals should not be able to call approve if (auth != address(0) && owner != auth && !isApprovedForAll(owner, auth)) { revert ERC721InvalidApprover(auth); } if (emitEvent) { emit Approval(owner, to, tokenId); } } _tokenApprovals[tokenId] = to; } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Requirements: * - operator can't be the address zero. * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll(address owner, address operator, bool approved) internal virtual { if (operator == address(0)) { revert ERC721InvalidOperator(operator); } _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned). * Returns the owner. * * Overrides to ownership logic should be done to {_ownerOf}. */ function _requireOwned(uint256 tokenId) internal view returns (address) { address owner = _ownerOf(tokenId); if (owner == address(0)) { revert ERC721NonexistentToken(tokenId); } return owner; } /** * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target address. This will revert if the * recipient doesn't accept the token transfer. 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 */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private { if (to.code.length > 0) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { if (retval != IERC721Receiver.onERC721Received.selector) { revert ERC721InvalidReceiver(to); } } catch (bytes memory reason) { if (reason.length == 0) { revert ERC721InvalidReceiver(to); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } } } // File: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.20; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is IERC4906, ERC721 { using Strings for uint256; // Interface ID as defined in ERC-4906. This does not correspond to a traditional interface ID as ERC-4906 only // defines events and does not include any external function. bytes4 private constant ERC4906_INTERFACE_ID = bytes4(0x49064906); // Optional mapping for token URIs mapping(uint256 tokenId => string) private _tokenURIs; /** * @dev See {IERC165-supportsInterface} */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, IERC165) returns (bool) { return interfaceId == ERC4906_INTERFACE_ID || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireOwned(tokenId); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via string.concat). if (bytes(_tokenURI).length > 0) { return string.concat(base, _tokenURI); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Emits {MetadataUpdate}. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { _tokenURIs[tokenId] = _tokenURI; emit MetadataUpdate(tokenId); } } // File: @chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); } // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.20; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. * * NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the * royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers. */ function royaltyInfo( uint256 tokenId, uint256 salePrice ) external view returns (address receiver, uint256 royaltyAmount); } // Compatible with OpenZeppelin Contracts ^5.0.0 pragma solidity ^0.8.20; contract WINTERMEMORIES is ERC721, ERC721URIStorage, Ownable, IERC2981 { uint256 private _nextTokenId; mapping(address=>bool) allowedSaleContract; address private aiowAddress = 0x9aC26D5af386f5950D3D94476aFB4060325c6976; uint256 private _totalSupply = 72; bool public isHidden = true; string public hiddenUri = "https://dpw988cyzvmfj.cloudfront.net/hidden-images/67af64783bd3fe413f416525"; address royaltyWallet = 0x2e407a65DC925cb9884CfF588e0EF1814e221466; uint96 royaltyFraction = 1000; uint96 private constant FEE_DENOMINATOR = 10000; // 100% = 10,000 basis points constructor(address initialOwner) ERC721("Winter Memories", "WNTR") Ownable(initialOwner) { allowedSaleContract[0xE66F3E2F2D5aEC2a7Bdc2835BD9aAB853e39799A] = true; } function safeMint(address to, string memory uri) external onlySaleContract { uint256 tokenId = _nextTokenId++; _safeMint(to, tokenId); _setTokenURI(tokenId, uri); } function mint(address to, string memory uri) external onlySaleContract returns (uint256) { require(_totalSupply > _nextTokenId, "All token minted"); uint256 tokenId = _nextTokenId++; _mint(to, tokenId); _setTokenURI(tokenId, uri); return tokenId; } modifier onlySaleContract() { require(allowedSaleContract[msg.sender]); _; } modifier onlyAiow() { require(msg.sender == aiowAddress); _; } function addSaleContract(address saleContract, bool approved) public onlyAiow { allowedSaleContract[saleContract]=approved; } function changeAiowAddress(address _aiowAddress) public onlyAiow { aiowAddress = _aiowAddress; } function changeHiddenImage(string memory uri) public onlyOwner { hiddenUri = uri; } function setTokenUrl(uint256 tokenId, string memory uri) public onlyOwner { _setTokenURI(tokenId, uri); } function unHide() public onlyOwner { isHidden = false; } // The following functions are overrides required by Solidity. function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { if (isHidden) { return hiddenUri; } return super.tokenURI(tokenId); } function totalSupply() public view returns (uint256) { return _nextTokenId; } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721URIStorage, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function setRoyalty(address recipient, uint96 royaltyPercentage) external onlyOwner { require(royaltyPercentage <= FEE_DENOMINATOR, "Royalty percentage too high"); royaltyFraction = royaltyPercentage; royaltyWallet = recipient; } // EIP-2981 royaltyInfo function function royaltyInfo(uint256 tokenId, uint256 salePrice) external view override returns (address, uint256) { uint256 royaltyAmount = (salePrice * royaltyFraction) / FEE_DENOMINATOR; return (royaltyWallet, royaltyAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"saleContract","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"addSaleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_aiowAddress","type":"address"}],"name":"changeAiowAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"changeHiddenImage","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":[],"name":"hiddenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isHidden","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint96","name":"royaltyPercentage","type":"uint96"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"setTokenUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unHide","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052739ac26d5af386f5950d3d94476afb4060325c6976600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506048600b556001600c60006101000a81548160ff0219169083151502179055506040518060800160405280604b815260200162003917604b9139600d9081620000a391906200062c565b50732e407a65dc925cb9884cff588e0ef1814e221466600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e8600e60146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055503480156200013957600080fd5b50604051620039623803806200396283398181016040528101906200015f91906200077d565b806040518060400160405280600f81526020017f57696e746572204d656d6f7269657300000000000000000000000000000000008152506040518060400160405280600481526020017f574e5452000000000000000000000000000000000000000000000000000000008152508160009081620001dd91906200062c565b508060019081620001ef91906200062c565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620002675760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200025e9190620007c0565b60405180910390fd5b6200027881620002ec60201b60201c565b5060016009600073e66f3e2f2d5aec2a7bdc2835bd9aab853e39799a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050620007dd565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200043457607f821691505b6020821081036200044a5762000449620003ec565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000475565b620004c0868362000475565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200050d620005076200050184620004d8565b620004e2565b620004d8565b9050919050565b6000819050919050565b6200052983620004ec565b62000541620005388262000514565b84845462000482565b825550505050565b600090565b6200055862000549565b620005658184846200051e565b505050565b5b818110156200058d57620005816000826200054e565b6001810190506200056b565b5050565b601f821115620005dc57620005a68162000450565b620005b18462000465565b81016020851015620005c1578190505b620005d9620005d08562000465565b8301826200056a565b50505b505050565b600082821c905092915050565b60006200060160001984600802620005e1565b1980831691505092915050565b60006200061c8383620005ee565b9150826002028217905092915050565b6200063782620003b2565b67ffffffffffffffff811115620006535762000652620003bd565b5b6200065f82546200041b565b6200066c82828562000591565b600060209050601f831160018114620006a457600084156200068f578287015190505b6200069b85826200060e565b8655506200070b565b601f198416620006b48662000450565b60005b82811015620006de57848901518255600182019150602085019450602081019050620006b7565b86831015620006fe5784890151620006fa601f891682620005ee565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007458262000718565b9050919050565b620007578162000738565b81146200076357600080fd5b50565b60008151905062000777816200074c565b92915050565b60006020828403121562000796576200079562000713565b5b6000620007a68482850162000766565b91505092915050565b620007ba8162000738565b82525050565b6000602082019050620007d76000830184620007af565b92915050565b61312a80620007ed6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638da5cb5b116100f9578063bd0bc04711610097578063d0def52111610071578063d0def521146104ca578063d204c45e146104fa578063e985e9c514610516578063f2fde38b14610546576101c4565b8063bd0bc04714610460578063c5be87501461047c578063c87b56dd1461049a576101c4565b806395d89b41116100d357806395d89b41146103ec578063a22cb4651461040a578063aeca06ab14610426578063b88d4fde14610444576101c4565b80638da5cb5b146103965780638e6fcd32146103b45780638f2fc60b146103d0576101c4565b806334d1c641116101665780636352211e116101405780636352211e1461032257806370a0823114610352578063715018a6146103825780637f8b1e0e1461038c576101c4565b806334d1c641146102ce57806342842e0e146102ea578063524cad9814610306576101c4565b8063095ea7b3116101a2578063095ea7b31461024757806318160ddd1461026357806323b872dd146102815780632a55205a1461029d576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de91906122ce565b610562565b6040516101f09190612316565b60405180910390f35b6102016105dc565b60405161020e91906123c1565b60405180910390f35b610231600480360381019061022c9190612419565b61066e565b60405161023e9190612487565b60405180910390f35b610261600480360381019061025c91906124ce565b61068a565b005b61026b6106a0565b604051610278919061251d565b60405180910390f35b61029b60048036038101906102969190612538565b6106aa565b005b6102b760048036038101906102b2919061258b565b6107ac565b6040516102c59291906125cb565b60405180910390f35b6102e860048036038101906102e39190612729565b610832565b005b61030460048036038101906102ff9190612538565b610848565b005b610320600480360381019061031b9190612785565b610868565b005b61033c60048036038101906103379190612419565b610906565b6040516103499190612487565b60405180910390f35b61036c60048036038101906103679190612785565b610918565b604051610379919061251d565b60405180910390f35b61038a6109d2565b005b6103946109e6565b005b61039e610a0b565b6040516103ab9190612487565b60405180910390f35b6103ce60048036038101906103c991906127de565b610a35565b005b6103ea60048036038101906103e59190612862565b610aea565b005b6103f4610bc9565b60405161040191906123c1565b60405180910390f35b610424600480360381019061041f91906127de565b610c5b565b005b61042e610c71565b60405161043b9190612316565b60405180910390f35b61045e60048036038101906104599190612943565b610c84565b005b61047a600480360381019061047591906129c6565b610ca1565b005b610484610cbc565b60405161049191906123c1565b60405180910390f35b6104b460048036038101906104af9190612419565b610d4a565b6040516104c191906123c1565b60405180910390f35b6104e460048036038101906104df9190612a0f565b610e04565b6040516104f1919061251d565b60405180910390f35b610514600480360381019061050f9190612a0f565b610edb565b005b610530600480360381019061052b9190612a6b565b610f65565b60405161053d9190612316565b60405180910390f35b610560600480360381019061055b9190612785565b610ff9565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d557506105d48261107f565b5b9050919050565b6060600080546105eb90612ada565b80601f016020809104026020016040519081016040528092919081815260200182805461061790612ada565b80156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b6000610679826110e0565b5061068382611168565b9050919050565b61069c82826106976111a5565b6111ad565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361071c5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016107139190612487565b60405180910390fd5b6000610730838361072b6111a5565b6111bf565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107a6578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161079d93929190612b0b565b60405180910390fd5b50505050565b60008060006127106bffffffffffffffffffffffff16600e60149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16856107f69190612b71565b6108009190612be2565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168192509250509250929050565b61083a6113d9565b6108448282611460565b5050565b61086383838360405180602001604052806000815250610c84565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c257600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610911826110e0565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361098b5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016109829190612487565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109da6113d9565b6109e460006114bc565b565b6109ee6113d9565b6000600c60006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a8f57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610af26113d9565b6127106bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90612c5f565b60405180910390fd5b80600e60146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060018054610bd890612ada565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0490612ada565b8015610c515780601f10610c2657610100808354040283529160200191610c51565b820191906000526020600020905b815481529060010190602001808311610c3457829003601f168201915b5050505050905090565b610c6d610c666111a5565b8383611582565b5050565b600c60009054906101000a900460ff1681565b610c8f8484846106aa565b610c9b848484846116f1565b50505050565b610ca96113d9565b80600d9081610cb89190612e2b565b5050565b600d8054610cc990612ada565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf590612ada565b8015610d425780601f10610d1757610100808354040283529160200191610d42565b820191906000526020600020905b815481529060010190602001808311610d2557829003601f168201915b505050505081565b6060600c60009054906101000a900460ff1615610df357600d8054610d6e90612ada565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9a90612ada565b8015610de75780601f10610dbc57610100808354040283529160200191610de7565b820191906000526020600020905b815481529060010190602001808311610dca57829003601f168201915b50505050509050610dff565b610dfc826118a8565b90505b919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e5c57600080fd5b600854600b5411610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990612f49565b60405180910390fd5b600060086000815480929190610eb790612f69565b919050559050610ec784826119bb565b610ed18184611460565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f3157600080fd5b600060086000815480929190610f4690612f69565b919050559050610f568382611ab4565b610f608183611460565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110016113d9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110735760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161106a9190612487565b60405180910390fd5b61107c816114bc565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806110d957506110d882611ad2565b5b9050919050565b6000806110ec83611bb4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361115f57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611156919061251d565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6111ba8383836001611bf1565b505050565b6000806111cb84611bb4565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461120d5761120c818486611db6565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461129e5761124f600085600080611bf1565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611321576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6113e16111a5565b73ffffffffffffffffffffffffffffffffffffffff166113ff610a0b565b73ffffffffffffffffffffffffffffffffffffffff161461145e576114226111a5565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016114559190612487565b60405180910390fd5b565b806006600084815260200190815260200160002090816114809190612e2b565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516114b0919061251d565b60405180910390a15050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115f357816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016115ea9190612487565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116e49190612316565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b11156118a2578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026117356111a5565b8685856040518563ffffffff1660e01b81526004016117579493929190613006565b6020604051808303816000875af192505050801561179357506040513d601f19601f820116820180604052508101906117909190613067565b60015b611817573d80600081146117c3576040519150601f19603f3d011682016040523d82523d6000602084013e6117c8565b606091505b50600081510361180f57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118069190612487565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146118a057836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118979190612487565b60405180910390fd5b505b50505050565b60606118b3826110e0565b5060006006600084815260200190815260200160002080546118d490612ada565b80601f016020809104026020016040519081016040528092919081815260200182805461190090612ada565b801561194d5780601f106119225761010080835404028352916020019161194d565b820191906000526020600020905b81548152906001019060200180831161193057829003601f168201915b50505050509050600061195e611e7a565b905060008151036119735781925050506119b6565b6000825111156119a85780826040516020016119909291906130d0565b604051602081830303815290604052925050506119b6565b6119b184611e91565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a2d5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611a249190612487565b60405180910390fd5b6000611a3b838360006111bf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611aaf5760006040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611aa69190612487565b60405180910390fd5b505050565b611ace828260405180602001604052806000815250611efa565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b9d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bad5750611bac82611f16565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611c2a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611d5e576000611c3a846110e0565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ca557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611cb85750611cb68184610f65565b155b15611cfa57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611cf19190612487565b60405180910390fd5b8115611d5c57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611dc1838383611f80565b611e7557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e3657806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611e2d919061251d565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611e6c9291906125cb565b60405180910390fd5b505050565b606060405180602001604052806000815250905090565b6060611e9c826110e0565b506000611ea7611e7a565b90506000815111611ec75760405180602001604052806000815250611ef2565b80611ed184612041565b604051602001611ee29291906130d0565b6040516020818303038152906040525b915050919050565b611f0483836119bb565b611f1160008484846116f1565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561203857508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ff95750611ff88484610f65565b5b8061203757508273ffffffffffffffffffffffffffffffffffffffff1661201f83611168565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6060600060016120508461210f565b01905060008167ffffffffffffffff81111561206f5761206e6125fe565b5b6040519080825280601f01601f1916602001820160405280156120a15781602001600182028036833780820191505090505b509050600082602001820190505b600115612104578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120f8576120f7612bb3565b5b049450600085036120af575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061216d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161216357612162612bb3565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106121aa576d04ee2d6d415b85acef810000000083816121a05761219f612bb3565b5b0492506020810190505b662386f26fc1000083106121d957662386f26fc1000083816121cf576121ce612bb3565b5b0492506010810190505b6305f5e1008310612202576305f5e10083816121f8576121f7612bb3565b5b0492506008810190505b612710831061222757612710838161221d5761221c612bb3565b5b0492506004810190505b6064831061224a57606483816122405761223f612bb3565b5b0492506002810190505b600a8310612259576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6122ab81612276565b81146122b657600080fd5b50565b6000813590506122c8816122a2565b92915050565b6000602082840312156122e4576122e361226c565b5b60006122f2848285016122b9565b91505092915050565b60008115159050919050565b612310816122fb565b82525050565b600060208201905061232b6000830184612307565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561236b578082015181840152602081019050612350565b60008484015250505050565b6000601f19601f8301169050919050565b600061239382612331565b61239d818561233c565b93506123ad81856020860161234d565b6123b681612377565b840191505092915050565b600060208201905081810360008301526123db8184612388565b905092915050565b6000819050919050565b6123f6816123e3565b811461240157600080fd5b50565b600081359050612413816123ed565b92915050565b60006020828403121561242f5761242e61226c565b5b600061243d84828501612404565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061247182612446565b9050919050565b61248181612466565b82525050565b600060208201905061249c6000830184612478565b92915050565b6124ab81612466565b81146124b657600080fd5b50565b6000813590506124c8816124a2565b92915050565b600080604083850312156124e5576124e461226c565b5b60006124f3858286016124b9565b925050602061250485828601612404565b9150509250929050565b612517816123e3565b82525050565b6000602082019050612532600083018461250e565b92915050565b6000806000606084860312156125515761255061226c565b5b600061255f868287016124b9565b9350506020612570868287016124b9565b925050604061258186828701612404565b9150509250925092565b600080604083850312156125a2576125a161226c565b5b60006125b085828601612404565b92505060206125c185828601612404565b9150509250929050565b60006040820190506125e06000830185612478565b6125ed602083018461250e565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61263682612377565b810181811067ffffffffffffffff82111715612655576126546125fe565b5b80604052505050565b6000612668612262565b9050612674828261262d565b919050565b600067ffffffffffffffff821115612694576126936125fe565b5b61269d82612377565b9050602081019050919050565b82818337600083830152505050565b60006126cc6126c784612679565b61265e565b9050828152602081018484840111156126e8576126e76125f9565b5b6126f38482856126aa565b509392505050565b600082601f8301126127105761270f6125f4565b5b81356127208482602086016126b9565b91505092915050565b600080604083850312156127405761273f61226c565b5b600061274e85828601612404565b925050602083013567ffffffffffffffff81111561276f5761276e612271565b5b61277b858286016126fb565b9150509250929050565b60006020828403121561279b5761279a61226c565b5b60006127a9848285016124b9565b91505092915050565b6127bb816122fb565b81146127c657600080fd5b50565b6000813590506127d8816127b2565b92915050565b600080604083850312156127f5576127f461226c565b5b6000612803858286016124b9565b9250506020612814858286016127c9565b9150509250929050565b60006bffffffffffffffffffffffff82169050919050565b61283f8161281e565b811461284a57600080fd5b50565b60008135905061285c81612836565b92915050565b600080604083850312156128795761287861226c565b5b6000612887858286016124b9565b92505060206128988582860161284d565b9150509250929050565b600067ffffffffffffffff8211156128bd576128bc6125fe565b5b6128c682612377565b9050602081019050919050565b60006128e66128e1846128a2565b61265e565b905082815260208101848484011115612902576129016125f9565b5b61290d8482856126aa565b509392505050565b600082601f83011261292a576129296125f4565b5b813561293a8482602086016128d3565b91505092915050565b6000806000806080858703121561295d5761295c61226c565b5b600061296b878288016124b9565b945050602061297c878288016124b9565b935050604061298d87828801612404565b925050606085013567ffffffffffffffff8111156129ae576129ad612271565b5b6129ba87828801612915565b91505092959194509250565b6000602082840312156129dc576129db61226c565b5b600082013567ffffffffffffffff8111156129fa576129f9612271565b5b612a06848285016126fb565b91505092915050565b60008060408385031215612a2657612a2561226c565b5b6000612a34858286016124b9565b925050602083013567ffffffffffffffff811115612a5557612a54612271565b5b612a61858286016126fb565b9150509250929050565b60008060408385031215612a8257612a8161226c565b5b6000612a90858286016124b9565b9250506020612aa1858286016124b9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612af257607f821691505b602082108103612b0557612b04612aab565b5b50919050565b6000606082019050612b206000830186612478565b612b2d602083018561250e565b612b3a6040830184612478565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b7c826123e3565b9150612b87836123e3565b9250828202612b95816123e3565b91508282048414831517612bac57612bab612b42565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bed826123e3565b9150612bf8836123e3565b925082612c0857612c07612bb3565b5b828204905092915050565b7f526f79616c74792070657263656e7461676520746f6f20686967680000000000600082015250565b6000612c49601b8361233c565b9150612c5482612c13565b602082019050919050565b60006020820190508181036000830152612c7881612c3c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612ce17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612ca4565b612ceb8683612ca4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612d28612d23612d1e846123e3565b612d03565b6123e3565b9050919050565b6000819050919050565b612d4283612d0d565b612d56612d4e82612d2f565b848454612cb1565b825550505050565b600090565b612d6b612d5e565b612d76818484612d39565b505050565b5b81811015612d9a57612d8f600082612d63565b600181019050612d7c565b5050565b601f821115612ddf57612db081612c7f565b612db984612c94565b81016020851015612dc8578190505b612ddc612dd485612c94565b830182612d7b565b50505b505050565b600082821c905092915050565b6000612e0260001984600802612de4565b1980831691505092915050565b6000612e1b8383612df1565b9150826002028217905092915050565b612e3482612331565b67ffffffffffffffff811115612e4d57612e4c6125fe565b5b612e578254612ada565b612e62828285612d9e565b600060209050601f831160018114612e955760008415612e83578287015190505b612e8d8582612e0f565b865550612ef5565b601f198416612ea386612c7f565b60005b82811015612ecb57848901518255600182019150602085019450602081019050612ea6565b86831015612ee85784890151612ee4601f891682612df1565b8355505b6001600288020188555050505b505050505050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b6000612f3360108361233c565b9150612f3e82612efd565b602082019050919050565b60006020820190508181036000830152612f6281612f26565b9050919050565b6000612f74826123e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fa657612fa5612b42565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000612fd882612fb1565b612fe28185612fbc565b9350612ff281856020860161234d565b612ffb81612377565b840191505092915050565b600060808201905061301b6000830187612478565b6130286020830186612478565b613035604083018561250e565b81810360608301526130478184612fcd565b905095945050505050565b600081519050613061816122a2565b92915050565b60006020828403121561307d5761307c61226c565b5b600061308b84828501613052565b91505092915050565b600081905092915050565b60006130aa82612331565b6130b48185613094565b93506130c481856020860161234d565b80840191505092915050565b60006130dc828561309f565b91506130e8828461309f565b9150819050939250505056fea26469706673582212203101dad605e0eea3b3ceb2492a47b4f9bc480cf98072d00461c56663d64fa45464736f6c6343000818003368747470733a2f2f64707739383863797a766d666a2e636c6f756466726f6e742e6e65742f68696464656e2d696d616765732f3637616636343738336264336665343133663431363532350000000000000000000000002e407a65dc925cb9884cff588e0ef1814e221466
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80638da5cb5b116100f9578063bd0bc04711610097578063d0def52111610071578063d0def521146104ca578063d204c45e146104fa578063e985e9c514610516578063f2fde38b14610546576101c4565b8063bd0bc04714610460578063c5be87501461047c578063c87b56dd1461049a576101c4565b806395d89b41116100d357806395d89b41146103ec578063a22cb4651461040a578063aeca06ab14610426578063b88d4fde14610444576101c4565b80638da5cb5b146103965780638e6fcd32146103b45780638f2fc60b146103d0576101c4565b806334d1c641116101665780636352211e116101405780636352211e1461032257806370a0823114610352578063715018a6146103825780637f8b1e0e1461038c576101c4565b806334d1c641146102ce57806342842e0e146102ea578063524cad9814610306576101c4565b8063095ea7b3116101a2578063095ea7b31461024757806318160ddd1461026357806323b872dd146102815780632a55205a1461029d576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de91906122ce565b610562565b6040516101f09190612316565b60405180910390f35b6102016105dc565b60405161020e91906123c1565b60405180910390f35b610231600480360381019061022c9190612419565b61066e565b60405161023e9190612487565b60405180910390f35b610261600480360381019061025c91906124ce565b61068a565b005b61026b6106a0565b604051610278919061251d565b60405180910390f35b61029b60048036038101906102969190612538565b6106aa565b005b6102b760048036038101906102b2919061258b565b6107ac565b6040516102c59291906125cb565b60405180910390f35b6102e860048036038101906102e39190612729565b610832565b005b61030460048036038101906102ff9190612538565b610848565b005b610320600480360381019061031b9190612785565b610868565b005b61033c60048036038101906103379190612419565b610906565b6040516103499190612487565b60405180910390f35b61036c60048036038101906103679190612785565b610918565b604051610379919061251d565b60405180910390f35b61038a6109d2565b005b6103946109e6565b005b61039e610a0b565b6040516103ab9190612487565b60405180910390f35b6103ce60048036038101906103c991906127de565b610a35565b005b6103ea60048036038101906103e59190612862565b610aea565b005b6103f4610bc9565b60405161040191906123c1565b60405180910390f35b610424600480360381019061041f91906127de565b610c5b565b005b61042e610c71565b60405161043b9190612316565b60405180910390f35b61045e60048036038101906104599190612943565b610c84565b005b61047a600480360381019061047591906129c6565b610ca1565b005b610484610cbc565b60405161049191906123c1565b60405180910390f35b6104b460048036038101906104af9190612419565b610d4a565b6040516104c191906123c1565b60405180910390f35b6104e460048036038101906104df9190612a0f565b610e04565b6040516104f1919061251d565b60405180910390f35b610514600480360381019061050f9190612a0f565b610edb565b005b610530600480360381019061052b9190612a6b565b610f65565b60405161053d9190612316565b60405180910390f35b610560600480360381019061055b9190612785565b610ff9565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d557506105d48261107f565b5b9050919050565b6060600080546105eb90612ada565b80601f016020809104026020016040519081016040528092919081815260200182805461061790612ada565b80156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b6000610679826110e0565b5061068382611168565b9050919050565b61069c82826106976111a5565b6111ad565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361071c5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016107139190612487565b60405180910390fd5b6000610730838361072b6111a5565b6111bf565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107a6578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161079d93929190612b0b565b60405180910390fd5b50505050565b60008060006127106bffffffffffffffffffffffff16600e60149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16856107f69190612b71565b6108009190612be2565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168192509250509250929050565b61083a6113d9565b6108448282611460565b5050565b61086383838360405180602001604052806000815250610c84565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c257600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610911826110e0565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361098b5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016109829190612487565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109da6113d9565b6109e460006114bc565b565b6109ee6113d9565b6000600c60006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a8f57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610af26113d9565b6127106bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90612c5f565b60405180910390fd5b80600e60146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060018054610bd890612ada565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0490612ada565b8015610c515780601f10610c2657610100808354040283529160200191610c51565b820191906000526020600020905b815481529060010190602001808311610c3457829003601f168201915b5050505050905090565b610c6d610c666111a5565b8383611582565b5050565b600c60009054906101000a900460ff1681565b610c8f8484846106aa565b610c9b848484846116f1565b50505050565b610ca96113d9565b80600d9081610cb89190612e2b565b5050565b600d8054610cc990612ada565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf590612ada565b8015610d425780601f10610d1757610100808354040283529160200191610d42565b820191906000526020600020905b815481529060010190602001808311610d2557829003601f168201915b505050505081565b6060600c60009054906101000a900460ff1615610df357600d8054610d6e90612ada565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9a90612ada565b8015610de75780601f10610dbc57610100808354040283529160200191610de7565b820191906000526020600020905b815481529060010190602001808311610dca57829003601f168201915b50505050509050610dff565b610dfc826118a8565b90505b919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e5c57600080fd5b600854600b5411610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990612f49565b60405180910390fd5b600060086000815480929190610eb790612f69565b919050559050610ec784826119bb565b610ed18184611460565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f3157600080fd5b600060086000815480929190610f4690612f69565b919050559050610f568382611ab4565b610f608183611460565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110016113d9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110735760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161106a9190612487565b60405180910390fd5b61107c816114bc565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806110d957506110d882611ad2565b5b9050919050565b6000806110ec83611bb4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361115f57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611156919061251d565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6111ba8383836001611bf1565b505050565b6000806111cb84611bb4565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461120d5761120c818486611db6565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461129e5761124f600085600080611bf1565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611321576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6113e16111a5565b73ffffffffffffffffffffffffffffffffffffffff166113ff610a0b565b73ffffffffffffffffffffffffffffffffffffffff161461145e576114226111a5565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016114559190612487565b60405180910390fd5b565b806006600084815260200190815260200160002090816114809190612e2b565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516114b0919061251d565b60405180910390a15050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115f357816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016115ea9190612487565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116e49190612316565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b11156118a2578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026117356111a5565b8685856040518563ffffffff1660e01b81526004016117579493929190613006565b6020604051808303816000875af192505050801561179357506040513d601f19601f820116820180604052508101906117909190613067565b60015b611817573d80600081146117c3576040519150601f19603f3d011682016040523d82523d6000602084013e6117c8565b606091505b50600081510361180f57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118069190612487565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146118a057836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118979190612487565b60405180910390fd5b505b50505050565b60606118b3826110e0565b5060006006600084815260200190815260200160002080546118d490612ada565b80601f016020809104026020016040519081016040528092919081815260200182805461190090612ada565b801561194d5780601f106119225761010080835404028352916020019161194d565b820191906000526020600020905b81548152906001019060200180831161193057829003601f168201915b50505050509050600061195e611e7a565b905060008151036119735781925050506119b6565b6000825111156119a85780826040516020016119909291906130d0565b604051602081830303815290604052925050506119b6565b6119b184611e91565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a2d5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611a249190612487565b60405180910390fd5b6000611a3b838360006111bf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611aaf5760006040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611aa69190612487565b60405180910390fd5b505050565b611ace828260405180602001604052806000815250611efa565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b9d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bad5750611bac82611f16565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611c2a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611d5e576000611c3a846110e0565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ca557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611cb85750611cb68184610f65565b155b15611cfa57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611cf19190612487565b60405180910390fd5b8115611d5c57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611dc1838383611f80565b611e7557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e3657806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611e2d919061251d565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611e6c9291906125cb565b60405180910390fd5b505050565b606060405180602001604052806000815250905090565b6060611e9c826110e0565b506000611ea7611e7a565b90506000815111611ec75760405180602001604052806000815250611ef2565b80611ed184612041565b604051602001611ee29291906130d0565b6040516020818303038152906040525b915050919050565b611f0483836119bb565b611f1160008484846116f1565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561203857508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ff95750611ff88484610f65565b5b8061203757508273ffffffffffffffffffffffffffffffffffffffff1661201f83611168565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6060600060016120508461210f565b01905060008167ffffffffffffffff81111561206f5761206e6125fe565b5b6040519080825280601f01601f1916602001820160405280156120a15781602001600182028036833780820191505090505b509050600082602001820190505b600115612104578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120f8576120f7612bb3565b5b049450600085036120af575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061216d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161216357612162612bb3565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106121aa576d04ee2d6d415b85acef810000000083816121a05761219f612bb3565b5b0492506020810190505b662386f26fc1000083106121d957662386f26fc1000083816121cf576121ce612bb3565b5b0492506010810190505b6305f5e1008310612202576305f5e10083816121f8576121f7612bb3565b5b0492506008810190505b612710831061222757612710838161221d5761221c612bb3565b5b0492506004810190505b6064831061224a57606483816122405761223f612bb3565b5b0492506002810190505b600a8310612259576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6122ab81612276565b81146122b657600080fd5b50565b6000813590506122c8816122a2565b92915050565b6000602082840312156122e4576122e361226c565b5b60006122f2848285016122b9565b91505092915050565b60008115159050919050565b612310816122fb565b82525050565b600060208201905061232b6000830184612307565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561236b578082015181840152602081019050612350565b60008484015250505050565b6000601f19601f8301169050919050565b600061239382612331565b61239d818561233c565b93506123ad81856020860161234d565b6123b681612377565b840191505092915050565b600060208201905081810360008301526123db8184612388565b905092915050565b6000819050919050565b6123f6816123e3565b811461240157600080fd5b50565b600081359050612413816123ed565b92915050565b60006020828403121561242f5761242e61226c565b5b600061243d84828501612404565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061247182612446565b9050919050565b61248181612466565b82525050565b600060208201905061249c6000830184612478565b92915050565b6124ab81612466565b81146124b657600080fd5b50565b6000813590506124c8816124a2565b92915050565b600080604083850312156124e5576124e461226c565b5b60006124f3858286016124b9565b925050602061250485828601612404565b9150509250929050565b612517816123e3565b82525050565b6000602082019050612532600083018461250e565b92915050565b6000806000606084860312156125515761255061226c565b5b600061255f868287016124b9565b9350506020612570868287016124b9565b925050604061258186828701612404565b9150509250925092565b600080604083850312156125a2576125a161226c565b5b60006125b085828601612404565b92505060206125c185828601612404565b9150509250929050565b60006040820190506125e06000830185612478565b6125ed602083018461250e565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61263682612377565b810181811067ffffffffffffffff82111715612655576126546125fe565b5b80604052505050565b6000612668612262565b9050612674828261262d565b919050565b600067ffffffffffffffff821115612694576126936125fe565b5b61269d82612377565b9050602081019050919050565b82818337600083830152505050565b60006126cc6126c784612679565b61265e565b9050828152602081018484840111156126e8576126e76125f9565b5b6126f38482856126aa565b509392505050565b600082601f8301126127105761270f6125f4565b5b81356127208482602086016126b9565b91505092915050565b600080604083850312156127405761273f61226c565b5b600061274e85828601612404565b925050602083013567ffffffffffffffff81111561276f5761276e612271565b5b61277b858286016126fb565b9150509250929050565b60006020828403121561279b5761279a61226c565b5b60006127a9848285016124b9565b91505092915050565b6127bb816122fb565b81146127c657600080fd5b50565b6000813590506127d8816127b2565b92915050565b600080604083850312156127f5576127f461226c565b5b6000612803858286016124b9565b9250506020612814858286016127c9565b9150509250929050565b60006bffffffffffffffffffffffff82169050919050565b61283f8161281e565b811461284a57600080fd5b50565b60008135905061285c81612836565b92915050565b600080604083850312156128795761287861226c565b5b6000612887858286016124b9565b92505060206128988582860161284d565b9150509250929050565b600067ffffffffffffffff8211156128bd576128bc6125fe565b5b6128c682612377565b9050602081019050919050565b60006128e66128e1846128a2565b61265e565b905082815260208101848484011115612902576129016125f9565b5b61290d8482856126aa565b509392505050565b600082601f83011261292a576129296125f4565b5b813561293a8482602086016128d3565b91505092915050565b6000806000806080858703121561295d5761295c61226c565b5b600061296b878288016124b9565b945050602061297c878288016124b9565b935050604061298d87828801612404565b925050606085013567ffffffffffffffff8111156129ae576129ad612271565b5b6129ba87828801612915565b91505092959194509250565b6000602082840312156129dc576129db61226c565b5b600082013567ffffffffffffffff8111156129fa576129f9612271565b5b612a06848285016126fb565b91505092915050565b60008060408385031215612a2657612a2561226c565b5b6000612a34858286016124b9565b925050602083013567ffffffffffffffff811115612a5557612a54612271565b5b612a61858286016126fb565b9150509250929050565b60008060408385031215612a8257612a8161226c565b5b6000612a90858286016124b9565b9250506020612aa1858286016124b9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612af257607f821691505b602082108103612b0557612b04612aab565b5b50919050565b6000606082019050612b206000830186612478565b612b2d602083018561250e565b612b3a6040830184612478565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b7c826123e3565b9150612b87836123e3565b9250828202612b95816123e3565b91508282048414831517612bac57612bab612b42565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bed826123e3565b9150612bf8836123e3565b925082612c0857612c07612bb3565b5b828204905092915050565b7f526f79616c74792070657263656e7461676520746f6f20686967680000000000600082015250565b6000612c49601b8361233c565b9150612c5482612c13565b602082019050919050565b60006020820190508181036000830152612c7881612c3c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612ce17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612ca4565b612ceb8683612ca4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612d28612d23612d1e846123e3565b612d03565b6123e3565b9050919050565b6000819050919050565b612d4283612d0d565b612d56612d4e82612d2f565b848454612cb1565b825550505050565b600090565b612d6b612d5e565b612d76818484612d39565b505050565b5b81811015612d9a57612d8f600082612d63565b600181019050612d7c565b5050565b601f821115612ddf57612db081612c7f565b612db984612c94565b81016020851015612dc8578190505b612ddc612dd485612c94565b830182612d7b565b50505b505050565b600082821c905092915050565b6000612e0260001984600802612de4565b1980831691505092915050565b6000612e1b8383612df1565b9150826002028217905092915050565b612e3482612331565b67ffffffffffffffff811115612e4d57612e4c6125fe565b5b612e578254612ada565b612e62828285612d9e565b600060209050601f831160018114612e955760008415612e83578287015190505b612e8d8582612e0f565b865550612ef5565b601f198416612ea386612c7f565b60005b82811015612ecb57848901518255600182019150602085019450602081019050612ea6565b86831015612ee85784890151612ee4601f891682612df1565b8355505b6001600288020188555050505b505050505050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b6000612f3360108361233c565b9150612f3e82612efd565b602082019050919050565b60006020820190508181036000830152612f6281612f26565b9050919050565b6000612f74826123e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fa657612fa5612b42565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000612fd882612fb1565b612fe28185612fbc565b9350612ff281856020860161234d565b612ffb81612377565b840191505092915050565b600060808201905061301b6000830187612478565b6130286020830186612478565b613035604083018561250e565b81810360608301526130478184612fcd565b905095945050505050565b600081519050613061816122a2565b92915050565b60006020828403121561307d5761307c61226c565b5b600061308b84828501613052565b91505092915050565b600081905092915050565b60006130aa82612331565b6130b48185613094565b93506130c481856020860161234d565b80840191505092915050565b60006130dc828561309f565b91506130e8828461309f565b9150819050939250505056fea26469706673582212203101dad605e0eea3b3ceb2492a47b4f9bc480cf98072d00461c56663d64fa45464736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002e407a65dc925cb9884cff588e0ef1814e221466
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x2e407a65DC925cb9884CfF588e0EF1814e221466
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002e407a65dc925cb9884cff588e0ef1814e221466
Deployed Bytecode Sourcemap
50769:3536:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53454:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31149:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32321:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32140:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53349:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32990:588;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54031:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;52771:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33649:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52528:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30962:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30687:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18258:103;;;:::i;:::-;;52904:70;;;:::i;:::-;;17583:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52381:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53718:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31309:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32551:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51058:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33854:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52652:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51092:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53058:283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51865:308;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51647:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32768:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18516:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53454:250;53586:4;53630:26;53615:41;;;:11;:41;;;;:81;;;;53660:36;53684:11;53660:23;:36::i;:::-;53615:81;53608:88;;53454:250;;;:::o;31149:91::-;31194:13;31227:5;31220:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31149:91;:::o;32321:158::-;32388:7;32408:22;32422:7;32408:13;:22::i;:::-;;32450:21;32463:7;32450:12;:21::i;:::-;32443:28;;32321:158;;;:::o;32140:115::-;32212:35;32221:2;32225:7;32234:12;:10;:12::i;:::-;32212:8;:35::i;:::-;32140:115;;:::o;53349:91::-;53393:7;53420:12;;53413:19;;53349:91;:::o;32990:588::-;33099:1;33085:16;;:2;:16;;;33081:89;;33155:1;33125:33;;;;;;;;;;;:::i;:::-;;;;;;;;33081:89;33391:21;33415:34;33423:2;33427:7;33436:12;:10;:12::i;:::-;33415:7;:34::i;:::-;33391:58;;33481:4;33464:21;;:13;:21;;;33460:111;;33530:4;33536:7;33545:13;33509:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;33460:111;33070:508;32990:588;;;:::o;54031:265::-;54120:7;54129;54159:21;51377:5;54183:47;;54196:15;;;;;;;;;;;54184:27;;:9;:27;;;;:::i;:::-;54183:47;;;;:::i;:::-;54159:71;;54249:13;;;;;;;;;;;54264;54241:37;;;;;54031:265;;;;;:::o;52771:119::-;17469:13;:11;:13::i;:::-;52856:26:::1;52869:7;52878:3;52856:12;:26::i;:::-;52771:119:::0;;:::o;33649:134::-;33736:39;33753:4;33759:2;33763:7;33736:39;;;;;;;;;;;;:16;:39::i;:::-;33649:134;;;:::o;52528:110::-;52341:11;;;;;;;;;;;52327:25;;:10;:25;;;52319:34;;;;;;52618:12:::1;52604:11;;:26;;;;;;;;;;;;;;;;;;52528:110:::0;:::o;30962:120::-;31025:7;31052:22;31066:7;31052:13;:22::i;:::-;31045:29;;30962:120;;;:::o;30687:213::-;30750:7;30791:1;30774:19;;:5;:19;;;30770:89;;30844:1;30817:30;;;;;;;;;;;:::i;:::-;;;;;;;;30770:89;30876:9;:16;30886:5;30876:16;;;;;;;;;;;;;;;;30869:23;;30687:213;;;:::o;18258:103::-;17469:13;:11;:13::i;:::-;18323:30:::1;18350:1;18323:18;:30::i;:::-;18258:103::o:0;52904:70::-;17469:13;:11;:13::i;:::-;52961:5:::1;52950:8;;:16;;;;;;;;;;;;;;;;;;52904:70::o:0;17583:87::-;17629:7;17656:6;;;;;;;;;;;17649:13;;17583:87;:::o;52381:139::-;52341:11;;;;;;;;;;;52327:25;;:10;:25;;;52319:34;;;;;;52504:8:::1;52470:19;:33;52490:12;52470:33;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;52381:139:::0;;:::o;53718:261::-;17469:13;:11;:13::i;:::-;51377:5:::1;53821:36;;:17;:36;;;;53813:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;53918:17;53900:15;;:35;;;;;;;;;;;;;;;;;;53962:9;53946:13;;:25;;;;;;;;;;;;;;;;;;53718:261:::0;;:::o;31309:95::-;31356:13;31389:7;31382:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31309:95;:::o;32551:146::-;32637:52;32656:12;:10;:12::i;:::-;32670:8;32680;32637:18;:52::i;:::-;32551:146;;:::o;51058:27::-;;;;;;;;;;;;;:::o;33854:211::-;33968:31;33981:4;33987:2;33991:7;33968:12;:31::i;:::-;34010:47;34033:4;34039:2;34043:7;34052:4;34010:22;:47::i;:::-;33854:211;;;;:::o;52652:97::-;17469:13;:11;:13::i;:::-;52738:3:::1;52726:9;:15;;;;;;:::i;:::-;;52652:97:::0;:::o;51092:103::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53058:283::-;53185:13;53230:8;;;;;;;;;;;53226:57;;;53262:9;53255:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53226:57;53310:23;53325:7;53310:14;:23::i;:::-;53303:30;;53058:283;;;;:::o;51865:308::-;51945:7;52228:19;:31;52248:10;52228:31;;;;;;;;;;;;;;;;;;;;;;;;;52220:40;;;;;;51988:12:::1;;51973;;:27;51965:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;52032:15;52050:12;;:14;;;;;;;;;:::i;:::-;;;;;52032:32;;52075:18;52081:2;52085:7;52075:5;:18::i;:::-;52104:26;52117:7;52126:3;52104:12;:26::i;:::-;52158:7;52151:14;;;51865:308:::0;;;;:::o;51647:210::-;52228:19;:31;52248:10;52228:31;;;;;;;;;;;;;;;;;;;;;;;;;52220:40;;;;;;51733:15:::1;51751:12;;:14;;;;;;;;;:::i;:::-;;;;;51733:32;;51776:22;51786:2;51790:7;51776:9;:22::i;:::-;51809:26;51822:7;51831:3;51809:12;:26::i;:::-;51722:135;51647:210:::0;;:::o;32768:155::-;32856:4;32880:18;:25;32899:5;32880:25;;;;;;;;;;;;;;;:35;32906:8;32880:35;;;;;;;;;;;;;;;;;;;;;;;;;32873:42;;32768:155;;;;:::o;18516:220::-;17469:13;:11;:13::i;:::-;18621:1:::1;18601:22;;:8;:22;;::::0;18597:93:::1;;18675:1;18647:31;;;;;;;;;;;:::i;:::-;;;;;;;;18597:93;18700:28;18719:8;18700:18;:28::i;:::-;18516:220:::0;:::o;47722:209::-;47824:4;47537:10;47530:18;;47848:35;;;:11;:35;;;;:75;;;;47887:36;47911:11;47887:23;:36::i;:::-;47848:75;47841:82;;47722:209;;;:::o;45304:247::-;45367:7;45387:13;45403:17;45412:7;45403:8;:17::i;:::-;45387:33;;45452:1;45435:19;;:5;:19;;;45431:90;;45501:7;45478:31;;;;;;;;;;;:::i;:::-;;;;;;;;45431:90;45538:5;45531:12;;;45304:247;;;:::o;34827:129::-;34897:7;34924:15;:24;34940:7;34924:24;;;;;;;;;;;;;;;;;;;;;34917:31;;34827:129;;;:::o;15586:98::-;15639:7;15666:10;15659:17;;15586:98;:::o;43528:130::-;43617:33;43626:2;43630:7;43639:4;43645;43617:8;:33::i;:::-;43528:130;;;:::o;37789:824::-;37875:7;37895:12;37910:17;37919:7;37910:8;:17::i;:::-;37895:32;;38006:1;37990:18;;:4;:18;;;37986:88;;38025:37;38042:4;38048;38054:7;38025:16;:37::i;:::-;37986:88;38137:1;38121:18;;:4;:18;;;38117:263;;38239:48;38256:1;38260:7;38277:1;38281:5;38239:8;:48::i;:::-;38352:1;38333:9;:15;38343:4;38333:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;38117:263;38410:1;38396:16;;:2;:16;;;38392:111;;38475:1;38458:9;:13;38468:2;38458:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;38392:111;38534:2;38515:7;:16;38523:7;38515:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38573:7;38569:2;38554:27;;38563:4;38554:27;;;;;;;;;;;;38601:4;38594:11;;;37789:824;;;;;:::o;17748:166::-;17819:12;:10;:12::i;:::-;17808:23;;:7;:5;:7::i;:::-;:23;;;17804:103;;17882:12;:10;:12::i;:::-;17855:40;;;;;;;;;;;:::i;:::-;;;;;;;;17804:103;17748:166::o;48737:170::-;48851:9;48829:10;:19;48840:7;48829:19;;;;;;;;;;;:31;;;;;;:::i;:::-;;48876:23;48891:7;48876:23;;;;;;:::i;:::-;;;;;;;;48737:170;;:::o;18896:191::-;18970:16;18989:6;;;;;;;;;;;18970:25;;19015:8;19006:6;;:17;;;;;;;;;;;;;;;;;;19070:8;19039:40;;19060:8;19039:40;;;;;;;;;;;;18959:128;18896:191;:::o;44743:318::-;44871:1;44851:22;;:8;:22;;;44847:93;;44919:8;44897:31;;;;;;;;;;;:::i;:::-;;;;;;;;44847:93;44988:8;44950:18;:25;44969:5;44950:25;;;;;;;;;;;;;;;:35;44976:8;44950:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45034:8;45012:41;;45027:5;45012:41;;;45044:8;45012:41;;;;;;:::i;:::-;;;;;;;;44743:318;;;:::o;46101:799::-;46235:1;46218:2;:14;;;:18;46214:679;;;46273:2;46257:36;;;46294:12;:10;:12::i;:::-;46308:4;46314:7;46323:4;46257:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46253:629;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46588:1;46571:6;:13;:18;46567:300;;46643:2;46621:25;;;;;;;;;;;:::i;:::-;;;;;;;;46567:300;46817:6;46811:13;46802:6;46798:2;46794:15;46787:38;46253:629;46386:41;;;46376:51;;;:6;:51;;;;46372:132;;46481:2;46459:25;;;;;;;;;;;:::i;:::-;;;;;;;;46372:132;46329:190;46214:679;46101:799;;;;:::o;48002:609::-;48075:13;48101:22;48115:7;48101:13;:22::i;:::-;;48136:23;48162:10;:19;48173:7;48162:19;;;;;;;;;;;48136:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48192:18;48213:10;:8;:10::i;:::-;48192:31;;48321:1;48305:4;48299:18;:23;48295:72;;48346:9;48339:16;;;;;;48295:72;48494:1;48474:9;48468:23;:27;48464:97;;;48533:4;48539:9;48519:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48512:37;;;;;;48464:97;48580:23;48595:7;48580:14;:23::i;:::-;48573:30;;;;48002:609;;;;:::o;38949:335::-;39031:1;39017:16;;:2;:16;;;39013:89;;39087:1;39057:33;;;;;;;;;;;:::i;:::-;;;;;;;;39013:89;39112:21;39136:32;39144:2;39148:7;39165:1;39136:7;:32::i;:::-;39112:56;;39208:1;39183:27;;:13;:27;;;39179:98;;39262:1;39234:31;;;;;;;;;;;:::i;:::-;;;;;;;;39179:98;39002:282;38949:335;;:::o;39647:102::-;39715:26;39725:2;39729:7;39715:26;;;;;;;;;;;;:9;:26::i;:::-;39647:102;;:::o;30318:305::-;30420:4;30472:25;30457:40;;;:11;:40;;;;:105;;;;30529:33;30514:48;;;:11;:48;;;;30457:105;:158;;;;30579:36;30603:11;30579:23;:36::i;:::-;30457:158;30437:178;;30318:305;;;:::o;34589:117::-;34655:7;34682;:16;34690:7;34682:16;;;;;;;;;;;;;;;;;;;;;34675:23;;34589:117;;;:::o;43846:678::-;44008:9;:31;;;;44037:1;44021:18;;:4;:18;;;;44008:31;44004:471;;;44056:13;44072:22;44086:7;44072:13;:22::i;:::-;44056:38;;44241:1;44225:18;;:4;:18;;;;:35;;;;;44256:4;44247:13;;:5;:13;;;;44225:35;:69;;;;;44265:29;44282:5;44289:4;44265:16;:29::i;:::-;44264:30;44225:69;44221:144;;;44344:4;44322:27;;;;;;;;;;;:::i;:::-;;;;;;;;44221:144;44385:9;44381:83;;;44440:7;44436:2;44420:28;;44429:5;44420:28;;;;;;;;;;;;44381:83;44041:434;44004:471;44514:2;44487:15;:24;44503:7;44487:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43846:678;;;;:::o;35996:376::-;36109:38;36123:5;36130:7;36139;36109:13;:38::i;:::-;36104:261;;36185:1;36168:19;;:5;:19;;;36164:190;;36238:7;36215:31;;;;;;;;;;;:::i;:::-;;;;;;;;36164:190;36321:7;36330;36294:44;;;;;;;;;;;;:::i;:::-;;;;;;;;36104:261;35996:376;;;:::o;31984:94::-;32035:13;32061:9;;;;;;;;;;;;;;31984:94;:::o;31475:260::-;31539:13;31565:22;31579:7;31565:13;:22::i;:::-;;31600:21;31624:10;:8;:10::i;:::-;31600:34;;31676:1;31658:7;31652:21;:25;:75;;;;;;;;;;;;;;;;;31694:7;31703:18;:7;:16;:18::i;:::-;31680:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31652:75;31645:82;;;31475:260;;;:::o;39976:185::-;40071:18;40077:2;40081:7;40071:5;:18::i;:::-;40100:53;40131:1;40135:2;40139:7;40148:4;40100:22;:53::i;:::-;39976:185;;;:::o;22062:148::-;22138:4;22177:25;22162:40;;;:11;:40;;;;22155:47;;22062:148;;;:::o;35276:276::-;35379:4;35435:1;35416:21;;:7;:21;;;;:128;;;;;35464:7;35455:16;;:5;:16;;;:52;;;;35475:32;35492:5;35499:7;35475:16;:32::i;:::-;35455:52;:88;;;;35536:7;35511:32;;:21;35524:7;35511:12;:21::i;:::-;:32;;;35455:88;35416:128;35396:148;;35276:276;;;;;:::o;12350:718::-;12406:13;12457:14;12494:1;12474:17;12485:5;12474:10;:17::i;:::-;:21;12457:38;;12510:20;12544:6;12533:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12510:41;;12566:11;12695:6;12691:2;12687:15;12679:6;12675:28;12668:35;;12732:290;12739:4;12732:290;;;12764:5;;;;;;;;12906:10;12901:2;12894:5;12890:14;12885:32;12880:3;12872:46;12964:2;12955:11;;;;;;:::i;:::-;;;;;12998:1;12989:5;:10;12732:290;12985:21;12732:290;13043:6;13036:13;;;;;12350:718;;;:::o;8748:948::-;8801:7;8821:14;8838:1;8821:18;;8888:8;8879:5;:17;8875:106;;8926:8;8917:17;;;;;;:::i;:::-;;;;;8963:2;8953:12;;;;8875:106;9008:8;8999:5;:17;8995:106;;9046:8;9037:17;;;;;;:::i;:::-;;;;;9083:2;9073:12;;;;8995:106;9128:8;9119:5;:17;9115:106;;9166:8;9157:17;;;;;;:::i;:::-;;;;;9203:2;9193:12;;;;9115:106;9248:7;9239:5;:16;9235:103;;9285:7;9276:16;;;;;;:::i;:::-;;;;;9321:1;9311:11;;;;9235:103;9365:7;9356:5;:16;9352:103;;9402:7;9393:16;;;;;;:::i;:::-;;;;;9438:1;9428:11;;;;9352:103;9482:7;9473:5;:16;9469:103;;9519:7;9510:16;;;;;;:::i;:::-;;;;;9555:1;9545:11;;;;9469:103;9599:7;9590:5;:16;9586:68;;9637:1;9627:11;;;;9586:68;9682:6;9675:13;;;8748:948;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:474::-;5935:6;5943;5992:2;5980:9;5971:7;5967:23;5963:32;5960:119;;;5998:79;;:::i;:::-;5960:119;6118:1;6143:53;6188:7;6179:6;6168:9;6164:22;6143:53;:::i;:::-;6133:63;;6089:117;6245:2;6271:53;6316:7;6307:6;6296:9;6292:22;6271:53;:::i;:::-;6261:63;;6216:118;5867:474;;;;;:::o;6347:332::-;6468:4;6506:2;6495:9;6491:18;6483:26;;6519:71;6587:1;6576:9;6572:17;6563:6;6519:71;:::i;:::-;6600:72;6668:2;6657:9;6653:18;6644:6;6600:72;:::i;:::-;6347:332;;;;;:::o;6685:117::-;6794:1;6791;6784:12;6808:117;6917:1;6914;6907:12;6931:180;6979:77;6976:1;6969:88;7076:4;7073:1;7066:15;7100:4;7097:1;7090:15;7117:281;7200:27;7222:4;7200:27;:::i;:::-;7192:6;7188:40;7330:6;7318:10;7315:22;7294:18;7282:10;7279:34;7276:62;7273:88;;;7341:18;;:::i;:::-;7273:88;7381:10;7377:2;7370:22;7160:238;7117:281;;:::o;7404:129::-;7438:6;7465:20;;:::i;:::-;7455:30;;7494:33;7522:4;7514:6;7494:33;:::i;:::-;7404:129;;;:::o;7539:308::-;7601:4;7691:18;7683:6;7680:30;7677:56;;;7713:18;;:::i;:::-;7677:56;7751:29;7773:6;7751:29;:::i;:::-;7743:37;;7835:4;7829;7825:15;7817:23;;7539:308;;;:::o;7853:146::-;7950:6;7945:3;7940;7927:30;7991:1;7982:6;7977:3;7973:16;7966:27;7853:146;;;:::o;8005:425::-;8083:5;8108:66;8124:49;8166:6;8124:49;:::i;:::-;8108:66;:::i;:::-;8099:75;;8197:6;8190:5;8183:21;8235:4;8228:5;8224:16;8273:3;8264:6;8259:3;8255:16;8252:25;8249:112;;;8280:79;;:::i;:::-;8249:112;8370:54;8417:6;8412:3;8407;8370:54;:::i;:::-;8089:341;8005:425;;;;;:::o;8450:340::-;8506:5;8555:3;8548:4;8540:6;8536:17;8532:27;8522:122;;8563:79;;:::i;:::-;8522:122;8680:6;8667:20;8705:79;8780:3;8772:6;8765:4;8757:6;8753:17;8705:79;:::i;:::-;8696:88;;8512:278;8450:340;;;;:::o;8796:654::-;8874:6;8882;8931:2;8919:9;8910:7;8906:23;8902:32;8899:119;;;8937:79;;:::i;:::-;8899:119;9057:1;9082:53;9127:7;9118:6;9107:9;9103:22;9082:53;:::i;:::-;9072:63;;9028:117;9212:2;9201:9;9197:18;9184:32;9243:18;9235:6;9232:30;9229:117;;;9265:79;;:::i;:::-;9229:117;9370:63;9425:7;9416:6;9405:9;9401:22;9370:63;:::i;:::-;9360:73;;9155:288;8796:654;;;;;:::o;9456:329::-;9515:6;9564:2;9552:9;9543:7;9539:23;9535:32;9532:119;;;9570:79;;:::i;:::-;9532:119;9690:1;9715:53;9760:7;9751:6;9740:9;9736:22;9715:53;:::i;:::-;9705:63;;9661:117;9456:329;;;;:::o;9791:116::-;9861:21;9876:5;9861:21;:::i;:::-;9854:5;9851:32;9841:60;;9897:1;9894;9887:12;9841:60;9791:116;:::o;9913:133::-;9956:5;9994:6;9981:20;9972:29;;10010:30;10034:5;10010:30;:::i;:::-;9913:133;;;;:::o;10052:468::-;10117:6;10125;10174:2;10162:9;10153:7;10149:23;10145:32;10142:119;;;10180:79;;:::i;:::-;10142:119;10300:1;10325:53;10370:7;10361:6;10350:9;10346:22;10325:53;:::i;:::-;10315:63;;10271:117;10427:2;10453:50;10495:7;10486:6;10475:9;10471:22;10453:50;:::i;:::-;10443:60;;10398:115;10052:468;;;;;:::o;10526:109::-;10562:7;10602:26;10595:5;10591:38;10580:49;;10526:109;;;:::o;10641:120::-;10713:23;10730:5;10713:23;:::i;:::-;10706:5;10703:34;10693:62;;10751:1;10748;10741:12;10693:62;10641:120;:::o;10767:137::-;10812:5;10850:6;10837:20;10828:29;;10866:32;10892:5;10866:32;:::i;:::-;10767:137;;;;:::o;10910:472::-;10977:6;10985;11034:2;11022:9;11013:7;11009:23;11005:32;11002:119;;;11040:79;;:::i;:::-;11002:119;11160:1;11185:53;11230:7;11221:6;11210:9;11206:22;11185:53;:::i;:::-;11175:63;;11131:117;11287:2;11313:52;11357:7;11348:6;11337:9;11333:22;11313:52;:::i;:::-;11303:62;;11258:117;10910:472;;;;;:::o;11388:307::-;11449:4;11539:18;11531:6;11528:30;11525:56;;;11561:18;;:::i;:::-;11525:56;11599:29;11621:6;11599:29;:::i;:::-;11591:37;;11683:4;11677;11673:15;11665:23;;11388:307;;;:::o;11701:423::-;11778:5;11803:65;11819:48;11860:6;11819:48;:::i;:::-;11803:65;:::i;:::-;11794:74;;11891:6;11884:5;11877:21;11929:4;11922:5;11918:16;11967:3;11958:6;11953:3;11949:16;11946:25;11943:112;;;11974:79;;:::i;:::-;11943:112;12064:54;12111:6;12106:3;12101;12064:54;:::i;:::-;11784:340;11701:423;;;;;:::o;12143:338::-;12198:5;12247:3;12240:4;12232:6;12228:17;12224:27;12214:122;;12255:79;;:::i;:::-;12214:122;12372:6;12359:20;12397:78;12471:3;12463:6;12456:4;12448:6;12444:17;12397:78;:::i;:::-;12388:87;;12204:277;12143:338;;;;:::o;12487:943::-;12582:6;12590;12598;12606;12655:3;12643:9;12634:7;12630:23;12626:33;12623:120;;;12662:79;;:::i;:::-;12623:120;12782:1;12807:53;12852:7;12843:6;12832:9;12828:22;12807:53;:::i;:::-;12797:63;;12753:117;12909:2;12935:53;12980:7;12971:6;12960:9;12956:22;12935:53;:::i;:::-;12925:63;;12880:118;13037:2;13063:53;13108:7;13099:6;13088:9;13084:22;13063:53;:::i;:::-;13053:63;;13008:118;13193:2;13182:9;13178:18;13165:32;13224:18;13216:6;13213:30;13210:117;;;13246:79;;:::i;:::-;13210:117;13351:62;13405:7;13396:6;13385:9;13381:22;13351:62;:::i;:::-;13341:72;;13136:287;12487:943;;;;;;;:::o;13436:509::-;13505:6;13554:2;13542:9;13533:7;13529:23;13525:32;13522:119;;;13560:79;;:::i;:::-;13522:119;13708:1;13697:9;13693:17;13680:31;13738:18;13730:6;13727:30;13724:117;;;13760:79;;:::i;:::-;13724:117;13865:63;13920:7;13911:6;13900:9;13896:22;13865:63;:::i;:::-;13855:73;;13651:287;13436:509;;;;:::o;13951:654::-;14029:6;14037;14086:2;14074:9;14065:7;14061:23;14057:32;14054:119;;;14092:79;;:::i;:::-;14054:119;14212:1;14237:53;14282:7;14273:6;14262:9;14258:22;14237:53;:::i;:::-;14227:63;;14183:117;14367:2;14356:9;14352:18;14339:32;14398:18;14390:6;14387:30;14384:117;;;14420:79;;:::i;:::-;14384:117;14525:63;14580:7;14571:6;14560:9;14556:22;14525:63;:::i;:::-;14515:73;;14310:288;13951:654;;;;;:::o;14611:474::-;14679:6;14687;14736:2;14724:9;14715:7;14711:23;14707:32;14704:119;;;14742:79;;:::i;:::-;14704:119;14862:1;14887:53;14932:7;14923:6;14912:9;14908:22;14887:53;:::i;:::-;14877:63;;14833:117;14989:2;15015:53;15060:7;15051:6;15040:9;15036:22;15015:53;:::i;:::-;15005:63;;14960:118;14611:474;;;;;:::o;15091:180::-;15139:77;15136:1;15129:88;15236:4;15233:1;15226:15;15260:4;15257:1;15250:15;15277:320;15321:6;15358:1;15352:4;15348:12;15338:22;;15405:1;15399:4;15395:12;15426:18;15416:81;;15482:4;15474:6;15470:17;15460:27;;15416:81;15544:2;15536:6;15533:14;15513:18;15510:38;15507:84;;15563:18;;:::i;:::-;15507:84;15328:269;15277:320;;;:::o;15603:442::-;15752:4;15790:2;15779:9;15775:18;15767:26;;15803:71;15871:1;15860:9;15856:17;15847:6;15803:71;:::i;:::-;15884:72;15952:2;15941:9;15937:18;15928:6;15884:72;:::i;:::-;15966;16034:2;16023:9;16019:18;16010:6;15966:72;:::i;:::-;15603:442;;;;;;:::o;16051:180::-;16099:77;16096:1;16089:88;16196:4;16193:1;16186:15;16220:4;16217:1;16210:15;16237:410;16277:7;16300:20;16318:1;16300:20;:::i;:::-;16295:25;;16334:20;16352:1;16334:20;:::i;:::-;16329:25;;16389:1;16386;16382:9;16411:30;16429:11;16411:30;:::i;:::-;16400:41;;16590:1;16581:7;16577:15;16574:1;16571:22;16551:1;16544:9;16524:83;16501:139;;16620:18;;:::i;:::-;16501:139;16285:362;16237:410;;;;:::o;16653:180::-;16701:77;16698:1;16691:88;16798:4;16795:1;16788:15;16822:4;16819:1;16812:15;16839:185;16879:1;16896:20;16914:1;16896:20;:::i;:::-;16891:25;;16930:20;16948:1;16930:20;:::i;:::-;16925:25;;16969:1;16959:35;;16974:18;;:::i;:::-;16959:35;17016:1;17013;17009:9;17004:14;;16839:185;;;;:::o;17030:177::-;17170:29;17166:1;17158:6;17154:14;17147:53;17030:177;:::o;17213:366::-;17355:3;17376:67;17440:2;17435:3;17376:67;:::i;:::-;17369:74;;17452:93;17541:3;17452:93;:::i;:::-;17570:2;17565:3;17561:12;17554:19;;17213:366;;;:::o;17585:419::-;17751:4;17789:2;17778:9;17774:18;17766:26;;17838:9;17832:4;17828:20;17824:1;17813:9;17809:17;17802:47;17866:131;17992:4;17866:131;:::i;:::-;17858:139;;17585:419;;;:::o;18010:141::-;18059:4;18082:3;18074:11;;18105:3;18102:1;18095:14;18139:4;18136:1;18126:18;18118:26;;18010:141;;;:::o;18157:93::-;18194:6;18241:2;18236;18229:5;18225:14;18221:23;18211:33;;18157:93;;;:::o;18256:107::-;18300:8;18350:5;18344:4;18340:16;18319:37;;18256:107;;;;:::o;18369:393::-;18438:6;18488:1;18476:10;18472:18;18511:97;18541:66;18530:9;18511:97;:::i;:::-;18629:39;18659:8;18648:9;18629:39;:::i;:::-;18617:51;;18701:4;18697:9;18690:5;18686:21;18677:30;;18750:4;18740:8;18736:19;18729:5;18726:30;18716:40;;18445:317;;18369:393;;;;;:::o;18768:60::-;18796:3;18817:5;18810:12;;18768:60;;;:::o;18834:142::-;18884:9;18917:53;18935:34;18944:24;18962:5;18944:24;:::i;:::-;18935:34;:::i;:::-;18917:53;:::i;:::-;18904:66;;18834:142;;;:::o;18982:75::-;19025:3;19046:5;19039:12;;18982:75;;;:::o;19063:269::-;19173:39;19204:7;19173:39;:::i;:::-;19234:91;19283:41;19307:16;19283:41;:::i;:::-;19275:6;19268:4;19262:11;19234:91;:::i;:::-;19228:4;19221:105;19139:193;19063:269;;;:::o;19338:73::-;19383:3;19338:73;:::o;19417:189::-;19494:32;;:::i;:::-;19535:65;19593:6;19585;19579:4;19535:65;:::i;:::-;19470:136;19417:189;;:::o;19612:186::-;19672:120;19689:3;19682:5;19679:14;19672:120;;;19743:39;19780:1;19773:5;19743:39;:::i;:::-;19716:1;19709:5;19705:13;19696:22;;19672:120;;;19612:186;;:::o;19804:543::-;19905:2;19900:3;19897:11;19894:446;;;19939:38;19971:5;19939:38;:::i;:::-;20023:29;20041:10;20023:29;:::i;:::-;20013:8;20009:44;20206:2;20194:10;20191:18;20188:49;;;20227:8;20212:23;;20188:49;20250:80;20306:22;20324:3;20306:22;:::i;:::-;20296:8;20292:37;20279:11;20250:80;:::i;:::-;19909:431;;19894:446;19804:543;;;:::o;20353:117::-;20407:8;20457:5;20451:4;20447:16;20426:37;;20353:117;;;;:::o;20476:169::-;20520:6;20553:51;20601:1;20597:6;20589:5;20586:1;20582:13;20553:51;:::i;:::-;20549:56;20634:4;20628;20624:15;20614:25;;20527:118;20476:169;;;;:::o;20650:295::-;20726:4;20872:29;20897:3;20891:4;20872:29;:::i;:::-;20864:37;;20934:3;20931:1;20927:11;20921:4;20918:21;20910:29;;20650:295;;;;:::o;20950:1395::-;21067:37;21100:3;21067:37;:::i;:::-;21169:18;21161:6;21158:30;21155:56;;;21191:18;;:::i;:::-;21155:56;21235:38;21267:4;21261:11;21235:38;:::i;:::-;21320:67;21380:6;21372;21366:4;21320:67;:::i;:::-;21414:1;21438:4;21425:17;;21470:2;21462:6;21459:14;21487:1;21482:618;;;;22144:1;22161:6;22158:77;;;22210:9;22205:3;22201:19;22195:26;22186:35;;22158:77;22261:67;22321:6;22314:5;22261:67;:::i;:::-;22255:4;22248:81;22117:222;21452:887;;21482:618;21534:4;21530:9;21522:6;21518:22;21568:37;21600:4;21568:37;:::i;:::-;21627:1;21641:208;21655:7;21652:1;21649:14;21641:208;;;21734:9;21729:3;21725:19;21719:26;21711:6;21704:42;21785:1;21777:6;21773:14;21763:24;;21832:2;21821:9;21817:18;21804:31;;21678:4;21675:1;21671:12;21666:17;;21641:208;;;21877:6;21868:7;21865:19;21862:179;;;21935:9;21930:3;21926:19;21920:26;21978:48;22020:4;22012:6;22008:17;21997:9;21978:48;:::i;:::-;21970:6;21963:64;21885:156;21862:179;22087:1;22083;22075:6;22071:14;22067:22;22061:4;22054:36;21489:611;;;21452:887;;21042:1303;;;20950:1395;;:::o;22351:166::-;22491:18;22487:1;22479:6;22475:14;22468:42;22351:166;:::o;22523:366::-;22665:3;22686:67;22750:2;22745:3;22686:67;:::i;:::-;22679:74;;22762:93;22851:3;22762:93;:::i;:::-;22880:2;22875:3;22871:12;22864:19;;22523:366;;;:::o;22895:419::-;23061:4;23099:2;23088:9;23084:18;23076:26;;23148:9;23142:4;23138:20;23134:1;23123:9;23119:17;23112:47;23176:131;23302:4;23176:131;:::i;:::-;23168:139;;22895:419;;;:::o;23320:233::-;23359:3;23382:24;23400:5;23382:24;:::i;:::-;23373:33;;23428:66;23421:5;23418:77;23415:103;;23498:18;;:::i;:::-;23415:103;23545:1;23538:5;23534:13;23527:20;;23320:233;;;:::o;23559:98::-;23610:6;23644:5;23638:12;23628:22;;23559:98;;;:::o;23663:168::-;23746:11;23780:6;23775:3;23768:19;23820:4;23815:3;23811:14;23796:29;;23663:168;;;;:::o;23837:373::-;23923:3;23951:38;23983:5;23951:38;:::i;:::-;24005:70;24068:6;24063:3;24005:70;:::i;:::-;23998:77;;24084:65;24142:6;24137:3;24130:4;24123:5;24119:16;24084:65;:::i;:::-;24174:29;24196:6;24174:29;:::i;:::-;24169:3;24165:39;24158:46;;23927:283;23837:373;;;;:::o;24216:640::-;24411:4;24449:3;24438:9;24434:19;24426:27;;24463:71;24531:1;24520:9;24516:17;24507:6;24463:71;:::i;:::-;24544:72;24612:2;24601:9;24597:18;24588:6;24544:72;:::i;:::-;24626;24694:2;24683:9;24679:18;24670:6;24626:72;:::i;:::-;24745:9;24739:4;24735:20;24730:2;24719:9;24715:18;24708:48;24773:76;24844:4;24835:6;24773:76;:::i;:::-;24765:84;;24216:640;;;;;;;:::o;24862:141::-;24918:5;24949:6;24943:13;24934:22;;24965:32;24991:5;24965:32;:::i;:::-;24862:141;;;;:::o;25009:349::-;25078:6;25127:2;25115:9;25106:7;25102:23;25098:32;25095:119;;;25133:79;;:::i;:::-;25095:119;25253:1;25278:63;25333:7;25324:6;25313:9;25309:22;25278:63;:::i;:::-;25268:73;;25224:127;25009:349;;;;:::o;25364:148::-;25466:11;25503:3;25488:18;;25364:148;;;;:::o;25518:390::-;25624:3;25652:39;25685:5;25652:39;:::i;:::-;25707:89;25789:6;25784:3;25707:89;:::i;:::-;25700:96;;25805:65;25863:6;25858:3;25851:4;25844:5;25840:16;25805:65;:::i;:::-;25895:6;25890:3;25886:16;25879:23;;25628:280;25518:390;;;;:::o;25914:435::-;26094:3;26116:95;26207:3;26198:6;26116:95;:::i;:::-;26109:102;;26228:95;26319:3;26310:6;26228:95;:::i;:::-;26221:102;;26340:3;26333:10;;25914:435;;;;;:::o
Swarm Source
ipfs://3101dad605e0eea3b3ceb2492a47b4f9bc480cf98072d00461c56663d64fa454
[ 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.