Overview
APE Balance
0 APE
APE Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
FLATETHERS
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-01-20 */ // 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 { _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); } // Compatible with OpenZeppelin Contracts ^5.0.0 pragma solidity ^0.8.20; contract FLATETHERS is ERC721, ERC721URIStorage, Ownable { uint256 private _nextTokenId; mapping(address=>bool) allowedSaleContract; address private aiowAddress = 0x9aC26D5af386f5950D3D94476aFB4060325c6976; uint256 private _totalSupply = 1069; bool public isHidden = true; string public hiddenUri = "https://aiow-public.s3.eu-central-1.amazonaws.com/hidden-images/678af1c9678393535bbf5f07.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAQFF22BHE4SRRQN62%2F20250119%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20250119T203731Z&X-Amz-Expires=900&X-Amz-Signature=9cbfcaaa4978e53a3298bf1cfc206053fcf8b0cd5965fdffbc6c20baccc64cd0&X-Amz-SignedHeaders=host&x-id=GetObject"; constructor(address initialOwner) ERC721("Flat Ethers", "FLAT") Ownable(initialOwner) { allowedSaleContract[0xeA06ce8f658fa8b8c3CdeB11BE56aD2228e27088] = 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) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"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":"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
6080604052739ac26d5af386f5950d3d94476afb4060325c6976600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061042d600b556001600c60006101000a81548160ff021916908315150217905550604051806101e001604052806101bb8152602001620034a06101bb9139600d9081620000a79190620005a8565b50348015620000b557600080fd5b506040516200365b3803806200365b8339818101604052810190620000db9190620006f9565b806040518060400160405280600b81526020017f466c6174204574686572730000000000000000000000000000000000000000008152506040518060400160405280600481526020017f464c4154000000000000000000000000000000000000000000000000000000008152508160009081620001599190620005a8565b5080600190816200016b9190620005a8565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001e35760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001da91906200073c565b60405180910390fd5b620001f4816200026860201b60201c565b5060016009600073ea06ce8f658fa8b8c3cdeb11be56ad2228e2708873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000759565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003b057607f821691505b602082108103620003c657620003c562000368565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003f1565b6200043c8683620003f1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000489620004836200047d8462000454565b6200045e565b62000454565b9050919050565b6000819050919050565b620004a58362000468565b620004bd620004b48262000490565b848454620003fe565b825550505050565b600090565b620004d4620004c5565b620004e18184846200049a565b505050565b5b818110156200050957620004fd600082620004ca565b600181019050620004e7565b5050565b601f82111562000558576200052281620003cc565b6200052d84620003e1565b810160208510156200053d578190505b620005556200054c85620003e1565b830182620004e6565b50505b505050565b600082821c905092915050565b60006200057d600019846008026200055d565b1980831691505092915050565b60006200059883836200056a565b9150826002028217905092915050565b620005b3826200032e565b67ffffffffffffffff811115620005cf57620005ce62000339565b5b620005db825462000397565b620005e88282856200050d565b600060209050601f8311600181146200062057600084156200060b578287015190505b6200061785826200058a565b86555062000687565b601f1984166200063086620003cc565b60005b828110156200065a5784890151825560018201915060208501945060208101905062000633565b868310156200067a578489015162000676601f8916826200056a565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006c18262000694565b9050919050565b620006d381620006b4565b8114620006df57600080fd5b50565b600081519050620006f381620006c8565b92915050565b6000602082840312156200071257620007116200068f565b5b60006200072284828501620006e2565b91505092915050565b6200073681620006b4565b82525050565b60006020820190506200075360008301846200072b565b92915050565b612d3780620007696000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80638da5cb5b116100de578063bd0bc04711610097578063d0def52111610071578063d0def52114610447578063d204c45e14610477578063e985e9c514610493578063f2fde38b146104c35761018e565b8063bd0bc047146103dd578063c5be8750146103f9578063c87b56dd146104175761018e565b80638da5cb5b1461032f5780638e6fcd321461034d57806395d89b4114610369578063a22cb46514610387578063aeca06ab146103a3578063b88d4fde146103c15761018e565b806334d1c6411161014b5780636352211e116101255780636352211e146102bb57806370a08231146102eb578063715018a61461031b5780637f8b1e0e146103255761018e565b806334d1c6411461026757806342842e0e14610283578063524cad981461029f5761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b31461021157806318160ddd1461022d57806323b872dd1461024b575b600080fd5b6101ad60048036038101906101a8919061207e565b6104df565b6040516101ba91906120c6565b60405180910390f35b6101cb6104f1565b6040516101d89190612171565b60405180910390f35b6101fb60048036038101906101f691906121c9565b610583565b6040516102089190612237565b60405180910390f35b61022b6004803603810190610226919061227e565b61059f565b005b6102356105b5565b60405161024291906122cd565b60405180910390f35b610265600480360381019061026091906122e8565b6105bf565b005b610281600480360381019061027c9190612470565b6106c1565b005b61029d600480360381019061029891906122e8565b6106d7565b005b6102b960048036038101906102b491906124cc565b6106f7565b005b6102d560048036038101906102d091906121c9565b610795565b6040516102e29190612237565b60405180910390f35b610305600480360381019061030091906124cc565b6107a7565b60405161031291906122cd565b60405180910390f35b610323610861565b005b61032d610875565b005b61033761089a565b6040516103449190612237565b60405180910390f35b61036760048036038101906103629190612525565b6108c4565b005b610371610979565b60405161037e9190612171565b60405180910390f35b6103a1600480360381019061039c9190612525565b610a0b565b005b6103ab610a21565b6040516103b891906120c6565b60405180910390f35b6103db60048036038101906103d69190612606565b610a34565b005b6103f760048036038101906103f29190612689565b610a51565b005b610401610a6c565b60405161040e9190612171565b60405180910390f35b610431600480360381019061042c91906121c9565b610afa565b60405161043e9190612171565b60405180910390f35b610461600480360381019061045c91906126d2565b610bb4565b60405161046e91906122cd565b60405180910390f35b610491600480360381019061048c91906126d2565b610c8b565b005b6104ad60048036038101906104a8919061272e565b610d15565b6040516104ba91906120c6565b60405180910390f35b6104dd60048036038101906104d891906124cc565b610da9565b005b60006104ea82610e2f565b9050919050565b6060600080546105009061279d565b80601f016020809104026020016040519081016040528092919081815260200182805461052c9061279d565b80156105795780601f1061054e57610100808354040283529160200191610579565b820191906000526020600020905b81548152906001019060200180831161055c57829003601f168201915b5050505050905090565b600061058e82610e90565b5061059882610f18565b9050919050565b6105b182826105ac610f55565b610f5d565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106315760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106289190612237565b60405180910390fd5b60006106458383610640610f55565b610f6f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106bb578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016106b2939291906127ce565b60405180910390fd5b50505050565b6106c9611189565b6106d38282611210565b5050565b6106f283838360405180602001604052806000815250610a34565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075157600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006107a082610e90565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361081a5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016108119190612237565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610869611189565b610873600061126c565b565b61087d611189565b6000600c60006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461091e57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6060600180546109889061279d565b80601f01602080910402602001604051908101604052809291908181526020018280546109b49061279d565b8015610a015780601f106109d657610100808354040283529160200191610a01565b820191906000526020600020905b8154815290600101906020018083116109e457829003601f168201915b5050505050905090565b610a1d610a16610f55565b8383611332565b5050565b600c60009054906101000a900460ff1681565b610a3f8484846105bf565b610a4b848484846114a1565b50505050565b610a59611189565b80600d9081610a6891906129b1565b5050565b600d8054610a799061279d565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa59061279d565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b505050505081565b6060600c60009054906101000a900460ff1615610ba357600d8054610b1e9061279d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4a9061279d565b8015610b975780601f10610b6c57610100808354040283529160200191610b97565b820191906000526020600020905b815481529060010190602001808311610b7a57829003601f168201915b50505050509050610baf565b610bac82611658565b90505b919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c0c57600080fd5b600854600b5411610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990612acf565b60405180910390fd5b600060086000815480929190610c6790612b1e565b919050559050610c77848261176b565b610c818184611210565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ce157600080fd5b600060086000815480929190610cf690612b1e565b919050559050610d068382611864565b610d108183611210565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610db1611189565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e235760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610e1a9190612237565b60405180910390fd5b610e2c8161126c565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e895750610e8882611882565b5b9050919050565b600080610e9c83611964565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f0f57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610f0691906122cd565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610f6a83838360016119a1565b505050565b600080610f7b84611964565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610fbd57610fbc818486611b66565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461104e57610fff6000856000806119a1565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146110d1576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b611191610f55565b73ffffffffffffffffffffffffffffffffffffffff166111af61089a565b73ffffffffffffffffffffffffffffffffffffffff161461120e576111d2610f55565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016112059190612237565b60405180910390fd5b565b8060066000848152602001908152602001600020908161123091906129b1565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161126091906122cd565b60405180910390a15050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113a357816040517f5b08ba1800000000000000000000000000000000000000000000000000000000815260040161139a9190612237565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161149491906120c6565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611652578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026114e5610f55565b8685856040518563ffffffff1660e01b81526004016115079493929190612bbb565b6020604051808303816000875af192505050801561154357506040513d601f19601f820116820180604052508101906115409190612c1c565b60015b6115c7573d8060008114611573576040519150601f19603f3d011682016040523d82523d6000602084013e611578565b606091505b5060008151036115bf57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016115b69190612237565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461165057836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016116479190612237565b60405180910390fd5b505b50505050565b606061166382610e90565b5060006006600084815260200190815260200160002080546116849061279d565b80601f01602080910402602001604051908101604052809291908181526020018280546116b09061279d565b80156116fd5780601f106116d2576101008083540402835291602001916116fd565b820191906000526020600020905b8154815290600101906020018083116116e057829003601f168201915b50505050509050600061170e611c2a565b90506000815103611723578192505050611766565b600082511115611758578082604051602001611740929190612c85565b60405160208183030381529060405292505050611766565b61176184611c41565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117dd5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016117d49190612237565b60405180910390fd5b60006117eb83836000610f6f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461185f5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016118569190612237565b60405180910390fd5b505050565b61187e828260405180602001604052806000815250611caa565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061194d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061195d575061195c82611cc6565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806119da5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b0e5760006119ea84610e90565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a5557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611a685750611a668184610d15565b155b15611aaa57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611aa19190612237565b60405180910390fd5b8115611b0c57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611b71838383611d30565b611c2557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611be657806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611bdd91906122cd565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611c1c929190612ca9565b60405180910390fd5b505050565b606060405180602001604052806000815250905090565b6060611c4c82610e90565b506000611c57611c2a565b90506000815111611c775760405180602001604052806000815250611ca2565b80611c8184611df1565b604051602001611c92929190612c85565b6040516020818303038152906040525b915050919050565b611cb4838361176b565b611cc160008484846114a1565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611de857508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611da95750611da88484610d15565b5b80611de757508273ffffffffffffffffffffffffffffffffffffffff16611dcf83610f18565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b606060006001611e0084611ebf565b01905060008167ffffffffffffffff811115611e1f57611e1e612345565b5b6040519080825280601f01601f191660200182016040528015611e515781602001600182028036833780820191505090505b509050600082602001820190505b600115611eb4578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611ea857611ea7612cd2565b5b04945060008503611e5f575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611f1d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611f1357611f12612cd2565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611f5a576d04ee2d6d415b85acef81000000008381611f5057611f4f612cd2565b5b0492506020810190505b662386f26fc100008310611f8957662386f26fc100008381611f7f57611f7e612cd2565b5b0492506010810190505b6305f5e1008310611fb2576305f5e1008381611fa857611fa7612cd2565b5b0492506008810190505b6127108310611fd7576127108381611fcd57611fcc612cd2565b5b0492506004810190505b60648310611ffa5760648381611ff057611fef612cd2565b5b0492506002810190505b600a8310612009576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61205b81612026565b811461206657600080fd5b50565b60008135905061207881612052565b92915050565b6000602082840312156120945761209361201c565b5b60006120a284828501612069565b91505092915050565b60008115159050919050565b6120c0816120ab565b82525050565b60006020820190506120db60008301846120b7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561211b578082015181840152602081019050612100565b60008484015250505050565b6000601f19601f8301169050919050565b6000612143826120e1565b61214d81856120ec565b935061215d8185602086016120fd565b61216681612127565b840191505092915050565b6000602082019050818103600083015261218b8184612138565b905092915050565b6000819050919050565b6121a681612193565b81146121b157600080fd5b50565b6000813590506121c38161219d565b92915050565b6000602082840312156121df576121de61201c565b5b60006121ed848285016121b4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612221826121f6565b9050919050565b61223181612216565b82525050565b600060208201905061224c6000830184612228565b92915050565b61225b81612216565b811461226657600080fd5b50565b60008135905061227881612252565b92915050565b600080604083850312156122955761229461201c565b5b60006122a385828601612269565b92505060206122b4858286016121b4565b9150509250929050565b6122c781612193565b82525050565b60006020820190506122e260008301846122be565b92915050565b6000806000606084860312156123015761230061201c565b5b600061230f86828701612269565b935050602061232086828701612269565b9250506040612331868287016121b4565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61237d82612127565b810181811067ffffffffffffffff8211171561239c5761239b612345565b5b80604052505050565b60006123af612012565b90506123bb8282612374565b919050565b600067ffffffffffffffff8211156123db576123da612345565b5b6123e482612127565b9050602081019050919050565b82818337600083830152505050565b600061241361240e846123c0565b6123a5565b90508281526020810184848401111561242f5761242e612340565b5b61243a8482856123f1565b509392505050565b600082601f8301126124575761245661233b565b5b8135612467848260208601612400565b91505092915050565b600080604083850312156124875761248661201c565b5b6000612495858286016121b4565b925050602083013567ffffffffffffffff8111156124b6576124b5612021565b5b6124c285828601612442565b9150509250929050565b6000602082840312156124e2576124e161201c565b5b60006124f084828501612269565b91505092915050565b612502816120ab565b811461250d57600080fd5b50565b60008135905061251f816124f9565b92915050565b6000806040838503121561253c5761253b61201c565b5b600061254a85828601612269565b925050602061255b85828601612510565b9150509250929050565b600067ffffffffffffffff8211156125805761257f612345565b5b61258982612127565b9050602081019050919050565b60006125a96125a484612565565b6123a5565b9050828152602081018484840111156125c5576125c4612340565b5b6125d08482856123f1565b509392505050565b600082601f8301126125ed576125ec61233b565b5b81356125fd848260208601612596565b91505092915050565b600080600080608085870312156126205761261f61201c565b5b600061262e87828801612269565b945050602061263f87828801612269565b9350506040612650878288016121b4565b925050606085013567ffffffffffffffff81111561267157612670612021565b5b61267d878288016125d8565b91505092959194509250565b60006020828403121561269f5761269e61201c565b5b600082013567ffffffffffffffff8111156126bd576126bc612021565b5b6126c984828501612442565b91505092915050565b600080604083850312156126e9576126e861201c565b5b60006126f785828601612269565b925050602083013567ffffffffffffffff81111561271857612717612021565b5b61272485828601612442565b9150509250929050565b600080604083850312156127455761274461201c565b5b600061275385828601612269565b925050602061276485828601612269565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806127b557607f821691505b6020821081036127c8576127c761276e565b5b50919050565b60006060820190506127e36000830186612228565b6127f060208301856122be565b6127fd6040830184612228565b949350505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026128677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261282a565b612871868361282a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006128ae6128a96128a484612193565b612889565b612193565b9050919050565b6000819050919050565b6128c883612893565b6128dc6128d4826128b5565b848454612837565b825550505050565b600090565b6128f16128e4565b6128fc8184846128bf565b505050565b5b81811015612920576129156000826128e9565b600181019050612902565b5050565b601f8211156129655761293681612805565b61293f8461281a565b8101602085101561294e578190505b61296261295a8561281a565b830182612901565b50505b505050565b600082821c905092915050565b60006129886000198460080261296a565b1980831691505092915050565b60006129a18383612977565b9150826002028217905092915050565b6129ba826120e1565b67ffffffffffffffff8111156129d3576129d2612345565b5b6129dd825461279d565b6129e8828285612924565b600060209050601f831160018114612a1b5760008415612a09578287015190505b612a138582612995565b865550612a7b565b601f198416612a2986612805565b60005b82811015612a5157848901518255600182019150602085019450602081019050612a2c565b86831015612a6e5784890151612a6a601f891682612977565b8355505b6001600288020188555050505b505050505050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b6000612ab96010836120ec565b9150612ac482612a83565b602082019050919050565b60006020820190508181036000830152612ae881612aac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b2982612193565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b5b57612b5a612aef565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000612b8d82612b66565b612b978185612b71565b9350612ba78185602086016120fd565b612bb081612127565b840191505092915050565b6000608082019050612bd06000830187612228565b612bdd6020830186612228565b612bea60408301856122be565b8181036060830152612bfc8184612b82565b905095945050505050565b600081519050612c1681612052565b92915050565b600060208284031215612c3257612c3161201c565b5b6000612c4084828501612c07565b91505092915050565b600081905092915050565b6000612c5f826120e1565b612c698185612c49565b9350612c798185602086016120fd565b80840191505092915050565b6000612c918285612c54565b9150612c9d8284612c54565b91508190509392505050565b6000604082019050612cbe6000830185612228565b612ccb60208301846122be565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea26469706673582212203f33bbaed2403b97f7f9492ee7a0df1cc305e2e8a229495ddb9b16b4dec1563264736f6c6343000818003368747470733a2f2f61696f772d7075626c69632e73332e65752d63656e7472616c2d312e616d617a6f6e6177732e636f6d2f68696464656e2d696d616765732f3637386166316339363738333933353335626266356630372e6a7065673f582d416d7a2d416c676f726974686d3d415753342d484d41432d53484132353626616d703b582d416d7a2d436f6e74656e742d5368613235363d554e5349474e45442d5041594c4f414426616d703b582d416d7a2d43726564656e7469616c3d414b4941514646323242484534535252514e3632253246323032353031313925324665752d63656e7472616c2d312532467333253246617773345f7265717565737426616d703b582d416d7a2d446174653d3230323530313139543230333733315a26616d703b582d416d7a2d457870697265733d39303026616d703b582d416d7a2d5369676e61747572653d3963626663616161343937386535336133323938626631636663323036303533666366386230636435393635666466666263366332306261636363363463643026616d703b582d416d7a2d5369676e6564486561646572733d686f737426616d703b782d69643d4765744f626a656374000000000000000000000000c9c5caa37dc34bc87ca1bf0ac88a70ff926946a9
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80638da5cb5b116100de578063bd0bc04711610097578063d0def52111610071578063d0def52114610447578063d204c45e14610477578063e985e9c514610493578063f2fde38b146104c35761018e565b8063bd0bc047146103dd578063c5be8750146103f9578063c87b56dd146104175761018e565b80638da5cb5b1461032f5780638e6fcd321461034d57806395d89b4114610369578063a22cb46514610387578063aeca06ab146103a3578063b88d4fde146103c15761018e565b806334d1c6411161014b5780636352211e116101255780636352211e146102bb57806370a08231146102eb578063715018a61461031b5780637f8b1e0e146103255761018e565b806334d1c6411461026757806342842e0e14610283578063524cad981461029f5761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b31461021157806318160ddd1461022d57806323b872dd1461024b575b600080fd5b6101ad60048036038101906101a8919061207e565b6104df565b6040516101ba91906120c6565b60405180910390f35b6101cb6104f1565b6040516101d89190612171565b60405180910390f35b6101fb60048036038101906101f691906121c9565b610583565b6040516102089190612237565b60405180910390f35b61022b6004803603810190610226919061227e565b61059f565b005b6102356105b5565b60405161024291906122cd565b60405180910390f35b610265600480360381019061026091906122e8565b6105bf565b005b610281600480360381019061027c9190612470565b6106c1565b005b61029d600480360381019061029891906122e8565b6106d7565b005b6102b960048036038101906102b491906124cc565b6106f7565b005b6102d560048036038101906102d091906121c9565b610795565b6040516102e29190612237565b60405180910390f35b610305600480360381019061030091906124cc565b6107a7565b60405161031291906122cd565b60405180910390f35b610323610861565b005b61032d610875565b005b61033761089a565b6040516103449190612237565b60405180910390f35b61036760048036038101906103629190612525565b6108c4565b005b610371610979565b60405161037e9190612171565b60405180910390f35b6103a1600480360381019061039c9190612525565b610a0b565b005b6103ab610a21565b6040516103b891906120c6565b60405180910390f35b6103db60048036038101906103d69190612606565b610a34565b005b6103f760048036038101906103f29190612689565b610a51565b005b610401610a6c565b60405161040e9190612171565b60405180910390f35b610431600480360381019061042c91906121c9565b610afa565b60405161043e9190612171565b60405180910390f35b610461600480360381019061045c91906126d2565b610bb4565b60405161046e91906122cd565b60405180910390f35b610491600480360381019061048c91906126d2565b610c8b565b005b6104ad60048036038101906104a8919061272e565b610d15565b6040516104ba91906120c6565b60405180910390f35b6104dd60048036038101906104d891906124cc565b610da9565b005b60006104ea82610e2f565b9050919050565b6060600080546105009061279d565b80601f016020809104026020016040519081016040528092919081815260200182805461052c9061279d565b80156105795780601f1061054e57610100808354040283529160200191610579565b820191906000526020600020905b81548152906001019060200180831161055c57829003601f168201915b5050505050905090565b600061058e82610e90565b5061059882610f18565b9050919050565b6105b182826105ac610f55565b610f5d565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106315760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106289190612237565b60405180910390fd5b60006106458383610640610f55565b610f6f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106bb578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016106b2939291906127ce565b60405180910390fd5b50505050565b6106c9611189565b6106d38282611210565b5050565b6106f283838360405180602001604052806000815250610a34565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075157600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006107a082610e90565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361081a5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016108119190612237565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610869611189565b610873600061126c565b565b61087d611189565b6000600c60006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461091e57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6060600180546109889061279d565b80601f01602080910402602001604051908101604052809291908181526020018280546109b49061279d565b8015610a015780601f106109d657610100808354040283529160200191610a01565b820191906000526020600020905b8154815290600101906020018083116109e457829003601f168201915b5050505050905090565b610a1d610a16610f55565b8383611332565b5050565b600c60009054906101000a900460ff1681565b610a3f8484846105bf565b610a4b848484846114a1565b50505050565b610a59611189565b80600d9081610a6891906129b1565b5050565b600d8054610a799061279d565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa59061279d565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b505050505081565b6060600c60009054906101000a900460ff1615610ba357600d8054610b1e9061279d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4a9061279d565b8015610b975780601f10610b6c57610100808354040283529160200191610b97565b820191906000526020600020905b815481529060010190602001808311610b7a57829003601f168201915b50505050509050610baf565b610bac82611658565b90505b919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c0c57600080fd5b600854600b5411610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990612acf565b60405180910390fd5b600060086000815480929190610c6790612b1e565b919050559050610c77848261176b565b610c818184611210565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ce157600080fd5b600060086000815480929190610cf690612b1e565b919050559050610d068382611864565b610d108183611210565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610db1611189565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e235760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610e1a9190612237565b60405180910390fd5b610e2c8161126c565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e895750610e8882611882565b5b9050919050565b600080610e9c83611964565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f0f57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610f0691906122cd565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610f6a83838360016119a1565b505050565b600080610f7b84611964565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610fbd57610fbc818486611b66565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461104e57610fff6000856000806119a1565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146110d1576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b611191610f55565b73ffffffffffffffffffffffffffffffffffffffff166111af61089a565b73ffffffffffffffffffffffffffffffffffffffff161461120e576111d2610f55565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016112059190612237565b60405180910390fd5b565b8060066000848152602001908152602001600020908161123091906129b1565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161126091906122cd565b60405180910390a15050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113a357816040517f5b08ba1800000000000000000000000000000000000000000000000000000000815260040161139a9190612237565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161149491906120c6565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611652578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026114e5610f55565b8685856040518563ffffffff1660e01b81526004016115079493929190612bbb565b6020604051808303816000875af192505050801561154357506040513d601f19601f820116820180604052508101906115409190612c1c565b60015b6115c7573d8060008114611573576040519150601f19603f3d011682016040523d82523d6000602084013e611578565b606091505b5060008151036115bf57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016115b69190612237565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461165057836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016116479190612237565b60405180910390fd5b505b50505050565b606061166382610e90565b5060006006600084815260200190815260200160002080546116849061279d565b80601f01602080910402602001604051908101604052809291908181526020018280546116b09061279d565b80156116fd5780601f106116d2576101008083540402835291602001916116fd565b820191906000526020600020905b8154815290600101906020018083116116e057829003601f168201915b50505050509050600061170e611c2a565b90506000815103611723578192505050611766565b600082511115611758578082604051602001611740929190612c85565b60405160208183030381529060405292505050611766565b61176184611c41565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117dd5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016117d49190612237565b60405180910390fd5b60006117eb83836000610f6f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461185f5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016118569190612237565b60405180910390fd5b505050565b61187e828260405180602001604052806000815250611caa565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061194d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061195d575061195c82611cc6565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806119da5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b0e5760006119ea84610e90565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a5557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611a685750611a668184610d15565b155b15611aaa57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611aa19190612237565b60405180910390fd5b8115611b0c57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611b71838383611d30565b611c2557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611be657806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611bdd91906122cd565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611c1c929190612ca9565b60405180910390fd5b505050565b606060405180602001604052806000815250905090565b6060611c4c82610e90565b506000611c57611c2a565b90506000815111611c775760405180602001604052806000815250611ca2565b80611c8184611df1565b604051602001611c92929190612c85565b6040516020818303038152906040525b915050919050565b611cb4838361176b565b611cc160008484846114a1565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611de857508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611da95750611da88484610d15565b5b80611de757508273ffffffffffffffffffffffffffffffffffffffff16611dcf83610f18565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b606060006001611e0084611ebf565b01905060008167ffffffffffffffff811115611e1f57611e1e612345565b5b6040519080825280601f01601f191660200182016040528015611e515781602001600182028036833780820191505090505b509050600082602001820190505b600115611eb4578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611ea857611ea7612cd2565b5b04945060008503611e5f575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611f1d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611f1357611f12612cd2565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611f5a576d04ee2d6d415b85acef81000000008381611f5057611f4f612cd2565b5b0492506020810190505b662386f26fc100008310611f8957662386f26fc100008381611f7f57611f7e612cd2565b5b0492506010810190505b6305f5e1008310611fb2576305f5e1008381611fa857611fa7612cd2565b5b0492506008810190505b6127108310611fd7576127108381611fcd57611fcc612cd2565b5b0492506004810190505b60648310611ffa5760648381611ff057611fef612cd2565b5b0492506002810190505b600a8310612009576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61205b81612026565b811461206657600080fd5b50565b60008135905061207881612052565b92915050565b6000602082840312156120945761209361201c565b5b60006120a284828501612069565b91505092915050565b60008115159050919050565b6120c0816120ab565b82525050565b60006020820190506120db60008301846120b7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561211b578082015181840152602081019050612100565b60008484015250505050565b6000601f19601f8301169050919050565b6000612143826120e1565b61214d81856120ec565b935061215d8185602086016120fd565b61216681612127565b840191505092915050565b6000602082019050818103600083015261218b8184612138565b905092915050565b6000819050919050565b6121a681612193565b81146121b157600080fd5b50565b6000813590506121c38161219d565b92915050565b6000602082840312156121df576121de61201c565b5b60006121ed848285016121b4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612221826121f6565b9050919050565b61223181612216565b82525050565b600060208201905061224c6000830184612228565b92915050565b61225b81612216565b811461226657600080fd5b50565b60008135905061227881612252565b92915050565b600080604083850312156122955761229461201c565b5b60006122a385828601612269565b92505060206122b4858286016121b4565b9150509250929050565b6122c781612193565b82525050565b60006020820190506122e260008301846122be565b92915050565b6000806000606084860312156123015761230061201c565b5b600061230f86828701612269565b935050602061232086828701612269565b9250506040612331868287016121b4565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61237d82612127565b810181811067ffffffffffffffff8211171561239c5761239b612345565b5b80604052505050565b60006123af612012565b90506123bb8282612374565b919050565b600067ffffffffffffffff8211156123db576123da612345565b5b6123e482612127565b9050602081019050919050565b82818337600083830152505050565b600061241361240e846123c0565b6123a5565b90508281526020810184848401111561242f5761242e612340565b5b61243a8482856123f1565b509392505050565b600082601f8301126124575761245661233b565b5b8135612467848260208601612400565b91505092915050565b600080604083850312156124875761248661201c565b5b6000612495858286016121b4565b925050602083013567ffffffffffffffff8111156124b6576124b5612021565b5b6124c285828601612442565b9150509250929050565b6000602082840312156124e2576124e161201c565b5b60006124f084828501612269565b91505092915050565b612502816120ab565b811461250d57600080fd5b50565b60008135905061251f816124f9565b92915050565b6000806040838503121561253c5761253b61201c565b5b600061254a85828601612269565b925050602061255b85828601612510565b9150509250929050565b600067ffffffffffffffff8211156125805761257f612345565b5b61258982612127565b9050602081019050919050565b60006125a96125a484612565565b6123a5565b9050828152602081018484840111156125c5576125c4612340565b5b6125d08482856123f1565b509392505050565b600082601f8301126125ed576125ec61233b565b5b81356125fd848260208601612596565b91505092915050565b600080600080608085870312156126205761261f61201c565b5b600061262e87828801612269565b945050602061263f87828801612269565b9350506040612650878288016121b4565b925050606085013567ffffffffffffffff81111561267157612670612021565b5b61267d878288016125d8565b91505092959194509250565b60006020828403121561269f5761269e61201c565b5b600082013567ffffffffffffffff8111156126bd576126bc612021565b5b6126c984828501612442565b91505092915050565b600080604083850312156126e9576126e861201c565b5b60006126f785828601612269565b925050602083013567ffffffffffffffff81111561271857612717612021565b5b61272485828601612442565b9150509250929050565b600080604083850312156127455761274461201c565b5b600061275385828601612269565b925050602061276485828601612269565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806127b557607f821691505b6020821081036127c8576127c761276e565b5b50919050565b60006060820190506127e36000830186612228565b6127f060208301856122be565b6127fd6040830184612228565b949350505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026128677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261282a565b612871868361282a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006128ae6128a96128a484612193565b612889565b612193565b9050919050565b6000819050919050565b6128c883612893565b6128dc6128d4826128b5565b848454612837565b825550505050565b600090565b6128f16128e4565b6128fc8184846128bf565b505050565b5b81811015612920576129156000826128e9565b600181019050612902565b5050565b601f8211156129655761293681612805565b61293f8461281a565b8101602085101561294e578190505b61296261295a8561281a565b830182612901565b50505b505050565b600082821c905092915050565b60006129886000198460080261296a565b1980831691505092915050565b60006129a18383612977565b9150826002028217905092915050565b6129ba826120e1565b67ffffffffffffffff8111156129d3576129d2612345565b5b6129dd825461279d565b6129e8828285612924565b600060209050601f831160018114612a1b5760008415612a09578287015190505b612a138582612995565b865550612a7b565b601f198416612a2986612805565b60005b82811015612a5157848901518255600182019150602085019450602081019050612a2c565b86831015612a6e5784890151612a6a601f891682612977565b8355505b6001600288020188555050505b505050505050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b6000612ab96010836120ec565b9150612ac482612a83565b602082019050919050565b60006020820190508181036000830152612ae881612aac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b2982612193565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b5b57612b5a612aef565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000612b8d82612b66565b612b978185612b71565b9350612ba78185602086016120fd565b612bb081612127565b840191505092915050565b6000608082019050612bd06000830187612228565b612bdd6020830186612228565b612bea60408301856122be565b8181036060830152612bfc8184612b82565b905095945050505050565b600081519050612c1681612052565b92915050565b600060208284031215612c3257612c3161201c565b5b6000612c4084828501612c07565b91505092915050565b600081905092915050565b6000612c5f826120e1565b612c698185612c49565b9350612c798185602086016120fd565b80840191505092915050565b6000612c918285612c54565b9150612c9d8284612c54565b91508190509392505050565b6000604082019050612cbe6000830185612228565b612ccb60208301846122be565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea26469706673582212203f33bbaed2403b97f7f9492ee7a0df1cc305e2e8a229495ddb9b16b4dec1563264736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c9c5caa37dc34bc87ca1bf0ac88a70ff926946a9
-----Decoded View---------------
Arg [0] : initialOwner (address): 0xC9C5cAa37DC34bC87ca1bf0Ac88A70FF926946a9
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c9c5caa37dc34bc87ca1bf0ac88a70ff926946a9
Deployed Bytecode Sourcemap
49649:3015:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52459:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31149:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32321:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32140:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52354:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32990:588;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51776:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33649:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51539:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30962:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30687:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18258:103;;;:::i;:::-;;51909:70;;;:::i;:::-;;17583:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51392:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31309:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32551:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49926:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33854:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51663:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49960:471;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52063:283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50876:308;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50658:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32768:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18516:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52459:196;52582:4;52611:36;52635:11;52611:23;:36::i;:::-;52604:43;;52459:196;;;:::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;52354:91::-;52398:7;52425:12;;52418:19;;52354: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;51776:119::-;17469:13;:11;:13::i;:::-;51861:26:::1;51874:7;51883:3;51861:12;:26::i;:::-;51776:119:::0;;:::o;33649:134::-;33736:39;33753:4;33759:2;33763:7;33736:39;;;;;;;;;;;;:16;:39::i;:::-;33649:134;;;:::o;51539:110::-;51352:11;;;;;;;;;;;51338:25;;:10;:25;;;51330:34;;;;;;51629:12:::1;51615:11;;:26;;;;;;;;;;;;;;;;;;51539: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;51909:70::-;17469:13;:11;:13::i;:::-;51966:5:::1;51955:8;;:16;;;;;;;;;;;;;;;;;;51909:70::o:0;17583:87::-;17629:7;17656:6;;;;;;;;;;;17649:13;;17583:87;:::o;51392:139::-;51352:11;;;;;;;;;;;51338:25;;:10;:25;;;51330:34;;;;;;51515:8:::1;51481:19;:33;51501:12;51481:33;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;51392:139:::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;49926: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;51663:97::-;17469:13;:11;:13::i;:::-;51749:3:::1;51737:9;:15;;;;;;:::i;:::-;;51663:97:::0;:::o;49960:471::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52063:283::-;52190:13;52235:8;;;;;;;;;;;52231:57;;;52267:9;52260:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52231:57;52315:23;52330:7;52315:14;:23::i;:::-;52308:30;;52063:283;;;;:::o;50876:308::-;50956:7;51239:19;:31;51259:10;51239:31;;;;;;;;;;;;;;;;;;;;;;;;;51231:40;;;;;;50999:12:::1;;50984;;:27;50976:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;51043:15;51061:12;;:14;;;;;;;;;:::i;:::-;;;;;51043:32;;51086:18;51092:2;51096:7;51086:5;:18::i;:::-;51115:26;51128:7;51137:3;51115:12;:26::i;:::-;51169:7;51162:14;;;50876:308:::0;;;;:::o;50658:210::-;51239:19;:31;51259:10;51239:31;;;;;;;;;;;;;;;;;;;;;;;;;51231:40;;;;;;50744:15:::1;50762:12;;:14;;;;;;;;;:::i;:::-;;;;;50744:32;;50787:22;50797:2;50801:7;50787:9;:22::i;:::-;50820:26;50833:7;50842:3;50820:12;:26::i;:::-;50733:135;50658: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;47714:209::-;47816:4;47529:10;47522:18;;47840:35;;;:11;:35;;;;:75;;;;47879:36;47903:11;47879:23;:36::i;:::-;47840:75;47833:82;;47714:209;;;:::o;45296:247::-;45359:7;45379:13;45395:17;45404:7;45395:8;:17::i;:::-;45379:33;;45444:1;45427:19;;:5;:19;;;45423:90;;45493:7;45470:31;;;;;;;;;;;:::i;:::-;;;;;;;;45423:90;45530:5;45523:12;;;45296: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:122::-;43609:33;43618:2;43622:7;43631:4;43637;43609:8;:33::i;:::-;43528:122;;;:::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;48729:170::-;48843:9;48821:10;:19;48832:7;48821:19;;;;;;;;;;;:31;;;;;;:::i;:::-;;48868:23;48883:7;48868:23;;;;;;:::i;:::-;;;;;;;;48729: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;44735:318::-;44863:1;44843:22;;:8;:22;;;44839:93;;44911:8;44889:31;;;;;;;;;;;:::i;:::-;;;;;;;;44839:93;44980:8;44942:18;:25;44961:5;44942:25;;;;;;;;;;;;;;;:35;44968:8;44942:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45026:8;45004:41;;45019:5;45004:41;;;45036:8;45004:41;;;;;;:::i;:::-;;;;;;;;44735:318;;;:::o;46093:799::-;46227:1;46210:2;:14;;;:18;46206:679;;;46265:2;46249:36;;;46286:12;:10;:12::i;:::-;46300:4;46306:7;46315:4;46249:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46245:629;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46580:1;46563:6;:13;:18;46559:300;;46635:2;46613:25;;;;;;;;;;;:::i;:::-;;;;;;;;46559:300;46809:6;46803:13;46794:6;46790:2;46786:15;46779:38;46245:629;46378:41;;;46368:51;;;:6;:51;;;;46364:132;;46473:2;46451:25;;;;;;;;;;;:::i;:::-;;;;;;;;46364:132;46321:190;46206:679;46093:799;;;;:::o;47994:609::-;48067:13;48093:22;48107:7;48093:13;:22::i;:::-;;48128:23;48154:10;:19;48165:7;48154:19;;;;;;;;;;;48128:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48184:18;48205:10;:8;:10::i;:::-;48184:31;;48313:1;48297:4;48291:18;:23;48287:72;;48338:9;48331:16;;;;;;48287:72;48486:1;48466:9;48460:23;:27;48456:97;;;48525:4;48531:9;48511:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48504:37;;;;;;48456:97;48572:23;48587:7;48572:14;:23::i;:::-;48565:30;;;;47994: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;43838:678::-;44000:9;:31;;;;44029:1;44013:18;;:4;:18;;;;44000:31;43996:471;;;44048:13;44064:22;44078:7;44064:13;:22::i;:::-;44048:38;;44233:1;44217:18;;:4;:18;;;;:35;;;;;44248:4;44239:13;;:5;:13;;;;44217:35;:69;;;;;44257:29;44274:5;44281:4;44257:16;:29::i;:::-;44256:30;44217:69;44213:144;;;44336:4;44314:27;;;;;;;;;;;:::i;:::-;;;;;;;;44213:144;44377:9;44373:83;;;44432:7;44428:2;44412:28;;44421:5;44412:28;;;;;;;;;;;;44373:83;44033:434;43996:471;44506:2;44479:15;:24;44495:7;44479:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43838: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:117::-;5976:1;5973;5966:12;5990:117;6099:1;6096;6089:12;6113:180;6161:77;6158:1;6151:88;6258:4;6255:1;6248:15;6282:4;6279:1;6272:15;6299:281;6382:27;6404:4;6382:27;:::i;:::-;6374:6;6370:40;6512:6;6500:10;6497:22;6476:18;6464:10;6461:34;6458:62;6455:88;;;6523:18;;:::i;:::-;6455:88;6563:10;6559:2;6552:22;6342:238;6299:281;;:::o;6586:129::-;6620:6;6647:20;;:::i;:::-;6637:30;;6676:33;6704:4;6696:6;6676:33;:::i;:::-;6586:129;;;:::o;6721:308::-;6783:4;6873:18;6865:6;6862:30;6859:56;;;6895:18;;:::i;:::-;6859:56;6933:29;6955:6;6933:29;:::i;:::-;6925:37;;7017:4;7011;7007:15;6999:23;;6721:308;;;:::o;7035:146::-;7132:6;7127:3;7122;7109:30;7173:1;7164:6;7159:3;7155:16;7148:27;7035:146;;;:::o;7187:425::-;7265:5;7290:66;7306:49;7348:6;7306:49;:::i;:::-;7290:66;:::i;:::-;7281:75;;7379:6;7372:5;7365:21;7417:4;7410:5;7406:16;7455:3;7446:6;7441:3;7437:16;7434:25;7431:112;;;7462:79;;:::i;:::-;7431:112;7552:54;7599:6;7594:3;7589;7552:54;:::i;:::-;7271:341;7187:425;;;;;:::o;7632:340::-;7688:5;7737:3;7730:4;7722:6;7718:17;7714:27;7704:122;;7745:79;;:::i;:::-;7704:122;7862:6;7849:20;7887:79;7962:3;7954:6;7947:4;7939:6;7935:17;7887:79;:::i;:::-;7878:88;;7694:278;7632:340;;;;:::o;7978:654::-;8056:6;8064;8113:2;8101:9;8092:7;8088:23;8084:32;8081:119;;;8119:79;;:::i;:::-;8081:119;8239:1;8264:53;8309:7;8300:6;8289:9;8285:22;8264:53;:::i;:::-;8254:63;;8210:117;8394:2;8383:9;8379:18;8366:32;8425:18;8417:6;8414:30;8411:117;;;8447:79;;:::i;:::-;8411:117;8552:63;8607:7;8598:6;8587:9;8583:22;8552:63;:::i;:::-;8542:73;;8337:288;7978:654;;;;;:::o;8638:329::-;8697:6;8746:2;8734:9;8725:7;8721:23;8717:32;8714:119;;;8752:79;;:::i;:::-;8714:119;8872:1;8897:53;8942:7;8933:6;8922:9;8918:22;8897:53;:::i;:::-;8887:63;;8843:117;8638:329;;;;:::o;8973:116::-;9043:21;9058:5;9043:21;:::i;:::-;9036:5;9033:32;9023:60;;9079:1;9076;9069:12;9023:60;8973:116;:::o;9095:133::-;9138:5;9176:6;9163:20;9154:29;;9192:30;9216:5;9192:30;:::i;:::-;9095:133;;;;:::o;9234:468::-;9299:6;9307;9356:2;9344:9;9335:7;9331:23;9327:32;9324:119;;;9362:79;;:::i;:::-;9324:119;9482:1;9507:53;9552:7;9543:6;9532:9;9528:22;9507:53;:::i;:::-;9497:63;;9453:117;9609:2;9635:50;9677:7;9668:6;9657:9;9653:22;9635:50;:::i;:::-;9625:60;;9580:115;9234:468;;;;;:::o;9708:307::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9708:307;;;:::o;10021:423::-;10098:5;10123:65;10139:48;10180:6;10139:48;:::i;:::-;10123:65;:::i;:::-;10114:74;;10211:6;10204:5;10197:21;10249:4;10242:5;10238:16;10287:3;10278:6;10273:3;10269:16;10266:25;10263:112;;;10294:79;;:::i;:::-;10263:112;10384:54;10431:6;10426:3;10421;10384:54;:::i;:::-;10104:340;10021:423;;;;;:::o;10463:338::-;10518:5;10567:3;10560:4;10552:6;10548:17;10544:27;10534:122;;10575:79;;:::i;:::-;10534:122;10692:6;10679:20;10717:78;10791:3;10783:6;10776:4;10768:6;10764:17;10717:78;:::i;:::-;10708:87;;10524:277;10463:338;;;;:::o;10807:943::-;10902:6;10910;10918;10926;10975:3;10963:9;10954:7;10950:23;10946:33;10943:120;;;10982:79;;:::i;:::-;10943:120;11102:1;11127:53;11172:7;11163:6;11152:9;11148:22;11127:53;:::i;:::-;11117:63;;11073:117;11229:2;11255:53;11300:7;11291:6;11280:9;11276:22;11255:53;:::i;:::-;11245:63;;11200:118;11357:2;11383:53;11428:7;11419:6;11408:9;11404:22;11383:53;:::i;:::-;11373:63;;11328:118;11513:2;11502:9;11498:18;11485:32;11544:18;11536:6;11533:30;11530:117;;;11566:79;;:::i;:::-;11530:117;11671:62;11725:7;11716:6;11705:9;11701:22;11671:62;:::i;:::-;11661:72;;11456:287;10807:943;;;;;;;:::o;11756:509::-;11825:6;11874:2;11862:9;11853:7;11849:23;11845:32;11842:119;;;11880:79;;:::i;:::-;11842:119;12028:1;12017:9;12013:17;12000:31;12058:18;12050:6;12047:30;12044:117;;;12080:79;;:::i;:::-;12044:117;12185:63;12240:7;12231:6;12220:9;12216:22;12185:63;:::i;:::-;12175:73;;11971:287;11756:509;;;;:::o;12271:654::-;12349:6;12357;12406:2;12394:9;12385:7;12381:23;12377:32;12374:119;;;12412:79;;:::i;:::-;12374:119;12532:1;12557:53;12602:7;12593:6;12582:9;12578:22;12557:53;:::i;:::-;12547:63;;12503:117;12687:2;12676:9;12672:18;12659:32;12718:18;12710:6;12707:30;12704:117;;;12740:79;;:::i;:::-;12704:117;12845:63;12900:7;12891:6;12880:9;12876:22;12845:63;:::i;:::-;12835:73;;12630:288;12271:654;;;;;:::o;12931:474::-;12999:6;13007;13056:2;13044:9;13035:7;13031:23;13027:32;13024:119;;;13062:79;;:::i;:::-;13024:119;13182:1;13207:53;13252:7;13243:6;13232:9;13228:22;13207:53;:::i;:::-;13197:63;;13153:117;13309:2;13335:53;13380:7;13371:6;13360:9;13356:22;13335:53;:::i;:::-;13325:63;;13280:118;12931:474;;;;;:::o;13411:180::-;13459:77;13456:1;13449:88;13556:4;13553:1;13546:15;13580:4;13577:1;13570:15;13597:320;13641:6;13678:1;13672:4;13668:12;13658:22;;13725:1;13719:4;13715:12;13746:18;13736:81;;13802:4;13794:6;13790:17;13780:27;;13736:81;13864:2;13856:6;13853:14;13833:18;13830:38;13827:84;;13883:18;;:::i;:::-;13827:84;13648:269;13597:320;;;:::o;13923:442::-;14072:4;14110:2;14099:9;14095:18;14087:26;;14123:71;14191:1;14180:9;14176:17;14167:6;14123:71;:::i;:::-;14204:72;14272:2;14261:9;14257:18;14248:6;14204:72;:::i;:::-;14286;14354:2;14343:9;14339:18;14330:6;14286:72;:::i;:::-;13923:442;;;;;;:::o;14371:141::-;14420:4;14443:3;14435:11;;14466:3;14463:1;14456:14;14500:4;14497:1;14487:18;14479:26;;14371:141;;;:::o;14518:93::-;14555:6;14602:2;14597;14590:5;14586:14;14582:23;14572:33;;14518:93;;;:::o;14617:107::-;14661:8;14711:5;14705:4;14701:16;14680:37;;14617:107;;;;:::o;14730:393::-;14799:6;14849:1;14837:10;14833:18;14872:97;14902:66;14891:9;14872:97;:::i;:::-;14990:39;15020:8;15009:9;14990:39;:::i;:::-;14978:51;;15062:4;15058:9;15051:5;15047:21;15038:30;;15111:4;15101:8;15097:19;15090:5;15087:30;15077:40;;14806:317;;14730:393;;;;;:::o;15129:60::-;15157:3;15178:5;15171:12;;15129:60;;;:::o;15195:142::-;15245:9;15278:53;15296:34;15305:24;15323:5;15305:24;:::i;:::-;15296:34;:::i;:::-;15278:53;:::i;:::-;15265:66;;15195:142;;;:::o;15343:75::-;15386:3;15407:5;15400:12;;15343:75;;;:::o;15424:269::-;15534:39;15565:7;15534:39;:::i;:::-;15595:91;15644:41;15668:16;15644:41;:::i;:::-;15636:6;15629:4;15623:11;15595:91;:::i;:::-;15589:4;15582:105;15500:193;15424:269;;;:::o;15699:73::-;15744:3;15699:73;:::o;15778:189::-;15855:32;;:::i;:::-;15896:65;15954:6;15946;15940:4;15896:65;:::i;:::-;15831:136;15778:189;;:::o;15973:186::-;16033:120;16050:3;16043:5;16040:14;16033:120;;;16104:39;16141:1;16134:5;16104:39;:::i;:::-;16077:1;16070:5;16066:13;16057:22;;16033:120;;;15973:186;;:::o;16165:543::-;16266:2;16261:3;16258:11;16255:446;;;16300:38;16332:5;16300:38;:::i;:::-;16384:29;16402:10;16384:29;:::i;:::-;16374:8;16370:44;16567:2;16555:10;16552:18;16549:49;;;16588:8;16573:23;;16549:49;16611:80;16667:22;16685:3;16667:22;:::i;:::-;16657:8;16653:37;16640:11;16611:80;:::i;:::-;16270:431;;16255:446;16165:543;;;:::o;16714:117::-;16768:8;16818:5;16812:4;16808:16;16787:37;;16714:117;;;;:::o;16837:169::-;16881:6;16914:51;16962:1;16958:6;16950:5;16947:1;16943:13;16914:51;:::i;:::-;16910:56;16995:4;16989;16985:15;16975:25;;16888:118;16837:169;;;;:::o;17011:295::-;17087:4;17233:29;17258:3;17252:4;17233:29;:::i;:::-;17225:37;;17295:3;17292:1;17288:11;17282:4;17279:21;17271:29;;17011:295;;;;:::o;17311:1395::-;17428:37;17461:3;17428:37;:::i;:::-;17530:18;17522:6;17519:30;17516:56;;;17552:18;;:::i;:::-;17516:56;17596:38;17628:4;17622:11;17596:38;:::i;:::-;17681:67;17741:6;17733;17727:4;17681:67;:::i;:::-;17775:1;17799:4;17786:17;;17831:2;17823:6;17820:14;17848:1;17843:618;;;;18505:1;18522:6;18519:77;;;18571:9;18566:3;18562:19;18556:26;18547:35;;18519:77;18622:67;18682:6;18675:5;18622:67;:::i;:::-;18616:4;18609:81;18478:222;17813:887;;17843:618;17895:4;17891:9;17883:6;17879:22;17929:37;17961:4;17929:37;:::i;:::-;17988:1;18002:208;18016:7;18013:1;18010:14;18002:208;;;18095:9;18090:3;18086:19;18080:26;18072:6;18065:42;18146:1;18138:6;18134:14;18124:24;;18193:2;18182:9;18178:18;18165:31;;18039:4;18036:1;18032:12;18027:17;;18002:208;;;18238:6;18229:7;18226:19;18223:179;;;18296:9;18291:3;18287:19;18281:26;18339:48;18381:4;18373:6;18369:17;18358:9;18339:48;:::i;:::-;18331:6;18324:64;18246:156;18223:179;18448:1;18444;18436:6;18432:14;18428:22;18422:4;18415:36;17850:611;;;17813:887;;17403:1303;;;17311:1395;;:::o;18712:166::-;18852:18;18848:1;18840:6;18836:14;18829:42;18712:166;:::o;18884:366::-;19026:3;19047:67;19111:2;19106:3;19047:67;:::i;:::-;19040:74;;19123:93;19212:3;19123:93;:::i;:::-;19241:2;19236:3;19232:12;19225:19;;18884:366;;;:::o;19256:419::-;19422:4;19460:2;19449:9;19445:18;19437:26;;19509:9;19503:4;19499:20;19495:1;19484:9;19480:17;19473:47;19537:131;19663:4;19537:131;:::i;:::-;19529:139;;19256:419;;;:::o;19681:180::-;19729:77;19726:1;19719:88;19826:4;19823:1;19816:15;19850:4;19847:1;19840:15;19867:233;19906:3;19929:24;19947:5;19929:24;:::i;:::-;19920:33;;19975:66;19968:5;19965:77;19962:103;;20045:18;;:::i;:::-;19962:103;20092:1;20085:5;20081:13;20074:20;;19867:233;;;:::o;20106:98::-;20157:6;20191:5;20185:12;20175:22;;20106:98;;;:::o;20210:168::-;20293:11;20327:6;20322:3;20315:19;20367:4;20362:3;20358:14;20343:29;;20210:168;;;;:::o;20384:373::-;20470:3;20498:38;20530:5;20498:38;:::i;:::-;20552:70;20615:6;20610:3;20552:70;:::i;:::-;20545:77;;20631:65;20689:6;20684:3;20677:4;20670:5;20666:16;20631:65;:::i;:::-;20721:29;20743:6;20721:29;:::i;:::-;20716:3;20712:39;20705:46;;20474:283;20384:373;;;;:::o;20763:640::-;20958:4;20996:3;20985:9;20981:19;20973:27;;21010:71;21078:1;21067:9;21063:17;21054:6;21010:71;:::i;:::-;21091:72;21159:2;21148:9;21144:18;21135:6;21091:72;:::i;:::-;21173;21241:2;21230:9;21226:18;21217:6;21173:72;:::i;:::-;21292:9;21286:4;21282:20;21277:2;21266:9;21262:18;21255:48;21320:76;21391:4;21382:6;21320:76;:::i;:::-;21312:84;;20763:640;;;;;;;:::o;21409:141::-;21465:5;21496:6;21490:13;21481:22;;21512:32;21538:5;21512:32;:::i;:::-;21409:141;;;;:::o;21556:349::-;21625:6;21674:2;21662:9;21653:7;21649:23;21645:32;21642:119;;;21680:79;;:::i;:::-;21642:119;21800:1;21825:63;21880:7;21871:6;21860:9;21856:22;21825:63;:::i;:::-;21815:73;;21771:127;21556:349;;;;:::o;21911:148::-;22013:11;22050:3;22035:18;;21911:148;;;;:::o;22065:390::-;22171:3;22199:39;22232:5;22199:39;:::i;:::-;22254:89;22336:6;22331:3;22254:89;:::i;:::-;22247:96;;22352:65;22410:6;22405:3;22398:4;22391:5;22387:16;22352:65;:::i;:::-;22442:6;22437:3;22433:16;22426:23;;22175:280;22065:390;;;;:::o;22461:435::-;22641:3;22663:95;22754:3;22745:6;22663:95;:::i;:::-;22656:102;;22775:95;22866:3;22857:6;22775:95;:::i;:::-;22768:102;;22887:3;22880:10;;22461:435;;;;;:::o;22902:332::-;23023:4;23061:2;23050:9;23046:18;23038:26;;23074:71;23142:1;23131:9;23127:17;23118:6;23074:71;:::i;:::-;23155:72;23223:2;23212:9;23208:18;23199:6;23155:72;:::i;:::-;22902:332;;;;;:::o;23240:180::-;23288:77;23285:1;23278:88;23385:4;23382:1;23375:15;23409:4;23406:1;23399:15
Swarm Source
ipfs://3f33bbaed2403b97f7f9492ee7a0df1cc305e2e8a229495ddb9b16b4dec15632
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.