Overview
APE Balance
0 APE
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SPUNKY
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2024-12-11 */ // 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 SPUNKY is ERC721, ERC721URIStorage, Ownable { uint256 private _nextTokenId; mapping(address=>bool) allowedSaleContract; address private aiowAddress = 0x9aC26D5af386f5950D3D94476aFB4060325c6976; uint256 private _totalSupply = 8000; constructor(address initialOwner) ERC721("Spunky", "SPUN") Ownable(initialOwner) { allowedSaleContract[0x8b43a7474d2058550f2Cc8a25E8fFc2854ea8D20] = 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) public onlyAiow { allowedSaleContract[saleContract]=true; } function setTokenUrl(uint256 tokenId, string memory uri) public onlyOwner { _setTokenURI(tokenId, uri); } // The following functions are overrides required by Solidity. function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { 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"}],"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":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]
Contract Creation Code
6080604052739ac26d5af386f5950d3d94476afb4060325c6976600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f40600b553480156200006c57600080fd5b50604051620031123803806200311283398181016040528101906200009291906200034f565b806040518060400160405280600681526020017f5370756e6b7900000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5350554e000000000000000000000000000000000000000000000000000000008152508160009081620001109190620005fb565b508060019081620001229190620005fb565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200019a5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001919190620006f3565b60405180910390fd5b620001ab816200021f60201b60201c565b50600160096000738b43a7474d2058550f2cc8a25e8ffc2854ea8d2073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000710565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200031782620002ea565b9050919050565b62000329816200030a565b81146200033557600080fd5b50565b60008151905062000349816200031e565b92915050565b600060208284031215620003685762000367620002e5565b5b6000620003788482850162000338565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040357607f821691505b602082108103620004195762000418620003bb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000444565b6200048f868362000444565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004dc620004d6620004d084620004a7565b620004b1565b620004a7565b9050919050565b6000819050919050565b620004f883620004bb565b620005106200050782620004e3565b84845462000451565b825550505050565b600090565b6200052762000518565b62000534818484620004ed565b505050565b5b818110156200055c57620005506000826200051d565b6001810190506200053a565b5050565b601f821115620005ab5762000575816200041f565b620005808462000434565b8101602085101562000590578190505b620005a86200059f8562000434565b83018262000539565b50505b505050565b600082821c905092915050565b6000620005d060001984600802620005b0565b1980831691505092915050565b6000620005eb8383620005bd565b9150826002028217905092915050565b620006068262000381565b67ffffffffffffffff8111156200062257620006216200038c565b5b6200062e8254620003ea565b6200063b82828562000560565b600060209050601f8311600181146200067357600084156200065e578287015190505b6200066a8582620005dd565b865550620006da565b601f19841662000683866200041f565b60005b82811015620006ad5784890151825560018201915060208501945060208101905062000686565b86831015620006cd5784890151620006c9601f891682620005bd565b8355505b6001600288020188555050505b505050505050565b620006ed816200030a565b82525050565b60006020820190506200070a6000830184620006e2565b92915050565b6129f280620007206000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063b88d4fde1161007c578063b88d4fde14610326578063c87b56dd14610342578063d0def52114610372578063d204c45e146103a2578063e985e9c5146103be578063f2fde38b146103ee57610137565b806370a0823114610294578063715018a6146102c45780638da5cb5b146102ce57806395d89b41146102ec578063a22cb4651461030a57610137565b806323b872dd116100ff57806323b872dd146101f457806334d1c6411461021057806342842e0e1461022c578063563970dc146102485780636352211e1461026457610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba57806318160ddd146101d6575b600080fd5b61015660048036038101906101519190611d82565b61040a565b6040516101639190611dca565b60405180910390f35b61017461041c565b6040516101819190611e75565b60405180910390f35b6101a4600480360381019061019f9190611ecd565b6104ae565b6040516101b19190611f3b565b60405180910390f35b6101d460048036038101906101cf9190611f82565b6104ca565b005b6101de6104e0565b6040516101eb9190611fd1565b60405180910390f35b61020e60048036038101906102099190611fec565b6104ea565b005b61022a60048036038101906102259190612174565b6105ec565b005b61024660048036038101906102419190611fec565b610602565b005b610262600480360381019061025d91906121d0565b610622565b005b61027e60048036038101906102799190611ecd565b6106d7565b60405161028b9190611f3b565b60405180910390f35b6102ae60048036038101906102a991906121d0565b6106e9565b6040516102bb9190611fd1565b60405180910390f35b6102cc6107a3565b005b6102d66107b7565b6040516102e39190611f3b565b60405180910390f35b6102f46107e1565b6040516103019190611e75565b60405180910390f35b610324600480360381019061031f9190612229565b610873565b005b610340600480360381019061033b919061230a565b610889565b005b61035c60048036038101906103579190611ecd565b6108a6565b6040516103699190611e75565b60405180910390f35b61038c6004803603810190610387919061238d565b6108b8565b6040516103999190611fd1565b60405180910390f35b6103bc60048036038101906103b7919061238d565b61098f565b005b6103d860048036038101906103d391906123e9565b610a19565b6040516103e59190611dca565b60405180910390f35b610408600480360381019061040391906121d0565b610aad565b005b600061041582610b33565b9050919050565b60606000805461042b90612458565b80601f016020809104026020016040519081016040528092919081815260200182805461045790612458565b80156104a45780601f10610479576101008083540402835291602001916104a4565b820191906000526020600020905b81548152906001019060200180831161048757829003601f168201915b5050505050905090565b60006104b982610b94565b506104c382610c1c565b9050919050565b6104dc82826104d7610c59565b610c61565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361055c5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016105539190611f3b565b60405180910390fd5b6000610570838361056b610c59565b610c73565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105e6578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105dd93929190612489565b60405180910390fd5b50505050565b6105f4610e8d565b6105fe8282610f14565b5050565b61061d83838360405180602001604052806000815250610889565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067c57600080fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006106e282610b94565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361075c5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016107539190611f3b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107ab610e8d565b6107b56000610f70565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546107f090612458565b80601f016020809104026020016040519081016040528092919081815260200182805461081c90612458565b80156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b61088561087e610c59565b8383611036565b5050565b6108948484846104ea565b6108a0848484846111a5565b50505050565b60606108b18261135c565b9050919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661091057600080fd5b600854600b5411610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d9061250c565b60405180910390fd5b60006008600081548092919061096b9061255b565b91905055905061097b848261146f565b6109858184610f14565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166109e557600080fd5b6000600860008154809291906109fa9061255b565b919050559050610a0a8382611568565b610a148183610f14565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ab5610e8d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b275760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b1e9190611f3b565b60405180910390fd5b610b3081610f70565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8d5750610b8c82611586565b5b9050919050565b600080610ba083611668565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c1357826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610c0a9190611fd1565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610c6e83838360016116a5565b505050565b600080610c7f84611668565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610cc157610cc081848661186a565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d5257610d036000856000806116a5565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610dd5576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610e95610c59565b73ffffffffffffffffffffffffffffffffffffffff16610eb36107b7565b73ffffffffffffffffffffffffffffffffffffffff1614610f1257610ed6610c59565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f099190611f3b565b60405180910390fd5b565b80600660008481526020019081526020016000209081610f34919061274f565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce782604051610f649190611fd1565b60405180910390a15050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110a757816040517f5b08ba1800000000000000000000000000000000000000000000000000000000815260040161109e9190611f3b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111989190611dca565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611356578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026111e9610c59565b8685856040518563ffffffff1660e01b815260040161120b9493929190612876565b6020604051808303816000875af192505050801561124757506040513d601f19601f8201168201806040525081019061124491906128d7565b60015b6112cb573d8060008114611277576040519150601f19603f3d011682016040523d82523d6000602084013e61127c565b606091505b5060008151036112c357836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112ba9190611f3b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461135457836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161134b9190611f3b565b60405180910390fd5b505b50505050565b606061136782610b94565b50600060066000848152602001908152602001600020805461138890612458565b80601f01602080910402602001604051908101604052809291908181526020018280546113b490612458565b80156114015780601f106113d657610100808354040283529160200191611401565b820191906000526020600020905b8154815290600101906020018083116113e457829003601f168201915b50505050509050600061141261192e565b9050600081510361142757819250505061146a565b60008251111561145c578082604051602001611444929190612940565b6040516020818303038152906040529250505061146a565b61146584611945565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114e15760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016114d89190611f3b565b60405180910390fd5b60006114ef83836000610c73565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115635760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161155a9190611f3b565b60405180910390fd5b505050565b6115828282604051806020016040528060008152506119ae565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061165157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116615750611660826119ca565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806116de5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156118125760006116ee84610b94565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561175957508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561176c575061176a8184610a19565b155b156117ae57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016117a59190611f3b565b60405180910390fd5b811561181057838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611875838383611a34565b61192957600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ea57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016118e19190611fd1565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611920929190612964565b60405180910390fd5b505050565b606060405180602001604052806000815250905090565b606061195082610b94565b50600061195b61192e565b9050600081511161197b57604051806020016040528060008152506119a6565b8061198584611af5565b604051602001611996929190612940565b6040516020818303038152906040525b915050919050565b6119b8838361146f565b6119c560008484846111a5565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611aec57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611aad5750611aac8484610a19565b5b80611aeb57508273ffffffffffffffffffffffffffffffffffffffff16611ad383610c1c565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b606060006001611b0484611bc3565b01905060008167ffffffffffffffff811115611b2357611b22612049565b5b6040519080825280601f01601f191660200182016040528015611b555781602001600182028036833780820191505090505b509050600082602001820190505b600115611bb8578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611bac57611bab61298d565b5b04945060008503611b63575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611c21577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611c1757611c1661298d565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611c5e576d04ee2d6d415b85acef81000000008381611c5457611c5361298d565b5b0492506020810190505b662386f26fc100008310611c8d57662386f26fc100008381611c8357611c8261298d565b5b0492506010810190505b6305f5e1008310611cb6576305f5e1008381611cac57611cab61298d565b5b0492506008810190505b6127108310611cdb576127108381611cd157611cd061298d565b5b0492506004810190505b60648310611cfe5760648381611cf457611cf361298d565b5b0492506002810190505b600a8310611d0d576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d5f81611d2a565b8114611d6a57600080fd5b50565b600081359050611d7c81611d56565b92915050565b600060208284031215611d9857611d97611d20565b5b6000611da684828501611d6d565b91505092915050565b60008115159050919050565b611dc481611daf565b82525050565b6000602082019050611ddf6000830184611dbb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e1f578082015181840152602081019050611e04565b60008484015250505050565b6000601f19601f8301169050919050565b6000611e4782611de5565b611e518185611df0565b9350611e61818560208601611e01565b611e6a81611e2b565b840191505092915050565b60006020820190508181036000830152611e8f8184611e3c565b905092915050565b6000819050919050565b611eaa81611e97565b8114611eb557600080fd5b50565b600081359050611ec781611ea1565b92915050565b600060208284031215611ee357611ee2611d20565b5b6000611ef184828501611eb8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f2582611efa565b9050919050565b611f3581611f1a565b82525050565b6000602082019050611f506000830184611f2c565b92915050565b611f5f81611f1a565b8114611f6a57600080fd5b50565b600081359050611f7c81611f56565b92915050565b60008060408385031215611f9957611f98611d20565b5b6000611fa785828601611f6d565b9250506020611fb885828601611eb8565b9150509250929050565b611fcb81611e97565b82525050565b6000602082019050611fe66000830184611fc2565b92915050565b60008060006060848603121561200557612004611d20565b5b600061201386828701611f6d565b935050602061202486828701611f6d565b925050604061203586828701611eb8565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61208182611e2b565b810181811067ffffffffffffffff821117156120a05761209f612049565b5b80604052505050565b60006120b3611d16565b90506120bf8282612078565b919050565b600067ffffffffffffffff8211156120df576120de612049565b5b6120e882611e2b565b9050602081019050919050565b82818337600083830152505050565b6000612117612112846120c4565b6120a9565b90508281526020810184848401111561213357612132612044565b5b61213e8482856120f5565b509392505050565b600082601f83011261215b5761215a61203f565b5b813561216b848260208601612104565b91505092915050565b6000806040838503121561218b5761218a611d20565b5b600061219985828601611eb8565b925050602083013567ffffffffffffffff8111156121ba576121b9611d25565b5b6121c685828601612146565b9150509250929050565b6000602082840312156121e6576121e5611d20565b5b60006121f484828501611f6d565b91505092915050565b61220681611daf565b811461221157600080fd5b50565b600081359050612223816121fd565b92915050565b600080604083850312156122405761223f611d20565b5b600061224e85828601611f6d565b925050602061225f85828601612214565b9150509250929050565b600067ffffffffffffffff82111561228457612283612049565b5b61228d82611e2b565b9050602081019050919050565b60006122ad6122a884612269565b6120a9565b9050828152602081018484840111156122c9576122c8612044565b5b6122d48482856120f5565b509392505050565b600082601f8301126122f1576122f061203f565b5b813561230184826020860161229a565b91505092915050565b6000806000806080858703121561232457612323611d20565b5b600061233287828801611f6d565b945050602061234387828801611f6d565b935050604061235487828801611eb8565b925050606085013567ffffffffffffffff81111561237557612374611d25565b5b612381878288016122dc565b91505092959194509250565b600080604083850312156123a4576123a3611d20565b5b60006123b285828601611f6d565b925050602083013567ffffffffffffffff8111156123d3576123d2611d25565b5b6123df85828601612146565b9150509250929050565b60008060408385031215612400576123ff611d20565b5b600061240e85828601611f6d565b925050602061241f85828601611f6d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061247057607f821691505b60208210810361248357612482612429565b5b50919050565b600060608201905061249e6000830186611f2c565b6124ab6020830185611fc2565b6124b86040830184611f2c565b949350505050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b60006124f6601083611df0565b9150612501826124c0565b602082019050919050565b60006020820190508181036000830152612525816124e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061256682611e97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036125985761259761252c565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026126057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826125c8565b61260f86836125c8565b95508019841693508086168417925050509392505050565b6000819050919050565b600061264c61264761264284611e97565b612627565b611e97565b9050919050565b6000819050919050565b61266683612631565b61267a61267282612653565b8484546125d5565b825550505050565b600090565b61268f612682565b61269a81848461265d565b505050565b5b818110156126be576126b3600082612687565b6001810190506126a0565b5050565b601f821115612703576126d4816125a3565b6126dd846125b8565b810160208510156126ec578190505b6127006126f8856125b8565b83018261269f565b50505b505050565b600082821c905092915050565b600061272660001984600802612708565b1980831691505092915050565b600061273f8383612715565b9150826002028217905092915050565b61275882611de5565b67ffffffffffffffff81111561277157612770612049565b5b61277b8254612458565b6127868282856126c2565b600060209050601f8311600181146127b957600084156127a7578287015190505b6127b18582612733565b865550612819565b601f1984166127c7866125a3565b60005b828110156127ef578489015182556001820191506020850194506020810190506127ca565b8683101561280c5784890151612808601f891682612715565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b600061284882612821565b612852818561282c565b9350612862818560208601611e01565b61286b81611e2b565b840191505092915050565b600060808201905061288b6000830187611f2c565b6128986020830186611f2c565b6128a56040830185611fc2565b81810360608301526128b7818461283d565b905095945050505050565b6000815190506128d181611d56565b92915050565b6000602082840312156128ed576128ec611d20565b5b60006128fb848285016128c2565b91505092915050565b600081905092915050565b600061291a82611de5565b6129248185612904565b9350612934818560208601611e01565b80840191505092915050565b600061294c828561290f565b9150612958828461290f565b91508190509392505050565b60006040820190506129796000830185611f2c565b6129866020830184611fc2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220296c596566301f2716653013ef53f77185186f35d895dd531dc182261c4ae25d64736f6c634300081800330000000000000000000000004872335a0087853fb2306abc865da2c078fa0149
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063b88d4fde1161007c578063b88d4fde14610326578063c87b56dd14610342578063d0def52114610372578063d204c45e146103a2578063e985e9c5146103be578063f2fde38b146103ee57610137565b806370a0823114610294578063715018a6146102c45780638da5cb5b146102ce57806395d89b41146102ec578063a22cb4651461030a57610137565b806323b872dd116100ff57806323b872dd146101f457806334d1c6411461021057806342842e0e1461022c578063563970dc146102485780636352211e1461026457610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba57806318160ddd146101d6575b600080fd5b61015660048036038101906101519190611d82565b61040a565b6040516101639190611dca565b60405180910390f35b61017461041c565b6040516101819190611e75565b60405180910390f35b6101a4600480360381019061019f9190611ecd565b6104ae565b6040516101b19190611f3b565b60405180910390f35b6101d460048036038101906101cf9190611f82565b6104ca565b005b6101de6104e0565b6040516101eb9190611fd1565b60405180910390f35b61020e60048036038101906102099190611fec565b6104ea565b005b61022a60048036038101906102259190612174565b6105ec565b005b61024660048036038101906102419190611fec565b610602565b005b610262600480360381019061025d91906121d0565b610622565b005b61027e60048036038101906102799190611ecd565b6106d7565b60405161028b9190611f3b565b60405180910390f35b6102ae60048036038101906102a991906121d0565b6106e9565b6040516102bb9190611fd1565b60405180910390f35b6102cc6107a3565b005b6102d66107b7565b6040516102e39190611f3b565b60405180910390f35b6102f46107e1565b6040516103019190611e75565b60405180910390f35b610324600480360381019061031f9190612229565b610873565b005b610340600480360381019061033b919061230a565b610889565b005b61035c60048036038101906103579190611ecd565b6108a6565b6040516103699190611e75565b60405180910390f35b61038c6004803603810190610387919061238d565b6108b8565b6040516103999190611fd1565b60405180910390f35b6103bc60048036038101906103b7919061238d565b61098f565b005b6103d860048036038101906103d391906123e9565b610a19565b6040516103e59190611dca565b60405180910390f35b610408600480360381019061040391906121d0565b610aad565b005b600061041582610b33565b9050919050565b60606000805461042b90612458565b80601f016020809104026020016040519081016040528092919081815260200182805461045790612458565b80156104a45780601f10610479576101008083540402835291602001916104a4565b820191906000526020600020905b81548152906001019060200180831161048757829003601f168201915b5050505050905090565b60006104b982610b94565b506104c382610c1c565b9050919050565b6104dc82826104d7610c59565b610c61565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361055c5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016105539190611f3b565b60405180910390fd5b6000610570838361056b610c59565b610c73565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105e6578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105dd93929190612489565b60405180910390fd5b50505050565b6105f4610e8d565b6105fe8282610f14565b5050565b61061d83838360405180602001604052806000815250610889565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067c57600080fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006106e282610b94565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361075c5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016107539190611f3b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107ab610e8d565b6107b56000610f70565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546107f090612458565b80601f016020809104026020016040519081016040528092919081815260200182805461081c90612458565b80156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b61088561087e610c59565b8383611036565b5050565b6108948484846104ea565b6108a0848484846111a5565b50505050565b60606108b18261135c565b9050919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661091057600080fd5b600854600b5411610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d9061250c565b60405180910390fd5b60006008600081548092919061096b9061255b565b91905055905061097b848261146f565b6109858184610f14565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166109e557600080fd5b6000600860008154809291906109fa9061255b565b919050559050610a0a8382611568565b610a148183610f14565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ab5610e8d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b275760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b1e9190611f3b565b60405180910390fd5b610b3081610f70565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8d5750610b8c82611586565b5b9050919050565b600080610ba083611668565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c1357826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610c0a9190611fd1565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610c6e83838360016116a5565b505050565b600080610c7f84611668565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610cc157610cc081848661186a565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d5257610d036000856000806116a5565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610dd5576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610e95610c59565b73ffffffffffffffffffffffffffffffffffffffff16610eb36107b7565b73ffffffffffffffffffffffffffffffffffffffff1614610f1257610ed6610c59565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f099190611f3b565b60405180910390fd5b565b80600660008481526020019081526020016000209081610f34919061274f565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce782604051610f649190611fd1565b60405180910390a15050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110a757816040517f5b08ba1800000000000000000000000000000000000000000000000000000000815260040161109e9190611f3b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111989190611dca565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611356578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026111e9610c59565b8685856040518563ffffffff1660e01b815260040161120b9493929190612876565b6020604051808303816000875af192505050801561124757506040513d601f19601f8201168201806040525081019061124491906128d7565b60015b6112cb573d8060008114611277576040519150601f19603f3d011682016040523d82523d6000602084013e61127c565b606091505b5060008151036112c357836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112ba9190611f3b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461135457836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161134b9190611f3b565b60405180910390fd5b505b50505050565b606061136782610b94565b50600060066000848152602001908152602001600020805461138890612458565b80601f01602080910402602001604051908101604052809291908181526020018280546113b490612458565b80156114015780601f106113d657610100808354040283529160200191611401565b820191906000526020600020905b8154815290600101906020018083116113e457829003601f168201915b50505050509050600061141261192e565b9050600081510361142757819250505061146a565b60008251111561145c578082604051602001611444929190612940565b6040516020818303038152906040529250505061146a565b61146584611945565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114e15760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016114d89190611f3b565b60405180910390fd5b60006114ef83836000610c73565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115635760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161155a9190611f3b565b60405180910390fd5b505050565b6115828282604051806020016040528060008152506119ae565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061165157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116615750611660826119ca565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806116de5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156118125760006116ee84610b94565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561175957508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561176c575061176a8184610a19565b155b156117ae57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016117a59190611f3b565b60405180910390fd5b811561181057838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611875838383611a34565b61192957600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ea57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016118e19190611fd1565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611920929190612964565b60405180910390fd5b505050565b606060405180602001604052806000815250905090565b606061195082610b94565b50600061195b61192e565b9050600081511161197b57604051806020016040528060008152506119a6565b8061198584611af5565b604051602001611996929190612940565b6040516020818303038152906040525b915050919050565b6119b8838361146f565b6119c560008484846111a5565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611aec57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611aad5750611aac8484610a19565b5b80611aeb57508273ffffffffffffffffffffffffffffffffffffffff16611ad383610c1c565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b606060006001611b0484611bc3565b01905060008167ffffffffffffffff811115611b2357611b22612049565b5b6040519080825280601f01601f191660200182016040528015611b555781602001600182028036833780820191505090505b509050600082602001820190505b600115611bb8578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611bac57611bab61298d565b5b04945060008503611b63575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611c21577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611c1757611c1661298d565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611c5e576d04ee2d6d415b85acef81000000008381611c5457611c5361298d565b5b0492506020810190505b662386f26fc100008310611c8d57662386f26fc100008381611c8357611c8261298d565b5b0492506010810190505b6305f5e1008310611cb6576305f5e1008381611cac57611cab61298d565b5b0492506008810190505b6127108310611cdb576127108381611cd157611cd061298d565b5b0492506004810190505b60648310611cfe5760648381611cf457611cf361298d565b5b0492506002810190505b600a8310611d0d576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d5f81611d2a565b8114611d6a57600080fd5b50565b600081359050611d7c81611d56565b92915050565b600060208284031215611d9857611d97611d20565b5b6000611da684828501611d6d565b91505092915050565b60008115159050919050565b611dc481611daf565b82525050565b6000602082019050611ddf6000830184611dbb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e1f578082015181840152602081019050611e04565b60008484015250505050565b6000601f19601f8301169050919050565b6000611e4782611de5565b611e518185611df0565b9350611e61818560208601611e01565b611e6a81611e2b565b840191505092915050565b60006020820190508181036000830152611e8f8184611e3c565b905092915050565b6000819050919050565b611eaa81611e97565b8114611eb557600080fd5b50565b600081359050611ec781611ea1565b92915050565b600060208284031215611ee357611ee2611d20565b5b6000611ef184828501611eb8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f2582611efa565b9050919050565b611f3581611f1a565b82525050565b6000602082019050611f506000830184611f2c565b92915050565b611f5f81611f1a565b8114611f6a57600080fd5b50565b600081359050611f7c81611f56565b92915050565b60008060408385031215611f9957611f98611d20565b5b6000611fa785828601611f6d565b9250506020611fb885828601611eb8565b9150509250929050565b611fcb81611e97565b82525050565b6000602082019050611fe66000830184611fc2565b92915050565b60008060006060848603121561200557612004611d20565b5b600061201386828701611f6d565b935050602061202486828701611f6d565b925050604061203586828701611eb8565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61208182611e2b565b810181811067ffffffffffffffff821117156120a05761209f612049565b5b80604052505050565b60006120b3611d16565b90506120bf8282612078565b919050565b600067ffffffffffffffff8211156120df576120de612049565b5b6120e882611e2b565b9050602081019050919050565b82818337600083830152505050565b6000612117612112846120c4565b6120a9565b90508281526020810184848401111561213357612132612044565b5b61213e8482856120f5565b509392505050565b600082601f83011261215b5761215a61203f565b5b813561216b848260208601612104565b91505092915050565b6000806040838503121561218b5761218a611d20565b5b600061219985828601611eb8565b925050602083013567ffffffffffffffff8111156121ba576121b9611d25565b5b6121c685828601612146565b9150509250929050565b6000602082840312156121e6576121e5611d20565b5b60006121f484828501611f6d565b91505092915050565b61220681611daf565b811461221157600080fd5b50565b600081359050612223816121fd565b92915050565b600080604083850312156122405761223f611d20565b5b600061224e85828601611f6d565b925050602061225f85828601612214565b9150509250929050565b600067ffffffffffffffff82111561228457612283612049565b5b61228d82611e2b565b9050602081019050919050565b60006122ad6122a884612269565b6120a9565b9050828152602081018484840111156122c9576122c8612044565b5b6122d48482856120f5565b509392505050565b600082601f8301126122f1576122f061203f565b5b813561230184826020860161229a565b91505092915050565b6000806000806080858703121561232457612323611d20565b5b600061233287828801611f6d565b945050602061234387828801611f6d565b935050604061235487828801611eb8565b925050606085013567ffffffffffffffff81111561237557612374611d25565b5b612381878288016122dc565b91505092959194509250565b600080604083850312156123a4576123a3611d20565b5b60006123b285828601611f6d565b925050602083013567ffffffffffffffff8111156123d3576123d2611d25565b5b6123df85828601612146565b9150509250929050565b60008060408385031215612400576123ff611d20565b5b600061240e85828601611f6d565b925050602061241f85828601611f6d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061247057607f821691505b60208210810361248357612482612429565b5b50919050565b600060608201905061249e6000830186611f2c565b6124ab6020830185611fc2565b6124b86040830184611f2c565b949350505050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b60006124f6601083611df0565b9150612501826124c0565b602082019050919050565b60006020820190508181036000830152612525816124e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061256682611e97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036125985761259761252c565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026126057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826125c8565b61260f86836125c8565b95508019841693508086168417925050509392505050565b6000819050919050565b600061264c61264761264284611e97565b612627565b611e97565b9050919050565b6000819050919050565b61266683612631565b61267a61267282612653565b8484546125d5565b825550505050565b600090565b61268f612682565b61269a81848461265d565b505050565b5b818110156126be576126b3600082612687565b6001810190506126a0565b5050565b601f821115612703576126d4816125a3565b6126dd846125b8565b810160208510156126ec578190505b6127006126f8856125b8565b83018261269f565b50505b505050565b600082821c905092915050565b600061272660001984600802612708565b1980831691505092915050565b600061273f8383612715565b9150826002028217905092915050565b61275882611de5565b67ffffffffffffffff81111561277157612770612049565b5b61277b8254612458565b6127868282856126c2565b600060209050601f8311600181146127b957600084156127a7578287015190505b6127b18582612733565b865550612819565b601f1984166127c7866125a3565b60005b828110156127ef578489015182556001820191506020850194506020810190506127ca565b8683101561280c5784890151612808601f891682612715565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b600061284882612821565b612852818561282c565b9350612862818560208601611e01565b61286b81611e2b565b840191505092915050565b600060808201905061288b6000830187611f2c565b6128986020830186611f2c565b6128a56040830185611fc2565b81810360608301526128b7818461283d565b905095945050505050565b6000815190506128d181611d56565b92915050565b6000602082840312156128ed576128ec611d20565b5b60006128fb848285016128c2565b91505092915050565b600081905092915050565b600061291a82611de5565b6129248185612904565b9350612934818560208601611e01565b80840191505092915050565b600061294c828561290f565b9150612958828461290f565b91508190509392505050565b60006040820190506129796000830185611f2c565b6129866020830184611fc2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220296c596566301f2716653013ef53f77185186f35d895dd531dc182261c4ae25d64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004872335a0087853fb2306abc865da2c078fa0149
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x4872335A0087853fB2306ABc865Da2C078fa0149
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004872335a0087853fb2306abc865da2c078fa0149
Deployed Bytecode Sourcemap
49647:2047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51479:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31149:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32321:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32140:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51380:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32990:588;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50961:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33649:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50833:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30962;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30687:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18258:103;;;:::i;:::-;;17583:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31309:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32551:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33854:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51166:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50327:298;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50123:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32768:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18516:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51479:212;51618:4;51647:36;51671:11;51647:23;:36::i;:::-;51640:43;;51479:212;;;:::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;51380:91::-;51424:7;51451:12;;51444:19;;51380: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;50961:119::-;17469:13;:11;:13::i;:::-;51046:26:::1;51059:7;51068:3;51046:12;:26::i;:::-;50961:119:::0;;:::o;33649:134::-;33736:39;33753:4;33759:2;33763:7;33736:39;;;;;;;;;;;;:16;:39::i;:::-;33649:134;;;:::o;50833:120::-;50793:11;;;;;;;;;;;50779:25;;:10;:25;;;50771:34;;;;;;50941:4:::1;50907:19;:33;50927:12;50907:33;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;50833:120:::0;:::o;30962:::-;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;17583:87::-;17629:7;17656:6;;;;;;;;;;;17649:13;;17583:87;:::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;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;51166:206::-;51293:13;51341:23;51356:7;51341:14;:23::i;:::-;51334:30;;51166:206;;;:::o;50327:298::-;50407:7;50680:19;:31;50700:10;50680:31;;;;;;;;;;;;;;;;;;;;;;;;;50672:40;;;;;;50450:12:::1;;50435;;:27;50427:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;50494:15;50512:12;;:14;;;;;;;;;:::i;:::-;;;;;50494:32;;50537:18;50543:2;50547:7;50537:5;:18::i;:::-;50566:26;50579:7;50588:3;50566:12;:26::i;:::-;50610:7;50603:14;;;50327:298:::0;;;;:::o;50123:196::-;50680:19;:31;50700:10;50680:31;;;;;;;;;;;;;;;;;;;;;;;;;50672:40;;;;;;50209:15:::1;50227:12;;:14;;;;;;;;;:::i;:::-;;;;;50209:32;;50252:22;50262:2;50266:7;50252:9;:22::i;:::-;50285:26;50298:7;50307:3;50285:12;:26::i;:::-;50198:121;50123:196:::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:654::-;11834:6;11842;11891:2;11879:9;11870:7;11866:23;11862:32;11859:119;;;11897:79;;:::i;:::-;11859:119;12017:1;12042:53;12087:7;12078:6;12067:9;12063:22;12042:53;:::i;:::-;12032:63;;11988:117;12172:2;12161:9;12157:18;12144:32;12203:18;12195:6;12192:30;12189:117;;;12225:79;;:::i;:::-;12189:117;12330:63;12385:7;12376:6;12365:9;12361:22;12330:63;:::i;:::-;12320:73;;12115:288;11756:654;;;;;:::o;12416:474::-;12484:6;12492;12541:2;12529:9;12520:7;12516:23;12512:32;12509:119;;;12547:79;;:::i;:::-;12509:119;12667:1;12692:53;12737:7;12728:6;12717:9;12713:22;12692:53;:::i;:::-;12682:63;;12638:117;12794:2;12820:53;12865:7;12856:6;12845:9;12841:22;12820:53;:::i;:::-;12810:63;;12765:118;12416:474;;;;;:::o;12896:180::-;12944:77;12941:1;12934:88;13041:4;13038:1;13031:15;13065:4;13062:1;13055:15;13082:320;13126:6;13163:1;13157:4;13153:12;13143:22;;13210:1;13204:4;13200:12;13231:18;13221:81;;13287:4;13279:6;13275:17;13265:27;;13221:81;13349:2;13341:6;13338:14;13318:18;13315:38;13312:84;;13368:18;;:::i;:::-;13312:84;13133:269;13082:320;;;:::o;13408:442::-;13557:4;13595:2;13584:9;13580:18;13572:26;;13608:71;13676:1;13665:9;13661:17;13652:6;13608:71;:::i;:::-;13689:72;13757:2;13746:9;13742:18;13733:6;13689:72;:::i;:::-;13771;13839:2;13828:9;13824:18;13815:6;13771:72;:::i;:::-;13408:442;;;;;;:::o;13856:166::-;13996:18;13992:1;13984:6;13980:14;13973:42;13856:166;:::o;14028:366::-;14170:3;14191:67;14255:2;14250:3;14191:67;:::i;:::-;14184:74;;14267:93;14356:3;14267:93;:::i;:::-;14385:2;14380:3;14376:12;14369:19;;14028:366;;;:::o;14400:419::-;14566:4;14604:2;14593:9;14589:18;14581:26;;14653:9;14647:4;14643:20;14639:1;14628:9;14624:17;14617:47;14681:131;14807:4;14681:131;:::i;:::-;14673:139;;14400:419;;;:::o;14825:180::-;14873:77;14870:1;14863:88;14970:4;14967:1;14960:15;14994:4;14991:1;14984:15;15011:233;15050:3;15073:24;15091:5;15073:24;:::i;:::-;15064:33;;15119:66;15112:5;15109:77;15106:103;;15189:18;;:::i;:::-;15106:103;15236:1;15229:5;15225:13;15218:20;;15011:233;;;:::o;15250:141::-;15299:4;15322:3;15314:11;;15345:3;15342:1;15335:14;15379:4;15376:1;15366:18;15358:26;;15250:141;;;:::o;15397:93::-;15434:6;15481:2;15476;15469:5;15465:14;15461:23;15451:33;;15397:93;;;:::o;15496:107::-;15540:8;15590:5;15584:4;15580:16;15559:37;;15496:107;;;;:::o;15609:393::-;15678:6;15728:1;15716:10;15712:18;15751:97;15781:66;15770:9;15751:97;:::i;:::-;15869:39;15899:8;15888:9;15869:39;:::i;:::-;15857:51;;15941:4;15937:9;15930:5;15926:21;15917:30;;15990:4;15980:8;15976:19;15969:5;15966:30;15956:40;;15685:317;;15609:393;;;;;:::o;16008:60::-;16036:3;16057:5;16050:12;;16008:60;;;:::o;16074:142::-;16124:9;16157:53;16175:34;16184:24;16202:5;16184:24;:::i;:::-;16175:34;:::i;:::-;16157:53;:::i;:::-;16144:66;;16074:142;;;:::o;16222:75::-;16265:3;16286:5;16279:12;;16222:75;;;:::o;16303:269::-;16413:39;16444:7;16413:39;:::i;:::-;16474:91;16523:41;16547:16;16523:41;:::i;:::-;16515:6;16508:4;16502:11;16474:91;:::i;:::-;16468:4;16461:105;16379:193;16303:269;;;:::o;16578:73::-;16623:3;16578:73;:::o;16657:189::-;16734:32;;:::i;:::-;16775:65;16833:6;16825;16819:4;16775:65;:::i;:::-;16710:136;16657:189;;:::o;16852:186::-;16912:120;16929:3;16922:5;16919:14;16912:120;;;16983:39;17020:1;17013:5;16983:39;:::i;:::-;16956:1;16949:5;16945:13;16936:22;;16912:120;;;16852:186;;:::o;17044:543::-;17145:2;17140:3;17137:11;17134:446;;;17179:38;17211:5;17179:38;:::i;:::-;17263:29;17281:10;17263:29;:::i;:::-;17253:8;17249:44;17446:2;17434:10;17431:18;17428:49;;;17467:8;17452:23;;17428:49;17490:80;17546:22;17564:3;17546:22;:::i;:::-;17536:8;17532:37;17519:11;17490:80;:::i;:::-;17149:431;;17134:446;17044:543;;;:::o;17593:117::-;17647:8;17697:5;17691:4;17687:16;17666:37;;17593:117;;;;:::o;17716:169::-;17760:6;17793:51;17841:1;17837:6;17829:5;17826:1;17822:13;17793:51;:::i;:::-;17789:56;17874:4;17868;17864:15;17854:25;;17767:118;17716:169;;;;:::o;17890:295::-;17966:4;18112:29;18137:3;18131:4;18112:29;:::i;:::-;18104:37;;18174:3;18171:1;18167:11;18161:4;18158:21;18150:29;;17890:295;;;;:::o;18190:1395::-;18307:37;18340:3;18307:37;:::i;:::-;18409:18;18401:6;18398:30;18395:56;;;18431:18;;:::i;:::-;18395:56;18475:38;18507:4;18501:11;18475:38;:::i;:::-;18560:67;18620:6;18612;18606:4;18560:67;:::i;:::-;18654:1;18678:4;18665:17;;18710:2;18702:6;18699:14;18727:1;18722:618;;;;19384:1;19401:6;19398:77;;;19450:9;19445:3;19441:19;19435:26;19426:35;;19398:77;19501:67;19561:6;19554:5;19501:67;:::i;:::-;19495:4;19488:81;19357:222;18692:887;;18722:618;18774:4;18770:9;18762:6;18758:22;18808:37;18840:4;18808:37;:::i;:::-;18867:1;18881:208;18895:7;18892:1;18889:14;18881:208;;;18974:9;18969:3;18965:19;18959:26;18951:6;18944:42;19025:1;19017:6;19013:14;19003:24;;19072:2;19061:9;19057:18;19044:31;;18918:4;18915:1;18911:12;18906:17;;18881:208;;;19117:6;19108:7;19105:19;19102:179;;;19175:9;19170:3;19166:19;19160:26;19218:48;19260:4;19252:6;19248:17;19237:9;19218:48;:::i;:::-;19210:6;19203:64;19125:156;19102:179;19327:1;19323;19315:6;19311:14;19307:22;19301:4;19294:36;18729:611;;;18692:887;;18282:1303;;;18190:1395;;:::o;19591:98::-;19642:6;19676:5;19670:12;19660:22;;19591:98;;;:::o;19695:168::-;19778:11;19812:6;19807:3;19800:19;19852:4;19847:3;19843:14;19828:29;;19695:168;;;;:::o;19869:373::-;19955:3;19983:38;20015:5;19983:38;:::i;:::-;20037:70;20100:6;20095:3;20037:70;:::i;:::-;20030:77;;20116:65;20174:6;20169:3;20162:4;20155:5;20151:16;20116:65;:::i;:::-;20206:29;20228:6;20206:29;:::i;:::-;20201:3;20197:39;20190:46;;19959:283;19869:373;;;;:::o;20248:640::-;20443:4;20481:3;20470:9;20466:19;20458:27;;20495:71;20563:1;20552:9;20548:17;20539:6;20495:71;:::i;:::-;20576:72;20644:2;20633:9;20629:18;20620:6;20576:72;:::i;:::-;20658;20726:2;20715:9;20711:18;20702:6;20658:72;:::i;:::-;20777:9;20771:4;20767:20;20762:2;20751:9;20747:18;20740:48;20805:76;20876:4;20867:6;20805:76;:::i;:::-;20797:84;;20248:640;;;;;;;:::o;20894:141::-;20950:5;20981:6;20975:13;20966:22;;20997:32;21023:5;20997:32;:::i;:::-;20894:141;;;;:::o;21041:349::-;21110:6;21159:2;21147:9;21138:7;21134:23;21130:32;21127:119;;;21165:79;;:::i;:::-;21127:119;21285:1;21310:63;21365:7;21356:6;21345:9;21341:22;21310:63;:::i;:::-;21300:73;;21256:127;21041:349;;;;:::o;21396:148::-;21498:11;21535:3;21520:18;;21396:148;;;;:::o;21550:390::-;21656:3;21684:39;21717:5;21684:39;:::i;:::-;21739:89;21821:6;21816:3;21739:89;:::i;:::-;21732:96;;21837:65;21895:6;21890:3;21883:4;21876:5;21872:16;21837:65;:::i;:::-;21927:6;21922:3;21918:16;21911:23;;21660:280;21550:390;;;;:::o;21946:435::-;22126:3;22148:95;22239:3;22230:6;22148:95;:::i;:::-;22141:102;;22260:95;22351:3;22342:6;22260:95;:::i;:::-;22253:102;;22372:3;22365:10;;21946:435;;;;;:::o;22387:332::-;22508:4;22546:2;22535:9;22531:18;22523:26;;22559:71;22627:1;22616:9;22612:17;22603:6;22559:71;:::i;:::-;22640:72;22708:2;22697:9;22693:18;22684:6;22640:72;:::i;:::-;22387:332;;;;;:::o;22725:180::-;22773:77;22770:1;22763:88;22870:4;22867:1;22860:15;22894:4;22891:1;22884:15
Swarm Source
ipfs://296c596566301f2716653013ef53f77185186f35d895dd531dc182261c4ae25d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.