More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 168 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 17540260 | 376 days ago | IN | 0 ETH | 0.00221687 | ||||
Unstake | 17540250 | 376 days ago | IN | 0 ETH | 0.00305033 | ||||
Claim | 17540239 | 376 days ago | IN | 0 ETH | 0.00040434 | ||||
Unstake | 17540239 | 376 days ago | IN | 0 ETH | 0.00893389 | ||||
Claim | 16533237 | 518 days ago | IN | 0 ETH | 0.0010647 | ||||
Claim | 16381250 | 539 days ago | IN | 0 ETH | 0.00201985 | ||||
Claim | 16379975 | 539 days ago | IN | 0 ETH | 0.00212103 | ||||
Claim | 16317441 | 548 days ago | IN | 0 ETH | 0.00088822 | ||||
Unstake | 16099857 | 578 days ago | IN | 0 ETH | 0.00185932 | ||||
Claim | 16089258 | 580 days ago | IN | 0 ETH | 0.00081753 | ||||
Claim | 15882592 | 609 days ago | IN | 0 ETH | 0.00070663 | ||||
Claim | 15666473 | 639 days ago | IN | 0 ETH | 0.00069735 | ||||
Claim | 15635203 | 643 days ago | IN | 0 ETH | 0.00279058 | ||||
Claim | 15635192 | 643 days ago | IN | 0 ETH | 0.00080452 | ||||
Claim | 15576327 | 652 days ago | IN | 0 ETH | 0.00046546 | ||||
Claim | 15576302 | 652 days ago | IN | 0 ETH | 0.00051342 | ||||
Claim | 15571658 | 652 days ago | IN | 0 ETH | 0.00107861 | ||||
Unstake | 15569414 | 653 days ago | IN | 0 ETH | 0.00139057 | ||||
Unstake | 15553160 | 655 days ago | IN | 0 ETH | 0.00081497 | ||||
Claim | 15547227 | 656 days ago | IN | 0 ETH | 0.00184145 | ||||
Claim | 15452160 | 671 days ago | IN | 0 ETH | 0.00065507 | ||||
Stake | 15355076 | 686 days ago | IN | 0 ETH | 0.00125731 | ||||
Claim | 15355075 | 686 days ago | IN | 0 ETH | 0.00085502 | ||||
Unstake | 15294181 | 696 days ago | IN | 0 ETH | 0.0033726 | ||||
Claim | 15255907 | 702 days ago | IN | 0 ETH | 0.00073435 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
EuphoriansStakingContract
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-23 */ // SPDX-License-Identifier: MIT LICENSE // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @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}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev 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 override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be 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 override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - 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, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * 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 virtual { _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); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @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 virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), 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 virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/StakeContract.sol pragma solidity ^0.8.4; interface IEuphorians { function tokenCount() external view returns(uint256); function mint(address to, uint256 amount) external; } contract EuphoriansStakingContract is Ownable, IERC721Receiver { uint256 public yeildRate = 10000 ether; uint256 public totalStaked; address public nftAddress = 0x613485c528BdEbfef7Bed764AA4D6e4BA30Ef565; address public tokenAddress = 0x8F4A643850ab7993A716e2E1d88FF00B93324dC7; bool public paused = true; mapping(uint256 => Stake) public vault; struct Stake { uint24 tokenId; uint48 timestamp; address owner; } event NFTStaked(address owner, uint256 tokenId, uint256 value); event NFTUnstaked(address owner, uint256 tokenId, uint256 value); event Claimed(address owner, uint256 amount); ERC721 nft; constructor(ERC721 _nft) { nft = _nft; } function stake(uint256[] calldata tokenIds) external { uint256 tokenId; totalStaked += tokenIds.length; for (uint i = 0; i < tokenIds.length; i++) { tokenId = tokenIds[i]; require(!paused, "Contract is Paused"); require(nft.ownerOf(tokenId) == msg.sender, "not your token"); require(vault[tokenId].tokenId == 0, "already staked"); vault[tokenId] = Stake({ owner: msg.sender, tokenId: uint24(tokenId), timestamp: uint48(block.timestamp) }); nft.transferFrom(msg.sender, address(this), tokenId); emit NFTStaked(msg.sender, tokenId, block.timestamp); } } function _unstakeMany(address account, uint256[] calldata tokenIds) internal { uint256 tokenId; totalStaked -= tokenIds.length; for (uint i = 0; i < tokenIds.length; i++) { tokenId = tokenIds[i]; Stake memory staked = vault[tokenId]; require(!paused, "Contract is Paused"); require(staked.owner == msg.sender, "not an owner"); delete vault[tokenId]; emit NFTUnstaked(account, tokenId, block.timestamp); nft.transferFrom(address(this), account, tokenId); } } function claim(uint256[] calldata tokenIds) external { _claim(msg.sender, tokenIds, false); } function claimForAddress(address account, uint256[] calldata tokenIds) external onlyOwner { _claim(account, tokenIds, false); } function unstake(uint256[] calldata tokenIds) external { _claim(msg.sender, tokenIds, true); } function _claim(address account, uint256[] calldata tokenIds, bool _unstake) internal { uint256 tokenId; uint256 earned = 0; uint256 rewardmath = 0; for (uint i = 0; i < tokenIds.length; i++) { tokenId = tokenIds[i]; Stake memory staked = vault[tokenId]; require(!paused, "Contract is Paused"); require(staked.owner == account, "not an owner"); uint256 stakedAt = staked.timestamp; rewardmath = yeildRate * (block.timestamp - stakedAt) / 86400 ; earned = earned + (rewardmath / 100); vault[tokenId] = Stake({ owner: account, tokenId: uint24(tokenId), timestamp: uint48(block.timestamp) }); } if (earned > 0) { IEuphorians(tokenAddress).mint(account, earned); } if (_unstake) { _unstakeMany(account, tokenIds); } emit Claimed(account, earned); } function earningInfo(address account, uint256[] calldata tokenIds) external view returns (uint256 info) { uint256 tokenId; uint256 earned = 0; uint256 rewardmath = 0; for (uint i = 0; i < tokenIds.length; i++) { tokenId = tokenIds[i]; Stake memory staked = vault[tokenId]; require(staked.owner == account, "not an owner"); uint256 stakedAt = staked.timestamp; rewardmath = yeildRate * (block.timestamp - stakedAt) / 86400; earned = earned + (rewardmath / 100); } return earned; } // should never be used inside of transaction because of gas fee function balanceOf(address account) public view returns (uint256) { uint256 balance = 0; uint256 supply = IEuphorians(nftAddress).tokenCount(); for(uint i = 1; i <= supply; i++) { if (vault[i].owner == account) { balance += 1; } } return balance; } // should never be used inside of transaction because of gas fee function tokensOfOwner(address account) public view returns (uint256[] memory ownerTokens) { uint256 supply = IEuphorians(nftAddress).tokenCount(); uint256[] memory tmp = new uint256[](supply); uint256 index = 0; for(uint tokenId = 1; tokenId <= supply; tokenId++) { if (vault[tokenId].owner == account) { tmp[index] = vault[tokenId].tokenId; index +=1; } } uint256[] memory tokens = new uint256[](index); for(uint i = 0; i < index; i++) { tokens[i] = tmp[i]; } return tokens; } function pause() public onlyOwner { paused = !paused; } function setYeild(uint256 _yeildRate) public onlyOwner { yeildRate = _yeildRate; } function setTokenAddress(address _tokenAddress) public onlyOwner { tokenAddress = _tokenAddress; } function setNftAddress(address _nftAddress) public onlyOwner { nftAddress = _nftAddress; } function onERC721Received( address, address from, uint256, bytes calldata ) external pure override returns (bytes4) { require(from == address(0x0), "Cannot send nfts to Vault directly"); return IERC721Receiver.onERC721Received.selector; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ERC721","name":"_nft","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTUnstaked","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"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claimForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"earningInfo","outputs":[{"internalType":"uint256","name":"info","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftAddress","type":"address"}],"name":"setNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_yeildRate","type":"uint256"}],"name":"setYeild","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"ownerTokens","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vault","outputs":[{"internalType":"uint24","name":"tokenId","type":"uint24"},{"internalType":"uint48","name":"timestamp","type":"uint48"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yeildRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405269021e19e0c9bab240000060015573613485c528bdebfef7bed764aa4d6e4ba30ef565600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738f4a643850ab7993a716e2e1d88ff00b93324dc7600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460146101000a81548160ff021916908315150217905550348015620000e457600080fd5b5060405162002a7438038062002a7483398181016040528101906200010a9190620002bc565b6200012a6200011e6200017260201b60201c565b6200017a60201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620002ee565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002708262000243565b9050919050565b6000620002848262000263565b9050919050565b620002968162000277565b8114620002a257600080fd5b50565b600081519050620002b6816200028b565b92915050565b600060208284031215620002d557620002d46200023e565b5b6000620002e584828501620002a5565b91505092915050565b61277680620002fe6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b85780638462151c1161007c5780638462151c146103165780638da5cb5b146103465780639d76ea5814610364578063c36be35714610382578063e449f3411461039e578063f2fde38b146103ba57610137565b8063715018a6146102825780637e75dd601461028c578063817b1cd2146102bc57806381a36fb6146102da5780638456cb591461030c57610137565b80635bf8633a116100ff5780635bf8633a146101de5780635c975abb146101fc5780635ca67bc01461021a5780636ba4c1381461023657806370a082311461025257610137565b80630b102d1a1461013c5780630fbf0a9314610158578063150b7a021461017457806326a4e8d2146101a4578063378d65b7146101c0575b600080fd5b61015660048036038101906101519190611c05565b6103d6565b005b610172600480360381019061016d9190611c97565b610496565b005b61018e60048036038101906101899190611d70565b610874565b60405161019b9190611e33565b60405180910390f35b6101be60048036038101906101b99190611c05565b6108f7565b005b6101c86109b7565b6040516101d59190611e5d565b60405180910390f35b6101e66109bd565b6040516101f39190611e87565b60405180910390f35b6102046109e3565b6040516102119190611ebd565b60405180910390f35b610234600480360381019061022f9190611ed8565b6109f6565b005b610250600480360381019061024b9190611c97565b610a7c565b005b61026c60048036038101906102679190611c05565b610a8d565b6040516102799190611e5d565b60405180910390f35b61028a610bce565b005b6102a660048036038101906102a19190611f05565b610c56565b6040516102b39190611e5d565b60405180910390f35b6102c4610e36565b6040516102d19190611e5d565b60405180910390f35b6102f460048036038101906102ef9190611ed8565b610e3c565b60405161030393929190611fa4565b60405180910390f35b610314610ea7565b005b610330600480360381019061032b9190611c05565b610f4f565b60405161033d9190612099565b60405180910390f35b61034e6111cb565b60405161035b9190611e87565b60405180910390f35b61036c6111f4565b6040516103799190611e87565b60405180910390f35b61039c60048036038101906103979190611f05565b61121a565b005b6103b860048036038101906103b39190611c97565b6112a8565b005b6103d460048036038101906103cf9190611c05565b6112b9565b005b6103de6113b0565b73ffffffffffffffffffffffffffffffffffffffff166103fc6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044990612118565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600082829050600260008282546104ad9190612167565b9250508190555060005b8383905081101561086e578383828181106104d5576104d46121bd565b5b905060200201359150600460149054906101000a900460ff161561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052590612238565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016105a09190611e5d565b602060405180830381865afa1580156105bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e1919061226d565b73ffffffffffffffffffffffffffffffffffffffff1614610637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062e906122e6565b60405180910390fd5b60006005600084815260200190815260200160002060000160009054906101000a900462ffffff1662ffffff16146106a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069b90612352565b60405180910390fd5b60405180606001604052808362ffffff1681526020014265ffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016107ee93929190612372565b600060405180830381600087803b15801561080857600080fd5b505af115801561081c573d6000803e3d6000fd5b505050507f36b3725f1783bad4ff05b7f4c077c3aa68eeb23a4d054ba189db4d01ac278d39338342604051610853939291906123a9565b60405180910390a18080610866906123e0565b9150506104b7565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146108e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108db9061249a565b60405180910390fd5b63150b7a0260e01b905095945050505050565b6108ff6113b0565b73ffffffffffffffffffffffffffffffffffffffff1661091d6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a90612118565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460149054906101000a900460ff1681565b6109fe6113b0565b73ffffffffffffffffffffffffffffffffffffffff16610a1c6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6990612118565b60405180910390fd5b8060018190555050565b610a8933838360006113b8565b5050565b600080600090506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f181b5e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2791906124cf565b90506000600190505b818111610bc3578473ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610bb057600183610bad9190612167565b92505b8080610bbb906123e0565b915050610b30565b508192505050919050565b610bd66113b0565b73ffffffffffffffffffffffffffffffffffffffff16610bf46111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190612118565b60405180910390fd5b610c5460006117b5565b565b60008060008060005b86869050811015610e2857868682818110610c7d57610c7c6121bd565b5b9050602002013593506000600560008681526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508873ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690612548565b60405180910390fd5b6000816020015165ffffffffffff169050620151808142610de09190612568565b600154610ded919061259c565b610df79190612625565b9350606484610e069190612625565b85610e119190612167565b945050508080610e20906123e0565b915050610c5f565b508193505050509392505050565b60025481565b60056020528060005260406000206000915090508060000160009054906101000a900462ffffff16908060000160039054906101000a900465ffffffffffff16908060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b610eaf6113b0565b73ffffffffffffffffffffffffffffffffffffffff16610ecd6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90612118565b60405180910390fd5b600460149054906101000a900460ff1615600460146101000a81548160ff021916908315150217905550565b60606000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f181b5e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe491906124cf565b905060008167ffffffffffffffff81111561100257611001612656565b5b6040519080825280602002602001820160405280156110305781602001602082028036833780820191505090505b509050600080600190505b838111611118578573ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611105576005600082815260200190815260200160002060000160009054906101000a900462ffffff1662ffffff168383815181106110e9576110e86121bd565b5b6020026020010181815250506001826111029190612167565b91505b8080611110906123e0565b91505061103b565b5060008167ffffffffffffffff81111561113557611134612656565b5b6040519080825280602002602001820160405280156111635781602001602082028036833780820191505090505b50905060005b828110156111be57838181518110611184576111836121bd565b5b602002602001015182828151811061119f5761119e6121bd565b5b60200260200101818152505080806111b6906123e0565b915050611169565b5080945050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112226113b0565b73ffffffffffffffffffffffffffffffffffffffff166112406111cb565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90612118565b60405180910390fd5b6112a383838360006113b8565b505050565b6112b533838360016113b8565b5050565b6112c16113b0565b73ffffffffffffffffffffffffffffffffffffffff166112df6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90612118565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906126f7565b60405180910390fd5b6113ad816117b5565b50565b600033905090565b600080600090506000805b868690508110156116c7578686828181106113e1576113e06121bd565b5b9050602002013593506000600560008681526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600460149054906101000a900460ff1615611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890612238565b60405180910390fd5b8873ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90612548565b60405180910390fd5b6000816020015165ffffffffffff1690506201518081426115949190612568565b6001546115a1919061259c565b6115ab9190612625565b93506064846115ba9190612625565b856115c59190612167565b945060405180606001604052808762ffffff1681526020014265ffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff168152506005600088815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505080806116bf906123e0565b9150506113c3565b50600082111561176157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988846040518363ffffffff1660e01b815260040161172e929190612717565b600060405180830381600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b505050505b831561177357611772878787611879565b5b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a87836040516117a4929190612717565b60405180910390a150505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082829050600260008282546118909190612568565b9250508190555060005b83839050811015611b96578383828181106118b8576118b76121bd565b5b9050602002013591506000600560008481526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600460149054906101000a900460ff16156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90612238565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190612548565b60405180910390fd5b60056000848152602001908152602001600020600080820160006101000a81549062ffffff02191690556000820160036101000a81549065ffffffffffff02191690556000820160096101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550507fc486b9458a8637650d84d262414833a5a457bc91ae86b7da110386c8c3fa255b868442604051611ae9939291906123a9565b60405180910390a1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3088866040518463ffffffff1660e01b8152600401611b5093929190612372565b600060405180830381600087803b158015611b6a57600080fd5b505af1158015611b7e573d6000803e3d6000fd5b50505050508080611b8e906123e0565b91505061189a565b5050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bd282611ba7565b9050919050565b611be281611bc7565b8114611bed57600080fd5b50565b600081359050611bff81611bd9565b92915050565b600060208284031215611c1b57611c1a611b9d565b5b6000611c2984828501611bf0565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c5757611c56611c32565b5b8235905067ffffffffffffffff811115611c7457611c73611c37565b5b602083019150836020820283011115611c9057611c8f611c3c565b5b9250929050565b60008060208385031215611cae57611cad611b9d565b5b600083013567ffffffffffffffff811115611ccc57611ccb611ba2565b5b611cd885828601611c41565b92509250509250929050565b6000819050919050565b611cf781611ce4565b8114611d0257600080fd5b50565b600081359050611d1481611cee565b92915050565b60008083601f840112611d3057611d2f611c32565b5b8235905067ffffffffffffffff811115611d4d57611d4c611c37565b5b602083019150836001820283011115611d6957611d68611c3c565b5b9250929050565b600080600080600060808688031215611d8c57611d8b611b9d565b5b6000611d9a88828901611bf0565b9550506020611dab88828901611bf0565b9450506040611dbc88828901611d05565b935050606086013567ffffffffffffffff811115611ddd57611ddc611ba2565b5b611de988828901611d1a565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e2d81611df8565b82525050565b6000602082019050611e486000830184611e24565b92915050565b611e5781611ce4565b82525050565b6000602082019050611e726000830184611e4e565b92915050565b611e8181611bc7565b82525050565b6000602082019050611e9c6000830184611e78565b92915050565b60008115159050919050565b611eb781611ea2565b82525050565b6000602082019050611ed26000830184611eae565b92915050565b600060208284031215611eee57611eed611b9d565b5b6000611efc84828501611d05565b91505092915050565b600080600060408486031215611f1e57611f1d611b9d565b5b6000611f2c86828701611bf0565b935050602084013567ffffffffffffffff811115611f4d57611f4c611ba2565b5b611f5986828701611c41565b92509250509250925092565b600062ffffff82169050919050565b611f7d81611f65565b82525050565b600065ffffffffffff82169050919050565b611f9e81611f83565b82525050565b6000606082019050611fb96000830186611f74565b611fc66020830185611f95565b611fd36040830184611e78565b949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61201081611ce4565b82525050565b60006120228383612007565b60208301905092915050565b6000602082019050919050565b600061204682611fdb565b6120508185611fe6565b935061205b83611ff7565b8060005b8381101561208c5781516120738882612016565b975061207e8361202e565b92505060018101905061205f565b5085935050505092915050565b600060208201905081810360008301526120b3818461203b565b905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006121026020836120bb565b915061210d826120cc565b602082019050919050565b60006020820190508181036000830152612131816120f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061217282611ce4565b915061217d83611ce4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121b2576121b1612138565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f436f6e7472616374206973205061757365640000000000000000000000000000600082015250565b60006122226012836120bb565b915061222d826121ec565b602082019050919050565b6000602082019050818103600083015261225181612215565b9050919050565b60008151905061226781611bd9565b92915050565b60006020828403121561228357612282611b9d565b5b600061229184828501612258565b91505092915050565b7f6e6f7420796f757220746f6b656e000000000000000000000000000000000000600082015250565b60006122d0600e836120bb565b91506122db8261229a565b602082019050919050565b600060208201905081810360008301526122ff816122c3565b9050919050565b7f616c7265616479207374616b6564000000000000000000000000000000000000600082015250565b600061233c600e836120bb565b915061234782612306565b602082019050919050565b6000602082019050818103600083015261236b8161232f565b9050919050565b60006060820190506123876000830186611e78565b6123946020830185611e78565b6123a16040830184611e4e565b949350505050565b60006060820190506123be6000830186611e78565b6123cb6020830185611e4e565b6123d86040830184611e4e565b949350505050565b60006123eb82611ce4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361241d5761241c612138565b5b600182019050919050565b7f43616e6e6f742073656e64206e66747320746f205661756c742064697265637460008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b60006124846022836120bb565b915061248f82612428565b604082019050919050565b600060208201905081810360008301526124b381612477565b9050919050565b6000815190506124c981611cee565b92915050565b6000602082840312156124e5576124e4611b9d565b5b60006124f3848285016124ba565b91505092915050565b7f6e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000612532600c836120bb565b915061253d826124fc565b602082019050919050565b6000602082019050818103600083015261256181612525565b9050919050565b600061257382611ce4565b915061257e83611ce4565b92508282101561259157612590612138565b5b828203905092915050565b60006125a782611ce4565b91506125b283611ce4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125eb576125ea612138565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061263082611ce4565b915061263b83611ce4565b92508261264b5761264a6125f6565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006126e16026836120bb565b91506126ec82612685565b604082019050919050565b60006020820190508181036000830152612710816126d4565b9050919050565b600060408201905061272c6000830185611e78565b6127396020830184611e4e565b939250505056fea2646970667358221220b7f7daeaefed14e77b9399fa40b3d3ea187e754a5399886950ce1fcfc4754bd664736f6c634300080d0033000000000000000000000000613485c528bdebfef7bed764aa4d6e4ba30ef565
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b85780638462151c1161007c5780638462151c146103165780638da5cb5b146103465780639d76ea5814610364578063c36be35714610382578063e449f3411461039e578063f2fde38b146103ba57610137565b8063715018a6146102825780637e75dd601461028c578063817b1cd2146102bc57806381a36fb6146102da5780638456cb591461030c57610137565b80635bf8633a116100ff5780635bf8633a146101de5780635c975abb146101fc5780635ca67bc01461021a5780636ba4c1381461023657806370a082311461025257610137565b80630b102d1a1461013c5780630fbf0a9314610158578063150b7a021461017457806326a4e8d2146101a4578063378d65b7146101c0575b600080fd5b61015660048036038101906101519190611c05565b6103d6565b005b610172600480360381019061016d9190611c97565b610496565b005b61018e60048036038101906101899190611d70565b610874565b60405161019b9190611e33565b60405180910390f35b6101be60048036038101906101b99190611c05565b6108f7565b005b6101c86109b7565b6040516101d59190611e5d565b60405180910390f35b6101e66109bd565b6040516101f39190611e87565b60405180910390f35b6102046109e3565b6040516102119190611ebd565b60405180910390f35b610234600480360381019061022f9190611ed8565b6109f6565b005b610250600480360381019061024b9190611c97565b610a7c565b005b61026c60048036038101906102679190611c05565b610a8d565b6040516102799190611e5d565b60405180910390f35b61028a610bce565b005b6102a660048036038101906102a19190611f05565b610c56565b6040516102b39190611e5d565b60405180910390f35b6102c4610e36565b6040516102d19190611e5d565b60405180910390f35b6102f460048036038101906102ef9190611ed8565b610e3c565b60405161030393929190611fa4565b60405180910390f35b610314610ea7565b005b610330600480360381019061032b9190611c05565b610f4f565b60405161033d9190612099565b60405180910390f35b61034e6111cb565b60405161035b9190611e87565b60405180910390f35b61036c6111f4565b6040516103799190611e87565b60405180910390f35b61039c60048036038101906103979190611f05565b61121a565b005b6103b860048036038101906103b39190611c97565b6112a8565b005b6103d460048036038101906103cf9190611c05565b6112b9565b005b6103de6113b0565b73ffffffffffffffffffffffffffffffffffffffff166103fc6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044990612118565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600082829050600260008282546104ad9190612167565b9250508190555060005b8383905081101561086e578383828181106104d5576104d46121bd565b5b905060200201359150600460149054906101000a900460ff161561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052590612238565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016105a09190611e5d565b602060405180830381865afa1580156105bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e1919061226d565b73ffffffffffffffffffffffffffffffffffffffff1614610637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062e906122e6565b60405180910390fd5b60006005600084815260200190815260200160002060000160009054906101000a900462ffffff1662ffffff16146106a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069b90612352565b60405180910390fd5b60405180606001604052808362ffffff1681526020014265ffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016107ee93929190612372565b600060405180830381600087803b15801561080857600080fd5b505af115801561081c573d6000803e3d6000fd5b505050507f36b3725f1783bad4ff05b7f4c077c3aa68eeb23a4d054ba189db4d01ac278d39338342604051610853939291906123a9565b60405180910390a18080610866906123e0565b9150506104b7565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146108e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108db9061249a565b60405180910390fd5b63150b7a0260e01b905095945050505050565b6108ff6113b0565b73ffffffffffffffffffffffffffffffffffffffff1661091d6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a90612118565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460149054906101000a900460ff1681565b6109fe6113b0565b73ffffffffffffffffffffffffffffffffffffffff16610a1c6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6990612118565b60405180910390fd5b8060018190555050565b610a8933838360006113b8565b5050565b600080600090506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f181b5e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2791906124cf565b90506000600190505b818111610bc3578473ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610bb057600183610bad9190612167565b92505b8080610bbb906123e0565b915050610b30565b508192505050919050565b610bd66113b0565b73ffffffffffffffffffffffffffffffffffffffff16610bf46111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190612118565b60405180910390fd5b610c5460006117b5565b565b60008060008060005b86869050811015610e2857868682818110610c7d57610c7c6121bd565b5b9050602002013593506000600560008681526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508873ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690612548565b60405180910390fd5b6000816020015165ffffffffffff169050620151808142610de09190612568565b600154610ded919061259c565b610df79190612625565b9350606484610e069190612625565b85610e119190612167565b945050508080610e20906123e0565b915050610c5f565b508193505050509392505050565b60025481565b60056020528060005260406000206000915090508060000160009054906101000a900462ffffff16908060000160039054906101000a900465ffffffffffff16908060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b610eaf6113b0565b73ffffffffffffffffffffffffffffffffffffffff16610ecd6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90612118565b60405180910390fd5b600460149054906101000a900460ff1615600460146101000a81548160ff021916908315150217905550565b60606000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f181b5e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe491906124cf565b905060008167ffffffffffffffff81111561100257611001612656565b5b6040519080825280602002602001820160405280156110305781602001602082028036833780820191505090505b509050600080600190505b838111611118578573ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611105576005600082815260200190815260200160002060000160009054906101000a900462ffffff1662ffffff168383815181106110e9576110e86121bd565b5b6020026020010181815250506001826111029190612167565b91505b8080611110906123e0565b91505061103b565b5060008167ffffffffffffffff81111561113557611134612656565b5b6040519080825280602002602001820160405280156111635781602001602082028036833780820191505090505b50905060005b828110156111be57838181518110611184576111836121bd565b5b602002602001015182828151811061119f5761119e6121bd565b5b60200260200101818152505080806111b6906123e0565b915050611169565b5080945050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112226113b0565b73ffffffffffffffffffffffffffffffffffffffff166112406111cb565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90612118565b60405180910390fd5b6112a383838360006113b8565b505050565b6112b533838360016113b8565b5050565b6112c16113b0565b73ffffffffffffffffffffffffffffffffffffffff166112df6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90612118565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906126f7565b60405180910390fd5b6113ad816117b5565b50565b600033905090565b600080600090506000805b868690508110156116c7578686828181106113e1576113e06121bd565b5b9050602002013593506000600560008681526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600460149054906101000a900460ff1615611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890612238565b60405180910390fd5b8873ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90612548565b60405180910390fd5b6000816020015165ffffffffffff1690506201518081426115949190612568565b6001546115a1919061259c565b6115ab9190612625565b93506064846115ba9190612625565b856115c59190612167565b945060405180606001604052808762ffffff1681526020014265ffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff168152506005600088815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050505080806116bf906123e0565b9150506113c3565b50600082111561176157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988846040518363ffffffff1660e01b815260040161172e929190612717565b600060405180830381600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b505050505b831561177357611772878787611879565b5b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a87836040516117a4929190612717565b60405180910390a150505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082829050600260008282546118909190612568565b9250508190555060005b83839050811015611b96578383828181106118b8576118b76121bd565b5b9050602002013591506000600560008481526020019081526020016000206040518060600160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600460149054906101000a900460ff16156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90612238565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190612548565b60405180910390fd5b60056000848152602001908152602001600020600080820160006101000a81549062ffffff02191690556000820160036101000a81549065ffffffffffff02191690556000820160096101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550507fc486b9458a8637650d84d262414833a5a457bc91ae86b7da110386c8c3fa255b868442604051611ae9939291906123a9565b60405180910390a1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3088866040518463ffffffff1660e01b8152600401611b5093929190612372565b600060405180830381600087803b158015611b6a57600080fd5b505af1158015611b7e573d6000803e3d6000fd5b50505050508080611b8e906123e0565b91505061189a565b5050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bd282611ba7565b9050919050565b611be281611bc7565b8114611bed57600080fd5b50565b600081359050611bff81611bd9565b92915050565b600060208284031215611c1b57611c1a611b9d565b5b6000611c2984828501611bf0565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c5757611c56611c32565b5b8235905067ffffffffffffffff811115611c7457611c73611c37565b5b602083019150836020820283011115611c9057611c8f611c3c565b5b9250929050565b60008060208385031215611cae57611cad611b9d565b5b600083013567ffffffffffffffff811115611ccc57611ccb611ba2565b5b611cd885828601611c41565b92509250509250929050565b6000819050919050565b611cf781611ce4565b8114611d0257600080fd5b50565b600081359050611d1481611cee565b92915050565b60008083601f840112611d3057611d2f611c32565b5b8235905067ffffffffffffffff811115611d4d57611d4c611c37565b5b602083019150836001820283011115611d6957611d68611c3c565b5b9250929050565b600080600080600060808688031215611d8c57611d8b611b9d565b5b6000611d9a88828901611bf0565b9550506020611dab88828901611bf0565b9450506040611dbc88828901611d05565b935050606086013567ffffffffffffffff811115611ddd57611ddc611ba2565b5b611de988828901611d1a565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e2d81611df8565b82525050565b6000602082019050611e486000830184611e24565b92915050565b611e5781611ce4565b82525050565b6000602082019050611e726000830184611e4e565b92915050565b611e8181611bc7565b82525050565b6000602082019050611e9c6000830184611e78565b92915050565b60008115159050919050565b611eb781611ea2565b82525050565b6000602082019050611ed26000830184611eae565b92915050565b600060208284031215611eee57611eed611b9d565b5b6000611efc84828501611d05565b91505092915050565b600080600060408486031215611f1e57611f1d611b9d565b5b6000611f2c86828701611bf0565b935050602084013567ffffffffffffffff811115611f4d57611f4c611ba2565b5b611f5986828701611c41565b92509250509250925092565b600062ffffff82169050919050565b611f7d81611f65565b82525050565b600065ffffffffffff82169050919050565b611f9e81611f83565b82525050565b6000606082019050611fb96000830186611f74565b611fc66020830185611f95565b611fd36040830184611e78565b949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61201081611ce4565b82525050565b60006120228383612007565b60208301905092915050565b6000602082019050919050565b600061204682611fdb565b6120508185611fe6565b935061205b83611ff7565b8060005b8381101561208c5781516120738882612016565b975061207e8361202e565b92505060018101905061205f565b5085935050505092915050565b600060208201905081810360008301526120b3818461203b565b905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006121026020836120bb565b915061210d826120cc565b602082019050919050565b60006020820190508181036000830152612131816120f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061217282611ce4565b915061217d83611ce4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121b2576121b1612138565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f436f6e7472616374206973205061757365640000000000000000000000000000600082015250565b60006122226012836120bb565b915061222d826121ec565b602082019050919050565b6000602082019050818103600083015261225181612215565b9050919050565b60008151905061226781611bd9565b92915050565b60006020828403121561228357612282611b9d565b5b600061229184828501612258565b91505092915050565b7f6e6f7420796f757220746f6b656e000000000000000000000000000000000000600082015250565b60006122d0600e836120bb565b91506122db8261229a565b602082019050919050565b600060208201905081810360008301526122ff816122c3565b9050919050565b7f616c7265616479207374616b6564000000000000000000000000000000000000600082015250565b600061233c600e836120bb565b915061234782612306565b602082019050919050565b6000602082019050818103600083015261236b8161232f565b9050919050565b60006060820190506123876000830186611e78565b6123946020830185611e78565b6123a16040830184611e4e565b949350505050565b60006060820190506123be6000830186611e78565b6123cb6020830185611e4e565b6123d86040830184611e4e565b949350505050565b60006123eb82611ce4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361241d5761241c612138565b5b600182019050919050565b7f43616e6e6f742073656e64206e66747320746f205661756c742064697265637460008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b60006124846022836120bb565b915061248f82612428565b604082019050919050565b600060208201905081810360008301526124b381612477565b9050919050565b6000815190506124c981611cee565b92915050565b6000602082840312156124e5576124e4611b9d565b5b60006124f3848285016124ba565b91505092915050565b7f6e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000612532600c836120bb565b915061253d826124fc565b602082019050919050565b6000602082019050818103600083015261256181612525565b9050919050565b600061257382611ce4565b915061257e83611ce4565b92508282101561259157612590612138565b5b828203905092915050565b60006125a782611ce4565b91506125b283611ce4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125eb576125ea612138565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061263082611ce4565b915061263b83611ce4565b92508261264b5761264a6125f6565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006126e16026836120bb565b91506126ec82612685565b604082019050919050565b60006020820190508181036000830152612710816126d4565b9050919050565b600060408201905061272c6000830185611e78565b6127396020830184611e4e565b939250505056fea2646970667358221220b7f7daeaefed14e77b9399fa40b3d3ea187e754a5399886950ce1fcfc4754bd664736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000613485c528bdebfef7bed764aa4d6e4ba30ef565
-----Decoded View---------------
Arg [0] : _nft (address): 0x613485c528BdEbfef7Bed764AA4D6e4BA30Ef565
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000613485c528bdebfef7bed764aa4d6e4ba30ef565
Deployed Bytecode Sourcemap
37530:5495:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42616:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38253:665;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42720:298;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42502:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37602:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37676:70;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37828:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42402:92;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39461:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41373:299;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4773:103;;;:::i;:::-;;40742:559;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37645:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37858:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;42327:69;;;:::i;:::-;;41746:573;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4122:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37751:72;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39570:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39713:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5031:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42616:100;4353:12;:10;:12::i;:::-;4342:23;;:7;:5;:7::i;:::-;:23;;;4334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42699:11:::1;42686:10;;:24;;;;;;;;;;;;;;;;;;42616:100:::0;:::o;38253:665::-;38313:15;38350:8;;:15;;38335:11;;:30;;;;;;;:::i;:::-;;;;;;;;38377:6;38372:541;38393:8;;:15;;38389:1;:19;38372:541;;;38434:8;;38443:1;38434:11;;;;;;;:::i;:::-;;;;;;;;38424:21;;38463:6;;;;;;;;;;;38462:7;38454:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38533:10;38509:34;;:3;;;;;;;;;;;:11;;;38521:7;38509:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;38501:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38605:1;38579:5;:14;38585:7;38579:14;;;;;;;;;;;:22;;;;;;;;;;;;:27;;;38571:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38659:124;;;;;;;;38720:7;38659:124;;;;;;38757:15;38659:124;;;;;;38683:10;38659:124;;;;;38642:5;:14;38648:7;38642:14;;;;;;;;;;;:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38792:3;;;;;;;;;;;:16;;;38809:10;38829:4;38836:7;38792:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38858:47;38868:10;38880:7;38889:15;38858:47;;;;;;;;:::i;:::-;;;;;;;;38410:3;;;;;:::i;:::-;;;;38372:541;;;;38306:612;38253:665;;:::o;42720:298::-;42869:6;42910:3;42894:20;;:4;:20;;;42886:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42969:41;;;42962:48;;42720:298;;;;;;;:::o;42502:108::-;4353:12;:10;:12::i;:::-;4342:23;;:7;:5;:7::i;:::-;:23;;;4334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42591:13:::1;42576:12;;:28;;;;;;;;;;;;;;;;;;42502:108:::0;:::o;37602:38::-;;;;:::o;37676:70::-;;;;;;;;;;;;;:::o;37828:25::-;;;;;;;;;;;;;:::o;42402:92::-;4353:12;:10;:12::i;:::-;4342:23;;:7;:5;:7::i;:::-;:23;;;4334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42478:10:::1;42466:9;:22;;;;42402:92:::0;:::o;39461:103::-;39523:35;39530:10;39542:8;;39552:5;39523:6;:35::i;:::-;39461:103;;:::o;41373:299::-;41430:7;41446:15;41464:1;41446:19;;41472:14;41501:10;;;;;;;;;;;41489:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41472:53;;41536:6;41545:1;41536:10;;41532:114;41553:6;41548:1;:11;41532:114;;41597:7;41579:25;;:5;:8;41585:1;41579:8;;;;;;;;;;;:14;;;;;;;;;;;;:25;;;41575:64;;41628:1;41617:12;;;;;:::i;:::-;;;41575:64;41561:3;;;;;:::i;:::-;;;;41532:114;;;;41659:7;41652:14;;;;41373:299;;;:::o;4773:103::-;4353:12;:10;:12::i;:::-;4342:23;;:7;:5;:7::i;:::-;:23;;;4334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4838:30:::1;4865:1;4838:18;:30::i;:::-;4773:103::o:0;40742:559::-;40832:12;40854:15;40877:14;40903:18;40939:6;40934:342;40955:8;;:15;;40951:1;:19;40934:342;;;40996:8;;41005:1;40996:11;;;;;;;:::i;:::-;;;;;;;;40986:21;;41016:19;41038:5;:14;41044:7;41038:14;;;;;;;;;;;41016:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41085:7;41069:23;;:6;:12;;;:23;;;41061:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41118:16;41137:6;:16;;;41118:35;;;;41218:5;41206:8;41188:15;:26;;;;:::i;:::-;41175:9;;:40;;;;:::i;:::-;:48;;;;:::i;:::-;41162:61;;41264:3;41251:10;:16;;;;:::i;:::-;41241:6;:27;;;;:::i;:::-;41232:36;;40977:299;;40972:3;;;;;:::i;:::-;;;;40934:342;;;;41289:6;41282:13;;;;;40742:559;;;;;:::o;37645:26::-;;;;:::o;37858:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42327:69::-;4353:12;:10;:12::i;:::-;4342:23;;:7;:5;:7::i;:::-;:23;;;4334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42382:6:::1;;;;;;;;;;;42381:7;42372:6;;:16;;;;;;;;;;;;;;;;;;42327:69::o:0;41746:573::-;41807:28;41846:14;41875:10;;;;;;;;;;;41863:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41846:53;;41906:20;41943:6;41929:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41906:44;;41959:13;41987:12;42002:1;41987:16;;41983:181;42016:6;42005:7;:17;41983:181;;42072:7;42048:31;;:5;:14;42054:7;42048:14;;;;;;;;;;;:20;;;;;;;;;;;;:31;;;42044:113;;42105:5;:14;42111:7;42105:14;;;;;;;;;;;:22;;;;;;;;;;;;42092:35;;:3;42096:5;42092:10;;;;;;;;:::i;:::-;;;;;;;:35;;;;;42146:1;42138:9;;;;;:::i;:::-;;;42044:113;42024:9;;;;;:::i;:::-;;;;41983:181;;;;42172:23;42212:5;42198:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:46;;42229:6;42225:67;42245:5;42241:1;:9;42225:67;;;42278:3;42282:1;42278:6;;;;;;;;:::i;:::-;;;;;;;;42266;42273:1;42266:9;;;;;;;;:::i;:::-;;;;;;;:18;;;;;42252:3;;;;;:::i;:::-;;;;42225:67;;;;42307:6;42300:13;;;;;;41746:573;;;:::o;4122:87::-;4168:7;4195:6;;;;;;;;;;;4188:13;;4122:87;:::o;37751:72::-;;;;;;;;;;;;;:::o;39570:137::-;4353:12;:10;:12::i;:::-;4342:23;;:7;:5;:7::i;:::-;:23;;;4334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39669:32:::1;39676:7;39685:8;;39695:5;39669:6;:32::i;:::-;39570:137:::0;;;:::o;39713:104::-;39777:34;39784:10;39796:8;;39806:4;39777:6;:34::i;:::-;39713:104;;:::o;5031:201::-;4353:12;:10;:12::i;:::-;4342:23;;:7;:5;:7::i;:::-;:23;;;4334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5140:1:::1;5120:22;;:8;:22;;::::0;5112:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5196:28;5215:8;5196:18;:28::i;:::-;5031:201:::0;:::o;2846:98::-;2899:7;2926:10;2919:17;;2846:98;:::o;39825:911::-;39918:15;39940:14;39957:1;39940:18;;39965;40001:6;39996:545;40017:8;;:15;;40013:1;:19;39996:545;;;40058:8;;40067:1;40058:11;;;;;;;:::i;:::-;;;;;;;;40048:21;;40078:19;40100:5;:14;40106:7;40100:14;;;;;;;;;;;40078:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40132:6;;;;;;;;;;;40131:7;40123:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;40194:7;40178:23;;:6;:12;;;:23;;;40170:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;40227:16;40246:6;:16;;;40227:35;;;;40327:5;40315:8;40297:15;:26;;;;:::i;:::-;40284:9;;:40;;;;:::i;:::-;:48;;;;:::i;:::-;40271:61;;40374:3;40361:10;:16;;;;:::i;:::-;40351:6;:27;;;;:::i;:::-;40342:36;;40412:121;;;;;;;;40470:7;40412:121;;;;;;40507:15;40412:121;;;;;;40436:7;40412:121;;;;;40395:5;:14;40401:7;40395:14;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40039:502;;40034:3;;;;;:::i;:::-;;;;39996:545;;;;40560:1;40551:6;:10;40547:80;;;40584:12;;;;;;;;;;;40572:30;;;40603:7;40612:6;40572:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40547:80;40637:8;40633:62;;;40656:31;40669:7;40678:8;;40656:12;:31::i;:::-;40633:62;40706:24;40714:7;40723:6;40706:24;;;;;;;:::i;:::-;;;;;;;;39911:825;;;39825:911;;;;:::o;5392:191::-;5466:16;5485:6;;;;;;;;;;;5466:25;;5511:8;5502:6;;:17;;;;;;;;;;;;;;;;;;5566:8;5535:40;;5556:8;5535:40;;;;;;;;;;;;5455:128;5392:191;:::o;38924:531::-;39008:15;39045:8;;:15;;39030:11;;:30;;;;;;;:::i;:::-;;;;;;;;39072:6;39067:383;39088:8;;:15;;39084:1;:19;39067:383;;;39129:8;;39138:1;39129:11;;;;;;;:::i;:::-;;;;;;;;39119:21;;39149:19;39171:5;:14;39177:7;39171:14;;;;;;;;;;;39149:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39203:6;;;;;;;;;;;39202:7;39194:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39265:10;39249:26;;:6;:12;;;:26;;;39241:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39310:5;:14;39316:7;39310:14;;;;;;;;;;;;39303:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39338:46;39350:7;39359;39368:15;39338:46;;;;;;;;:::i;:::-;;;;;;;;39393:3;;;;;;;;;;;:16;;;39418:4;39425:7;39434;39393:49;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39110:340;39105:3;;;;;:::i;:::-;;;;39067:383;;;;39001:454;38924:531;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:117::-;1285:1;1282;1275:12;1299:117;1408:1;1405;1398:12;1422:117;1531:1;1528;1521:12;1562:568;1635:8;1645:6;1695:3;1688:4;1680:6;1676:17;1672:27;1662:122;;1703:79;;:::i;:::-;1662:122;1816:6;1803:20;1793:30;;1846:18;1838:6;1835:30;1832:117;;;1868:79;;:::i;:::-;1832:117;1982:4;1974:6;1970:17;1958:29;;2036:3;2028:4;2020:6;2016:17;2006:8;2002:32;1999:41;1996:128;;;2043:79;;:::i;:::-;1996:128;1562:568;;;;;:::o;2136:559::-;2222:6;2230;2279:2;2267:9;2258:7;2254:23;2250:32;2247:119;;;2285:79;;:::i;:::-;2247:119;2433:1;2422:9;2418:17;2405:31;2463:18;2455:6;2452:30;2449:117;;;2485:79;;:::i;:::-;2449:117;2598:80;2670:7;2661:6;2650:9;2646:22;2598:80;:::i;:::-;2580:98;;;;2376:312;2136:559;;;;;:::o;2701:77::-;2738:7;2767:5;2756:16;;2701:77;;;:::o;2784:122::-;2857:24;2875:5;2857:24;:::i;:::-;2850:5;2847:35;2837:63;;2896:1;2893;2886:12;2837:63;2784:122;:::o;2912:139::-;2958:5;2996:6;2983:20;2974:29;;3012:33;3039:5;3012:33;:::i;:::-;2912:139;;;;:::o;3070:552::-;3127:8;3137:6;3187:3;3180:4;3172:6;3168:17;3164:27;3154:122;;3195:79;;:::i;:::-;3154:122;3308:6;3295:20;3285:30;;3338:18;3330:6;3327:30;3324:117;;;3360:79;;:::i;:::-;3324:117;3474:4;3466:6;3462:17;3450:29;;3528:3;3520:4;3512:6;3508:17;3498:8;3494:32;3491:41;3488:128;;;3535:79;;:::i;:::-;3488:128;3070:552;;;;;:::o;3628:963::-;3725:6;3733;3741;3749;3757;3806:3;3794:9;3785:7;3781:23;3777:33;3774:120;;;3813:79;;:::i;:::-;3774:120;3933:1;3958:53;4003:7;3994:6;3983:9;3979:22;3958:53;:::i;:::-;3948:63;;3904:117;4060:2;4086:53;4131:7;4122:6;4111:9;4107:22;4086:53;:::i;:::-;4076:63;;4031:118;4188:2;4214:53;4259:7;4250:6;4239:9;4235:22;4214:53;:::i;:::-;4204:63;;4159:118;4344:2;4333:9;4329:18;4316:32;4375:18;4367:6;4364:30;4361:117;;;4397:79;;:::i;:::-;4361:117;4510:64;4566:7;4557:6;4546:9;4542:22;4510:64;:::i;:::-;4492:82;;;;4287:297;3628:963;;;;;;;;:::o;4597:149::-;4633:7;4673:66;4666:5;4662:78;4651:89;;4597:149;;;:::o;4752:115::-;4837:23;4854:5;4837:23;:::i;:::-;4832:3;4825:36;4752:115;;:::o;4873:218::-;4964:4;5002:2;4991:9;4987:18;4979:26;;5015:69;5081:1;5070:9;5066:17;5057:6;5015:69;:::i;:::-;4873:218;;;;:::o;5097:118::-;5184:24;5202:5;5184:24;:::i;:::-;5179:3;5172:37;5097:118;;:::o;5221:222::-;5314:4;5352:2;5341:9;5337:18;5329:26;;5365:71;5433:1;5422:9;5418:17;5409:6;5365:71;:::i;:::-;5221:222;;;;:::o;5449:118::-;5536:24;5554:5;5536:24;:::i;:::-;5531:3;5524:37;5449:118;;:::o;5573:222::-;5666:4;5704:2;5693:9;5689:18;5681:26;;5717:71;5785:1;5774:9;5770:17;5761:6;5717:71;:::i;:::-;5573:222;;;;:::o;5801:90::-;5835:7;5878:5;5871:13;5864:21;5853:32;;5801:90;;;:::o;5897:109::-;5978:21;5993:5;5978:21;:::i;:::-;5973:3;5966:34;5897:109;;:::o;6012:210::-;6099:4;6137:2;6126:9;6122:18;6114:26;;6150:65;6212:1;6201:9;6197:17;6188:6;6150:65;:::i;:::-;6012:210;;;;:::o;6228:329::-;6287:6;6336:2;6324:9;6315:7;6311:23;6307:32;6304:119;;;6342:79;;:::i;:::-;6304:119;6462:1;6487:53;6532:7;6523:6;6512:9;6508:22;6487:53;:::i;:::-;6477:63;;6433:117;6228:329;;;;:::o;6563:704::-;6658:6;6666;6674;6723:2;6711:9;6702:7;6698:23;6694:32;6691:119;;;6729:79;;:::i;:::-;6691:119;6849:1;6874:53;6919:7;6910:6;6899:9;6895:22;6874:53;:::i;:::-;6864:63;;6820:117;7004:2;6993:9;6989:18;6976:32;7035:18;7027:6;7024:30;7021:117;;;7057:79;;:::i;:::-;7021:117;7170:80;7242:7;7233:6;7222:9;7218:22;7170:80;:::i;:::-;7152:98;;;;6947:313;6563:704;;;;;:::o;7273:91::-;7309:7;7349:8;7342:5;7338:20;7327:31;;7273:91;;;:::o;7370:115::-;7455:23;7472:5;7455:23;:::i;:::-;7450:3;7443:36;7370:115;;:::o;7491:97::-;7527:7;7567:14;7560:5;7556:26;7545:37;;7491:97;;;:::o;7594:115::-;7679:23;7696:5;7679:23;:::i;:::-;7674:3;7667:36;7594:115;;:::o;7715:434::-;7860:4;7898:2;7887:9;7883:18;7875:26;;7911:69;7977:1;7966:9;7962:17;7953:6;7911:69;:::i;:::-;7990:70;8056:2;8045:9;8041:18;8032:6;7990:70;:::i;:::-;8070:72;8138:2;8127:9;8123:18;8114:6;8070:72;:::i;:::-;7715:434;;;;;;:::o;8155:114::-;8222:6;8256:5;8250:12;8240:22;;8155:114;;;:::o;8275:184::-;8374:11;8408:6;8403:3;8396:19;8448:4;8443:3;8439:14;8424:29;;8275:184;;;;:::o;8465:132::-;8532:4;8555:3;8547:11;;8585:4;8580:3;8576:14;8568:22;;8465:132;;;:::o;8603:108::-;8680:24;8698:5;8680:24;:::i;:::-;8675:3;8668:37;8603:108;;:::o;8717:179::-;8786:10;8807:46;8849:3;8841:6;8807:46;:::i;:::-;8885:4;8880:3;8876:14;8862:28;;8717:179;;;;:::o;8902:113::-;8972:4;9004;8999:3;8995:14;8987:22;;8902:113;;;:::o;9051:732::-;9170:3;9199:54;9247:5;9199:54;:::i;:::-;9269:86;9348:6;9343:3;9269:86;:::i;:::-;9262:93;;9379:56;9429:5;9379:56;:::i;:::-;9458:7;9489:1;9474:284;9499:6;9496:1;9493:13;9474:284;;;9575:6;9569:13;9602:63;9661:3;9646:13;9602:63;:::i;:::-;9595:70;;9688:60;9741:6;9688:60;:::i;:::-;9678:70;;9534:224;9521:1;9518;9514:9;9509:14;;9474:284;;;9478:14;9774:3;9767:10;;9175:608;;;9051:732;;;;:::o;9789:373::-;9932:4;9970:2;9959:9;9955:18;9947:26;;10019:9;10013:4;10009:20;10005:1;9994:9;9990:17;9983:47;10047:108;10150:4;10141:6;10047:108;:::i;:::-;10039:116;;9789:373;;;;:::o;10168:169::-;10252:11;10286:6;10281:3;10274:19;10326:4;10321:3;10317:14;10302:29;;10168:169;;;;:::o;10343:182::-;10483:34;10479:1;10471:6;10467:14;10460:58;10343:182;:::o;10531:366::-;10673:3;10694:67;10758:2;10753:3;10694:67;:::i;:::-;10687:74;;10770:93;10859:3;10770:93;:::i;:::-;10888:2;10883:3;10879:12;10872:19;;10531:366;;;:::o;10903:419::-;11069:4;11107:2;11096:9;11092:18;11084:26;;11156:9;11150:4;11146:20;11142:1;11131:9;11127:17;11120:47;11184:131;11310:4;11184:131;:::i;:::-;11176:139;;10903:419;;;:::o;11328:180::-;11376:77;11373:1;11366:88;11473:4;11470:1;11463:15;11497:4;11494:1;11487:15;11514:305;11554:3;11573:20;11591:1;11573:20;:::i;:::-;11568:25;;11607:20;11625:1;11607:20;:::i;:::-;11602:25;;11761:1;11693:66;11689:74;11686:1;11683:81;11680:107;;;11767:18;;:::i;:::-;11680:107;11811:1;11808;11804:9;11797:16;;11514:305;;;;:::o;11825:180::-;11873:77;11870:1;11863:88;11970:4;11967:1;11960:15;11994:4;11991:1;11984:15;12011:168;12151:20;12147:1;12139:6;12135:14;12128:44;12011:168;:::o;12185:366::-;12327:3;12348:67;12412:2;12407:3;12348:67;:::i;:::-;12341:74;;12424:93;12513:3;12424:93;:::i;:::-;12542:2;12537:3;12533:12;12526:19;;12185:366;;;:::o;12557:419::-;12723:4;12761:2;12750:9;12746:18;12738:26;;12810:9;12804:4;12800:20;12796:1;12785:9;12781:17;12774:47;12838:131;12964:4;12838:131;:::i;:::-;12830:139;;12557:419;;;:::o;12982:143::-;13039:5;13070:6;13064:13;13055:22;;13086:33;13113:5;13086:33;:::i;:::-;12982:143;;;;:::o;13131:351::-;13201:6;13250:2;13238:9;13229:7;13225:23;13221:32;13218:119;;;13256:79;;:::i;:::-;13218:119;13376:1;13401:64;13457:7;13448:6;13437:9;13433:22;13401:64;:::i;:::-;13391:74;;13347:128;13131:351;;;;:::o;13488:164::-;13628:16;13624:1;13616:6;13612:14;13605:40;13488:164;:::o;13658:366::-;13800:3;13821:67;13885:2;13880:3;13821:67;:::i;:::-;13814:74;;13897:93;13986:3;13897:93;:::i;:::-;14015:2;14010:3;14006:12;13999:19;;13658:366;;;:::o;14030:419::-;14196:4;14234:2;14223:9;14219:18;14211:26;;14283:9;14277:4;14273:20;14269:1;14258:9;14254:17;14247:47;14311:131;14437:4;14311:131;:::i;:::-;14303:139;;14030:419;;;:::o;14455:164::-;14595:16;14591:1;14583:6;14579:14;14572:40;14455:164;:::o;14625:366::-;14767:3;14788:67;14852:2;14847:3;14788:67;:::i;:::-;14781:74;;14864:93;14953:3;14864:93;:::i;:::-;14982:2;14977:3;14973:12;14966:19;;14625:366;;;:::o;14997:419::-;15163:4;15201:2;15190:9;15186:18;15178:26;;15250:9;15244:4;15240:20;15236:1;15225:9;15221:17;15214:47;15278:131;15404:4;15278:131;:::i;:::-;15270:139;;14997:419;;;:::o;15422:442::-;15571:4;15609:2;15598:9;15594:18;15586:26;;15622:71;15690:1;15679:9;15675:17;15666:6;15622:71;:::i;:::-;15703:72;15771:2;15760:9;15756:18;15747:6;15703:72;:::i;:::-;15785;15853:2;15842:9;15838:18;15829:6;15785:72;:::i;:::-;15422:442;;;;;;:::o;15870:::-;16019:4;16057:2;16046:9;16042:18;16034:26;;16070:71;16138:1;16127:9;16123:17;16114:6;16070:71;:::i;:::-;16151:72;16219:2;16208:9;16204:18;16195:6;16151:72;:::i;:::-;16233;16301:2;16290:9;16286:18;16277:6;16233:72;:::i;:::-;15870:442;;;;;;:::o;16318:233::-;16357:3;16380:24;16398:5;16380:24;:::i;:::-;16371:33;;16426:66;16419:5;16416:77;16413:103;;16496:18;;:::i;:::-;16413:103;16543:1;16536:5;16532:13;16525:20;;16318:233;;;:::o;16557:221::-;16697:34;16693:1;16685:6;16681:14;16674:58;16766:4;16761:2;16753:6;16749:15;16742:29;16557:221;:::o;16784:366::-;16926:3;16947:67;17011:2;17006:3;16947:67;:::i;:::-;16940:74;;17023:93;17112:3;17023:93;:::i;:::-;17141:2;17136:3;17132:12;17125:19;;16784:366;;;:::o;17156:419::-;17322:4;17360:2;17349:9;17345:18;17337:26;;17409:9;17403:4;17399:20;17395:1;17384:9;17380:17;17373:47;17437:131;17563:4;17437:131;:::i;:::-;17429:139;;17156:419;;;:::o;17581:143::-;17638:5;17669:6;17663:13;17654:22;;17685:33;17712:5;17685:33;:::i;:::-;17581:143;;;;:::o;17730:351::-;17800:6;17849:2;17837:9;17828:7;17824:23;17820:32;17817:119;;;17855:79;;:::i;:::-;17817:119;17975:1;18000:64;18056:7;18047:6;18036:9;18032:22;18000:64;:::i;:::-;17990:74;;17946:128;17730:351;;;;:::o;18087:162::-;18227:14;18223:1;18215:6;18211:14;18204:38;18087:162;:::o;18255:366::-;18397:3;18418:67;18482:2;18477:3;18418:67;:::i;:::-;18411:74;;18494:93;18583:3;18494:93;:::i;:::-;18612:2;18607:3;18603:12;18596:19;;18255:366;;;:::o;18627:419::-;18793:4;18831:2;18820:9;18816:18;18808:26;;18880:9;18874:4;18870:20;18866:1;18855:9;18851:17;18844:47;18908:131;19034:4;18908:131;:::i;:::-;18900:139;;18627:419;;;:::o;19052:191::-;19092:4;19112:20;19130:1;19112:20;:::i;:::-;19107:25;;19146:20;19164:1;19146:20;:::i;:::-;19141:25;;19185:1;19182;19179:8;19176:34;;;19190:18;;:::i;:::-;19176:34;19235:1;19232;19228:9;19220:17;;19052:191;;;;:::o;19249:348::-;19289:7;19312:20;19330:1;19312:20;:::i;:::-;19307:25;;19346:20;19364:1;19346:20;:::i;:::-;19341:25;;19534:1;19466:66;19462:74;19459:1;19456:81;19451:1;19444:9;19437:17;19433:105;19430:131;;;19541:18;;:::i;:::-;19430:131;19589:1;19586;19582:9;19571:20;;19249:348;;;;:::o;19603:180::-;19651:77;19648:1;19641:88;19748:4;19745:1;19738:15;19772:4;19769:1;19762:15;19789:185;19829:1;19846:20;19864:1;19846:20;:::i;:::-;19841:25;;19880:20;19898:1;19880:20;:::i;:::-;19875:25;;19919:1;19909:35;;19924:18;;:::i;:::-;19909:35;19966:1;19963;19959:9;19954:14;;19789:185;;;;:::o;19980:180::-;20028:77;20025:1;20018:88;20125:4;20122:1;20115:15;20149:4;20146:1;20139:15;20166:225;20306:34;20302:1;20294:6;20290:14;20283:58;20375:8;20370:2;20362:6;20358:15;20351:33;20166:225;:::o;20397:366::-;20539:3;20560:67;20624:2;20619:3;20560:67;:::i;:::-;20553:74;;20636:93;20725:3;20636:93;:::i;:::-;20754:2;20749:3;20745:12;20738:19;;20397:366;;;:::o;20769:419::-;20935:4;20973:2;20962:9;20958:18;20950:26;;21022:9;21016:4;21012:20;21008:1;20997:9;20993:17;20986:47;21050:131;21176:4;21050:131;:::i;:::-;21042:139;;20769:419;;;:::o;21194:332::-;21315:4;21353:2;21342:9;21338:18;21330:26;;21366:71;21434:1;21423:9;21419:17;21410:6;21366:71;:::i;:::-;21447:72;21515:2;21504:9;21500:18;21491:6;21447:72;:::i;:::-;21194:332;;;;;:::o
Swarm Source
ipfs://b7f7daeaefed14e77b9399fa40b3d3ea187e754a5399886950ce1fcfc4754bd6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.