Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 151 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 19535159 | 163 days ago | IN | 0 ETH | 0.00177694 | ||||
Set Approval For... | 17765794 | 411 days ago | IN | 0 ETH | 0.00113187 | ||||
Set Approval For... | 15641839 | 709 days ago | IN | 0 ETH | 0.00033507 | ||||
Set Approval For... | 15417520 | 743 days ago | IN | 0 ETH | 0.00041622 | ||||
Set Approval For... | 15417442 | 743 days ago | IN | 0 ETH | 0.00064745 | ||||
Safe Transfer Fr... | 15366984 | 751 days ago | IN | 0 ETH | 0.00104795 | ||||
Set Approval For... | 15366941 | 751 days ago | IN | 0 ETH | 0.00066953 | ||||
Set Approval For... | 15228210 | 773 days ago | IN | 0 ETH | 0.00067221 | ||||
Mint | 15114332 | 790 days ago | IN | 0 ETH | 0.00144444 | ||||
Mint | 15114329 | 790 days ago | IN | 0 ETH | 0.00149336 | ||||
Mint | 15112947 | 791 days ago | IN | 0 ETH | 0.00175213 | ||||
Mint | 15112887 | 791 days ago | IN | 0 ETH | 0.01056795 | ||||
Mint | 15112880 | 791 days ago | IN | 0 ETH | 0.00583611 | ||||
Mint | 15112677 | 791 days ago | IN | 0 ETH | 0.00147123 | ||||
Mint | 15112671 | 791 days ago | IN | 0 ETH | 0.00151969 | ||||
Mint | 15112658 | 791 days ago | IN | 0 ETH | 0.00161607 | ||||
Mint | 14797635 | 843 days ago | IN | 0 ETH | 0.00650374 | ||||
Mint | 14796975 | 844 days ago | IN | 0 ETH | 0.00555256 | ||||
Mint | 14796683 | 844 days ago | IN | 0 ETH | 0.00644588 | ||||
Mint | 14796683 | 844 days ago | IN | 0 ETH | 0.00644588 | ||||
Mint | 14796681 | 844 days ago | IN | 0 ETH | 0.00847985 | ||||
Mint | 14796665 | 844 days ago | IN | 0 ETH | 0.00651207 | ||||
Set Price | 14439854 | 900 days ago | IN | 0 ETH | 0.00090819 | ||||
Owner Withdraw | 14439838 | 900 days ago | IN | 0 ETH | 0.00138428 | ||||
Set Approval For... | 14413783 | 904 days ago | IN | 0 ETH | 0.00182291 |
Loading...
Loading
Contract Name:
DegenDonkeys
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-20 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (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/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.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`, 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (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/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (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/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (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/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (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/ERC721.sol // OpenZeppelin Contracts v4.4.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 overriden 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 || getApproved(tokenId) == spender || isApprovedForAll(owner, 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); } /** * @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); } /** * @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 of token that is not own"); 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); } /** * @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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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: contracts/DegenDonkeys.sol pragma solidity ^0.8.10; contract DegenDonkeys is ERC721Enumerable, Ownable { using Strings for uint256; using Address for address; struct Conf { uint16 supply; uint16 _reserved; uint64 price; } address private controller; address public fundsWallet; bool public mintEnabled = false; bool public whitelistMintEnabled = false; uint public perWhitelistAccount = 5; uint8 public perMint = 50; uint16 public phase = 420; uint16 public maxDonks = 6969; uint256 public imagesHash; string private defaultURI; string private baseURI; string private metaURI; mapping (address => bool) public whitelist; mapping(uint256 => uint256) private metaHashes; Conf private conf; event updateMetaHash(address, uint256, uint256); modifier isController(address sender) { require( sender != address(0) && (sender == owner() || sender == controller) ); _; } /** * @notice Setup ERC721 and initial config */ constructor( string memory name, string memory symbol, string memory _defaultURI, address _fundsWallet ) ERC721(name, symbol) { require(_fundsWallet != address(0), "Zero address error"); fundsWallet = _fundsWallet; conf = Conf(0, 100, 42000000000000000); defaultURI = _defaultURI; } /** * @notice Send ETH to owners wallet */ function ownerWithdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } /** * @notice send contract eth to fundswallet */ function fundsWithdraw() public onlyOwner { uint256 balance = address(this).balance; payable(fundsWallet).transfer(balance); } /** * @notice Send reserved donks * @param _to address to send reserved nfts to. * @param _amount number of nfts to send */ function fetchReserved(address _to, uint16 _amount) public onlyOwner { require( _to != address(0), "Zero address error"); require( _amount <= conf._reserved, "Exceeds reserved donks supply"); require( conf.supply + _amount <= phase, "Amount exceeds maximum supply of Donks in this phase." ); uint16 supply = conf.supply; unchecked { for (uint8 i = 0; i < _amount; i++) { _safeMint(_to, supply++); } } conf.supply = supply; conf._reserved -= _amount; } /** * @notice Bring new Donks into the world. * @param amount Number of Donks to mint. * @dev Utilize unchecked {} and calldata for gas savings. */ function mint(uint256 amount) public payable { require(mintEnabled, "Minting is disabled."); require( conf.supply + amount <= maxDonks - conf._reserved, "Amount exceeds maximum supply of Donks." ); require( conf.supply + amount <= phase, "Amount exceeds maximum supply of Donks in this phase." ); require( amount <= perMint, "Amount exceeds current maximum Donks per mint." ); require( conf.price * amount <= msg.value, "Ether value sent is not correct." ); uint16 supply = conf.supply; unchecked { for (uint16 i = 0; i < amount; i++) { _safeMint(msg.sender, supply++); } } conf.supply = supply; } // Whitelist functions /** * @notice add addresses to whitelist in bulk. * @param addresses Arrary of whitelisted addresses * @dev Only authorized accounts. */ function bulkWhitelist(address[] memory addresses) public onlyOwner { for(uint i=0; i < addresses.length; i++){ address addr = addresses[i]; if(whitelist[addr] != true && addr != address(0)){ whitelist[addr] = true; } } } /** * @notice Whitelist minting function. * @param amount Number of Donks to mint. * @dev Utilize unchecked {} and calldata for gas savings. */ function whitelistMint(uint256 amount) public payable { require(whitelistMintEnabled, "Whitelist Minting is disabled."); require( whitelist[msg.sender] == true, "Only whitelist can mint" ); require( conf.supply + amount <= phase, "Amount exceeds maximum supply of Donks in this phase." ); require( conf.supply + amount <= maxDonks - conf._reserved, "Amount exceeds maximum supply of Donks." ); require( balanceOf(msg.sender) + amount <= perWhitelistAccount, "Amount exceeds current maximum mints per account." ); require( amount <= perMint, "Amount exceeds current maximum Donks per mint." ); require( conf.price * amount <= msg.value, "Ether value sent is not correct." ); uint16 supply = conf.supply; unchecked { for (uint16 i = 0; i < amount; i++) { _safeMint(msg.sender, supply++); } } conf.supply = supply; } /** * @notice Toggle white list mint status. * @dev Only authorized accounts. */ function toggleWhitelistMintEnabled() public onlyOwner { whitelistMintEnabled = !whitelistMintEnabled; } /** * @notice Set per whitelist account * @param _perWhitelist new minting phase * @dev Only authorized accounts. */ function setPerWhitelistAccount(uint16 _perWhitelist) public onlyOwner { perWhitelistAccount = _perWhitelist; } /** * @notice Set phase. * @param _phase new minting phase * @dev Only authorized accounts. */ function setPhase(uint16 _phase) public onlyOwner { phase = _phase; } /** * @notice Set reserved. * @param reserved new reserved amount. * @dev Only authorized accounts. */ function setReserved(uint16 reserved) public onlyOwner { conf._reserved = reserved; } /** * @notice Set price. * @param newPrice new minting price * @dev Only authorized accounts. */ function setPrice(uint64 newPrice) public onlyOwner { conf.price = newPrice; } /** * @notice Set funds wallet. * @param _fundsWallet new funds wallet address * @dev Only authorized accounts. */ function setFundsWallet(address _fundsWallet) public onlyOwner { require(_fundsWallet != address(0), "Zero address error"); fundsWallet = _fundsWallet; } /** * @notice Set meta hash for token. * @param id Token id. * @param _hash Hash value. * @dev Only authorized accounts. */ function setMetaHash(uint256 id, uint256 _hash) public isController(msg.sender) { require(_exists(id), "Token does not exist."); metaHashes[id] = _hash; emit updateMetaHash(msg.sender, id, _hash); } /** * @notice Return mint price. */ function getMintPrice() public view returns (uint64) { return conf.price; } /** * @notice Return meta hash for token. */ function getMetaHash(uint256 id) public view returns (uint256) { return metaHashes[id]; } /** * @notice Sets URI for image hashes. */ function setImagesHash(uint256 _imagesHash) public onlyOwner { imagesHash = _imagesHash; } /** * @notice Toggles minting state. */ function toggleMintEnabled() public onlyOwner { mintEnabled = !mintEnabled; } /** * @notice Sets max Donks per mint. */ function setPerMint(uint8 _perMint) public onlyOwner { perMint = _perMint; } /** * @notice Set base URI. */ function setBaseURI(string memory _baseURI) public onlyOwner { baseURI = _baseURI; } /** * @notice Set default URI. */ function setDefaultURI(string memory _defaultURI) public onlyOwner { defaultURI = _defaultURI; } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "Token does not exist."); if (bytes(baseURI).length == 0) { return defaultURI; } else { return string(abi.encodePacked(baseURI, (tokenId + 1).toString())); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"_defaultURI","type":"string"},{"internalType":"address","name":"_fundsWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"updateMetaHash","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"bulkWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint16","name":"_amount","type":"uint16"}],"name":"fetchReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundsWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getMetaHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintPrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"imagesHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDonks","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"perMint","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"perWhitelistAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_defaultURI","type":"string"}],"name":"setDefaultURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fundsWallet","type":"address"}],"name":"setFundsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_imagesHash","type":"uint256"}],"name":"setImagesHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"_hash","type":"uint256"}],"name":"setMetaHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_perMint","type":"uint8"}],"name":"setPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_perWhitelist","type":"uint16"}],"name":"setPerWhitelistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_phase","type":"uint16"}],"name":"setPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"newPrice","type":"uint64"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reserved","type":"uint16"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhitelistMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600c805461ffff60a01b191690556005600d55600e805464ffffffffff1916641b3901a4321790553480156200003957600080fd5b5060405162003457380380620034578339810160408190526200005c916200033e565b83518490849062000075906000906020850190620001cb565b5080516200008b906001906020840190620001cb565b505050620000a8620000a26200017560201b60201c565b62000179565b6001600160a01b038116620000f85760405162461bcd60e51b81526020600482015260126024820152712d32b9379030b2323932b9b99032b93937b960711b604482015260640160405180910390fd5b600c80546001600160a01b0319166001600160a01b03831617905560408051606081018252600081526064602080830191909152669536c7089100009190920152601580546001600160601b0319166a9536c7089100000064000017905582516200016a9160109190850190620001cb565b50505050506200042e565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001d990620003f1565b90600052602060002090601f016020900481019282620001fd576000855562000248565b82601f106200021857805160ff191683800117855562000248565b8280016001018555821562000248579182015b82811115620002485782518255916020019190600101906200022b565b50620002569291506200025a565b5090565b5b808211156200025657600081556001016200025b565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200029957600080fd5b81516001600160401b0380821115620002b657620002b662000271565b604051601f8301601f19908116603f01168101908282118183101715620002e157620002e162000271565b81604052838152602092508683858801011115620002fe57600080fd5b600091505b8382101562000322578582018301518183018401529082019062000303565b83821115620003345760008385830101525b9695505050505050565b600080600080608085870312156200035557600080fd5b84516001600160401b03808211156200036d57600080fd5b6200037b8883890162000287565b955060208701519150808211156200039257600080fd5b620003a08883890162000287565b94506040870151915080821115620003b757600080fd5b50620003c68782880162000287565b606087015190935090506001600160a01b0381168114620003e657600080fd5b939692955090935050565b600181811c908216806200040657607f821691505b602082108114156200042857634e487b7160e01b600052602260045260246000fd5b50919050565b613019806200043e6000396000f3fe6080604052600436106102935760003560e01c806370a082311161015a578063b88d4fde116100c1578063da1b9e081161007a578063da1b9e08146107fb578063e985e9c51461081b578063f2fde38b14610864578063f73b554114610884578063f7c086ef146108a4578063fb425176146108c457600080fd5b8063b88d4fde14610737578063c87b56dd14610757578063cb6f238d14610777578063ce75345b14610797578063d1239730146107ad578063d34b51c5146107ce57600080fd5b80639b19251a116101135780639b19251a14610664578063a0712d6814610694578063a22cb465146106a7578063a7f93ebd146106c7578063a80a1fd114610702578063b1c9fe6e1461071757600080fd5b806370a08231146105c9578063715018a6146105e9578063868ff4a2146105fe5780638da5cb5b1461061157806391d7c2831461062f57806395d89b411461064f57600080fd5b80632f745c59116101fe57806352390773116101b7578063523907731461051357806355f804b31461053357806361f5baeb146105535780636352211e1461056857806364e39b87146105885780636caede3d146105a857600080fd5b80632f745c591461046957806332b9537214610489578063388a50451461049e57806342842e0e146104be5780634311de8f146104de5780634f6ccce7146104f357600080fd5b806311ef5ab21161025057806311ef5ab21461039557806318160ddd146103ca5780631866ea8d146103e95780632194f3a214610409578063229c20481461042957806323b872dd1461044957600080fd5b806301ffc9a71461029857806306fdde03146102cd57806307db498b146102ef578063081812fc14610311578063095ea7b3146103495780630ed62b0214610369575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612711565b6108da565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610905565b6040516102c4919061278d565b3480156102fb57600080fd5b5061030f61030a3660046127a0565b610997565b005b34801561031d57600080fd5b5061033161032c3660046127a0565b6109cf565b6040516001600160a01b0390911681526020016102c4565b34801561035557600080fd5b5061030f6103643660046127d0565b610a64565b34801561037557600080fd5b50600e546103839060ff1681565b60405160ff90911681526020016102c4565b3480156103a157600080fd5b50600e546103b7906301000000900461ffff1681565b60405161ffff90911681526020016102c4565b3480156103d657600080fd5b506008545b6040519081526020016102c4565b3480156103f557600080fd5b5061030f61040436600461280c565b610b7a565b34801561041557600080fd5b50600c54610331906001600160a01b031681565b34801561043557600080fd5b5061030f610444366004612827565b610bad565b34801561045557600080fd5b5061030f610464366004612851565b610c07565b34801561047557600080fd5b506103db6104843660046127d0565b610c38565b34801561049557600080fd5b5061030f610cce565b3480156104aa57600080fd5b5061030f6104b936600461288d565b610d19565b3480156104ca57600080fd5b5061030f6104d9366004612851565b610eb1565b3480156104ea57600080fd5b5061030f610ecc565b3480156104ff57600080fd5b506103db61050e3660046127a0565b610f29565b34801561051f57600080fd5b5061030f61052e36600461280c565b610fbc565b34801561053f57600080fd5b5061030f61054e36600461295f565b611006565b34801561055f57600080fd5b5061030f611043565b34801561057457600080fd5b506103316105833660046127a0565b61108e565b34801561059457600080fd5b5061030f6105a33660046129a8565b611105565b3480156105b457600080fd5b50600c546102b890600160a81b900460ff1681565b3480156105d557600080fd5b506103db6105e43660046129a8565b61119c565b3480156105f557600080fd5b5061030f611223565b61030f61060c3660046127a0565b611259565b34801561061d57600080fd5b50600a546001600160a01b0316610331565b34801561063b57600080fd5b5061030f61064a3660046129c3565b61150a565b34801561065b57600080fd5b506102e26115fb565b34801561067057600080fd5b506102b861067f3660046129a8565b60136020526000908152604090205460ff1681565b61030f6106a23660046127a0565b61160a565b3480156106b357600080fd5b5061030f6106c23660046129e5565b6117b5565b3480156106d357600080fd5b50601554640100000000900467ffffffffffffffff1660405167ffffffffffffffff90911681526020016102c4565b34801561070e57600080fd5b5061030f6117c0565b34801561072357600080fd5b50600e546103b790610100900461ffff1681565b34801561074357600080fd5b5061030f610752366004612a21565b611824565b34801561076357600080fd5b506102e26107723660046127a0565b61185c565b34801561078357600080fd5b5061030f610792366004612a9d565b6119a3565b3480156107a357600080fd5b506103db600d5481565b3480156107b957600080fd5b50600c546102b890600160a01b900460ff1681565b3480156107da57600080fd5b506103db6107e93660046127a0565b60009081526014602052604090205490565b34801561080757600080fd5b5061030f61081636600461295f565b6119e3565b34801561082757600080fd5b506102b8610836366004612ac0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561087057600080fd5b5061030f61087f3660046129a8565b611a20565b34801561089057600080fd5b5061030f61089f366004612aea565b611abb565b3480156108b057600080fd5b5061030f6108bf36600461280c565b611b87565b3480156108d057600080fd5b506103db600f5481565b60006001600160e01b0319821663780e9d6360e01b14806108ff57506108ff82611bcf565b92915050565b60606000805461091490612b97565b80601f016020809104026020016040519081016040528092919081815260200182805461094090612b97565b801561098d5780601f106109625761010080835404028352916020019161098d565b820191906000526020600020905b81548152906001019060200180831161097057829003601f168201915b5050505050905090565b600a546001600160a01b031633146109ca5760405162461bcd60e51b81526004016109c190612bd2565b60405180910390fd5b600f55565b6000818152600260205260408120546001600160a01b0316610a485760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109c1565b506000908152600460205260409020546001600160a01b031690565b6000610a6f8261108e565b9050806001600160a01b0316836001600160a01b03161415610add5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109c1565b336001600160a01b0382161480610af95750610af98133610836565b610b6b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109c1565b610b758383611c1f565b505050565b600a546001600160a01b03163314610ba45760405162461bcd60e51b81526004016109c190612bd2565b61ffff16600d55565b600a546001600160a01b03163314610bd75760405162461bcd60e51b81526004016109c190612bd2565b6015805467ffffffffffffffff909216640100000000026bffffffffffffffff0000000019909216919091179055565b610c113382611c8d565b610c2d5760405162461bcd60e51b81526004016109c190612c07565b610b75838383611d84565b6000610c438361119c565b8210610ca55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016109c1565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610cf85760405162461bcd60e51b81526004016109c190612bd2565b600c805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600a546001600160a01b03163314610d435760405162461bcd60e51b81526004016109c190612bd2565b6001600160a01b038216610d8e5760405162461bcd60e51b81526020600482015260126024820152712d32b9379030b2323932b9b99032b93937b960711b60448201526064016109c1565b60155461ffff6201000090910481169082161115610dee5760405162461bcd60e51b815260206004820152601d60248201527f4578636565647320726573657276656420646f6e6b7320737570706c7900000060448201526064016109c1565b600e5460155461ffff610100909204821691610e0c91849116612c6e565b61ffff161115610e2e5760405162461bcd60e51b81526004016109c190612c94565b60155461ffff1660005b8261ffff168160ff161015610e6357610e5b848380600101945061ffff16611f2f565b600101610e38565b506015805461ffff191661ffff83811691909117808355849291600291610e9291859162010000900416612ce9565b92506101000a81548161ffff021916908361ffff160217905550505050565b610b7583838360405180602001604052806000815250611824565b600a546001600160a01b03163314610ef65760405162461bcd60e51b81526004016109c190612bd2565b6040514790339082156108fc029083906000818181858888f19350505050158015610f25573d6000803e3d6000fd5b5050565b6000610f3460085490565b8210610f975760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109c1565b60088281548110610faa57610faa612d0c565b90600052602060002001549050919050565b600a546001600160a01b03163314610fe65760405162461bcd60e51b81526004016109c190612bd2565b6015805461ffff909216620100000263ffff000019909216919091179055565b600a546001600160a01b031633146110305760405162461bcd60e51b81526004016109c190612bd2565b8051610f25906011906020840190612662565b600a546001600160a01b0316331461106d5760405162461bcd60e51b81526004016109c190612bd2565b600c805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6000818152600260205260408120546001600160a01b0316806108ff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109c1565b600a546001600160a01b0316331461112f5760405162461bcd60e51b81526004016109c190612bd2565b6001600160a01b03811661117a5760405162461bcd60e51b81526020600482015260126024820152712d32b9379030b2323932b9b99032b93937b960711b60448201526064016109c1565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382166112075760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109c1565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461124d5760405162461bcd60e51b81526004016109c190612bd2565b6112576000611f49565b565b600c54600160a81b900460ff166112b25760405162461bcd60e51b815260206004820152601e60248201527f57686974656c697374204d696e74696e672069732064697361626c65642e000060448201526064016109c1565b3360009081526013602052604090205460ff1615156001146113165760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792077686974656c6973742063616e206d696e7400000000000000000060448201526064016109c1565b600e5460155461ffff61010090920482169161133491849116612d22565b11156113525760405162461bcd60e51b81526004016109c190612c94565b601554600e546113769161ffff620100009091048116916301000000900416612ce9565b60155461ffff9182169161138c91849116612d22565b11156113aa5760405162461bcd60e51b81526004016109c190612d3a565b600d54816113b73361119c565b6113c19190612d22565b11156114295760405162461bcd60e51b815260206004820152603160248201527f416d6f756e7420657863656564732063757272656e74206d6178696d756d206d60448201527034b73a39903832b91030b1b1b7bab73a1760791b60648201526084016109c1565b600e5460ff1681111561144e5760405162461bcd60e51b81526004016109c190612d81565b6015543490611470908390640100000000900467ffffffffffffffff16612dcf565b11156114be5760405162461bcd60e51b815260206004820181905260248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563742e60448201526064016109c1565b60155461ffff1660005b828161ffff1610156114f0576114e8338380600101945061ffff16611f2f565b6001016114c8565b506015805461ffff191661ffff9290921691909117905550565b33801580159061153e5750600a546001600160a01b038281169116148061153e5750600b546001600160a01b038281169116145b61154757600080fd5b6000838152600260205260409020546001600160a01b03166115a35760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109c1565b60008381526014602090815260409182902084905581513381529081018590529081018390527fb10b3625df7286db8dccbbe246db7ca30a7cb38626be90ba222cbf01339eeeba9060600160405180910390a1505050565b60606001805461091490612b97565b600c54600160a01b900460ff1661165a5760405162461bcd60e51b815260206004820152601460248201527326b4b73a34b7339034b9903234b9b0b13632b21760611b60448201526064016109c1565b601554600e5461167e9161ffff620100009091048116916301000000900416612ce9565b60155461ffff9182169161169491849116612d22565b11156116b25760405162461bcd60e51b81526004016109c190612d3a565b600e5460155461ffff6101009092048216916116d091849116612d22565b11156116ee5760405162461bcd60e51b81526004016109c190612c94565b600e5460ff168111156117135760405162461bcd60e51b81526004016109c190612d81565b6015543490611735908390640100000000900467ffffffffffffffff16612dcf565b11156117835760405162461bcd60e51b815260206004820181905260248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563742e60448201526064016109c1565b60155461ffff1660005b828161ffff1610156114f0576117ad338380600101945061ffff16611f2f565b60010161178d565b610f25338383611f9b565b600a546001600160a01b031633146117ea5760405162461bcd60e51b81526004016109c190612bd2565b600c5460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610f25573d6000803e3d6000fd5b61182e3383611c8d565b61184a5760405162461bcd60e51b81526004016109c190612c07565b6118568484848461206a565b50505050565b6000818152600260205260409020546060906001600160a01b03166118bb5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109c1565b601180546118c890612b97565b1515905061196257601080546118dd90612b97565b80601f016020809104026020016040519081016040528092919081815260200182805461190990612b97565b80156119565780601f1061192b57610100808354040283529160200191611956565b820191906000526020600020905b81548152906001019060200180831161193957829003601f168201915b50505050509050919050565b6011611977611972846001612d22565b61209d565b604051602001611988929190612e0a565b6040516020818303038152906040529050919050565b919050565b600a546001600160a01b031633146119cd5760405162461bcd60e51b81526004016109c190612bd2565b600e805460ff191660ff92909216919091179055565b600a546001600160a01b03163314611a0d5760405162461bcd60e51b81526004016109c190612bd2565b8051610f25906010906020840190612662565b600a546001600160a01b03163314611a4a5760405162461bcd60e51b81526004016109c190612bd2565b6001600160a01b038116611aaf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109c1565b611ab881611f49565b50565b600a546001600160a01b03163314611ae55760405162461bcd60e51b81526004016109c190612bd2565b60005b8151811015610f25576000828281518110611b0557611b05612d0c565b6020908102919091018101516001600160a01b0381166000908152601390925260409091205490915060ff161515600114801590611b4b57506001600160a01b03811615155b15611b74576001600160a01b0381166000908152601360205260409020805460ff191660011790555b5080611b7f81612eb1565b915050611ae8565b600a546001600160a01b03163314611bb15760405162461bcd60e51b81526004016109c190612bd2565b600e805461ffff9092166101000262ffff0019909216919091179055565b60006001600160e01b031982166380ac58cd60e01b1480611c0057506001600160e01b03198216635b5e139f60e01b145b806108ff57506301ffc9a760e01b6001600160e01b03198316146108ff565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c548261108e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611d065760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109c1565b6000611d118361108e565b9050806001600160a01b0316846001600160a01b03161480611d4c5750836001600160a01b0316611d41846109cf565b6001600160a01b0316145b80611d7c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611d978261108e565b6001600160a01b031614611dff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109c1565b6001600160a01b038216611e615760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109c1565b611e6c83838361219b565b611e77600082611c1f565b6001600160a01b0383166000908152600360205260408120805460019290611ea0908490612ecc565b90915550506001600160a01b0382166000908152600360205260408120805460019290611ece908490612d22565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610f25828260405180602001604052806000815250612253565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611ffd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109c1565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612075848484611d84565b61208184848484612286565b6118565760405162461bcd60e51b81526004016109c190612ee3565b6060816120c15750506040805180820190915260018152600360fc1b602082015290565b8160005b81156120eb57806120d581612eb1565b91506120e49050600a83612f4b565b91506120c5565b60008167ffffffffffffffff811115612106576121066128c0565b6040519080825280601f01601f191660200182016040528015612130576020820181803683370190505b5090505b8415611d7c57612145600183612ecc565b9150612152600a86612f5f565b61215d906030612d22565b60f81b81838151811061217257612172612d0c565b60200101906001600160f81b031916908160001a905350612194600a86612f4b565b9450612134565b6001600160a01b0383166121f6576121f181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612219565b816001600160a01b0316836001600160a01b031614612219576122198382612384565b6001600160a01b03821661223057610b7581612421565b826001600160a01b0316826001600160a01b031614610b7557610b7582826124d0565b61225d8383612514565b61226a6000848484612286565b610b755760405162461bcd60e51b81526004016109c190612ee3565b60006001600160a01b0384163b1561237957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906122ca903390899088908890600401612f73565b6020604051808303816000875af1925050508015612305575060408051601f3d908101601f1916820190925261230291810190612fb0565b60015b61235f573d808015612333576040519150601f19603f3d011682016040523d82523d6000602084013e612338565b606091505b5080516123575760405162461bcd60e51b81526004016109c190612ee3565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611d7c565b506001949350505050565b600060016123918461119c565b61239b9190612ecc565b6000838152600760205260409020549091508082146123ee576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061243390600190612ecc565b6000838152600960205260408120546008805493945090928490811061245b5761245b612d0c565b90600052602060002001549050806008838154811061247c5761247c612d0c565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806124b4576124b4612fcd565b6001900381819060005260206000200160009055905550505050565b60006124db8361119c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661256a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109c1565b6000818152600260205260409020546001600160a01b0316156125cf5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109c1565b6125db6000838361219b565b6001600160a01b0382166000908152600360205260408120805460019290612604908490612d22565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461266e90612b97565b90600052602060002090601f01602090048101928261269057600085556126d6565b82601f106126a957805160ff19168380011785556126d6565b828001600101855582156126d6579182015b828111156126d65782518255916020019190600101906126bb565b506126e29291506126e6565b5090565b5b808211156126e257600081556001016126e7565b6001600160e01b031981168114611ab857600080fd5b60006020828403121561272357600080fd5b813561272e816126fb565b9392505050565b60005b83811015612750578181015183820152602001612738565b838111156118565750506000910152565b60008151808452612779816020860160208601612735565b601f01601f19169290920160200192915050565b60208152600061272e6020830184612761565b6000602082840312156127b257600080fd5b5035919050565b80356001600160a01b038116811461199e57600080fd5b600080604083850312156127e357600080fd5b6127ec836127b9565b946020939093013593505050565b803561ffff8116811461199e57600080fd5b60006020828403121561281e57600080fd5b61272e826127fa565b60006020828403121561283957600080fd5b813567ffffffffffffffff8116811461272e57600080fd5b60008060006060848603121561286657600080fd5b61286f846127b9565b925061287d602085016127b9565b9150604084013590509250925092565b600080604083850312156128a057600080fd5b6128a9836127b9565b91506128b7602084016127fa565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128ff576128ff6128c0565b604052919050565b600067ffffffffffffffff831115612921576129216128c0565b612934601f8401601f19166020016128d6565b905082815283838301111561294857600080fd5b828260208301376000602084830101529392505050565b60006020828403121561297157600080fd5b813567ffffffffffffffff81111561298857600080fd5b8201601f8101841361299957600080fd5b611d7c84823560208401612907565b6000602082840312156129ba57600080fd5b61272e826127b9565b600080604083850312156129d657600080fd5b50508035926020909101359150565b600080604083850312156129f857600080fd5b612a01836127b9565b915060208301358015158114612a1657600080fd5b809150509250929050565b60008060008060808587031215612a3757600080fd5b612a40856127b9565b9350612a4e602086016127b9565b925060408501359150606085013567ffffffffffffffff811115612a7157600080fd5b8501601f81018713612a8257600080fd5b612a9187823560208401612907565b91505092959194509250565b600060208284031215612aaf57600080fd5b813560ff8116811461272e57600080fd5b60008060408385031215612ad357600080fd5b612adc836127b9565b91506128b7602084016127b9565b60006020808385031215612afd57600080fd5b823567ffffffffffffffff80821115612b1557600080fd5b818501915085601f830112612b2957600080fd5b813581811115612b3b57612b3b6128c0565b8060051b9150612b4c8483016128d6565b8181529183018401918481019088841115612b6657600080fd5b938501935b83851015612b8b57612b7c856127b9565b82529385019390850190612b6b565b98975050505050505050565b600181811c90821680612bab57607f821691505b60208210811415612bcc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600061ffff808316818516808303821115612c8b57612c8b612c58565b01949350505050565b60208082526035908201527f416d6f756e742065786365656473206d6178696d756d20737570706c79206f66604082015274102237b735b99034b7103a3434b990383430b9b29760591b606082015260800190565b600061ffff83811690831681811015612d0457612d04612c58565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60008219821115612d3557612d35612c58565b500190565b60208082526027908201527f416d6f756e742065786365656473206d6178696d756d20737570706c79206f66604082015266102237b735b99760c91b606082015260800190565b6020808252602e908201527f416d6f756e7420657863656564732063757272656e74206d6178696d756d204460408201526d37b735b9903832b91036b4b73a1760911b606082015260800190565b6000816000190483118215151615612de957612de9612c58565b500290565b60008151612e00818560208601612735565b9290920192915050565b600080845481600182811c915080831680612e2657607f831692505b6020808410821415612e4657634e487b7160e01b86526022600452602486fd5b818015612e5a5760018114612e6b57612e98565b60ff19861689528489019650612e98565b60008b81526020902060005b86811015612e905781548b820152908501908301612e77565b505084890196505b505050505050612ea88185612dee565b95945050505050565b6000600019821415612ec557612ec5612c58565b5060010190565b600082821015612ede57612ede612c58565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612f5a57612f5a612f35565b500490565b600082612f6e57612f6e612f35565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612fa690830184612761565b9695505050505050565b600060208284031215612fc257600080fd5b815161272e816126fb565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f6d76bbcfa2fe686011fee0213791627d41923f3a4f4f6b4f896e8a57e233f8764736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000006bdc3b29a47bd686fc991cab14d4ab4f0f504174000000000000000000000000000000000000000000000000000000000000000d446567656e20446f6e6b657973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005444f4e4b53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d61534d4d6f456267673333424e6a6d646a41694734686675657244777267397031416236764554675335563800000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102935760003560e01c806370a082311161015a578063b88d4fde116100c1578063da1b9e081161007a578063da1b9e08146107fb578063e985e9c51461081b578063f2fde38b14610864578063f73b554114610884578063f7c086ef146108a4578063fb425176146108c457600080fd5b8063b88d4fde14610737578063c87b56dd14610757578063cb6f238d14610777578063ce75345b14610797578063d1239730146107ad578063d34b51c5146107ce57600080fd5b80639b19251a116101135780639b19251a14610664578063a0712d6814610694578063a22cb465146106a7578063a7f93ebd146106c7578063a80a1fd114610702578063b1c9fe6e1461071757600080fd5b806370a08231146105c9578063715018a6146105e9578063868ff4a2146105fe5780638da5cb5b1461061157806391d7c2831461062f57806395d89b411461064f57600080fd5b80632f745c59116101fe57806352390773116101b7578063523907731461051357806355f804b31461053357806361f5baeb146105535780636352211e1461056857806364e39b87146105885780636caede3d146105a857600080fd5b80632f745c591461046957806332b9537214610489578063388a50451461049e57806342842e0e146104be5780634311de8f146104de5780634f6ccce7146104f357600080fd5b806311ef5ab21161025057806311ef5ab21461039557806318160ddd146103ca5780631866ea8d146103e95780632194f3a214610409578063229c20481461042957806323b872dd1461044957600080fd5b806301ffc9a71461029857806306fdde03146102cd57806307db498b146102ef578063081812fc14610311578063095ea7b3146103495780630ed62b0214610369575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612711565b6108da565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610905565b6040516102c4919061278d565b3480156102fb57600080fd5b5061030f61030a3660046127a0565b610997565b005b34801561031d57600080fd5b5061033161032c3660046127a0565b6109cf565b6040516001600160a01b0390911681526020016102c4565b34801561035557600080fd5b5061030f6103643660046127d0565b610a64565b34801561037557600080fd5b50600e546103839060ff1681565b60405160ff90911681526020016102c4565b3480156103a157600080fd5b50600e546103b7906301000000900461ffff1681565b60405161ffff90911681526020016102c4565b3480156103d657600080fd5b506008545b6040519081526020016102c4565b3480156103f557600080fd5b5061030f61040436600461280c565b610b7a565b34801561041557600080fd5b50600c54610331906001600160a01b031681565b34801561043557600080fd5b5061030f610444366004612827565b610bad565b34801561045557600080fd5b5061030f610464366004612851565b610c07565b34801561047557600080fd5b506103db6104843660046127d0565b610c38565b34801561049557600080fd5b5061030f610cce565b3480156104aa57600080fd5b5061030f6104b936600461288d565b610d19565b3480156104ca57600080fd5b5061030f6104d9366004612851565b610eb1565b3480156104ea57600080fd5b5061030f610ecc565b3480156104ff57600080fd5b506103db61050e3660046127a0565b610f29565b34801561051f57600080fd5b5061030f61052e36600461280c565b610fbc565b34801561053f57600080fd5b5061030f61054e36600461295f565b611006565b34801561055f57600080fd5b5061030f611043565b34801561057457600080fd5b506103316105833660046127a0565b61108e565b34801561059457600080fd5b5061030f6105a33660046129a8565b611105565b3480156105b457600080fd5b50600c546102b890600160a81b900460ff1681565b3480156105d557600080fd5b506103db6105e43660046129a8565b61119c565b3480156105f557600080fd5b5061030f611223565b61030f61060c3660046127a0565b611259565b34801561061d57600080fd5b50600a546001600160a01b0316610331565b34801561063b57600080fd5b5061030f61064a3660046129c3565b61150a565b34801561065b57600080fd5b506102e26115fb565b34801561067057600080fd5b506102b861067f3660046129a8565b60136020526000908152604090205460ff1681565b61030f6106a23660046127a0565b61160a565b3480156106b357600080fd5b5061030f6106c23660046129e5565b6117b5565b3480156106d357600080fd5b50601554640100000000900467ffffffffffffffff1660405167ffffffffffffffff90911681526020016102c4565b34801561070e57600080fd5b5061030f6117c0565b34801561072357600080fd5b50600e546103b790610100900461ffff1681565b34801561074357600080fd5b5061030f610752366004612a21565b611824565b34801561076357600080fd5b506102e26107723660046127a0565b61185c565b34801561078357600080fd5b5061030f610792366004612a9d565b6119a3565b3480156107a357600080fd5b506103db600d5481565b3480156107b957600080fd5b50600c546102b890600160a01b900460ff1681565b3480156107da57600080fd5b506103db6107e93660046127a0565b60009081526014602052604090205490565b34801561080757600080fd5b5061030f61081636600461295f565b6119e3565b34801561082757600080fd5b506102b8610836366004612ac0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561087057600080fd5b5061030f61087f3660046129a8565b611a20565b34801561089057600080fd5b5061030f61089f366004612aea565b611abb565b3480156108b057600080fd5b5061030f6108bf36600461280c565b611b87565b3480156108d057600080fd5b506103db600f5481565b60006001600160e01b0319821663780e9d6360e01b14806108ff57506108ff82611bcf565b92915050565b60606000805461091490612b97565b80601f016020809104026020016040519081016040528092919081815260200182805461094090612b97565b801561098d5780601f106109625761010080835404028352916020019161098d565b820191906000526020600020905b81548152906001019060200180831161097057829003601f168201915b5050505050905090565b600a546001600160a01b031633146109ca5760405162461bcd60e51b81526004016109c190612bd2565b60405180910390fd5b600f55565b6000818152600260205260408120546001600160a01b0316610a485760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109c1565b506000908152600460205260409020546001600160a01b031690565b6000610a6f8261108e565b9050806001600160a01b0316836001600160a01b03161415610add5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109c1565b336001600160a01b0382161480610af95750610af98133610836565b610b6b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109c1565b610b758383611c1f565b505050565b600a546001600160a01b03163314610ba45760405162461bcd60e51b81526004016109c190612bd2565b61ffff16600d55565b600a546001600160a01b03163314610bd75760405162461bcd60e51b81526004016109c190612bd2565b6015805467ffffffffffffffff909216640100000000026bffffffffffffffff0000000019909216919091179055565b610c113382611c8d565b610c2d5760405162461bcd60e51b81526004016109c190612c07565b610b75838383611d84565b6000610c438361119c565b8210610ca55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016109c1565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610cf85760405162461bcd60e51b81526004016109c190612bd2565b600c805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600a546001600160a01b03163314610d435760405162461bcd60e51b81526004016109c190612bd2565b6001600160a01b038216610d8e5760405162461bcd60e51b81526020600482015260126024820152712d32b9379030b2323932b9b99032b93937b960711b60448201526064016109c1565b60155461ffff6201000090910481169082161115610dee5760405162461bcd60e51b815260206004820152601d60248201527f4578636565647320726573657276656420646f6e6b7320737570706c7900000060448201526064016109c1565b600e5460155461ffff610100909204821691610e0c91849116612c6e565b61ffff161115610e2e5760405162461bcd60e51b81526004016109c190612c94565b60155461ffff1660005b8261ffff168160ff161015610e6357610e5b848380600101945061ffff16611f2f565b600101610e38565b506015805461ffff191661ffff83811691909117808355849291600291610e9291859162010000900416612ce9565b92506101000a81548161ffff021916908361ffff160217905550505050565b610b7583838360405180602001604052806000815250611824565b600a546001600160a01b03163314610ef65760405162461bcd60e51b81526004016109c190612bd2565b6040514790339082156108fc029083906000818181858888f19350505050158015610f25573d6000803e3d6000fd5b5050565b6000610f3460085490565b8210610f975760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109c1565b60088281548110610faa57610faa612d0c565b90600052602060002001549050919050565b600a546001600160a01b03163314610fe65760405162461bcd60e51b81526004016109c190612bd2565b6015805461ffff909216620100000263ffff000019909216919091179055565b600a546001600160a01b031633146110305760405162461bcd60e51b81526004016109c190612bd2565b8051610f25906011906020840190612662565b600a546001600160a01b0316331461106d5760405162461bcd60e51b81526004016109c190612bd2565b600c805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6000818152600260205260408120546001600160a01b0316806108ff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109c1565b600a546001600160a01b0316331461112f5760405162461bcd60e51b81526004016109c190612bd2565b6001600160a01b03811661117a5760405162461bcd60e51b81526020600482015260126024820152712d32b9379030b2323932b9b99032b93937b960711b60448201526064016109c1565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382166112075760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109c1565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461124d5760405162461bcd60e51b81526004016109c190612bd2565b6112576000611f49565b565b600c54600160a81b900460ff166112b25760405162461bcd60e51b815260206004820152601e60248201527f57686974656c697374204d696e74696e672069732064697361626c65642e000060448201526064016109c1565b3360009081526013602052604090205460ff1615156001146113165760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792077686974656c6973742063616e206d696e7400000000000000000060448201526064016109c1565b600e5460155461ffff61010090920482169161133491849116612d22565b11156113525760405162461bcd60e51b81526004016109c190612c94565b601554600e546113769161ffff620100009091048116916301000000900416612ce9565b60155461ffff9182169161138c91849116612d22565b11156113aa5760405162461bcd60e51b81526004016109c190612d3a565b600d54816113b73361119c565b6113c19190612d22565b11156114295760405162461bcd60e51b815260206004820152603160248201527f416d6f756e7420657863656564732063757272656e74206d6178696d756d206d60448201527034b73a39903832b91030b1b1b7bab73a1760791b60648201526084016109c1565b600e5460ff1681111561144e5760405162461bcd60e51b81526004016109c190612d81565b6015543490611470908390640100000000900467ffffffffffffffff16612dcf565b11156114be5760405162461bcd60e51b815260206004820181905260248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563742e60448201526064016109c1565b60155461ffff1660005b828161ffff1610156114f0576114e8338380600101945061ffff16611f2f565b6001016114c8565b506015805461ffff191661ffff9290921691909117905550565b33801580159061153e5750600a546001600160a01b038281169116148061153e5750600b546001600160a01b038281169116145b61154757600080fd5b6000838152600260205260409020546001600160a01b03166115a35760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109c1565b60008381526014602090815260409182902084905581513381529081018590529081018390527fb10b3625df7286db8dccbbe246db7ca30a7cb38626be90ba222cbf01339eeeba9060600160405180910390a1505050565b60606001805461091490612b97565b600c54600160a01b900460ff1661165a5760405162461bcd60e51b815260206004820152601460248201527326b4b73a34b7339034b9903234b9b0b13632b21760611b60448201526064016109c1565b601554600e5461167e9161ffff620100009091048116916301000000900416612ce9565b60155461ffff9182169161169491849116612d22565b11156116b25760405162461bcd60e51b81526004016109c190612d3a565b600e5460155461ffff6101009092048216916116d091849116612d22565b11156116ee5760405162461bcd60e51b81526004016109c190612c94565b600e5460ff168111156117135760405162461bcd60e51b81526004016109c190612d81565b6015543490611735908390640100000000900467ffffffffffffffff16612dcf565b11156117835760405162461bcd60e51b815260206004820181905260248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563742e60448201526064016109c1565b60155461ffff1660005b828161ffff1610156114f0576117ad338380600101945061ffff16611f2f565b60010161178d565b610f25338383611f9b565b600a546001600160a01b031633146117ea5760405162461bcd60e51b81526004016109c190612bd2565b600c5460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610f25573d6000803e3d6000fd5b61182e3383611c8d565b61184a5760405162461bcd60e51b81526004016109c190612c07565b6118568484848461206a565b50505050565b6000818152600260205260409020546060906001600160a01b03166118bb5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109c1565b601180546118c890612b97565b1515905061196257601080546118dd90612b97565b80601f016020809104026020016040519081016040528092919081815260200182805461190990612b97565b80156119565780601f1061192b57610100808354040283529160200191611956565b820191906000526020600020905b81548152906001019060200180831161193957829003601f168201915b50505050509050919050565b6011611977611972846001612d22565b61209d565b604051602001611988929190612e0a565b6040516020818303038152906040529050919050565b919050565b600a546001600160a01b031633146119cd5760405162461bcd60e51b81526004016109c190612bd2565b600e805460ff191660ff92909216919091179055565b600a546001600160a01b03163314611a0d5760405162461bcd60e51b81526004016109c190612bd2565b8051610f25906010906020840190612662565b600a546001600160a01b03163314611a4a5760405162461bcd60e51b81526004016109c190612bd2565b6001600160a01b038116611aaf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109c1565b611ab881611f49565b50565b600a546001600160a01b03163314611ae55760405162461bcd60e51b81526004016109c190612bd2565b60005b8151811015610f25576000828281518110611b0557611b05612d0c565b6020908102919091018101516001600160a01b0381166000908152601390925260409091205490915060ff161515600114801590611b4b57506001600160a01b03811615155b15611b74576001600160a01b0381166000908152601360205260409020805460ff191660011790555b5080611b7f81612eb1565b915050611ae8565b600a546001600160a01b03163314611bb15760405162461bcd60e51b81526004016109c190612bd2565b600e805461ffff9092166101000262ffff0019909216919091179055565b60006001600160e01b031982166380ac58cd60e01b1480611c0057506001600160e01b03198216635b5e139f60e01b145b806108ff57506301ffc9a760e01b6001600160e01b03198316146108ff565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c548261108e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611d065760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109c1565b6000611d118361108e565b9050806001600160a01b0316846001600160a01b03161480611d4c5750836001600160a01b0316611d41846109cf565b6001600160a01b0316145b80611d7c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611d978261108e565b6001600160a01b031614611dff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109c1565b6001600160a01b038216611e615760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109c1565b611e6c83838361219b565b611e77600082611c1f565b6001600160a01b0383166000908152600360205260408120805460019290611ea0908490612ecc565b90915550506001600160a01b0382166000908152600360205260408120805460019290611ece908490612d22565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610f25828260405180602001604052806000815250612253565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611ffd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109c1565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612075848484611d84565b61208184848484612286565b6118565760405162461bcd60e51b81526004016109c190612ee3565b6060816120c15750506040805180820190915260018152600360fc1b602082015290565b8160005b81156120eb57806120d581612eb1565b91506120e49050600a83612f4b565b91506120c5565b60008167ffffffffffffffff811115612106576121066128c0565b6040519080825280601f01601f191660200182016040528015612130576020820181803683370190505b5090505b8415611d7c57612145600183612ecc565b9150612152600a86612f5f565b61215d906030612d22565b60f81b81838151811061217257612172612d0c565b60200101906001600160f81b031916908160001a905350612194600a86612f4b565b9450612134565b6001600160a01b0383166121f6576121f181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612219565b816001600160a01b0316836001600160a01b031614612219576122198382612384565b6001600160a01b03821661223057610b7581612421565b826001600160a01b0316826001600160a01b031614610b7557610b7582826124d0565b61225d8383612514565b61226a6000848484612286565b610b755760405162461bcd60e51b81526004016109c190612ee3565b60006001600160a01b0384163b1561237957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906122ca903390899088908890600401612f73565b6020604051808303816000875af1925050508015612305575060408051601f3d908101601f1916820190925261230291810190612fb0565b60015b61235f573d808015612333576040519150601f19603f3d011682016040523d82523d6000602084013e612338565b606091505b5080516123575760405162461bcd60e51b81526004016109c190612ee3565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611d7c565b506001949350505050565b600060016123918461119c565b61239b9190612ecc565b6000838152600760205260409020549091508082146123ee576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061243390600190612ecc565b6000838152600960205260408120546008805493945090928490811061245b5761245b612d0c565b90600052602060002001549050806008838154811061247c5761247c612d0c565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806124b4576124b4612fcd565b6001900381819060005260206000200160009055905550505050565b60006124db8361119c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661256a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109c1565b6000818152600260205260409020546001600160a01b0316156125cf5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109c1565b6125db6000838361219b565b6001600160a01b0382166000908152600360205260408120805460019290612604908490612d22565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461266e90612b97565b90600052602060002090601f01602090048101928261269057600085556126d6565b82601f106126a957805160ff19168380011785556126d6565b828001600101855582156126d6579182015b828111156126d65782518255916020019190600101906126bb565b506126e29291506126e6565b5090565b5b808211156126e257600081556001016126e7565b6001600160e01b031981168114611ab857600080fd5b60006020828403121561272357600080fd5b813561272e816126fb565b9392505050565b60005b83811015612750578181015183820152602001612738565b838111156118565750506000910152565b60008151808452612779816020860160208601612735565b601f01601f19169290920160200192915050565b60208152600061272e6020830184612761565b6000602082840312156127b257600080fd5b5035919050565b80356001600160a01b038116811461199e57600080fd5b600080604083850312156127e357600080fd5b6127ec836127b9565b946020939093013593505050565b803561ffff8116811461199e57600080fd5b60006020828403121561281e57600080fd5b61272e826127fa565b60006020828403121561283957600080fd5b813567ffffffffffffffff8116811461272e57600080fd5b60008060006060848603121561286657600080fd5b61286f846127b9565b925061287d602085016127b9565b9150604084013590509250925092565b600080604083850312156128a057600080fd5b6128a9836127b9565b91506128b7602084016127fa565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128ff576128ff6128c0565b604052919050565b600067ffffffffffffffff831115612921576129216128c0565b612934601f8401601f19166020016128d6565b905082815283838301111561294857600080fd5b828260208301376000602084830101529392505050565b60006020828403121561297157600080fd5b813567ffffffffffffffff81111561298857600080fd5b8201601f8101841361299957600080fd5b611d7c84823560208401612907565b6000602082840312156129ba57600080fd5b61272e826127b9565b600080604083850312156129d657600080fd5b50508035926020909101359150565b600080604083850312156129f857600080fd5b612a01836127b9565b915060208301358015158114612a1657600080fd5b809150509250929050565b60008060008060808587031215612a3757600080fd5b612a40856127b9565b9350612a4e602086016127b9565b925060408501359150606085013567ffffffffffffffff811115612a7157600080fd5b8501601f81018713612a8257600080fd5b612a9187823560208401612907565b91505092959194509250565b600060208284031215612aaf57600080fd5b813560ff8116811461272e57600080fd5b60008060408385031215612ad357600080fd5b612adc836127b9565b91506128b7602084016127b9565b60006020808385031215612afd57600080fd5b823567ffffffffffffffff80821115612b1557600080fd5b818501915085601f830112612b2957600080fd5b813581811115612b3b57612b3b6128c0565b8060051b9150612b4c8483016128d6565b8181529183018401918481019088841115612b6657600080fd5b938501935b83851015612b8b57612b7c856127b9565b82529385019390850190612b6b565b98975050505050505050565b600181811c90821680612bab57607f821691505b60208210811415612bcc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600061ffff808316818516808303821115612c8b57612c8b612c58565b01949350505050565b60208082526035908201527f416d6f756e742065786365656473206d6178696d756d20737570706c79206f66604082015274102237b735b99034b7103a3434b990383430b9b29760591b606082015260800190565b600061ffff83811690831681811015612d0457612d04612c58565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60008219821115612d3557612d35612c58565b500190565b60208082526027908201527f416d6f756e742065786365656473206d6178696d756d20737570706c79206f66604082015266102237b735b99760c91b606082015260800190565b6020808252602e908201527f416d6f756e7420657863656564732063757272656e74206d6178696d756d204460408201526d37b735b9903832b91036b4b73a1760911b606082015260800190565b6000816000190483118215151615612de957612de9612c58565b500290565b60008151612e00818560208601612735565b9290920192915050565b600080845481600182811c915080831680612e2657607f831692505b6020808410821415612e4657634e487b7160e01b86526022600452602486fd5b818015612e5a5760018114612e6b57612e98565b60ff19861689528489019650612e98565b60008b81526020902060005b86811015612e905781548b820152908501908301612e77565b505084890196505b505050505050612ea88185612dee565b95945050505050565b6000600019821415612ec557612ec5612c58565b5060010190565b600082821015612ede57612ede612c58565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612f5a57612f5a612f35565b500490565b600082612f6e57612f6e612f35565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612fa690830184612761565b9695505050505050565b600060208284031215612fc257600080fd5b815161272e816126fb565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f6d76bbcfa2fe686011fee0213791627d41923f3a4f4f6b4f896e8a57e233f8764736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000006bdc3b29a47bd686fc991cab14d4ab4f0f504174000000000000000000000000000000000000000000000000000000000000000d446567656e20446f6e6b657973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005444f4e4b53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d61534d4d6f456267673333424e6a6d646a41694734686675657244777267397031416236764554675335563800000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Degen Donkeys
Arg [1] : symbol (string): DONKS
Arg [2] : _defaultURI (string): https://gateway.pinata.cloud/ipfs/QmaSMMoEbgg33BNjmdjAiG4hfuerDwrg9p1Ab6vETgS5V8
Arg [3] : _fundsWallet (address): 0x6bDc3B29a47Bd686fc991caB14D4aB4f0F504174
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000006bdc3b29a47bd686fc991cab14d4ab4f0f504174
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [5] : 446567656e20446f6e6b65797300000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 444f4e4b53000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [9] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [10] : 732f516d61534d4d6f456267673333424e6a6d646a4169473468667565724477
Arg [11] : 7267397031416236764554675335563800000000000000000000000000000000
Deployed Bytecode Sourcemap
46472:9004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37717:224;;;;;;;;;;-1:-1:-1;37717:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;37717:224:0;;;;;;;;22139:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;54346:104::-;;;;;;;;;;-1:-1:-1;54346:104:0;;;;;:::i;:::-;;:::i;:::-;;23698:221;;;;;;;;;;-1:-1:-1;23698:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1714:32:1;;;1696:51;;1684:2;1669:18;23698:221:0;1550:203:1;23221:411:0;;;;;;;;;;-1:-1:-1;23221:411:0;;;;;:::i;:::-;;:::i;46888:25::-;;;;;;;;;;-1:-1:-1;46888:25:0;;;;;;;;;;;2367:4:1;2355:17;;;2337:36;;2325:2;2310:18;46888:25:0;2195:184:1;46952:29:0;;;;;;;;;;-1:-1:-1;46952:29:0;;;;;;;;;;;;;;2558:6:1;2546:19;;;2528:38;;2516:2;2501:18;46952:29:0;2384:188:1;38357:113:0;;;;;;;;;;-1:-1:-1;38445:10:0;:17;38357:113;;;2723:25:1;;;2711:2;2696:18;38357:113:0;2577:177:1;52396:125:0;;;;;;;;;;-1:-1:-1;52396:125:0;;;;;:::i;:::-;;:::i;46728:26::-;;;;;;;;;;-1:-1:-1;46728:26:0;;;;-1:-1:-1;;;;;46728:26:0;;;53113:92;;;;;;;;;;-1:-1:-1;53113:92:0;;;;;:::i;:::-;;:::i;24448:339::-;;;;;;;;;;-1:-1:-1;24448:339:0;;;;;:::i;:::-;;:::i;38025:256::-;;;;;;;;;;-1:-1:-1;38025:256:0;;;;;:::i;:::-;;:::i;52118:118::-;;;;;;;;;;;;;:::i;48516:622::-;;;;;;;;;;-1:-1:-1;48516:622:0;;;;;:::i;:::-;;:::i;24858:185::-;;;;;;;;;;-1:-1:-1;24858:185:0;;;;;:::i;:::-;;:::i;47980:148::-;;;;;;;;;;;;;:::i;38547:233::-;;;;;;;;;;-1:-1:-1;38547:233:0;;;;;:::i;:::-;;:::i;52880:99::-;;;;;;;;;;-1:-1:-1;52880:99:0;;;;;:::i;:::-;;:::i;54819:98::-;;;;;;;;;;-1:-1:-1;54819:98:0;;;;;:::i;:::-;;:::i;54515:91::-;;;;;;;;;;;;;:::i;21833:239::-;;;;;;;;;;-1:-1:-1;21833:239:0;;;;;:::i;:::-;;:::i;53358:176::-;;;;;;;;;;-1:-1:-1;53358:176:0;;;;;:::i;:::-;;:::i;46799:40::-;;;;;;;;;;-1:-1:-1;46799:40:0;;;;-1:-1:-1;;;46799:40:0;;;;;;21563:208;;;;;;;;;;-1:-1:-1;21563:208:0;;;;;:::i;:::-;;:::i;45576:103::-;;;;;;;;;;;;;:::i;50873:1133::-;;;;;;:::i;:::-;;:::i;44925:87::-;;;;;;;;;;-1:-1:-1;44998:6:0;;-1:-1:-1;;;;;44998:6:0;44925:87;;53701:253;;;;;;;;;;-1:-1:-1;53701:253:0;;;;;:::i;:::-;;:::i;22308:104::-;;;;;;;;;;;;;:::i;47110:42::-;;;;;;;;;;-1:-1:-1;47110:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;49323:864;;;;;;:::i;:::-;;:::i;23991:155::-;;;;;;;;;;-1:-1:-1;23991:155:0;;;;;:::i;:::-;;:::i;54015:89::-;;;;;;;;;;-1:-1:-1;54086:4:0;:10;;;;;;54015:89;;6247:18:1;6235:31;;;6217:50;;6205:2;6190:18;54015:89:0;6073:200:1;48204:149:0;;;;;;;;;;;;;:::i;46920:25::-;;;;;;;;;;-1:-1:-1;46920:25:0;;;;;;;;;;;25114:328;;;;;;;;;;-1:-1:-1;25114:328:0;;;;;:::i;:::-;;:::i;55094:377::-;;;;;;;;;;-1:-1:-1;55094:377:0;;;;;:::i;:::-;;:::i;54673:90::-;;;;;;;;;;-1:-1:-1;54673:90:0;;;;;:::i;:::-;;:::i;46846:35::-;;;;;;;;;;;;;;;;46761:31;;;;;;;;;;-1:-1:-1;46761:31:0;;;;-1:-1:-1;;;46761:31:0;;;;;;54174:103;;;;;;;;;;-1:-1:-1;54174:103:0;;;;;:::i;:::-;54228:7;54255:14;;;:10;:14;;;;;;;54174:103;54976:110;;;;;;;;;;-1:-1:-1;54976:110:0;;;;;:::i;:::-;;:::i;24217:164::-;;;;;;;;;;-1:-1:-1;24217:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24338:25:0;;;24314:4;24338:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24217:164;45834:201;;;;;;;;;;-1:-1:-1;45834:201:0;;;;;:::i;:::-;;:::i;50391:300::-;;;;;;;;;;-1:-1:-1;50391:300:0;;;;;:::i;:::-;;:::i;52654:83::-;;;;;;;;;;-1:-1:-1;52654:83:0;;;;;:::i;:::-;;:::i;46988:25::-;;;;;;;;;;;;;;;;37717:224;37819:4;-1:-1:-1;;;;;;37843:50:0;;-1:-1:-1;;;37843:50:0;;:90;;;37897:36;37921:11;37897:23;:36::i;:::-;37836:97;37717:224;-1:-1:-1;;37717:224:0:o;22139:100::-;22193:13;22226:5;22219:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22139:100;:::o;54346:104::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;;;;;;;;;54418:10:::1;:24:::0;54346:104::o;23698:221::-;23774:7;27041:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27041:16:0;23794:73;;;;-1:-1:-1;;;23794:73:0;;9394:2:1;23794:73:0;;;9376:21:1;9433:2;9413:18;;;9406:30;9472:34;9452:18;;;9445:62;-1:-1:-1;;;9523:18:1;;;9516:42;9575:19;;23794:73:0;9192:408:1;23794:73:0;-1:-1:-1;23887:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23887:24:0;;23698:221::o;23221:411::-;23302:13;23318:23;23333:7;23318:14;:23::i;:::-;23302:39;;23366:5;-1:-1:-1;;;;;23360:11:0;:2;-1:-1:-1;;;;;23360:11:0;;;23352:57;;;;-1:-1:-1;;;23352:57:0;;9807:2:1;23352:57:0;;;9789:21:1;9846:2;9826:18;;;9819:30;9885:34;9865:18;;;9858:62;-1:-1:-1;;;9936:18:1;;;9929:31;9977:19;;23352:57:0;9605:397:1;23352:57:0;16521:10;-1:-1:-1;;;;;23444:21:0;;;;:62;;-1:-1:-1;23469:37:0;23486:5;16521:10;24217:164;:::i;23469:37::-;23422:168;;;;-1:-1:-1;;;23422:168:0;;10209:2:1;23422:168:0;;;10191:21:1;10248:2;10228:18;;;10221:30;10287:34;10267:18;;;10260:62;10358:26;10338:18;;;10331:54;10402:19;;23422:168:0;10007:420:1;23422:168:0;23603:21;23612:2;23616:7;23603:8;:21::i;:::-;23291:341;23221:411;;:::o;52396:125::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;52478:35:::1;;:19;:35:::0;52396:125::o;53113:92::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;53176:4:::1;:21:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;53176:21:0;;::::1;::::0;;;::::1;::::0;;53113:92::o;24448:339::-;24643:41;16521:10;24676:7;24643:18;:41::i;:::-;24635:103;;;;-1:-1:-1;;;24635:103:0;;;;;;;:::i;:::-;24751:28;24761:4;24767:2;24771:7;24751:9;:28::i;38025:256::-;38122:7;38158:23;38175:5;38158:16;:23::i;:::-;38150:5;:31;38142:87;;;;-1:-1:-1;;;38142:87:0;;11052:2:1;38142:87:0;;;11034:21:1;11091:2;11071:18;;;11064:30;11130:34;11110:18;;;11103:62;-1:-1:-1;;;11181:18:1;;;11174:41;11232:19;;38142:87:0;10850:407:1;38142:87:0;-1:-1:-1;;;;;;38247:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38025:256::o;52118:118::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;52208:20:::1;::::0;;-1:-1:-1;;;;52184:44:0;::::1;-1:-1:-1::0;;;52208:20:0;;;::::1;;;52207:21;52184:44:::0;;::::1;;::::0;;52118:118::o;48516:622::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48628:18:0;::::1;48619:50;;;::::0;-1:-1:-1;;;48619:50:0;;11464:2:1;48619:50:0::1;::::0;::::1;11446:21:1::0;11503:2;11483:18;;;11476:30;-1:-1:-1;;;11522:18:1;;;11515:48;11580:18;;48619:50:0::1;11262:342:1::0;48619:50:0::1;48700:4;:14:::0;::::1;::::0;;;::::1;::::0;::::1;48689:25:::0;;::::1;;;48680:68;;;::::0;-1:-1:-1;;;48680:68:0;;11811:2:1;48680:68:0::1;::::0;::::1;11793:21:1::0;11850:2;11830:18;;;11823:30;11889:31;11869:18;;;11862:59;11938:18;;48680:68:0::1;11609:353:1::0;48680:68:0::1;48804:5;::::0;48779:4:::1;:11:::0;48804:5:::1;;::::0;;::::1;::::0;::::1;::::0;48779:21:::1;::::0;48793:7;;48779:11:::1;:21;:::i;:::-;:30;;;;48759:129;;;;-1:-1:-1::0;;;48759:129:0::1;;;;;;;:::i;:::-;48917:4;:11:::0;::::1;;48901:13;48962:91;48984:7;48980:11;;:1;:11;;;48962:91;;;49015:24;49025:3;49030:8;;;;;;49015:24;;:9;:24::i;:::-;48993:3;;48962:91;;;-1:-1:-1::0;49074:4:0::1;:20:::0;;-1:-1:-1;;49074:20:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;;49123:7;;49074:4;49105:14:::1;::::0;:25:::1;::::0;49123:7;;49105:25;;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48608:530;48516:622:::0;;:::o;24858:185::-;24996:39;25013:4;25019:2;25023:7;24996:39;;;;;;;;;;;;:16;:39::i;47980:148::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;48083:37:::1;::::0;48051:21:::1;::::0;48091:10:::1;::::0;48083:37;::::1;;;::::0;48051:21;;48033:15:::1;48083:37:::0;48033:15;48083:37;48051:21;48091:10;48083:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;48022:106;47980:148::o:0;38547:233::-;38622:7;38658:30;38445:10;:17;;38357:113;38658:30;38650:5;:38;38642:95;;;;-1:-1:-1;;;38642:95:0;;13174:2:1;38642:95:0;;;13156:21:1;13213:2;13193:18;;;13186:30;13252:34;13232:18;;;13225:62;-1:-1:-1;;;13303:18:1;;;13296:42;13355:19;;38642:95:0;12972:408:1;38642:95:0;38755:10;38766:5;38755:17;;;;;;;;:::i;:::-;;;;;;;;;38748:24;;38547:233;;;:::o;52880:99::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;52946:4:::1;:25:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;52946:25:0;;::::1;::::0;;;::::1;::::0;;52880:99::o;54819:98::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;54891:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;54515:91::-:0;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;54587:11:::1;::::0;;-1:-1:-1;;;;54572:26:0;::::1;-1:-1:-1::0;;;54587:11:0;;;::::1;;;54586:12;54572:26:::0;;::::1;;::::0;;54515:91::o;21833:239::-;21905:7;21941:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21941:16:0;21976:19;21968:73;;;;-1:-1:-1;;;21968:73:0;;13719:2:1;21968:73:0;;;13701:21:1;13758:2;13738:18;;;13731:30;13797:34;13777:18;;;13770:62;-1:-1:-1;;;13848:18:1;;;13841:39;13897:19;;21968:73:0;13517:405:1;53358:176:0;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53440:26:0;::::1;53432:57;;;::::0;-1:-1:-1;;;53432:57:0;;11464:2:1;53432:57:0::1;::::0;::::1;11446:21:1::0;11503:2;11483:18;;;11476:30;-1:-1:-1;;;11522:18:1;;;11515:48;11580:18;;53432:57:0::1;11262:342:1::0;53432:57:0::1;53500:11;:26:::0;;-1:-1:-1;;;;;;53500:26:0::1;-1:-1:-1::0;;;;;53500:26:0;;;::::1;::::0;;;::::1;::::0;;53358:176::o;21563:208::-;21635:7;-1:-1:-1;;;;;21663:19:0;;21655:74;;;;-1:-1:-1;;;21655:74:0;;14129:2:1;21655:74:0;;;14111:21:1;14168:2;14148:18;;;14141:30;14207:34;14187:18;;;14180:62;-1:-1:-1;;;14258:18:1;;;14251:40;14308:19;;21655:74:0;13927:406:1;21655:74:0;-1:-1:-1;;;;;;21747:16:0;;;;;:9;:16;;;;;;;21563:208::o;45576:103::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;45641:30:::1;45668:1;45641:18;:30::i;:::-;45576:103::o:0;50873:1133::-;50946:20;;-1:-1:-1;;;50946:20:0;;;;50938:63;;;;-1:-1:-1;;;50938:63:0;;14540:2:1;50938:63:0;;;14522:21:1;14579:2;14559:18;;;14552:30;14618:32;14598:18;;;14591:60;14668:18;;50938:63:0;14338:354:1;50938:63:0;51031:10;51021:21;;;;:9;:21;;;;;;;;:29;;:21;:29;51012:67;;;;-1:-1:-1;;;51012:67:0;;14899:2:1;51012:67:0;;;14881:21:1;14938:2;14918:18;;;14911:30;14977:25;14957:18;;;14950:53;15020:18;;51012:67:0;14697:347:1;51012:67:0;51134:5;;51110:4;:11;51134:5;;;;;;;;51110:20;;51124:6;;51110:11;:20;:::i;:::-;:29;;51090:128;;;;-1:-1:-1;;;51090:128:0;;;;;;;:::i;:::-;51286:4;:14;51275:8;;:25;;51286:14;;;;;;;;51275:8;;;;:25;:::i;:::-;51251:4;:11;:49;;;;;:20;;51265:6;;51251:11;:20;:::i;:::-;:49;;51229:138;;;;-1:-1:-1;;;51229:138:0;;;;;;;:::i;:::-;51434:19;;51424:6;51400:21;51410:10;51400:9;:21::i;:::-;:30;;;;:::i;:::-;:53;;51378:152;;;;-1:-1:-1;;;51378:152:0;;15792:2:1;51378:152:0;;;15774:21:1;15831:2;15811:18;;;15804:30;15870:34;15850:18;;;15843:62;-1:-1:-1;;;15921:18:1;;;15914:47;15978:19;;51378:152:0;15590:413:1;51378:152:0;51573:7;;;;51563:17;;;51541:113;;;;-1:-1:-1;;;51541:113:0;;;;;;;:::i;:::-;51687:4;:10;51710:9;;51687:19;;51700:6;;51687:10;;;;;:19;:::i;:::-;:32;;51665:114;;;;-1:-1:-1;;;51665:114:0;;16798:2:1;51665:114:0;;;16780:21:1;;;16817:18;;;16810:30;16876:34;16856:18;;;16849:62;16928:18;;51665:114:0;16596:356:1;51665:114:0;51808:4;:11;;;51792:13;51855:102;51878:6;51874:1;:10;;;51855:102;;;51910:31;51920:10;51932:8;;;;;;51910:31;;:9;:31::i;:::-;51886:3;;51855:102;;;-1:-1:-1;51978:4:0;:20;;-1:-1:-1;;51978:20:0;;;;;;;;;;;;-1:-1:-1;50873:1133:0:o;53701:253::-;53787:10;47375:20;;;;;:67;;-1:-1:-1;44998:6:0;;-1:-1:-1;;;;;47400:17:0;;;44998:6;;47400:17;;:41;;-1:-1:-1;47431:10:0;;-1:-1:-1;;;;;47421:20:0;;;47431:10;;47421:20;47400:41;47353:100;;;;;;27017:4;27041:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27041:16:0;53815:45:::1;;;::::0;-1:-1:-1;;;53815:45:0;;17159:2:1;53815:45:0::1;::::0;::::1;17141:21:1::0;17198:2;17178:18;;;17171:30;-1:-1:-1;;;17217:18:1;;;17210:51;17278:18;;53815:45:0::1;16957:345:1::0;53815:45:0::1;53871:14;::::0;;;:10:::1;:14;::::0;;;;;;;;:22;;;53909:37;;53924:10:::1;17509:51:1::0;;17576:18;;;17569:34;;;17619:18;;;17612:34;;;53909:37:0::1;::::0;17497:2:1;17482:18;53909:37:0::1;;;;;;;53701:253:::0;;;:::o;22308:104::-;22364:13;22397:7;22390:14;;;;;:::i;49323:864::-;49387:11;;-1:-1:-1;;;49387:11:0;;;;49379:44;;;;-1:-1:-1;;;49379:44:0;;17859:2:1;49379:44:0;;;17841:21:1;17898:2;17878:18;;;17871:30;-1:-1:-1;;;17917:18:1;;;17910:50;17977:18;;49379:44:0;17657:344:1;49379:44:0;49491:4;:14;49480:8;;:25;;49491:14;;;;;;;;49480:8;;;;:25;:::i;:::-;49456:4;:11;:49;;;;;:20;;49470:6;;49456:11;:20;:::i;:::-;:49;;49434:138;;;;-1:-1:-1;;;49434:138:0;;;;;;;:::i;:::-;49627:5;;49603:4;:11;49627:5;;;;;;;;49603:20;;49617:6;;49603:11;:20;:::i;:::-;:29;;49583:128;;;;-1:-1:-1;;;49583:128:0;;;;;;;:::i;:::-;49754:7;;;;49744:17;;;49722:113;;;;-1:-1:-1;;;49722:113:0;;;;;;;:::i;:::-;49868:4;:10;49891:9;;49868:19;;49881:6;;49868:10;;;;;:19;:::i;:::-;:32;;49846:114;;;;-1:-1:-1;;;49846:114:0;;16798:2:1;49846:114:0;;;16780:21:1;;;16817:18;;;16810:30;16876:34;16856:18;;;16849:62;16928:18;;49846:114:0;16596:356:1;49846:114:0;49989:4;:11;;;49973:13;50036:102;50059:6;50055:1;:10;;;50036:102;;;50091:31;50101:10;50113:8;;;;;;50091:31;;:9;:31::i;:::-;50067:3;;50036:102;;23991:155;24086:52;16521:10;24119:8;24129;24086:18;:52::i;48204:149::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;48315:11:::1;::::0;48307:38:::1;::::0;48275:21:::1;::::0;-1:-1:-1;;;;;48315:11:0::1;::::0;48307:38;::::1;;;::::0;48275:21;;48257:15:::1;48307:38:::0;48257:15;48307:38;48275:21;48315:11;48307:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;25114:328:::0;25289:41;16521:10;25322:7;25289:18;:41::i;:::-;25281:103;;;;-1:-1:-1;;;25281:103:0;;;;;;;:::i;:::-;25395:39;25409:4;25415:2;25419:7;25428:5;25395:13;:39::i;:::-;25114:328;;;;:::o;55094:377::-;27017:4;27041:16;;;:7;:16;;;;;;55195:13;;-1:-1:-1;;;;;27041:16:0;55226:50;;;;-1:-1:-1;;;55226:50:0;;17159:2:1;55226:50:0;;;17141:21:1;17198:2;17178:18;;;17171:30;-1:-1:-1;;;17217:18:1;;;17210:51;17278:18;;55226:50:0;16957:345:1;55226:50:0;55299:7;55293:21;;;;;:::i;:::-;:26;55289:175;;-1:-1:-1;55289:175:0;;55343:10;55336:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55094:377;;;:::o;55289:175::-;55417:7;55426:24;55427:11;:7;55437:1;55427:11;:::i;:::-;55426:22;:24::i;:::-;55400:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55386:66;;55094:377;;;:::o;55289:175::-;55094:377;;;:::o;54673:90::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;54737:7:::1;:18:::0;;-1:-1:-1;;54737:18:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;54673:90::o;54976:110::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;55054:24;;::::1;::::0;:10:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;45834:201::-:0;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45923:22:0;::::1;45915:73;;;::::0;-1:-1:-1;;;45915:73:0;;19703:2:1;45915:73:0::1;::::0;::::1;19685:21:1::0;19742:2;19722:18;;;19715:30;19781:34;19761:18;;;19754:62;-1:-1:-1;;;19832:18:1;;;19825:36;19878:19;;45915:73:0::1;19501:402:1::0;45915:73:0::1;45999:28;46018:8;45999:18;:28::i;:::-;45834:201:::0;:::o;50391:300::-;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;50474:6:::1;50470:214;50488:9;:16;50484:1;:20;50470:214;;;50525:12;50540:9;50550:1;50540:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;50570:15:0;::::1;;::::0;;;:9:::1;:15:::0;;;;;;;;50540:12;;-1:-1:-1;50570:15:0::1;;:23;;:15:::0;:23:::1;::::0;::::1;::::0;:45:::1;;-1:-1:-1::0;;;;;;50597:18:0;::::1;::::0;::::1;50570:45;50567:106;;;-1:-1:-1::0;;;;;50635:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:22;;-1:-1:-1;;50635:22:0::1;50653:4;50635:22;::::0;;50567:106:::1;-1:-1:-1::0;50506:3:0;::::1;::::0;::::1;:::i;:::-;;;;50470:214;;52654:83:::0;44998:6;;-1:-1:-1;;;;;44998:6:0;16521:10;45145:23;45137:68;;;;-1:-1:-1;;;45137:68:0;;;;;;;:::i;:::-;52715:5:::1;:14:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;52715:14:0;;::::1;::::0;;;::::1;::::0;;52654:83::o;21194:305::-;21296:4;-1:-1:-1;;;;;;21333:40:0;;-1:-1:-1;;;21333:40:0;;:105;;-1:-1:-1;;;;;;;21390:48:0;;-1:-1:-1;;;21390:48:0;21333:105;:158;;;-1:-1:-1;;;;;;;;;;19749:40:0;;;21455:36;19640:157;30934:174;31009:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31009:29:0;-1:-1:-1;;;;;31009:29:0;;;;;;;;:24;;31063:23;31009:24;31063:14;:23::i;:::-;-1:-1:-1;;;;;31054:46:0;;;;;;;;;;;30934:174;;:::o;27246:348::-;27339:4;27041:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27041:16:0;27356:73;;;;-1:-1:-1;;;27356:73:0;;20250:2:1;27356:73:0;;;20232:21:1;20289:2;20269:18;;;20262:30;20328:34;20308:18;;;20301:62;-1:-1:-1;;;20379:18:1;;;20372:42;20431:19;;27356:73:0;20048:408:1;27356:73:0;27440:13;27456:23;27471:7;27456:14;:23::i;:::-;27440:39;;27509:5;-1:-1:-1;;;;;27498:16:0;:7;-1:-1:-1;;;;;27498:16:0;;:51;;;;27542:7;-1:-1:-1;;;;;27518:31:0;:20;27530:7;27518:11;:20::i;:::-;-1:-1:-1;;;;;27518:31:0;;27498:51;:87;;;-1:-1:-1;;;;;;24338:25:0;;;24314:4;24338:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27553:32;27490:96;27246:348;-1:-1:-1;;;;27246:348:0:o;30238:578::-;30397:4;-1:-1:-1;;;;;30370:31:0;:23;30385:7;30370:14;:23::i;:::-;-1:-1:-1;;;;;30370:31:0;;30362:85;;;;-1:-1:-1;;;30362:85:0;;20663:2:1;30362:85:0;;;20645:21:1;20702:2;20682:18;;;20675:30;20741:34;20721:18;;;20714:62;-1:-1:-1;;;20792:18:1;;;20785:39;20841:19;;30362:85:0;20461:405:1;30362:85:0;-1:-1:-1;;;;;30466:16:0;;30458:65;;;;-1:-1:-1;;;30458:65:0;;21073:2:1;30458:65:0;;;21055:21:1;21112:2;21092:18;;;21085:30;21151:34;21131:18;;;21124:62;-1:-1:-1;;;21202:18:1;;;21195:34;21246:19;;30458:65:0;20871:400:1;30458:65:0;30536:39;30557:4;30563:2;30567:7;30536:20;:39::i;:::-;30640:29;30657:1;30661:7;30640:8;:29::i;:::-;-1:-1:-1;;;;;30682:15:0;;;;;;:9;:15;;;;;:20;;30701:1;;30682:15;:20;;30701:1;;30682:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30713:13:0;;;;;;:9;:13;;;;;:18;;30730:1;;30713:13;:18;;30730:1;;30713:18;:::i;:::-;;;;-1:-1:-1;;30742:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30742:21:0;-1:-1:-1;;;;;30742:21:0;;;;;;;;;30781:27;;30742:16;;30781:27;;;;;;;30238:578;;;:::o;27936:110::-;28012:26;28022:2;28026:7;28012:26;;;;;;;;;;;;:9;:26::i;46195:191::-;46288:6;;;-1:-1:-1;;;;;46305:17:0;;;-1:-1:-1;;;;;;46305:17:0;;;;;;;46338:40;;46288:6;;;46305:17;46288:6;;46338:40;;46269:16;;46338:40;46258:128;46195:191;:::o;31250:315::-;31405:8;-1:-1:-1;;;;;31396:17:0;:5;-1:-1:-1;;;;;31396:17:0;;;31388:55;;;;-1:-1:-1;;;31388:55:0;;21608:2:1;31388:55:0;;;21590:21:1;21647:2;21627:18;;;21620:30;21686:27;21666:18;;;21659:55;21731:18;;31388:55:0;21406:349:1;31388:55:0;-1:-1:-1;;;;;31454:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;31454:46:0;;;;;;;;;;31516:41;;540::1;;;31516::0;;513:18:1;31516:41:0;;;;;;;31250:315;;;:::o;26324:::-;26481:28;26491:4;26497:2;26501:7;26481:9;:28::i;:::-;26528:48;26551:4;26557:2;26561:7;26570:5;26528:22;:48::i;:::-;26520:111;;;;-1:-1:-1;;;26520:111:0;;;;;;;:::i;17018:723::-;17074:13;17295:10;17291:53;;-1:-1:-1;;17322:10:0;;;;;;;;;;;;-1:-1:-1;;;17322:10:0;;;;;17018:723::o;17291:53::-;17369:5;17354:12;17410:78;17417:9;;17410:78;;17443:8;;;;:::i;:::-;;-1:-1:-1;17466:10:0;;-1:-1:-1;17474:2:0;17466:10;;:::i;:::-;;;17410:78;;;17498:19;17530:6;17520:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17520:17:0;;17498:39;;17548:154;17555:10;;17548:154;;17582:11;17592:1;17582:11;;:::i;:::-;;-1:-1:-1;17651:10:0;17659:2;17651:5;:10;:::i;:::-;17638:24;;:2;:24;:::i;:::-;17625:39;;17608:6;17615;17608:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;17608:56:0;;;;;;;;-1:-1:-1;17679:11:0;17688:2;17679:11;;:::i;:::-;;;17548:154;;39393:589;-1:-1:-1;;;;;39599:18:0;;39595:187;;39634:40;39666:7;40809:10;:17;;40782:24;;;;:15;:24;;;;;:44;;;40837:24;;;;;;;;;;;;40705:164;39634:40;39595:187;;;39704:2;-1:-1:-1;;;;;39696:10:0;:4;-1:-1:-1;;;;;39696:10:0;;39692:90;;39723:47;39756:4;39762:7;39723:32;:47::i;:::-;-1:-1:-1;;;;;39796:16:0;;39792:183;;39829:45;39866:7;39829:36;:45::i;39792:183::-;39902:4;-1:-1:-1;;;;;39896:10:0;:2;-1:-1:-1;;;;;39896:10:0;;39892:83;;39923:40;39951:2;39955:7;39923:27;:40::i;28273:321::-;28403:18;28409:2;28413:7;28403:5;:18::i;:::-;28454:54;28485:1;28489:2;28493:7;28502:5;28454:22;:54::i;:::-;28432:154;;;;-1:-1:-1;;;28432:154:0;;;;;;;:::i;32130:799::-;32285:4;-1:-1:-1;;;;;32306:13:0;;8756:20;8804:8;32302:620;;32342:72;;-1:-1:-1;;;32342:72:0;;-1:-1:-1;;;;;32342:36:0;;;;;:72;;16521:10;;32393:4;;32399:7;;32408:5;;32342:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32342:72:0;;;;;;;;-1:-1:-1;;32342:72:0;;;;;;;;;;;;:::i;:::-;;;32338:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32584:13:0;;32580:272;;32627:60;;-1:-1:-1;;;32627:60:0;;;;;;;:::i;32580:272::-;32802:6;32796:13;32787:6;32783:2;32779:15;32772:38;32338:529;-1:-1:-1;;;;;;32465:51:0;-1:-1:-1;;;32465:51:0;;-1:-1:-1;32458:58:0;;32302:620;-1:-1:-1;32906:4:0;32130:799;;;;;;:::o;41496:988::-;41762:22;41812:1;41787:22;41804:4;41787:16;:22::i;:::-;:26;;;;:::i;:::-;41824:18;41845:26;;;:17;:26;;;;;;41762:51;;-1:-1:-1;41978:28:0;;;41974:328;;-1:-1:-1;;;;;42045:18:0;;42023:19;42045:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42096:30;;;;;;:44;;;42213:30;;:17;:30;;;;;:43;;;41974:328;-1:-1:-1;42398:26:0;;;;:17;:26;;;;;;;;42391:33;;;-1:-1:-1;;;;;42442:18:0;;;;;:12;:18;;;;;:34;;;;;;;42435:41;41496:988::o;42779:1079::-;43057:10;:17;43032:22;;43057:21;;43077:1;;43057:21;:::i;:::-;43089:18;43110:24;;;:15;:24;;;;;;43483:10;:26;;43032:46;;-1:-1:-1;43110:24:0;;43032:46;;43483:26;;;;;;:::i;:::-;;;;;;;;;43461:48;;43547:11;43522:10;43533;43522:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;43627:28;;;:15;:28;;;;;;;:41;;;43799:24;;;;;43792:31;43834:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;42850:1008;;;42779:1079;:::o;40283:221::-;40368:14;40385:20;40402:2;40385:16;:20::i;:::-;-1:-1:-1;;;;;40416:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;40461:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40283:221:0:o;28930:382::-;-1:-1:-1;;;;;29010:16:0;;29002:61;;;;-1:-1:-1;;;29002:61:0;;23646:2:1;29002:61:0;;;23628:21:1;;;23665:18;;;23658:30;23724:34;23704:18;;;23697:62;23776:18;;29002:61:0;23444:356:1;29002:61:0;27017:4;27041:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27041:16:0;:30;29074:58;;;;-1:-1:-1;;;29074:58:0;;24007:2:1;29074:58:0;;;23989:21:1;24046:2;24026:18;;;24019:30;24085;24065:18;;;24058:58;24133:18;;29074:58:0;23805:352:1;29074:58:0;29145:45;29174:1;29178:2;29182:7;29145:20;:45::i;:::-;-1:-1:-1;;;;;29203:13:0;;;;;;:9;:13;;;;;:18;;29220:1;;29203:13;:18;;29220:1;;29203:18;:::i;:::-;;;;-1:-1:-1;;29232:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29232:21:0;-1:-1:-1;;;;;29232:21:0;;;;;;;;29271:33;;29232:16;;;29271:33;;29232:16;;29271:33;28930:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:269::-;908:3;946:5;940:12;973:6;968:3;961:19;989:63;1045:6;1038:4;1033:3;1029:14;1022:4;1015:5;1011:16;989:63;:::i;:::-;1106:2;1085:15;-1:-1:-1;;1081:29:1;1072:39;;;;1113:4;1068:50;;855:269;-1:-1:-1;;855:269:1:o;1129:231::-;1278:2;1267:9;1260:21;1241:4;1298:56;1350:2;1339:9;1335:18;1327:6;1298:56;:::i;1365:180::-;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;-1:-1:-1;1516:23:1;;1365:180;-1:-1:-1;1365:180:1:o;1758:173::-;1826:20;;-1:-1:-1;;;;;1875:31:1;;1865:42;;1855:70;;1921:1;1918;1911:12;1936:254;2004:6;2012;2065:2;2053:9;2044:7;2040:23;2036:32;2033:52;;;2081:1;2078;2071:12;2033:52;2104:29;2123:9;2104:29;:::i;:::-;2094:39;2180:2;2165:18;;;;2152:32;;-1:-1:-1;;;1936:254:1:o;2759:159::-;2826:20;;2886:6;2875:18;;2865:29;;2855:57;;2908:1;2905;2898:12;2923:184;2981:6;3034:2;3022:9;3013:7;3009:23;3005:32;3002:52;;;3050:1;3047;3040:12;3002:52;3073:28;3091:9;3073:28;:::i;3112:284::-;3170:6;3223:2;3211:9;3202:7;3198:23;3194:32;3191:52;;;3239:1;3236;3229:12;3191:52;3278:9;3265:23;3328:18;3321:5;3317:30;3310:5;3307:41;3297:69;;3362:1;3359;3352:12;3401:328;3478:6;3486;3494;3547:2;3535:9;3526:7;3522:23;3518:32;3515:52;;;3563:1;3560;3553:12;3515:52;3586:29;3605:9;3586:29;:::i;:::-;3576:39;;3634:38;3668:2;3657:9;3653:18;3634:38;:::i;:::-;3624:48;;3719:2;3708:9;3704:18;3691:32;3681:42;;3401:328;;;;;:::o;3734:258::-;3801:6;3809;3862:2;3850:9;3841:7;3837:23;3833:32;3830:52;;;3878:1;3875;3868:12;3830:52;3901:29;3920:9;3901:29;:::i;:::-;3891:39;;3949:37;3982:2;3971:9;3967:18;3949:37;:::i;:::-;3939:47;;3734:258;;;;;:::o;3997:127::-;4058:10;4053:3;4049:20;4046:1;4039:31;4089:4;4086:1;4079:15;4113:4;4110:1;4103:15;4129:275;4200:2;4194:9;4265:2;4246:13;;-1:-1:-1;;4242:27:1;4230:40;;4300:18;4285:34;;4321:22;;;4282:62;4279:88;;;4347:18;;:::i;:::-;4383:2;4376:22;4129:275;;-1:-1:-1;4129:275:1:o;4409:407::-;4474:5;4508:18;4500:6;4497:30;4494:56;;;4530:18;;:::i;:::-;4568:57;4613:2;4592:15;;-1:-1:-1;;4588:29:1;4619:4;4584:40;4568:57;:::i;:::-;4559:66;;4648:6;4641:5;4634:21;4688:3;4679:6;4674:3;4670:16;4667:25;4664:45;;;4705:1;4702;4695:12;4664:45;4754:6;4749:3;4742:4;4735:5;4731:16;4718:43;4808:1;4801:4;4792:6;4785:5;4781:18;4777:29;4770:40;4409:407;;;;;:::o;4821:451::-;4890:6;4943:2;4931:9;4922:7;4918:23;4914:32;4911:52;;;4959:1;4956;4949:12;4911:52;4999:9;4986:23;5032:18;5024:6;5021:30;5018:50;;;5064:1;5061;5054:12;5018:50;5087:22;;5140:4;5132:13;;5128:27;-1:-1:-1;5118:55:1;;5169:1;5166;5159:12;5118:55;5192:74;5258:7;5253:2;5240:16;5235:2;5231;5227:11;5192:74;:::i;5277:186::-;5336:6;5389:2;5377:9;5368:7;5364:23;5360:32;5357:52;;;5405:1;5402;5395:12;5357:52;5428:29;5447:9;5428:29;:::i;5468:248::-;5536:6;5544;5597:2;5585:9;5576:7;5572:23;5568:32;5565:52;;;5613:1;5610;5603:12;5565:52;-1:-1:-1;;5636:23:1;;;5706:2;5691:18;;;5678:32;;-1:-1:-1;5468:248:1:o;5721:347::-;5786:6;5794;5847:2;5835:9;5826:7;5822:23;5818:32;5815:52;;;5863:1;5860;5853:12;5815:52;5886:29;5905:9;5886:29;:::i;:::-;5876:39;;5965:2;5954:9;5950:18;5937:32;6012:5;6005:13;5998:21;5991:5;5988:32;5978:60;;6034:1;6031;6024:12;5978:60;6057:5;6047:15;;;5721:347;;;;;:::o;6278:667::-;6373:6;6381;6389;6397;6450:3;6438:9;6429:7;6425:23;6421:33;6418:53;;;6467:1;6464;6457:12;6418:53;6490:29;6509:9;6490:29;:::i;:::-;6480:39;;6538:38;6572:2;6561:9;6557:18;6538:38;:::i;:::-;6528:48;;6623:2;6612:9;6608:18;6595:32;6585:42;;6678:2;6667:9;6663:18;6650:32;6705:18;6697:6;6694:30;6691:50;;;6737:1;6734;6727:12;6691:50;6760:22;;6813:4;6805:13;;6801:27;-1:-1:-1;6791:55:1;;6842:1;6839;6832:12;6791:55;6865:74;6931:7;6926:2;6913:16;6908:2;6904;6900:11;6865:74;:::i;:::-;6855:84;;;6278:667;;;;;;;:::o;6950:269::-;7007:6;7060:2;7048:9;7039:7;7035:23;7031:32;7028:52;;;7076:1;7073;7066:12;7028:52;7115:9;7102:23;7165:4;7158:5;7154:16;7147:5;7144:27;7134:55;;7185:1;7182;7175:12;7224:260;7292:6;7300;7353:2;7341:9;7332:7;7328:23;7324:32;7321:52;;;7369:1;7366;7359:12;7321:52;7392:29;7411:9;7392:29;:::i;:::-;7382:39;;7440:38;7474:2;7463:9;7459:18;7440:38;:::i;7489:952::-;7573:6;7604:2;7647;7635:9;7626:7;7622:23;7618:32;7615:52;;;7663:1;7660;7653:12;7615:52;7703:9;7690:23;7732:18;7773:2;7765:6;7762:14;7759:34;;;7789:1;7786;7779:12;7759:34;7827:6;7816:9;7812:22;7802:32;;7872:7;7865:4;7861:2;7857:13;7853:27;7843:55;;7894:1;7891;7884:12;7843:55;7930:2;7917:16;7952:2;7948;7945:10;7942:36;;;7958:18;;:::i;:::-;8004:2;8001:1;7997:10;7987:20;;8027:28;8051:2;8047;8043:11;8027:28;:::i;:::-;8089:15;;;8159:11;;;8155:20;;;8120:12;;;;8187:19;;;8184:39;;;8219:1;8216;8209:12;8184:39;8243:11;;;;8263:148;8279:6;8274:3;8271:15;8263:148;;;8345:23;8364:3;8345:23;:::i;:::-;8333:36;;8296:12;;;;8389;;;;8263:148;;;8430:5;7489:952;-1:-1:-1;;;;;;;;7489:952:1:o;8446:380::-;8525:1;8521:12;;;;8568;;;8589:61;;8643:4;8635:6;8631:17;8621:27;;8589:61;8696:2;8688:6;8685:14;8665:18;8662:38;8659:161;;;8742:10;8737:3;8733:20;8730:1;8723:31;8777:4;8774:1;8767:15;8805:4;8802:1;8795:15;8659:161;;8446:380;;;:::o;8831:356::-;9033:2;9015:21;;;9052:18;;;9045:30;9111:34;9106:2;9091:18;;9084:62;9178:2;9163:18;;8831:356::o;10432:413::-;10634:2;10616:21;;;10673:2;10653:18;;;10646:30;10712:34;10707:2;10692:18;;10685:62;-1:-1:-1;;;10778:2:1;10763:18;;10756:47;10835:3;10820:19;;10432:413::o;11967:127::-;12028:10;12023:3;12019:20;12016:1;12009:31;12059:4;12056:1;12049:15;12083:4;12080:1;12073:15;12099:224;12138:3;12166:6;12199:2;12196:1;12192:10;12229:2;12226:1;12222:10;12260:3;12256:2;12252:12;12247:3;12244:21;12241:47;;;12268:18;;:::i;:::-;12304:13;;12099:224;-1:-1:-1;;;;12099:224:1:o;12328:417::-;12530:2;12512:21;;;12569:2;12549:18;;;12542:30;12608:34;12603:2;12588:18;;12581:62;-1:-1:-1;;;12674:2:1;12659:18;;12652:51;12735:3;12720:19;;12328:417::o;12750:217::-;12789:4;12818:6;12874:10;;;;12844;;12896:12;;;12893:38;;;12911:18;;:::i;:::-;12948:13;;12750:217;-1:-1:-1;;;12750:217:1:o;13385:127::-;13446:10;13441:3;13437:20;13434:1;13427:31;13477:4;13474:1;13467:15;13501:4;13498:1;13491:15;15049:128;15089:3;15120:1;15116:6;15113:1;15110:13;15107:39;;;15126:18;;:::i;:::-;-1:-1:-1;15162:9:1;;15049:128::o;15182:403::-;15384:2;15366:21;;;15423:2;15403:18;;;15396:30;15462:34;15457:2;15442:18;;15435:62;-1:-1:-1;;;15528:2:1;15513:18;;15506:37;15575:3;15560:19;;15182:403::o;16008:410::-;16210:2;16192:21;;;16249:2;16229:18;;;16222:30;16288:34;16283:2;16268:18;;16261:62;-1:-1:-1;;;16354:2:1;16339:18;;16332:44;16408:3;16393:19;;16008:410::o;16423:168::-;16463:7;16529:1;16525;16521:6;16517:14;16514:1;16511:21;16506:1;16499:9;16492:17;16488:45;16485:71;;;16536:18;;:::i;:::-;-1:-1:-1;16576:9:1;;16423:168::o;18132:185::-;18174:3;18212:5;18206:12;18227:52;18272:6;18267:3;18260:4;18253:5;18249:16;18227:52;:::i;:::-;18295:16;;;;;18132:185;-1:-1:-1;;18132:185:1:o;18322:1174::-;18498:3;18527:1;18560:6;18554:13;18590:3;18612:1;18640:9;18636:2;18632:18;18622:28;;18700:2;18689:9;18685:18;18722;18712:61;;18766:4;18758:6;18754:17;18744:27;;18712:61;18792:2;18840;18832:6;18829:14;18809:18;18806:38;18803:165;;;-1:-1:-1;;;18867:33:1;;18923:4;18920:1;18913:15;18953:4;18874:3;18941:17;18803:165;18984:18;19011:104;;;;19129:1;19124:320;;;;18977:467;;19011:104;-1:-1:-1;;19044:24:1;;19032:37;;19089:16;;;;-1:-1:-1;19011:104:1;;19124:320;18079:1;18072:14;;;18116:4;18103:18;;19219:1;19233:165;19247:6;19244:1;19241:13;19233:165;;;19325:14;;19312:11;;;19305:35;19368:16;;;;19262:10;;19233:165;;;19237:3;;19427:6;19422:3;19418:16;19411:23;;18977:467;;;;;;;19460:30;19486:3;19478:6;19460:30;:::i;:::-;19453:37;18322:1174;-1:-1:-1;;;;;18322:1174:1:o;19908:135::-;19947:3;-1:-1:-1;;19968:17:1;;19965:43;;;19988:18;;:::i;:::-;-1:-1:-1;20035:1:1;20024:13;;19908:135::o;21276:125::-;21316:4;21344:1;21341;21338:8;21335:34;;;21349:18;;:::i;:::-;-1:-1:-1;21386:9:1;;21276:125::o;21760:414::-;21962:2;21944:21;;;22001:2;21981:18;;;21974:30;22040:34;22035:2;22020:18;;22013:62;-1:-1:-1;;;22106:2:1;22091:18;;22084:48;22164:3;22149:19;;21760:414::o;22179:127::-;22240:10;22235:3;22231:20;22228:1;22221:31;22271:4;22268:1;22261:15;22295:4;22292:1;22285:15;22311:120;22351:1;22377;22367:35;;22382:18;;:::i;:::-;-1:-1:-1;22416:9:1;;22311:120::o;22436:112::-;22468:1;22494;22484:35;;22499:18;;:::i;:::-;-1:-1:-1;22533:9:1;;22436:112::o;22553:500::-;-1:-1:-1;;;;;22822:15:1;;;22804:34;;22874:15;;22869:2;22854:18;;22847:43;22921:2;22906:18;;22899:34;;;22969:3;22964:2;22949:18;;22942:31;;;22747:4;;22990:57;;23027:19;;23019:6;22990:57;:::i;:::-;22982:65;22553:500;-1:-1:-1;;;;;;22553:500:1:o;23058:249::-;23127:6;23180:2;23168:9;23159:7;23155:23;23151:32;23148:52;;;23196:1;23193;23186:12;23148:52;23228:9;23222:16;23247:30;23271:5;23247:30;:::i;23312:127::-;23373:10;23368:3;23364:20;23361:1;23354:31;23404:4;23401:1;23394:15;23428:4;23425:1;23418:15
Swarm Source
ipfs://f6d76bbcfa2fe686011fee0213791627d41923f3a4f4f6b4f896e8a57e233f87
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.