ERC-721
Overview
Max Total Supply
0 BFP
Holders
31
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 BFPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
BigFootPrint
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-08 */ // File @openzeppelin/contracts/utils/cryptography/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (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/[email protected] // OpenZeppelin Contracts v4.4.1 (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/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.5.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); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/Admin721.sol pragma solidity ^0.8.4; // import "erc721a/contracts/ERC721A.sol"; contract Admin721 is ERC721, Ownable { string public __baseURI; event BaseURIChanged(string, string); constructor( string memory name_, string memory symbol_, string memory baseURI_ ) ERC721(name_, symbol_) { // set baseURI setBaseURI(baseURI_); } function burn(uint256 tokenId) public onlyOwner { _burn(tokenId); } function _baseURI() internal view virtual override returns (string memory) { return __baseURI; } function setBaseURI(string memory baseURI_) public onlyOwner { require( keccak256(abi.encodePacked(__baseURI)) != keccak256(abi.encodePacked(baseURI_)) ); string memory oldBaseURI = __baseURI; __baseURI = baseURI_; emit BaseURIChanged(oldBaseURI, baseURI_); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } } // File contracts/BigFootPrint.sol pragma solidity ^0.8.4; contract BigFootPrint is Admin721 { // og mint info struct OgMint { bytes32 merkleRoot; uint256 beginTime; uint256 endTime; uint256 beginId; uint256 totalAmount; uint256 mintedAmount; } // public mint info struct PublicMint { uint256 beginTime; uint256 beginId; uint256 totalAmount; uint256 price; uint256 mintedAmount; } struct BaseInfo { string name; string symbol; string baseURI; } OgMint public _ogMint; PublicMint public _publicMint; mapping(address => uint256) public _ogMintedAmount; mapping(address => uint256) public _publicMintedAmount; uint256 public constant _MAX_MINT_AMOUNT_PER_USER = 2; uint256 private _royaltyBps; address payable private _royaltyRecipient; event UpdateRoot(bytes32 newRoot, bytes32 oldRoot); modifier checkOgMint(OgMint memory ogMint_) { require(ogMint_.beginTime >= block.timestamp, "og: wrong begin time"); require(ogMint_.totalAmount > 0, "og: total amount"); require(ogMint_.mintedAmount == 0, "og: minted amount"); _; } modifier ogMintNotBegin() { require(_ogMint.beginTime > block.timestamp); _; } modifier ogMintPeriod() { require(_ogMint.beginTime <= block.timestamp); require(_ogMint.endTime >= block.timestamp); _; } modifier publicMintBegin() { require(_publicMint.beginTime <= block.timestamp); _; } modifier checkPublicMint(PublicMint memory publicMint_) { require( publicMint_.beginTime >= block.timestamp, "public: wrong begin time" ); require(publicMint_.totalAmount > 0, "public: total amount"); require(publicMint_.mintedAmount == 0, "public: minted amount"); _; } modifier checkIdSpace( OgMint memory ogMint_, PublicMint memory publicMint_ ) { require( ogMint_.beginId + ogMint_.totalAmount - 1 < publicMint_.beginId ); _; } modifier enoughPublicMintETH(uint256 amount_) { require(msg.value >= _publicMint.price * amount_); _; } constructor( address owner_, BaseInfo memory baseInfo_, OgMint memory ogMint_, PublicMint memory publicMint_ ) Admin721(baseInfo_.name, baseInfo_.symbol, baseInfo_.baseURI) checkOgMint(ogMint_) checkPublicMint(publicMint_) checkIdSpace(ogMint_, publicMint_) { _ogMint = ogMint_; _publicMint = publicMint_; if (owner_ != address(0)) { _transferOwnership(owner_); } } // update merkle root // function updateRoot(bytes32 newRoot) public onlyOwner ogMintNotBegin { function updateRoot(bytes32 newRoot) public onlyOwner { bytes32 oldRoot = _ogMint.merkleRoot; _ogMint.merkleRoot = newRoot; emit UpdateRoot(newRoot, oldRoot); } // white list claim function claim(bytes32[] calldata proof_, uint256 amount_) external payable ogMintPeriod { // check mint amount limit require( _ogMintedAmount[msg.sender] + amount_ <= _MAX_MINT_AMOUNT_PER_USER, "claim: reach mint max limit" ); require(amount_ > 0); require(amount_ <= _MAX_MINT_AMOUNT_PER_USER); // has available nft require(_ogMint.mintedAmount + amount_ <= _ogMint.totalAmount); // white list check bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(proof_, _ogMint.merkleRoot, leaf)); // mint for (uint256 i = 0; i < amount_; i++) { _safeMint(msg.sender, _ogMint.beginId + _ogMint.mintedAmount + i); } // mark this address as minted _ogMintedAmount[msg.sender] += amount_; // minted token increase _ogMint.mintedAmount += amount_; } // public mint(buy) function publicMint(uint256 amount_) public payable enoughPublicMintETH(amount_) publicMintBegin { // check mint amount limit require( _publicMintedAmount[msg.sender] + amount_ <= _MAX_MINT_AMOUNT_PER_USER, "public mint: reach mint max limit" ); require(amount_ > 0); require(amount_ <= _MAX_MINT_AMOUNT_PER_USER); // has available nft require(_publicMint.mintedAmount + amount_ <= _publicMint.totalAmount); // mint for (uint256 i = 0; i < amount_; i++) { _safeMint( msg.sender, _publicMint.beginId + _publicMint.mintedAmount + i ); } _publicMintedAmount[msg.sender] += amount_; _publicMint.mintedAmount += amount_; } function withdraw(address payable receiver) external onlyOwner { require(address(this).balance > 0); receiver.transfer(address(this).balance); } // royalty functions function updateRoyalties(address payable recipient, uint256 bps) external onlyOwner { _royaltyRecipient = recipient; _royaltyBps = bps; } function getRoyalties(uint256) external view returns (address payable[] memory recipients, uint256[] memory bps) { if (_royaltyRecipient != address(0x0)) { recipients = new address payable[](1); recipients[0] = _royaltyRecipient; bps = new uint256[](1); bps[0] = _royaltyBps; } return (recipients, bps); } function getFeeRecipients(uint256) external view returns (address payable[] memory recipients) { if (_royaltyRecipient != address(0x0)) { recipients = new address payable[](1); recipients[0] = _royaltyRecipient; } return recipients; } function getFeeBps(uint256) external view returns (uint256[] memory bps) { if (_royaltyRecipient != address(0x0)) { bps = new uint256[](1); bps[0] = _royaltyBps; } return bps; } function royaltyInfo(uint256, uint256 value) external view returns (address, uint256) { return (_royaltyRecipient, (value * _royaltyBps) / 10000); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURI","type":"string"}],"internalType":"struct BigFootPrint.BaseInfo","name":"baseInfo_","type":"tuple"},{"components":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"beginTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"beginId","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"mintedAmount","type":"uint256"}],"internalType":"struct BigFootPrint.OgMint","name":"ogMint_","type":"tuple"},{"components":[{"internalType":"uint256","name":"beginTime","type":"uint256"},{"internalType":"uint256","name":"beginId","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"mintedAmount","type":"uint256"}],"internalType":"struct BigFootPrint.PublicMint","name":"publicMint_","type":"tuple"}],"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":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"string","name":"","type":"string"}],"name":"BaseURIChanged","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":"bytes32","name":"newRoot","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"oldRoot","type":"bytes32"}],"name":"UpdateRoot","type":"event"},{"inputs":[],"name":"_MAX_MINT_AMOUNT_PER_USER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"__baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ogMint","outputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"beginTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"beginId","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"mintedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_ogMintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicMint","outputs":[{"internalType":"uint256","name":"beginTime","type":"uint256"},{"internalType":"uint256","name":"beginId","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"mintedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_publicMintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"payable","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":"","type":"uint256"}],"name":"getFeeBps","outputs":[{"internalType":"uint256[]","name":"bps","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getFeeRecipients","outputs":[{"internalType":"address payable[]","name":"recipients","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getRoyalties","outputs":[{"internalType":"address payable[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"bps","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":"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":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"bytes32","name":"newRoot","type":"bytes32"}],"name":"updateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"updateRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620031d4380380620031d483398101604081905262000034916200075c565b826000015183602001518460400151828281600090805190602001906200005d92919062000539565b5080516200007390600190602084019062000539565b505050620000906200008a6200033a60201b60201c565b6200033e565b6200009b8162000390565b505050814281602001511015620000f95760405162461bcd60e51b815260206004820152601460248201527f6f673a2077726f6e6720626567696e2074696d6500000000000000000000000060448201526064015b60405180910390fd5b6000816080015111620001425760405162461bcd60e51b815260206004820152601060248201526f1bd9ce881d1bdd185b08185b5bdd5b9d60821b6044820152606401620000f0565b60a0810151156200018a5760405162461bcd60e51b81526020600482015260116024820152701bd9ce881b5a5b9d195908185b5bdd5b9d607a1b6044820152606401620000f0565b814281600001511015620001e15760405162461bcd60e51b815260206004820152601860248201527f7075626c69633a2077726f6e6720626567696e2074696d6500000000000000006044820152606401620000f0565b6000816040015111620002375760405162461bcd60e51b815260206004820152601460248201527f7075626c69633a20746f74616c20616d6f756e740000000000000000000000006044820152606401620000f0565b6080810151156200028b5760405162461bcd60e51b815260206004820152601560248201527f7075626c69633a206d696e74656420616d6f756e7400000000000000000000006044820152606401620000f0565b83838060200151600183608001518460600151620002aa9190620009af565b620002b69190620009ca565b10620002c157600080fd5b8551600855602080870151600955604080880151600a55606080890151600b556080808a0151600c5560a08a0151600d558851600e5592880151600f55908701516010558601516011558501516012556001600160a01b038816156200032c576200032c886200033e565b505050505050505062000a80565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620003ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000f0565b80604051602001620003ff919062000891565b604051602081830303815290604052805190602001206007604051602001620004299190620008af565b6040516020818303038152906040528051906020012014156200044b57600080fd5b6000600780546200045c9062000a17565b80601f01602080910402602001604051908101604052809291908181526020018280546200048a9062000a17565b8015620004db5780601f10620004af57610100808354040283529160200191620004db565b820191906000526020600020905b815481529060010190602001808311620004bd57829003601f168201915b50508551939450620004f99360079350602087019250905062000539565b507fc41b7cb64e5be01af4afc2641afc861432136270f4206b7773f229b658b9669981836040516200052d92919062000952565b60405180910390a15050565b828054620005479062000a17565b90600052602060002090601f0160209004810192826200056b5760008555620005b6565b82601f106200058657805160ff1916838001178555620005b6565b82800160010185558215620005b6579182015b82811115620005b657825182559160200191906001019062000599565b50620005c4929150620005c8565b5090565b5b80821115620005c45760008155600101620005c9565b600082601f830112620005f0578081fd5b81516001600160401b03808211156200060d576200060d62000a6a565b604051601f8301601f19908116603f0116810190828211818310171562000638576200063862000a6a565b8160405283815286602085880101111562000651578485fd5b62000664846020830160208901620009e4565b9695505050505050565b600060c0828403121562000680578081fd5b60405160c081016001600160401b0381118282101715620006a557620006a562000a6a565b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b600060a08284031215620006fc578081fd5b60405160a081016001600160401b038111828210171562000721576200072162000a6a565b806040525080915082518152602083015160208201526040830151604082015260608301516060820152608083015160808201525092915050565b6000806000806101a0858703121562000773578384fd5b84516001600160a01b03811681146200078a578485fd5b60208601519094506001600160401b0380821115620007a7578485fd5b9086019060608289031215620007bb578485fd5b620007c562000984565b825182811115620007d4578687fd5b620007e28a828601620005df565b825250602083015182811115620007f7578687fd5b620008058a828601620005df565b6020830152506040830151828111156200081d578687fd5b6200082b8a828601620005df565b6040830152508095505050506200084686604087016200066e565b915062000858866101008701620006ea565b905092959194509250565b600081518084526200087d816020860160208601620009e4565b601f01601f19169290920160200192915050565b60008251620008a5818460208701620009e4565b9190910192915050565b600080835482600182811c915080831680620008cc57607f831692505b6020808410821415620008ed57634e487b7160e01b87526022600452602487fd5b818015620009045760018114620009165762000944565b60ff1986168952848901965062000944565b60008a815260209020885b868110156200093c5781548b82015290850190830162000921565b505084890196505b509498975050505050505050565b60408152600062000967604083018562000863565b82810360208401526200097b818562000863565b95945050505050565b604051606081016001600160401b0381118282101715620009a957620009a962000a6a565b60405290565b60008219821115620009c557620009c562000a54565b500190565b600082821015620009df57620009df62000a54565b500390565b60005b8381101562000a01578181015183820152602001620009e7565b8381111562000a11576000848401525b50505050565b600181811c9082168062000a2c57607f821691505b6020821081141562000a4e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6127448062000a906000396000f3fe6080604052600436106101ee5760003560e01c80636352211e1161010d578063a22cb465116100a0578063bb3bafd61161006f578063bb3bafd6146105ec578063c87b56dd1461061a578063cde8c0e81461063a578063e985e9c514610692578063f2fde38b146106db57600080fd5b8063a22cb46514610552578063b4df1e1214610572578063b88d4fde1461059f578063b9c4d9fb146105bf57600080fd5b8063715018a6116100dc578063715018a6146104f55780637d8af4431461050a5780638da5cb5b1461051f57806395d89b411461053d57600080fd5b80636352211e146104805780636c2f5acd146104a05780636e34a482146104c057806370a08231146104d557600080fd5b806323b872dd1161018557806342842e0e1161015457806342842e0e1461040057806342966c681461042057806351cff8d91461044057806355f804b31461046057600080fd5b806323b872dd1461037b5780632a55205a1461039b5780632db11544146103da5780633b439351146103ed57600080fd5b8063095ea7b3116101c1578063095ea7b3146102bd5780630ebd4c7f146102df57806321d7b6491461030c57806321ff99701461035b57600080fd5b80630177209d146101f357806301ffc9a71461023357806306fdde0314610263578063081812fc14610285575b600080fd5b3480156101ff57600080fd5b5061022061020e366004611fd8565b60136020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561023f57600080fd5b5061025361024e3660046121e5565b6106fb565b604051901515815260200161022a565b34801561026f57600080fd5b50610278610741565b60405161022a9190612499565b34801561029157600080fd5b506102a56102a03660046121cd565b6107d3565b6040516001600160a01b03909116815260200161022a565b3480156102c957600080fd5b506102dd6102d8366004612145565b61086d565b005b3480156102eb57600080fd5b506102ff6102fa3660046121cd565b610983565b60405161022a9190612486565b34801561031857600080fd5b50600e54600f54601054601154601254610333949392919085565b604080519586526020860194909452928401919091526060830152608082015260a00161022a565b34801561036757600080fd5b506102dd6103763660046121cd565b6109ed565b34801561038757600080fd5b506102dd610396366004612057565b610a5d565b3480156103a757600080fd5b506103bb6103b6366004612263565b610a8e565b604080516001600160a01b03909316835260208301919091520161022a565b6102dd6103e83660046121cd565b610ac8565b6102dd6103fb366004612157565b610c26565b34801561040c57600080fd5b506102dd61041b366004612057565b610de3565b34801561042c57600080fd5b506102dd61043b3660046121cd565b610dfe565b34801561044c57600080fd5b506102dd61045b366004611fd8565b610e34565b34801561046c57600080fd5b506102dd61047b36600461221d565b610ea4565b34801561048c57600080fd5b506102a561049b3660046121cd565b610ffe565b3480156104ac57600080fd5b506102dd6104bb366004611ff4565b611075565b3480156104cc57600080fd5b506102786110c5565b3480156104e157600080fd5b506102206104f0366004611fd8565b611153565b34801561050157600080fd5b506102dd6111da565b34801561051657600080fd5b50610220600281565b34801561052b57600080fd5b506006546001600160a01b03166102a5565b34801561054957600080fd5b50610278611210565b34801561055e57600080fd5b506102dd61056d366004612114565b61121f565b34801561057e57600080fd5b5061022061058d366004611fd8565b60146020526000908152604090205481565b3480156105ab57600080fd5b506102dd6105ba366004612097565b61122a565b3480156105cb57600080fd5b506105df6105da3660046121cd565b611262565b60405161022a9190612445565b3480156105f857600080fd5b5061060c6106073660046121cd565b6112e9565b60405161022a929190612458565b34801561062657600080fd5b506102786106353660046121cd565b6113b9565b34801561064657600080fd5b50600854600954600a54600b54600c54600d5461066595949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161022a565b34801561069e57600080fd5b506102536106ad36600461201f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106e757600080fd5b506102dd6106f6366004611fd8565b611494565b60006001600160e01b031982166380ac58cd60e01b148061072c57506001600160e01b03198216635b5e139f60e01b145b8061073b575061073b8261152c565b92915050565b60606000805461075090612637565b80601f016020809104026020016040519081016040528092919081815260200182805461077c90612637565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061087882610ffe565b9050806001600160a01b0316836001600160a01b031614156108e65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610848565b336001600160a01b0382161480610902575061090281336106ad565b6109745760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610848565b61097e838361157c565b505050565b6016546060906001600160a01b0316156109e8576040805160018082528183019092529060208083019080368337019050509050601554816000815181106109db57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b919050565b6006546001600160a01b03163314610a175760405162461bcd60e51b815260040161084890612523565b600880549082905560408051838152602081018390527f809ea3bfb2b4c233654e9bd385eb6e59639fceb90b732f3bb6d13a9af80641d091015b60405180910390a15050565b610a6733826115ea565b610a835760405162461bcd60e51b815260040161084890612558565b61097e8383836116e1565b60165460155460009182916001600160a01b039091169061271090610ab390866125d5565b610abd91906125c1565b915091509250929050565b6011548190610ad89082906125d5565b341015610ae457600080fd5b600e54421015610af357600080fd5b33600090815260146020526040902054600290610b119084906125a9565b1115610b695760405162461bcd60e51b815260206004820152602160248201527f7075626c6963206d696e743a207265616368206d696e74206d6178206c696d696044820152601d60fa1b6064820152608401610848565b60008211610b7657600080fd5b6002821115610b8457600080fd5b601054601254610b959084906125a9565b1115610ba057600080fd5b60005b82811015610be357601254600f54610bd19133918491610bc2916125a9565b610bcc91906125a9565b61187d565b80610bdb81612672565b915050610ba3565b503360009081526014602052604081208054849290610c039084906125a9565b909155505060128054839190600090610c1d9084906125a9565b90915550505050565b600954421015610c3557600080fd5b600a54421115610c4457600080fd5b33600090815260136020526040902054600290610c629083906125a9565b1115610cb05760405162461bcd60e51b815260206004820152601b60248201527f636c61696d3a207265616368206d696e74206d6178206c696d697400000000006044820152606401610848565b60008111610cbd57600080fd5b6002811115610ccb57600080fd5b600c54600d54610cdc9083906125a9565b1115610ce757600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610d61848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506008549150849050611897565b610d6a57600080fd5b60005b82811015610d9e57600d54600b54610d8c9133918491610bc2916125a9565b80610d9681612672565b915050610d6d565b503360009081526013602052604081208054849290610dbe9084906125a9565b9091555050600d8054839190600090610dd89084906125a9565b909155505050505050565b61097e8383836040518060200160405280600081525061122a565b6006546001600160a01b03163314610e285760405162461bcd60e51b815260040161084890612523565b610e31816118ad565b50565b6006546001600160a01b03163314610e5e5760405162461bcd60e51b815260040161084890612523565b60004711610e6b57600080fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610ea0573d6000803e3d6000fd5b5050565b6006546001600160a01b03163314610ece5760405162461bcd60e51b815260040161084890612523565b80604051602001610edf9190612322565b604051602081830303815290604052805190602001206007604051602001610f07919061236d565b604051602081830303815290604052805190602001201415610f2857600080fd5b600060078054610f3790612637565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6390612637565b8015610fb05780601f10610f8557610100808354040283529160200191610fb0565b820191906000526020600020905b815481529060010190602001808311610f9357829003601f168201915b50508551939450610fcc93600793506020870192509050611ec9565b507fc41b7cb64e5be01af4afc2641afc861432136270f4206b7773f229b658b966998183604051610a519291906124ac565b6000818152600260205260408120546001600160a01b03168061073b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610848565b6006546001600160a01b0316331461109f5760405162461bcd60e51b815260040161084890612523565b601680546001600160a01b0319166001600160a01b039390931692909217909155601555565b600780546110d290612637565b80601f01602080910402602001604051908101604052809291908181526020018280546110fe90612637565b801561114b5780601f106111205761010080835404028352916020019161114b565b820191906000526020600020905b81548152906001019060200180831161112e57829003601f168201915b505050505081565b60006001600160a01b0382166111be5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610848565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146112045760405162461bcd60e51b815260040161084890612523565b61120e6000611948565b565b60606001805461075090612637565b610ea033838361199a565b61123433836115ea565b6112505760405162461bcd60e51b815260040161084890612558565b61125c84848484611a69565b50505050565b6016546060906001600160a01b0316156109e8576040805160018082528183019092529060208083019080368337505060165482519293506001600160a01b0316918391506000906112c457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b60165460609081906001600160a01b0316156113b4576040805160018082528183019092529060208083019080368337505060165482519294506001600160a01b03169184915060009061134d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516001808252818301909252918281019080368337019050509050601554816000815181106113a757634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b915091565b6000818152600260205260409020546060906001600160a01b03166114385760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610848565b6000611442611a9c565b90506000815111611462576040518060200160405280600081525061148d565b8061146c84611aab565b60405160200161147d92919061233e565b6040516020818303038152906040525b9392505050565b6006546001600160a01b031633146114be5760405162461bcd60e51b815260040161084890612523565b6001600160a01b0381166115235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610848565b610e3181611948565b60006001600160e01b031982166380ac58cd60e01b148061155d57506001600160e01b03198216635b5e139f60e01b145b8061073b57506301ffc9a760e01b6001600160e01b031983161461073b565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115b182610ffe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166116635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610848565b600061166e83610ffe565b9050806001600160a01b0316846001600160a01b031614806116a95750836001600160a01b031661169e846107d3565b6001600160a01b0316145b806116d957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166116f482610ffe565b6001600160a01b0316146117585760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610848565b6001600160a01b0382166117ba5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610848565b6117c560008261157c565b6001600160a01b03831660009081526003602052604081208054600192906117ee9084906125f4565b90915550506001600160a01b038216600090815260036020526040812080546001929061181c9084906125a9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ea0828260405180602001604052806000815250611bc5565b6000826118a48584611bf8565b14949350505050565b60006118b882610ffe565b90506118c560008361157c565b6001600160a01b03811660009081526003602052604081208054600192906118ee9084906125f4565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156119fc5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610848565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a748484846116e1565b611a8084848484611c7a565b61125c5760405162461bcd60e51b8152600401610848906124d1565b60606007805461075090612637565b606081611acf5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611af95780611ae381612672565b9150611af29050600a836125c1565b9150611ad3565b60008167ffffffffffffffff811115611b2257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b4c576020820181803683370190505b5090505b84156116d957611b616001836125f4565b9150611b6e600a8661268d565b611b799060306125a9565b60f81b818381518110611b9c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611bbe600a866125c1565b9450611b50565b611bcf8383611d87565b611bdc6000848484611c7a565b61097e5760405162461bcd60e51b8152600401610848906124d1565b600081815b8451811015611c72576000858281518110611c2857634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611c4e5760008381526020829052604090209250611c5f565b600081815260208490526040902092505b5080611c6a81612672565b915050611bfd565b509392505050565b60006001600160a01b0384163b15611d7c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cbe903390899088908890600401612408565b602060405180830381600087803b158015611cd857600080fd5b505af1925050508015611d08575060408051601f3d908101601f19168201909252611d0591810190612201565b60015b611d62573d808015611d36576040519150601f19603f3d011682016040523d82523d6000602084013e611d3b565b606091505b508051611d5a5760405162461bcd60e51b8152600401610848906124d1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116d9565b506001949350505050565b6001600160a01b038216611ddd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610848565b6000818152600260205260409020546001600160a01b031615611e425760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610848565b6001600160a01b0382166000908152600360205260408120805460019290611e6b9084906125a9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611ed590612637565b90600052602060002090601f016020900481019282611ef75760008555611f3d565b82601f10611f1057805160ff1916838001178555611f3d565b82800160010185558215611f3d579182015b82811115611f3d578251825591602001919060010190611f22565b50611f49929150611f4d565b5090565b5b80821115611f495760008155600101611f4e565b600067ffffffffffffffff80841115611f7d57611f7d6126cd565b604051601f8501601f19908116603f01168101908282118183101715611fa557611fa56126cd565b81604052809350858152868686011115611fbe57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611fe9578081fd5b813561148d816126e3565b60008060408385031215612006578081fd5b8235612011816126e3565b946020939093013593505050565b60008060408385031215612031578182fd5b823561203c816126e3565b9150602083013561204c816126e3565b809150509250929050565b60008060006060848603121561206b578081fd5b8335612076816126e3565b92506020840135612086816126e3565b929592945050506040919091013590565b600080600080608085870312156120ac578081fd5b84356120b7816126e3565b935060208501356120c7816126e3565b925060408501359150606085013567ffffffffffffffff8111156120e9578182fd5b8501601f810187136120f9578182fd5b61210887823560208401611f62565b91505092959194509250565b60008060408385031215612126578182fd5b8235612131816126e3565b91506020830135801515811461204c578182fd5b60008060408385031215612006578182fd5b60008060006040848603121561216b578283fd5b833567ffffffffffffffff80821115612182578485fd5b818601915086601f830112612195578485fd5b8135818111156121a3578586fd5b8760208260051b85010111156121b7578586fd5b6020928301989097509590910135949350505050565b6000602082840312156121de578081fd5b5035919050565b6000602082840312156121f6578081fd5b813561148d816126f8565b600060208284031215612212578081fd5b815161148d816126f8565b60006020828403121561222e578081fd5b813567ffffffffffffffff811115612244578182fd5b8201601f81018413612254578182fd5b6116d984823560208401611f62565b60008060408385031215612275578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156122bc5781516001600160a01b031687529582019590820190600101612297565b509495945050505050565b6000815180845260208085019450808401835b838110156122bc578151875295820195908201906001016122da565b6000815180845261230e81602086016020860161260b565b601f01601f19169290920160200192915050565b6000825161233481846020870161260b565b9190910192915050565b6000835161235081846020880161260b565b83519083019061236481836020880161260b565b01949350505050565b600080835482600182811c91508083168061238957607f831692505b60208084108214156123a957634e487b7160e01b87526022600452602487fd5b8180156123bd57600181146123ce576123fa565b60ff198616895284890196506123fa565b60008a815260209020885b868110156123f25781548b8201529085019083016123d9565b505084890196505b509498975050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061243b908301846122f6565b9695505050505050565b60208152600061148d6020830184612284565b60408152600061246b6040830185612284565b828103602084015261247d81856122c7565b95945050505050565b60208152600061148d60208301846122c7565b60208152600061148d60208301846122f6565b6040815260006124bf60408301856122f6565b828103602084015261247d81856122f6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156125bc576125bc6126a1565b500190565b6000826125d0576125d06126b7565b500490565b60008160001904831182151516156125ef576125ef6126a1565b500290565b600082821015612606576126066126a1565b500390565b60005b8381101561262657818101518382015260200161260e565b8381111561125c5750506000910152565b600181811c9082168061264b57607f821691505b6020821081141561266c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612686576126866126a1565b5060010190565b60008261269c5761269c6126b7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e3157600080fd5b6001600160e01b031981168114610e3157600080fdfea264697066735822122018b644c685129677ee399dbfdbb4554d3858f18ef63c9084c3c90eb97f1a962964736f6c63430008040033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a07a0c67b30e10ae12016e98c8d35fa7f6894d568b5dc9b27c0f5c672a153bc249000000000000000000000000000000000000000000000000000000006277b2a000000000000000000000000000000000000000000000000000000000627a37a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000627a55a00000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000030900000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000e42696720466f6f74205072696e7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034246500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003568747470733a2f2f7374617469632e6a756d70696e7468656169722e636c75622f6d6574612f666f6f747072696e745f6d6574612f0000000000000000000000
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c80636352211e1161010d578063a22cb465116100a0578063bb3bafd61161006f578063bb3bafd6146105ec578063c87b56dd1461061a578063cde8c0e81461063a578063e985e9c514610692578063f2fde38b146106db57600080fd5b8063a22cb46514610552578063b4df1e1214610572578063b88d4fde1461059f578063b9c4d9fb146105bf57600080fd5b8063715018a6116100dc578063715018a6146104f55780637d8af4431461050a5780638da5cb5b1461051f57806395d89b411461053d57600080fd5b80636352211e146104805780636c2f5acd146104a05780636e34a482146104c057806370a08231146104d557600080fd5b806323b872dd1161018557806342842e0e1161015457806342842e0e1461040057806342966c681461042057806351cff8d91461044057806355f804b31461046057600080fd5b806323b872dd1461037b5780632a55205a1461039b5780632db11544146103da5780633b439351146103ed57600080fd5b8063095ea7b3116101c1578063095ea7b3146102bd5780630ebd4c7f146102df57806321d7b6491461030c57806321ff99701461035b57600080fd5b80630177209d146101f357806301ffc9a71461023357806306fdde0314610263578063081812fc14610285575b600080fd5b3480156101ff57600080fd5b5061022061020e366004611fd8565b60136020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561023f57600080fd5b5061025361024e3660046121e5565b6106fb565b604051901515815260200161022a565b34801561026f57600080fd5b50610278610741565b60405161022a9190612499565b34801561029157600080fd5b506102a56102a03660046121cd565b6107d3565b6040516001600160a01b03909116815260200161022a565b3480156102c957600080fd5b506102dd6102d8366004612145565b61086d565b005b3480156102eb57600080fd5b506102ff6102fa3660046121cd565b610983565b60405161022a9190612486565b34801561031857600080fd5b50600e54600f54601054601154601254610333949392919085565b604080519586526020860194909452928401919091526060830152608082015260a00161022a565b34801561036757600080fd5b506102dd6103763660046121cd565b6109ed565b34801561038757600080fd5b506102dd610396366004612057565b610a5d565b3480156103a757600080fd5b506103bb6103b6366004612263565b610a8e565b604080516001600160a01b03909316835260208301919091520161022a565b6102dd6103e83660046121cd565b610ac8565b6102dd6103fb366004612157565b610c26565b34801561040c57600080fd5b506102dd61041b366004612057565b610de3565b34801561042c57600080fd5b506102dd61043b3660046121cd565b610dfe565b34801561044c57600080fd5b506102dd61045b366004611fd8565b610e34565b34801561046c57600080fd5b506102dd61047b36600461221d565b610ea4565b34801561048c57600080fd5b506102a561049b3660046121cd565b610ffe565b3480156104ac57600080fd5b506102dd6104bb366004611ff4565b611075565b3480156104cc57600080fd5b506102786110c5565b3480156104e157600080fd5b506102206104f0366004611fd8565b611153565b34801561050157600080fd5b506102dd6111da565b34801561051657600080fd5b50610220600281565b34801561052b57600080fd5b506006546001600160a01b03166102a5565b34801561054957600080fd5b50610278611210565b34801561055e57600080fd5b506102dd61056d366004612114565b61121f565b34801561057e57600080fd5b5061022061058d366004611fd8565b60146020526000908152604090205481565b3480156105ab57600080fd5b506102dd6105ba366004612097565b61122a565b3480156105cb57600080fd5b506105df6105da3660046121cd565b611262565b60405161022a9190612445565b3480156105f857600080fd5b5061060c6106073660046121cd565b6112e9565b60405161022a929190612458565b34801561062657600080fd5b506102786106353660046121cd565b6113b9565b34801561064657600080fd5b50600854600954600a54600b54600c54600d5461066595949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161022a565b34801561069e57600080fd5b506102536106ad36600461201f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106e757600080fd5b506102dd6106f6366004611fd8565b611494565b60006001600160e01b031982166380ac58cd60e01b148061072c57506001600160e01b03198216635b5e139f60e01b145b8061073b575061073b8261152c565b92915050565b60606000805461075090612637565b80601f016020809104026020016040519081016040528092919081815260200182805461077c90612637565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061087882610ffe565b9050806001600160a01b0316836001600160a01b031614156108e65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610848565b336001600160a01b0382161480610902575061090281336106ad565b6109745760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610848565b61097e838361157c565b505050565b6016546060906001600160a01b0316156109e8576040805160018082528183019092529060208083019080368337019050509050601554816000815181106109db57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b919050565b6006546001600160a01b03163314610a175760405162461bcd60e51b815260040161084890612523565b600880549082905560408051838152602081018390527f809ea3bfb2b4c233654e9bd385eb6e59639fceb90b732f3bb6d13a9af80641d091015b60405180910390a15050565b610a6733826115ea565b610a835760405162461bcd60e51b815260040161084890612558565b61097e8383836116e1565b60165460155460009182916001600160a01b039091169061271090610ab390866125d5565b610abd91906125c1565b915091509250929050565b6011548190610ad89082906125d5565b341015610ae457600080fd5b600e54421015610af357600080fd5b33600090815260146020526040902054600290610b119084906125a9565b1115610b695760405162461bcd60e51b815260206004820152602160248201527f7075626c6963206d696e743a207265616368206d696e74206d6178206c696d696044820152601d60fa1b6064820152608401610848565b60008211610b7657600080fd5b6002821115610b8457600080fd5b601054601254610b959084906125a9565b1115610ba057600080fd5b60005b82811015610be357601254600f54610bd19133918491610bc2916125a9565b610bcc91906125a9565b61187d565b80610bdb81612672565b915050610ba3565b503360009081526014602052604081208054849290610c039084906125a9565b909155505060128054839190600090610c1d9084906125a9565b90915550505050565b600954421015610c3557600080fd5b600a54421115610c4457600080fd5b33600090815260136020526040902054600290610c629083906125a9565b1115610cb05760405162461bcd60e51b815260206004820152601b60248201527f636c61696d3a207265616368206d696e74206d6178206c696d697400000000006044820152606401610848565b60008111610cbd57600080fd5b6002811115610ccb57600080fd5b600c54600d54610cdc9083906125a9565b1115610ce757600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610d61848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506008549150849050611897565b610d6a57600080fd5b60005b82811015610d9e57600d54600b54610d8c9133918491610bc2916125a9565b80610d9681612672565b915050610d6d565b503360009081526013602052604081208054849290610dbe9084906125a9565b9091555050600d8054839190600090610dd89084906125a9565b909155505050505050565b61097e8383836040518060200160405280600081525061122a565b6006546001600160a01b03163314610e285760405162461bcd60e51b815260040161084890612523565b610e31816118ad565b50565b6006546001600160a01b03163314610e5e5760405162461bcd60e51b815260040161084890612523565b60004711610e6b57600080fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610ea0573d6000803e3d6000fd5b5050565b6006546001600160a01b03163314610ece5760405162461bcd60e51b815260040161084890612523565b80604051602001610edf9190612322565b604051602081830303815290604052805190602001206007604051602001610f07919061236d565b604051602081830303815290604052805190602001201415610f2857600080fd5b600060078054610f3790612637565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6390612637565b8015610fb05780601f10610f8557610100808354040283529160200191610fb0565b820191906000526020600020905b815481529060010190602001808311610f9357829003601f168201915b50508551939450610fcc93600793506020870192509050611ec9565b507fc41b7cb64e5be01af4afc2641afc861432136270f4206b7773f229b658b966998183604051610a519291906124ac565b6000818152600260205260408120546001600160a01b03168061073b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610848565b6006546001600160a01b0316331461109f5760405162461bcd60e51b815260040161084890612523565b601680546001600160a01b0319166001600160a01b039390931692909217909155601555565b600780546110d290612637565b80601f01602080910402602001604051908101604052809291908181526020018280546110fe90612637565b801561114b5780601f106111205761010080835404028352916020019161114b565b820191906000526020600020905b81548152906001019060200180831161112e57829003601f168201915b505050505081565b60006001600160a01b0382166111be5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610848565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146112045760405162461bcd60e51b815260040161084890612523565b61120e6000611948565b565b60606001805461075090612637565b610ea033838361199a565b61123433836115ea565b6112505760405162461bcd60e51b815260040161084890612558565b61125c84848484611a69565b50505050565b6016546060906001600160a01b0316156109e8576040805160018082528183019092529060208083019080368337505060165482519293506001600160a01b0316918391506000906112c457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b60165460609081906001600160a01b0316156113b4576040805160018082528183019092529060208083019080368337505060165482519294506001600160a01b03169184915060009061134d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516001808252818301909252918281019080368337019050509050601554816000815181106113a757634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b915091565b6000818152600260205260409020546060906001600160a01b03166114385760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610848565b6000611442611a9c565b90506000815111611462576040518060200160405280600081525061148d565b8061146c84611aab565b60405160200161147d92919061233e565b6040516020818303038152906040525b9392505050565b6006546001600160a01b031633146114be5760405162461bcd60e51b815260040161084890612523565b6001600160a01b0381166115235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610848565b610e3181611948565b60006001600160e01b031982166380ac58cd60e01b148061155d57506001600160e01b03198216635b5e139f60e01b145b8061073b57506301ffc9a760e01b6001600160e01b031983161461073b565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115b182610ffe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166116635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610848565b600061166e83610ffe565b9050806001600160a01b0316846001600160a01b031614806116a95750836001600160a01b031661169e846107d3565b6001600160a01b0316145b806116d957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166116f482610ffe565b6001600160a01b0316146117585760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610848565b6001600160a01b0382166117ba5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610848565b6117c560008261157c565b6001600160a01b03831660009081526003602052604081208054600192906117ee9084906125f4565b90915550506001600160a01b038216600090815260036020526040812080546001929061181c9084906125a9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ea0828260405180602001604052806000815250611bc5565b6000826118a48584611bf8565b14949350505050565b60006118b882610ffe565b90506118c560008361157c565b6001600160a01b03811660009081526003602052604081208054600192906118ee9084906125f4565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156119fc5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610848565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a748484846116e1565b611a8084848484611c7a565b61125c5760405162461bcd60e51b8152600401610848906124d1565b60606007805461075090612637565b606081611acf5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611af95780611ae381612672565b9150611af29050600a836125c1565b9150611ad3565b60008167ffffffffffffffff811115611b2257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b4c576020820181803683370190505b5090505b84156116d957611b616001836125f4565b9150611b6e600a8661268d565b611b799060306125a9565b60f81b818381518110611b9c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611bbe600a866125c1565b9450611b50565b611bcf8383611d87565b611bdc6000848484611c7a565b61097e5760405162461bcd60e51b8152600401610848906124d1565b600081815b8451811015611c72576000858281518110611c2857634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611c4e5760008381526020829052604090209250611c5f565b600081815260208490526040902092505b5080611c6a81612672565b915050611bfd565b509392505050565b60006001600160a01b0384163b15611d7c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cbe903390899088908890600401612408565b602060405180830381600087803b158015611cd857600080fd5b505af1925050508015611d08575060408051601f3d908101601f19168201909252611d0591810190612201565b60015b611d62573d808015611d36576040519150601f19603f3d011682016040523d82523d6000602084013e611d3b565b606091505b508051611d5a5760405162461bcd60e51b8152600401610848906124d1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116d9565b506001949350505050565b6001600160a01b038216611ddd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610848565b6000818152600260205260409020546001600160a01b031615611e425760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610848565b6001600160a01b0382166000908152600360205260408120805460019290611e6b9084906125a9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611ed590612637565b90600052602060002090601f016020900481019282611ef75760008555611f3d565b82601f10611f1057805160ff1916838001178555611f3d565b82800160010185558215611f3d579182015b82811115611f3d578251825591602001919060010190611f22565b50611f49929150611f4d565b5090565b5b80821115611f495760008155600101611f4e565b600067ffffffffffffffff80841115611f7d57611f7d6126cd565b604051601f8501601f19908116603f01168101908282118183101715611fa557611fa56126cd565b81604052809350858152868686011115611fbe57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611fe9578081fd5b813561148d816126e3565b60008060408385031215612006578081fd5b8235612011816126e3565b946020939093013593505050565b60008060408385031215612031578182fd5b823561203c816126e3565b9150602083013561204c816126e3565b809150509250929050565b60008060006060848603121561206b578081fd5b8335612076816126e3565b92506020840135612086816126e3565b929592945050506040919091013590565b600080600080608085870312156120ac578081fd5b84356120b7816126e3565b935060208501356120c7816126e3565b925060408501359150606085013567ffffffffffffffff8111156120e9578182fd5b8501601f810187136120f9578182fd5b61210887823560208401611f62565b91505092959194509250565b60008060408385031215612126578182fd5b8235612131816126e3565b91506020830135801515811461204c578182fd5b60008060408385031215612006578182fd5b60008060006040848603121561216b578283fd5b833567ffffffffffffffff80821115612182578485fd5b818601915086601f830112612195578485fd5b8135818111156121a3578586fd5b8760208260051b85010111156121b7578586fd5b6020928301989097509590910135949350505050565b6000602082840312156121de578081fd5b5035919050565b6000602082840312156121f6578081fd5b813561148d816126f8565b600060208284031215612212578081fd5b815161148d816126f8565b60006020828403121561222e578081fd5b813567ffffffffffffffff811115612244578182fd5b8201601f81018413612254578182fd5b6116d984823560208401611f62565b60008060408385031215612275578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156122bc5781516001600160a01b031687529582019590820190600101612297565b509495945050505050565b6000815180845260208085019450808401835b838110156122bc578151875295820195908201906001016122da565b6000815180845261230e81602086016020860161260b565b601f01601f19169290920160200192915050565b6000825161233481846020870161260b565b9190910192915050565b6000835161235081846020880161260b565b83519083019061236481836020880161260b565b01949350505050565b600080835482600182811c91508083168061238957607f831692505b60208084108214156123a957634e487b7160e01b87526022600452602487fd5b8180156123bd57600181146123ce576123fa565b60ff198616895284890196506123fa565b60008a815260209020885b868110156123f25781548b8201529085019083016123d9565b505084890196505b509498975050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061243b908301846122f6565b9695505050505050565b60208152600061148d6020830184612284565b60408152600061246b6040830185612284565b828103602084015261247d81856122c7565b95945050505050565b60208152600061148d60208301846122c7565b60208152600061148d60208301846122f6565b6040815260006124bf60408301856122f6565b828103602084015261247d81856122f6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156125bc576125bc6126a1565b500190565b6000826125d0576125d06126b7565b500490565b60008160001904831182151516156125ef576125ef6126a1565b500290565b600082821015612606576126066126a1565b500390565b60005b8381101561262657818101518382015260200161260e565b8381111561125c5750506000910152565b600181811c9082168061264b57607f821691505b6020821081141561266c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612686576126866126a1565b5060010190565b60008261269c5761269c6126b7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e3157600080fd5b6001600160e01b031981168114610e3157600080fdfea264697066735822122018b644c685129677ee399dbfdbb4554d3858f18ef63c9084c3c90eb97f1a962964736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a07a0c67b30e10ae12016e98c8d35fa7f6894d568b5dc9b27c0f5c672a153bc249000000000000000000000000000000000000000000000000000000006277b2a000000000000000000000000000000000000000000000000000000000627a37a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000627a55a00000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000030900000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000e42696720466f6f74205072696e7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034246500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003568747470733a2f2f7374617469632e6a756d70696e7468656169722e636c75622f6d6574612f666f6f747072696e745f6d6574612f0000000000000000000000
-----Decoded View---------------
Arg [0] : owner_ (address): 0x0000000000000000000000000000000000000000
Arg [1] : baseInfo_ (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [2] : ogMint_ (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [3] : publicMint_ (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
23 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 7a0c67b30e10ae12016e98c8d35fa7f6894d568b5dc9b27c0f5c672a153bc249
Arg [3] : 000000000000000000000000000000000000000000000000000000006277b2a0
Arg [4] : 00000000000000000000000000000000000000000000000000000000627a37a0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 00000000000000000000000000000000000000000000000000000000627a55a0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000309
Arg [11] : 00000000000000000000000000000000000000000000000000470de4df820000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [14] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [15] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [16] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [17] : 42696720466f6f74205072696e74000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [19] : 4246500000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [21] : 68747470733a2f2f7374617469632e6a756d70696e7468656169722e636c7562
Arg [22] : 2f6d6574612f666f6f747072696e745f6d6574612f0000000000000000000000
Deployed Bytecode Sourcemap
42870:6712:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43497:50;;;;;;;;;;-1:-1:-1;43497:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;20585:25:1;;;20573:2;20558:18;43497:50:0;;;;;;;;42452:346;;;;;;;;;;-1:-1:-1;42452:346:0;;;;;:::i;:::-;;:::i;:::-;;;11873:14:1;;11866:22;11848:41;;11836:2;11821:18;42452:346:0;11803:92:1;25959:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27652:308::-;;;;;;;;;;-1:-1:-1;27652:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9842:32:1;;;9824:51;;9812:2;9797:18;27652:308:0;9779:102:1;27175:411:0;;;;;;;;;;-1:-1:-1;27175:411:0;;;;;:::i;:::-;;:::i;:::-;;49142:235;;;;;;;;;;-1:-1:-1;49142:235:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43461:29::-;;;;;;;;;;-1:-1:-1;43461:29:0;;;;;;;;;;;;;;;;;;;;;;20880:25:1;;;20936:2;20921:18;;20914:34;;;;20964:18;;;20957:34;;;;21022:2;21007:18;;21000:34;21065:3;21050:19;;21043:35;20867:3;20852:19;43461:29:0;20834:250:1;45828:194:0;;;;;;;;;;-1:-1:-1;45828:194:0;;;;;:::i;:::-;;:::i;28571:376::-;;;;;;;;;;-1:-1:-1;28571:376:0;;;;;:::i;:::-;;:::i;49385:194::-;;;;;;;;;;-1:-1:-1;49385:194:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;10571:32:1;;;10553:51;;10635:2;10620:18;;10613:34;;;;10526:18;49385:194:0;10508:145:1;47097:884:0;;;;;;:::i;:::-;;:::i;46055:1009::-;;;;;;:::i;:::-;;:::i;29018:185::-;;;;;;;;;;-1:-1:-1;29018:185:0;;;;;:::i;:::-;;:::i;41894:81::-;;;;;;;;;;-1:-1:-1;41894:81:0;;;;;:::i;:::-;;:::i;47989:167::-;;;;;;;;;;-1:-1:-1;47989:167:0;;;;;:::i;:::-;;:::i;42101:343::-;;;;;;;;;;-1:-1:-1;42101:343:0;;;;;:::i;:::-;;:::i;25566:326::-;;;;;;;;;;-1:-1:-1;25566:326:0;;;;;:::i;:::-;;:::i;48190:183::-;;;;;;;;;;-1:-1:-1;48190:183:0;;;;;:::i;:::-;;:::i;41609:23::-;;;;;;;;;;;;;:::i;25209:295::-;;;;;;;;;;-1:-1:-1;25209:295:0;;;;;:::i;:::-;;:::i;40604:103::-;;;;;;;;;;;;;:::i;43617:53::-;;;;;;;;;;;;43669:1;43617:53;;39953:87;;;;;;;;;;-1:-1:-1;40026:6:0;;-1:-1:-1;;;;;40026:6:0;39953:87;;26128:104;;;;;;;;;;;;;:::i;28032:187::-;;;;;;;;;;-1:-1:-1;28032:187:0;;;;;:::i;:::-;;:::i;43554:54::-;;;;;;;;;;-1:-1:-1;43554:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;29274:365;;;;;;;;;;-1:-1:-1;29274:365:0;;;;;:::i;:::-;;:::i;48810:324::-;;;;;;;;;;-1:-1:-1;48810:324:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;48381:421::-;;;;;;;;;;-1:-1:-1;48381:421:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;26303:468::-;;;;;;;;;;-1:-1:-1;26303:468:0;;;;;:::i;:::-;;:::i;43433:21::-;;;;;;;;;;-1:-1:-1;43433:21:0;;;;;;;;;;;;;;;;;;;;;;;;;12440:25:1;;;12496:2;12481:18;;12474:34;;;;12524:18;;;12517:34;;;;12582:2;12567:18;;12560:34;12625:3;12610:19;;12603:35;12669:3;12654:19;;12647:35;12427:3;12412:19;43433:21:0;12394:294:1;28290:214:0;;;;;;;;;;-1:-1:-1;28290:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;28461:25:0;;;28432:4;28461:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28290:214;40862:238;;;;;;;;;;-1:-1:-1;40862:238:0;;;;;:::i;:::-;;:::i;42452:346::-;42590:4;-1:-1:-1;;;;;;42632:40:0;;-1:-1:-1;;;42632:40:0;;:105;;-1:-1:-1;;;;;;;42689:48:0;;-1:-1:-1;;;42689:48:0;42632:105;:158;;;;42754:36;42778:11;42754:23;:36::i;:::-;42612:178;42452:346;-1:-1:-1;;42452:346:0:o;25959:100::-;26013:13;26046:5;26039:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25959:100;:::o;27652:308::-;27773:7;31275:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31275:16:0;27798:110;;;;-1:-1:-1;;;27798:110:0;;17873:2:1;27798:110:0;;;17855:21:1;17912:2;17892:18;;;17885:30;17951:34;17931:18;;;17924:62;-1:-1:-1;;;18002:18:1;;;17995:42;18054:19;;27798:110:0;;;;;;;;;-1:-1:-1;27928:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27928:24:0;;27652:308::o;27175:411::-;27256:13;27272:23;27287:7;27272:14;:23::i;:::-;27256:39;;27320:5;-1:-1:-1;;;;;27314:11:0;:2;-1:-1:-1;;;;;27314:11:0;;;27306:57;;;;-1:-1:-1;;;27306:57:0;;19063:2:1;27306:57:0;;;19045:21:1;19102:2;19082:18;;;19075:30;19141:34;19121:18;;;19114:62;-1:-1:-1;;;19192:18:1;;;19185:31;19233:19;;27306:57:0;19035:223:1;27306:57:0;20018:10;-1:-1:-1;;;;;27398:21:0;;;;:62;;-1:-1:-1;27423:37:0;27440:5;20018:10;28290:214;:::i;27423:37::-;27376:168;;;;-1:-1:-1;;;27376:168:0;;16266:2:1;27376:168:0;;;16248:21:1;16305:2;16285:18;;;16278:30;16344:34;16324:18;;;16317:62;16415:26;16395:18;;;16388:54;16459:19;;27376:168:0;16238:246:1;27376:168:0;27557:21;27566:2;27570:7;27557:8;:21::i;:::-;27175:411;;;:::o;49142:235::-;49230:17;;49193:20;;-1:-1:-1;;;;;49230:17:0;:33;49226:123;;49286:16;;;49300:1;49286:16;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49286:16:0;49280:22;;49326:11;;49317:3;49321:1;49317:6;;;;;;-1:-1:-1;;;49317:6:0;;;;;;;;;;;;;;:20;;;;;49226:123;49142:235;;;:::o;45828:194::-;40026:6;;-1:-1:-1;;;;;40026:6:0;20018:10;40173:23;40165:68;;;;-1:-1:-1;;;40165:68:0;;;;;;;:::i;:::-;45911:7:::1;:18:::0;;45940:28;;;;45986::::1;::::0;;12074:25:1;;;12130:2;12115:18;;12108:34;;;45986:28:0::1;::::0;12047:18:1;45986:28:0::1;;;;;;;;40244:1;45828:194:::0;:::o;28571:376::-;28780:41;20018:10;28813:7;28780:18;:41::i;:::-;28758:140;;;;-1:-1:-1;;;28758:140:0;;;;;;;:::i;:::-;28911:28;28921:4;28927:2;28931:7;28911:9;:28::i;49385:194::-;49522:17;;49550:11;;49480:7;;;;-1:-1:-1;;;;;49522:17:0;;;;49565:5;;49542:19;;:5;:19;:::i;:::-;49541:29;;;;:::i;:::-;49514:57;;;;49385:194;;;;;:::o;47097:884::-;45157:17;;47196:7;;45157:27;;47196:7;;45157:27;:::i;:::-;45144:9;:40;;45136:49;;;;;;44420:11:::1;:21:::0;44445:15:::1;-1:-1:-1::0;44420:40:0::1;44412:49;;;::::0;::::1;;47324:10:::2;47304:31;::::0;;;:19:::2;:31;::::0;;;;;43669:1:::2;::::0;47304:41:::2;::::0;47338:7;;47304:41:::2;:::i;:::-;:87;;47282:170;;;::::0;-1:-1:-1;;;47282:170:0;;19883:2:1;47282:170:0::2;::::0;::::2;19865:21:1::0;19922:2;19902:18;;;19895:30;19961:34;19941:18;;;19934:62;-1:-1:-1;;;20012:18:1;;;20005:31;20053:19;;47282:170:0::2;19855:223:1::0;47282:170:0::2;47483:1;47473:7;:11;47465:20;;;::::0;::::2;;43669:1;47504:7;:36;;47496:45;;;::::0;::::2;;47630:23:::0;;47592:24;;:34:::2;::::0;47619:7;;47592:34:::2;:::i;:::-;:61;;47584:70;;;::::0;::::2;;47689:9;47684:187;47708:7;47704:1;:11;47684:187;;;47816:24:::0;;47794:19;;47737:122:::2;::::0;47765:10:::2;::::0;47843:1;;47794:46:::2;::::0;::::2;:::i;:::-;:50;;;;:::i;:::-;47737:9;:122::i;:::-;47717:3:::0;::::2;::::0;::::2;:::i;:::-;;;;47684:187;;;-1:-1:-1::0;47903:10:0::2;47883:31;::::0;;;:19:::2;:31;::::0;;;;:42;;47918:7;;47883:31;:42:::2;::::0;47918:7;;47883:42:::2;:::i;:::-;::::0;;;-1:-1:-1;;47938:24:0;:35;;47966:7;;47938:24;::::2;::::0;:35:::2;::::0;47966:7;;47938:35:::2;:::i;:::-;::::0;;;-1:-1:-1;;;;47097:884:0:o;46055:1009::-;44255:17;;44276:15;-1:-1:-1;44255:36:0;44247:45;;;;;;44311:15;;44330;-1:-1:-1;44311:34:0;44303:43;;;;;;46261:10:::1;46245:27;::::0;;;:15:::1;:27;::::0;;;;;43669:1:::1;::::0;46245:37:::1;::::0;46275:7;;46245:37:::1;:::i;:::-;:66;;46223:143;;;::::0;-1:-1:-1;;;46223:143:0;;20285:2:1;46223:143:0::1;::::0;::::1;20267:21:1::0;20324:2;20304:18;;;20297:30;20363:29;20343:18;;;20336:57;20410:18;;46223:143:0::1;20257:177:1::0;46223:143:0::1;46397:1;46387:7;:11;46379:20;;;::::0;::::1;;43669:1;46418:7;:36;;46410:45;;;::::0;::::1;;46540:19:::0;;46506:20;;:30:::1;::::0;46529:7;;46506:30:::1;:::i;:::-;:53;;46498:62;;;::::0;::::1;;46627:28;::::0;-1:-1:-1;;46644:10:0::1;7729:2:1::0;7725:15;7721:53;46627:28:0::1;::::0;::::1;7709:66:1::0;46602:12:0::1;::::0;7791::1;;46627:28:0::1;;;;;;;;;;;;46617:39;;;;;;46602:54;;46675:52;46694:6;;46675:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;46702:7:0::1;:18:::0;;-1:-1:-1;46722:4:0;;-1:-1:-1;46675:18:0::1;:52::i;:::-;46667:61;;;::::0;::::1;;46763:9;46758:130;46782:7;46778:1;:11;46758:130;;;46851:20:::0;;46833:15;;46811:65:::1;::::0;46821:10:::1;::::0;46874:1;;46833:38:::1;::::0;::::1;:::i;46811:65::-;46791:3:::0;::::1;::::0;::::1;:::i;:::-;;;;46758:130;;;-1:-1:-1::0;46956:10:0::1;46940:27;::::0;;;:15:::1;:27;::::0;;;;:38;;46971:7;;46940:27;:38:::1;::::0;46971:7;;46940:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;47025:20:0;:31;;47049:7;;47025:20;::::1;::::0;:31:::1;::::0;47049:7;;47025:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;46055:1009:0:o;29018:185::-;29156:39;29173:4;29179:2;29183:7;29156:39;;;;;;;;;;;;:16;:39::i;41894:81::-;40026:6;;-1:-1:-1;;;;;40026:6:0;20018:10;40173:23;40165:68;;;;-1:-1:-1;;;40165:68:0;;;;;;;:::i;:::-;41953:14:::1;41959:7;41953:5;:14::i;:::-;41894:81:::0;:::o;47989:167::-;40026:6;;-1:-1:-1;;;;;40026:6:0;20018:10;40173:23;40165:68;;;;-1:-1:-1;;;40165:68:0;;;;;;;:::i;:::-;48095:1:::1;48071:21;:25;48063:34;;;::::0;::::1;;48108:40;::::0;-1:-1:-1;;;;;48108:17:0;::::1;::::0;48126:21:::1;48108:40:::0;::::1;;;::::0;::::1;::::0;;;48126:21;48108:17;:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;47989:167:::0;:::o;42101:343::-;40026:6;;-1:-1:-1;;;;;40026:6:0;20018:10;40173:23;40165:68;;;;-1:-1:-1;;;40165:68:0;;;;;;;:::i;:::-;42281:8:::1;42264:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;42254:37;;;;;;42222:9;42205:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;42195:38;;;;;;:96;;42173:129;;;::::0;::::1;;42315:24;42342:9;42315:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;42362:20:0;;42315:36;;-1:-1:-1;42362:20:0::1;::::0;:9:::1;::::0;-1:-1:-1;42362:20:0::1;::::0;::::1;::::0;-1:-1:-1;42362:20:0;-1:-1:-1;42362:20:0::1;:::i;:::-;;42400:36;42415:10;42427:8;42400:36;;;;;;;:::i;25566:326::-:0;25683:7;25724:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25724:16:0;25773:19;25751:110;;;;-1:-1:-1;;;25751:110:0;;17102:2:1;25751:110:0;;;17084:21:1;17141:2;17121:18;;;17114:30;17180:34;17160:18;;;17153:62;-1:-1:-1;;;17231:18:1;;;17224:39;17280:19;;25751:110:0;17074:231:1;48190:183:0;40026:6;;-1:-1:-1;;;;;40026:6:0;20018:10;40173:23;40165:68;;;;-1:-1:-1;;;40165:68:0;;;;;;;:::i;:::-;48308:17:::1;:29:::0;;-1:-1:-1;;;;;;48308:29:0::1;-1:-1:-1::0;;;;;48308:29:0;;;::::1;::::0;;;::::1;::::0;;;48348:11:::1;:17:::0;48190:183::o;41609:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25209:295::-;25326:7;-1:-1:-1;;;;;25373:19:0;;25351:111;;;;-1:-1:-1;;;25351:111:0;;16691:2:1;25351:111:0;;;16673:21:1;16730:2;16710:18;;;16703:30;16769:34;16749:18;;;16742:62;-1:-1:-1;;;16820:18:1;;;16813:40;16870:19;;25351:111:0;16663:232:1;25351:111:0;-1:-1:-1;;;;;;25480:16:0;;;;;:9;:16;;;;;;;25209:295::o;40604:103::-;40026:6;;-1:-1:-1;;;;;40026:6:0;20018:10;40173:23;40165:68;;;;-1:-1:-1;;;40165:68:0;;;;;;;:::i;:::-;40669:30:::1;40696:1;40669:18;:30::i;:::-;40604:103::o:0;26128:104::-;26184:13;26217:7;26210:14;;;;;:::i;28032:187::-;28159:52;20018:10;28192:8;28202;28159:18;:52::i;29274:365::-;29463:41;20018:10;29496:7;29463:18;:41::i;:::-;29441:140;;;;-1:-1:-1;;;29441:140:0;;;;;;;:::i;:::-;29592:39;29606:4;29612:2;29616:7;29625:5;29592:13;:39::i;:::-;29274:365;;;;:::o;48810:324::-;48952:17;;48895:35;;-1:-1:-1;;;;;48952:17:0;:33;48948:151;;49015:24;;;49037:1;49015:24;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49070:17:0;;49054:13;;;;-1:-1:-1;;;;;;49070:17:0;;49054:13;;-1:-1:-1;49070:17:0;;49054:13;;-1:-1:-1;;;49054:13:0;;;;;;;;;;;;;;:33;-1:-1:-1;;;;;49054:33:0;;;-1:-1:-1;;;;;49054:33:0;;;;;48810:324;;;:::o;48381:421::-;48541:17;;48462:35;;;;-1:-1:-1;;;;;48541:17:0;:33;48537:223;;48604:24;;;48626:1;48604:24;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48659:17:0;;48643:13;;;;-1:-1:-1;;;;;;48659:17:0;;48643:13;;-1:-1:-1;48659:17:0;;48643:13;;-1:-1:-1;;;48643:13:0;;;;;;;;;-1:-1:-1;;;;;48643:33:0;;;;:13;;;;;;;;;;:33;48697:16;;;48711:1;48697:16;;;;;;;;;;;;;;48643:13;48697:16;;;;;-1:-1:-1;48697:16:0;48691:22;;48737:11;;48728:3;48732:1;48728:6;;;;;;-1:-1:-1;;;48728:6:0;;;;;;;;;;;;;;:20;;;;;48537:223;48381:421;;;:::o;26303:468::-;31251:4;31275:16;;;:7;:16;;;;;;26421:13;;-1:-1:-1;;;;;31275:16:0;26452:113;;;;-1:-1:-1;;;26452:113:0;;18647:2:1;26452:113:0;;;18629:21:1;18686:2;18666:18;;;18659:30;18725:34;18705:18;;;18698:62;-1:-1:-1;;;18776:18:1;;;18769:45;18831:19;;26452:113:0;18619:237:1;26452:113:0;26578:21;26602:10;:8;:10::i;:::-;26578:34;;26667:1;26649:7;26643:21;:25;:120;;;;;;;;;;;;;;;;;26712:7;26721:18;:7;:16;:18::i;:::-;26695:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26643:120;26623:140;26303:468;-1:-1:-1;;;26303:468:0:o;40862:238::-;40026:6;;-1:-1:-1;;;;;40026:6:0;20018:10;40173:23;40165:68;;;;-1:-1:-1;;;40165:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40965:22:0;::::1;40943:110;;;::::0;-1:-1:-1;;;40943:110:0;;13924:2:1;40943:110:0::1;::::0;::::1;13906:21:1::0;13963:2;13943:18;;;13936:30;14002:34;13982:18;;;13975:62;-1:-1:-1;;;14053:18:1;;;14046:36;14099:19;;40943:110:0::1;13896:228:1::0;40943:110:0::1;41064:28;41083:8;41064:18;:28::i;24790:355::-:0;24937:4;-1:-1:-1;;;;;;24979:40:0;;-1:-1:-1;;;24979:40:0;;:105;;-1:-1:-1;;;;;;;25036:48:0;;-1:-1:-1;;;25036:48:0;24979:105;:158;;;-1:-1:-1;;;;;;;;;;23338:40:0;;;25101:36;23179:207;35473:174;35548:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35548:29:0;-1:-1:-1;;;;;35548:29:0;;;;;;;;:24;;35602:23;35548:24;35602:14;:23::i;:::-;-1:-1:-1;;;;;35593:46:0;;;;;;;;;;;35473:174;;:::o;31480:452::-;31609:4;31275:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31275:16:0;31631:110;;;;-1:-1:-1;;;31631:110:0;;15853:2:1;31631:110:0;;;15835:21:1;15892:2;15872:18;;;15865:30;15931:34;15911:18;;;15904:62;-1:-1:-1;;;15982:18:1;;;15975:42;16034:19;;31631:110:0;15825:234:1;31631:110:0;31752:13;31768:23;31783:7;31768:14;:23::i;:::-;31752:39;;31821:5;-1:-1:-1;;;;;31810:16:0;:7;-1:-1:-1;;;;;31810:16:0;;:64;;;;31867:7;-1:-1:-1;;;;;31843:31:0;:20;31855:7;31843:11;:20::i;:::-;-1:-1:-1;;;;;31843:31:0;;31810:64;:113;;;-1:-1:-1;;;;;;28461:25:0;;;28432:4;28461:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31891:32;31802:122;31480:452;-1:-1:-1;;;;31480:452:0:o;34693:662::-;34866:4;-1:-1:-1;;;;;34839:31:0;:23;34854:7;34839:14;:23::i;:::-;-1:-1:-1;;;;;34839:31:0;;34817:118;;;;-1:-1:-1;;;34817:118:0;;14331:2:1;34817:118:0;;;14313:21:1;14370:2;14350:18;;;14343:30;14409:34;14389:18;;;14382:62;-1:-1:-1;;;14460:18:1;;;14453:35;14505:19;;34817:118:0;14303:227:1;34817:118:0;-1:-1:-1;;;;;34954:16:0;;34946:65;;;;-1:-1:-1;;;34946:65:0;;15094:2:1;34946:65:0;;;15076:21:1;15133:2;15113:18;;;15106:30;15172:34;15152:18;;;15145:62;-1:-1:-1;;;15223:18:1;;;15216:34;15267:19;;34946:65:0;15066:226:1;34946:65:0;35128:29;35145:1;35149:7;35128:8;:29::i;:::-;-1:-1:-1;;;;;35170:15:0;;;;;;:9;:15;;;;;:20;;35189:1;;35170:15;:20;;35189:1;;35170:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35201:13:0;;;;;;:9;:13;;;;;:18;;35218:1;;35201:13;:18;;35218:1;;35201:18;:::i;:::-;;;;-1:-1:-1;;35230:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35230:21:0;-1:-1:-1;;;;;35230:21:0;;;;;;;;;35269:27;;35230:16;;35269:27;;;;;;;27175:411;;;:::o;32274:110::-;32350:26;32360:2;32364:7;32350:26;;;;;;;;;;;;:9;:26::i;960:190::-;1085:4;1138;1109:25;1122:5;1129:4;1109:12;:25::i;:::-;:33;;960:190;-1:-1:-1;;;;960:190:0:o;33936:420::-;33996:13;34012:23;34027:7;34012:14;:23::i;:::-;33996:39;;34137:29;34154:1;34158:7;34137:8;:29::i;:::-;-1:-1:-1;;;;;34179:16:0;;;;;;:9;:16;;;;;:21;;34199:1;;34179:16;:21;;34199:1;;34179:21;:::i;:::-;;;;-1:-1:-1;;34218:16:0;;;;:7;:16;;;;;;34211:23;;-1:-1:-1;;;;;;34211:23:0;;;34252:36;34226:7;;34218:16;-1:-1:-1;;;;;34252:36:0;;;;;34218:16;;34252:36;48108:40:::1;47989:167:::0;:::o;41260:191::-;41353:6;;;-1:-1:-1;;;;;41370:17:0;;;-1:-1:-1;;;;;;41370:17:0;;;;;;;41403:40;;41353:6;;;41370:17;41353:6;;41403:40;;41334:16;;41403:40;41260:191;;:::o;35789:315::-;35944:8;-1:-1:-1;;;;;35935:17:0;:5;-1:-1:-1;;;;;35935:17:0;;;35927:55;;;;-1:-1:-1;;;35927:55:0;;15499:2:1;35927:55:0;;;15481:21:1;15538:2;15518:18;;;15511:30;15577:27;15557:18;;;15550:55;15622:18;;35927:55:0;15471:175:1;35927:55:0;-1:-1:-1;;;;;35993:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35993:46:0;;;;;;;;;;36055:41;;11848::1;;;36055::0;;11821:18:1;36055:41:0;;;;;;;35789:315;;;:::o;30521:352::-;30678:28;30688:4;30694:2;30698:7;30678:9;:28::i;:::-;30739:48;30762:4;30768:2;30772:7;30781:5;30739:22;:48::i;:::-;30717:148;;;;-1:-1:-1;;;30717:148:0;;;;;;;:::i;41983:110::-;42043:13;42076:9;42069:16;;;;;:::i;20521:723::-;20577:13;20798:10;20794:53;;-1:-1:-1;;20825:10:0;;;;;;;;;;;;-1:-1:-1;;;20825:10:0;;;;;20521:723::o;20794:53::-;20872:5;20857:12;20913:78;20920:9;;20913:78;;20946:8;;;;:::i;:::-;;-1:-1:-1;20969:10:0;;-1:-1:-1;20977:2:0;20969:10;;:::i;:::-;;;20913:78;;;21001:19;21033:6;21023:17;;;;;;-1:-1:-1;;;21023:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21023:17:0;;21001:39;;21051:154;21058:10;;21051:154;;21085:11;21095:1;21085:11;;:::i;:::-;;-1:-1:-1;21154:10:0;21162:2;21154:5;:10;:::i;:::-;21141:24;;:2;:24;:::i;:::-;21128:39;;21111:6;21118;21111:14;;;;;;-1:-1:-1;;;21111:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;21111:56:0;;;;;;;;-1:-1:-1;21182:11:0;21191:2;21182:11;;:::i;:::-;;;21051:154;;32611:321;32741:18;32747:2;32751:7;32741:5;:18::i;:::-;32792:54;32823:1;32827:2;32831:7;32840:5;32792:22;:54::i;:::-;32770:154;;;;-1:-1:-1;;;32770:154:0;;;;;;;:::i;1512:707::-;1622:7;1670:4;1622:7;1685:497;1709:5;:12;1705:1;:16;1685:497;;;1743:20;1766:5;1772:1;1766:8;;;;;;-1:-1:-1;;;1766:8:0;;;;;;;;;;;;;;;1743:31;;1809:12;1793;:28;1789:382;;2322:13;2377:15;;;2413:4;2406:15;;;2460:4;2444:21;;1921:57;;1789:382;;;2322:13;2377:15;;;2413:4;2406:15;;;2460:4;2444:21;;2098:57;;1789:382;-1:-1:-1;1723:3:0;;;;:::i;:::-;;;;1685:497;;;-1:-1:-1;2199:12:0;1512:707;-1:-1:-1;;;1512:707:0:o;36669:980::-;36824:4;-1:-1:-1;;;;;36845:13:0;;11813:19;:23;36841:801;;36898:175;;-1:-1:-1;;;36898:175:0;;-1:-1:-1;;;;;36898:36:0;;;;;:175;;20018:10;;36992:4;;37019:7;;37049:5;;36898:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36898:175:0;;;;;;;;-1:-1:-1;;36898:175:0;;;;;;;;;;;;:::i;:::-;;;36877:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37256:13:0;;37252:320;;37299:108;;-1:-1:-1;;;37299:108:0;;;;;;;:::i;37252:320::-;37522:6;37516:13;37507:6;37503:2;37499:15;37492:38;36877:710;-1:-1:-1;;;;;;37137:51:0;-1:-1:-1;;;37137:51:0;;-1:-1:-1;37130:58:0;;36841:801;-1:-1:-1;37626:4:0;36669:980;;;;;;:::o;33268:439::-;-1:-1:-1;;;;;33348:16:0;;33340:61;;;;-1:-1:-1;;;33340:61:0;;17512:2:1;33340:61:0;;;17494:21:1;;;17531:18;;;17524:30;17590:34;17570:18;;;17563:62;17642:18;;33340:61:0;17484:182:1;33340:61:0;31251:4;31275:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31275:16:0;:30;33412:58;;;;-1:-1:-1;;;33412:58:0;;14737:2:1;33412:58:0;;;14719:21:1;14776:2;14756:18;;;14749:30;14815;14795:18;;;14788:58;14863:18;;33412:58:0;14709:178:1;33412:58:0;-1:-1:-1;;;;;33541:13:0;;;;;;:9;:13;;;;;:18;;33558:1;;33541:13;:18;;33558:1;;33541:18;:::i;:::-;;;;-1:-1:-1;;33570:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33570:21:0;-1:-1:-1;;;;;33570:21:0;;;;;;;;33609:33;;33570:16;;;33609:33;;33570:16;;33609:33;48108:40:::1;47989:167:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:257::-;709:6;762:2;750:9;741:7;737:23;733:32;730:2;;;783:6;775;768:22;730:2;827:9;814:23;846:31;871:5;846:31;:::i;1182:333::-;1258:6;1266;1319:2;1307:9;1298:7;1294:23;1290:32;1287:2;;;1340:6;1332;1325:22;1287:2;1384:9;1371:23;1403:31;1428:5;1403:31;:::i;:::-;1453:5;1505:2;1490:18;;;;1477:32;;-1:-1:-1;;;1277:238:1:o;1520:398::-;1588:6;1596;1649:2;1637:9;1628:7;1624:23;1620:32;1617:2;;;1670:6;1662;1655:22;1617:2;1714:9;1701:23;1733:31;1758:5;1733:31;:::i;:::-;1783:5;-1:-1:-1;1840:2:1;1825:18;;1812:32;1853:33;1812:32;1853:33;:::i;:::-;1905:7;1895:17;;;1607:311;;;;;:::o;1923:466::-;2000:6;2008;2016;2069:2;2057:9;2048:7;2044:23;2040:32;2037:2;;;2090:6;2082;2075:22;2037:2;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;2027:362;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;2027:362::o;2394:824::-;2489:6;2497;2505;2513;2566:3;2554:9;2545:7;2541:23;2537:33;2534:2;;;2588:6;2580;2573:22;2534:2;2632:9;2619:23;2651:31;2676:5;2651:31;:::i;:::-;2701:5;-1:-1:-1;2758:2:1;2743:18;;2730:32;2771:33;2730:32;2771:33;:::i;:::-;2823:7;-1:-1:-1;2877:2:1;2862:18;;2849:32;;-1:-1:-1;2932:2:1;2917:18;;2904:32;2959:18;2948:30;;2945:2;;;2996:6;2988;2981:22;2945:2;3024:22;;3077:4;3069:13;;3065:27;-1:-1:-1;3055:2:1;;3111:6;3103;3096:22;3055:2;3139:73;3204:7;3199:2;3186:16;3181:2;3177;3173:11;3139:73;:::i;:::-;3129:83;;;2524:694;;;;;;;:::o;3223:436::-;3288:6;3296;3349:2;3337:9;3328:7;3324:23;3320:32;3317:2;;;3370:6;3362;3355:22;3317:2;3414:9;3401:23;3433:31;3458:5;3433:31;:::i;:::-;3483:5;-1:-1:-1;3540:2:1;3525:18;;3512:32;3582:15;;3575:23;3563:36;;3553:2;;3618:6;3610;3603:22;3664:325;3732:6;3740;3793:2;3781:9;3772:7;3768:23;3764:32;3761:2;;;3814:6;3806;3799:22;3994:739;4089:6;4097;4105;4158:2;4146:9;4137:7;4133:23;4129:32;4126:2;;;4179:6;4171;4164:22;4126:2;4224:9;4211:23;4253:18;4294:2;4286:6;4283:14;4280:2;;;4315:6;4307;4300:22;4280:2;4358:6;4347:9;4343:22;4333:32;;4403:7;4396:4;4392:2;4388:13;4384:27;4374:2;;4430:6;4422;4415:22;4374:2;4475;4462:16;4501:2;4493:6;4490:14;4487:2;;;4522:6;4514;4507:22;4487:2;4582:7;4575:4;4565:6;4562:1;4558:14;4554:2;4550:23;4546:34;4543:47;4540:2;;;4608:6;4600;4593:22;4540:2;4644:4;4636:13;;;;4668:6;;-1:-1:-1;4706:20:1;;;;4693:34;;4116:617;-1:-1:-1;;;;4116:617:1:o;4738:190::-;4797:6;4850:2;4838:9;4829:7;4825:23;4821:32;4818:2;;;4871:6;4863;4856:22;4818:2;-1:-1:-1;4899:23:1;;4808:120;-1:-1:-1;4808:120:1:o;4933:255::-;4991:6;5044:2;5032:9;5023:7;5019:23;5015:32;5012:2;;;5065:6;5057;5050:22;5012:2;5109:9;5096:23;5128:30;5152:5;5128:30;:::i;5193:259::-;5262:6;5315:2;5303:9;5294:7;5290:23;5286:32;5283:2;;;5336:6;5328;5321:22;5283:2;5373:9;5367:16;5392:30;5416:5;5392:30;:::i;5457:480::-;5526:6;5579:2;5567:9;5558:7;5554:23;5550:32;5547:2;;;5600:6;5592;5585:22;5547:2;5645:9;5632:23;5678:18;5670:6;5667:30;5664:2;;;5715:6;5707;5700:22;5664:2;5743:22;;5796:4;5788:13;;5784:27;-1:-1:-1;5774:2:1;;5830:6;5822;5815:22;5774:2;5858:73;5923:7;5918:2;5905:16;5900:2;5896;5892:11;5858:73;:::i;6137:258::-;6205:6;6213;6266:2;6254:9;6245:7;6241:23;6237:32;6234:2;;;6287:6;6279;6272:22;6234:2;-1:-1:-1;;6315:23:1;;;6385:2;6370:18;;;6357:32;;-1:-1:-1;6224:171:1:o;6400:471::-;6461:3;6499:5;6493:12;6526:6;6521:3;6514:19;6552:4;6581:2;6576:3;6572:12;6565:19;;6618:2;6611:5;6607:14;6639:3;6651:195;6665:6;6662:1;6659:13;6651:195;;;6730:13;;-1:-1:-1;;;;;6726:39:1;6714:52;;6786:12;;;;6821:15;;;;6762:1;6680:9;6651:195;;;-1:-1:-1;6862:3:1;;6469:402;-1:-1:-1;;;;;6469:402:1:o;6876:437::-;6929:3;6967:5;6961:12;6994:6;6989:3;6982:19;7020:4;7049:2;7044:3;7040:12;7033:19;;7086:2;7079:5;7075:14;7107:3;7119:169;7133:6;7130:1;7127:13;7119:169;;;7194:13;;7182:26;;7228:12;;;;7263:15;;;;7155:1;7148:9;7119:169;;7318:257;7359:3;7397:5;7391:12;7424:6;7419:3;7412:19;7440:63;7496:6;7489:4;7484:3;7480:14;7473:4;7466:5;7462:16;7440:63;:::i;:::-;7557:2;7536:15;-1:-1:-1;;7532:29:1;7523:39;;;;7564:4;7519:50;;7367:208;-1:-1:-1;;7367:208:1:o;7814:276::-;7945:3;7983:6;7977:13;7999:53;8045:6;8040:3;8033:4;8025:6;8021:17;7999:53;:::i;:::-;8068:16;;;;;7953:137;-1:-1:-1;;7953:137:1:o;8095:470::-;8274:3;8312:6;8306:13;8328:53;8374:6;8369:3;8362:4;8354:6;8350:17;8328:53;:::i;:::-;8444:13;;8403:16;;;;8466:57;8444:13;8403:16;8500:4;8488:17;;8466:57;:::i;:::-;8539:20;;8282:283;-1:-1:-1;;;;8282:283:1:o;8570:1103::-;8698:3;8727;8762:6;8756:13;8792:3;8814:1;8842:9;8838:2;8834:18;8824:28;;8902:2;8891:9;8887:18;8924;8914:2;;8968:4;8960:6;8956:17;8946:27;;8914:2;8994;9042;9034:6;9031:14;9011:18;9008:38;9005:2;;;-1:-1:-1;;;9069:33:1;;9125:4;9122:1;9115:15;9155:4;9076:3;9143:17;9005:2;9186:18;9213:104;;;;9331:1;9326:322;;;;9179:469;;9213:104;-1:-1:-1;;9246:24:1;;9234:37;;9291:16;;;;-1:-1:-1;9213:104:1;;9326:322;21136:4;21155:17;;;21205:4;21189:21;;9421:3;9437:165;9451:6;9448:1;9445:13;9437:165;;;9529:14;;9516:11;;;9509:35;9572:16;;;;9466:10;;9437:165;;;9441:3;;9631:6;9626:3;9622:16;9615:23;;9179:469;-1:-1:-1;9664:3:1;;8706:967;-1:-1:-1;;;;;;;;8706:967:1:o;9886:488::-;-1:-1:-1;;;;;10155:15:1;;;10137:34;;10207:15;;10202:2;10187:18;;10180:43;10254:2;10239:18;;10232:34;;;10302:3;10297:2;10282:18;;10275:31;;;10080:4;;10323:45;;10348:19;;10340:6;10323:45;:::i;:::-;10315:53;10089:285;-1:-1:-1;;;;;;10089:285:1:o;10658:::-;10853:2;10842:9;10835:21;10816:4;10873:64;10933:2;10922:9;10918:18;10910:6;10873:64;:::i;10948:489::-;11221:2;11210:9;11203:21;11184:4;11247:64;11307:2;11296:9;11292:18;11284:6;11247:64;:::i;:::-;11359:9;11351:6;11347:22;11342:2;11331:9;11327:18;11320:50;11387:44;11424:6;11416;11387:44;:::i;:::-;11379:52;11193:244;-1:-1:-1;;;;;11193:244:1:o;11442:261::-;11621:2;11610:9;11603:21;11584:4;11641:56;11693:2;11682:9;11678:18;11670:6;11641:56;:::i;12693:219::-;12842:2;12831:9;12824:21;12805:4;12862:44;12902:2;12891:9;12887:18;12879:6;12862:44;:::i;12917:381::-;13114:2;13103:9;13096:21;13077:4;13140:44;13180:2;13169:9;13165:18;13157:6;13140:44;:::i;:::-;13232:9;13224:6;13220:22;13215:2;13204:9;13200:18;13193:50;13260:32;13285:6;13277;13260:32;:::i;13303:414::-;13505:2;13487:21;;;13544:2;13524:18;;;13517:30;13583:34;13578:2;13563:18;;13556:62;-1:-1:-1;;;13649:2:1;13634:18;;13627:48;13707:3;13692:19;;13477:240::o;18084:356::-;18286:2;18268:21;;;18305:18;;;18298:30;18364:34;18359:2;18344:18;;18337:62;18431:2;18416:18;;18258:182::o;19263:413::-;19465:2;19447:21;;;19504:2;19484:18;;;19477:30;19543:34;19538:2;19523:18;;19516:62;-1:-1:-1;;;19609:2:1;19594:18;;19587:47;19666:3;19651:19;;19437:239::o;21221:128::-;21261:3;21292:1;21288:6;21285:1;21282:13;21279:2;;;21298:18;;:::i;:::-;-1:-1:-1;21334:9:1;;21269:80::o;21354:120::-;21394:1;21420;21410:2;;21425:18;;:::i;:::-;-1:-1:-1;21459:9:1;;21400:74::o;21479:168::-;21519:7;21585:1;21581;21577:6;21573:14;21570:1;21567:21;21562:1;21555:9;21548:17;21544:45;21541:2;;;21592:18;;:::i;:::-;-1:-1:-1;21632:9:1;;21531:116::o;21652:125::-;21692:4;21720:1;21717;21714:8;21711:2;;;21725:18;;:::i;:::-;-1:-1:-1;21762:9:1;;21701:76::o;21782:258::-;21854:1;21864:113;21878:6;21875:1;21872:13;21864:113;;;21954:11;;;21948:18;21935:11;;;21928:39;21900:2;21893:10;21864:113;;;21995:6;21992:1;21989:13;21986:2;;;-1:-1:-1;;22030:1:1;22012:16;;22005:27;21835:205::o;22045:380::-;22124:1;22120:12;;;;22167;;;22188:2;;22242:4;22234:6;22230:17;22220:27;;22188:2;22295;22287:6;22284:14;22264:18;22261:38;22258:2;;;22341:10;22336:3;22332:20;22329:1;22322:31;22376:4;22373:1;22366:15;22404:4;22401:1;22394:15;22258:2;;22100:325;;;:::o;22430:135::-;22469:3;-1:-1:-1;;22490:17:1;;22487:2;;;22510:18;;:::i;:::-;-1:-1:-1;22557:1:1;22546:13;;22477:88::o;22570:112::-;22602:1;22628;22618:2;;22633:18;;:::i;:::-;-1:-1:-1;22667:9:1;;22608:74::o;22687:127::-;22748:10;22743:3;22739:20;22736:1;22729:31;22779:4;22776:1;22769:15;22803:4;22800:1;22793:15;22819:127;22880:10;22875:3;22871:20;22868:1;22861:31;22911:4;22908:1;22901:15;22935:4;22932:1;22925:15;22951:127;23012:10;23007:3;23003:20;23000:1;22993:31;23043:4;23040:1;23033:15;23067:4;23064:1;23057:15;23083:131;-1:-1:-1;;;;;23158:31:1;;23148:42;;23138:2;;23204:1;23201;23194:12;23219:131;-1:-1:-1;;;;;;23293:32:1;;23283:43;;23273:2;;23340:1;23337;23330:12
Swarm Source
ipfs://18b644c685129677ee399dbfdbb4554d3858f18ef63c9084c3c90eb97f1a9629
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.