Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 453 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18904240 | 288 days ago | IN | 0 ETH | 0.00074124 | ||||
Transfer From | 16763432 | 589 days ago | IN | 0 ETH | 0.0014854 | ||||
Transfer From | 16763412 | 589 days ago | IN | 0 ETH | 0.00233634 | ||||
Set Approval For... | 15881034 | 712 days ago | IN | 0 ETH | 0.00056215 | ||||
Set Approval For... | 15793239 | 724 days ago | IN | 0 ETH | 0.00079951 | ||||
Set Approval For... | 15530179 | 761 days ago | IN | 0 ETH | 0.00016481 | ||||
Safe Transfer Fr... | 15435406 | 777 days ago | IN | 0 ETH | 0.00073246 | ||||
Safe Transfer Fr... | 15435406 | 777 days ago | IN | 0 ETH | 0.00073246 | ||||
Safe Transfer Fr... | 15435406 | 777 days ago | IN | 0 ETH | 0.00126354 | ||||
Safe Transfer Fr... | 15435406 | 777 days ago | IN | 0 ETH | 0.00184968 | ||||
Safe Transfer Fr... | 15416935 | 780 days ago | IN | 0 ETH | 0.00093726 | ||||
Safe Transfer Fr... | 15416935 | 780 days ago | IN | 0 ETH | 0.00137204 | ||||
Safe Transfer Fr... | 15415858 | 780 days ago | IN | 0 ETH | 0.00106973 | ||||
Safe Transfer Fr... | 15415858 | 780 days ago | IN | 0 ETH | 0.00156597 | ||||
Safe Transfer Fr... | 15414948 | 780 days ago | IN | 0 ETH | 0.00025883 | ||||
Safe Transfer Fr... | 15414948 | 780 days ago | IN | 0 ETH | 0.0003789 | ||||
Safe Transfer Fr... | 15414562 | 780 days ago | IN | 0 ETH | 0.00033381 | ||||
Safe Transfer Fr... | 15414562 | 780 days ago | IN | 0 ETH | 0.00055858 | ||||
Set Approval For... | 15414560 | 780 days ago | IN | 0 ETH | 0.00023921 | ||||
Set Approval For... | 15309579 | 797 days ago | IN | 0 ETH | 0.00065882 | ||||
Set Approval For... | 15281636 | 801 days ago | IN | 0 ETH | 0.00018715 | ||||
Set Approval For... | 15281627 | 801 days ago | IN | 0 ETH | 0.00042113 | ||||
Safe Transfer Fr... | 15245424 | 807 days ago | IN | 0 ETH | 0.00043391 | ||||
Safe Transfer Fr... | 15245424 | 807 days ago | IN | 0 ETH | 0.00047678 | ||||
Safe Transfer Fr... | 15208002 | 813 days ago | IN | 0 ETH | 0.00043182 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15026252 | 842 days ago | 26.46 ETH |
Loading...
Loading
Contract Name:
EZSC_AidBrokers
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-21 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts 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/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts 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/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // 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/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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 override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 { _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 { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/Presale_Reveal.sol pragma solidity >=0.8.0 <0.9.0; contract EZSC_AidBrokers is ERC721A, Ownable { using Strings for uint256; bytes32 public merkleRoot = 0x0764335d5a70b0884d8de90749316fbc285ba29a6cf86f86646a7c558d192462; uint256 public whitelistMaxMintAmount = 2; string public uriPrefix = ""; // Add ipfs://__CID__/ string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0.08 ether; uint256 public wlCost = 0.05 ether; uint256 public maxSupply = 8000; uint256 public maxMintAmountPerTx = 2; uint256 public totalMaxMintAmount = 4; bool public paused = true; bool public onlyWhitelisted = true; bool public revealed = false; mapping(address => uint256) public wlTokenMint; mapping(address => bool) whitelistedAddresses; constructor() ERC721A("AidBrokers", "BRO") { setHiddenMetadataUri("ipfs://__CID__/hidden.json"); // Replace CID ownerMint(20); } // MODIFIERS modifier mintCompliance(uint256 _mintAmount) { if (msg.sender != owner()) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, 'Invalid mint amount!'); } require(totalSupply() + _mintAmount <= maxSupply, 'Max supply exceeded!'); _; } modifier mintPriceCompliance(uint256 _mintAmount) { require(msg.value >= cost * _mintAmount, 'Insufficient funds!'); _; } modifier wlMintPriceCompliance(uint256 _mintAmount) { require(msg.value >= wlCost * _mintAmount, 'Insufficient funds!'); _; } // MERKLE TREE function _verify(bytes32 leaf, bytes32[] memory proof) internal view returns (bool) { return MerkleProof.verify(proof, merkleRoot, leaf); } function _leaf(address account) internal pure returns (bytes32) { return keccak256(abi.encodePacked(account)); } // MINTS function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) { require(!paused, 'The contract is paused!'); require(!onlyWhitelisted, "Not open to public yet!"); require(balanceOf(msg.sender) + _mintAmount <= totalMaxMintAmount, "Exceed Mint Limit"); _safeMint(_msgSender(), _mintAmount); } function ownerMint(uint256 _mintAmount) public payable onlyOwner { require(_mintAmount > 0, 'Invalid mint amount!'); require(totalSupply() + _mintAmount <= maxSupply, 'Max supply exceeded!'); _safeMint(_msgSender(), _mintAmount); } function wlMint(uint256 _mintAmount, bytes32[] calldata proof) public payable mintCompliance(_mintAmount) wlMintPriceCompliance(_mintAmount) { require(!paused, 'The contract is paused!'); require(onlyWhitelisted, "Only allowed to mint during whitelist"); uint256 minted = wlMintAmount(msg.sender); require(minted + _mintAmount <= whitelistMaxMintAmount, "Exceeed WL Mint Amount"); _safeMint(_msgSender(), _mintAmount); wlTokenMint[msg.sender] = minted + _mintAmount; require(!whitelistedAddresses[msg.sender], "Address already claimed"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(proof, merkleRoot, leaf), "Invalid Merkle Proof." ); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _safeMint(_receiver, _mintAmount); } function wlMintAmount(address _user) public view returns (uint256) { return wlTokenMint[_user]; } function isWhiteListed(address account, bytes32[] calldata proof) internal view returns(bool) { return _verify(_leaf(account), proof); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = _startTokenId(); uint256 ownedTokenIndex = 0; address latestOwnerAddress; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { TokenOwnership memory ownership = _ownerships[currentTokenId]; if (!ownership.burned && ownership.addr != address(0)) { latestOwnerAddress = ownership.addr; } if (latestOwnerAddress == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function _startTokenId() internal view virtual override returns (uint256) { return 1; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), 'ERC721Metadata: URI query for nonexistent token'); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ''; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setWlCost(uint256 _wlCost) public onlyOwner { wlCost = _wlCost; } function setWhitelistMaxMintAmount(uint256 _whitelistMaxMintAmount) public onlyOwner { require(_whitelistMaxMintAmount <= maxSupply, "Exceed total amount"); whitelistMaxMintAmount = _whitelistMaxMintAmount; } function setTotalMaxMintAmount(uint _amount) public onlyOwner { require(_amount <= maxSupply, "Exceed total amount"); totalMaxMintAmount = _amount; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } // WITHDRAW function withdraw() public onlyOwner { uint256 contractBalance = address(this).balance; bool success = true; (success, ) = payable(0xbFeCFd02a5213122D5f2fa31F79B439e7E4c61fd).call{ // Replace with clients address value: (100 * contractBalance) / 100 // if needed, add address and adjust the number accordingly }(""); require(success, "Transfer failed"); } function addWhitelistUsers(address[] calldata _users) public onlyOwner { for (uint i=0; i < _users.length; i++) { whitelistedAddresses[_users[i]] = true; } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addWhitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setTotalMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistMaxMintAmount","type":"uint256"}],"name":"setWhitelistMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wlCost","type":"uint256"}],"name":"setWlCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMaxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMaxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"wlMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"wlMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wlTokenMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
7f0764335d5a70b0884d8de90749316fbc285ba29a6cf86f86646a7c558d1924626009556002600a5560a06040819052600060808190526200004491600b916200065c565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200007391600c916200065c565b5067011c37937e080000600e5566b1a2bc2ec50000600f55611f40601055600260115560046012556013805462ffffff1916610101179055348015620000b857600080fd5b50604080518082018252600a81526941696442726f6b65727360b01b60208083019182528351808501909452600384526242524f60e81b90840152815191929162000106916002916200065c565b5080516200011c9060039060208401906200065c565b50506001600055506200012f3362000180565b60408051808201909152601a81527f697066733a2f2f5f5f4349445f5f2f68696464656e2e6a736f6e00000000000060208201526200016e90620001d2565b6200017a60146200023a565b62000814565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6008546001600160a01b03163314620002215760405162461bcd60e51b815260206004820181905260248201526000805160206200345583398151915260448201526064015b60405180910390fd5b80516200023690600d9060208401906200065c565b5050565b6008546001600160a01b03163314620002855760405162461bcd60e51b8152602060048201819052602482015260008051602062003455833981519152604482015260640162000218565b60008111620002d75760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000604482015260640162000218565b6010546001546000548391900360001901620002f49190620007b0565b1115620003445760405162461bcd60e51b815260206004820152601460248201527f4d617820737570706c7920657863656564656421000000000000000000000000604482015260640162000218565b62000350338262000353565b50565b620002368282604051806020016040528060008152506200037560201b60201c565b62000384838383600162000389565b505050565b6000546001600160a01b038516620003b357604051622e076360e81b815260040160405180910390fd5b83620003d25760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546001600160801b031981166001600160401b038083168c018116918217680100000000000000006001600160401b031990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b4290921691909102179055808085018380156200048b57506200048b876001600160a01b03166200054c60201b62001bad1760201c565b156200050b575b60405182906001600160a01b0389169060009060008051602062003475833981519152908290a46001820191620004cf906000908990886200055b565b620004ed576040516368d2bf6b60e11b815260040160405180910390fd5b80821415620004925782600054146200050557600080fd5b62000541565b5b6040516001830192906001600160a01b0389169060009060008051602062003475833981519152908290a4808214156200050c575b506000555050505050565b6001600160a01b03163b151590565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906200059290339089908890889060040162000735565b602060405180830381600087803b158015620005ad57600080fd5b505af1925050508015620005e0575060408051601f3d908101601f19168201909252620005dd9181019062000702565b60015b6200063f573d80801562000611576040519150601f19603f3d011682016040523d82523d6000602084013e62000616565b606091505b50805162000637576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b8280546200066a90620007d7565b90600052602060002090601f0160209004810192826200068e5760008555620006d9565b82601f10620006a957805160ff1916838001178555620006d9565b82800160010185558215620006d9579182015b82811115620006d9578251825591602001919060010190620006bc565b50620006e7929150620006eb565b5090565b5b80821115620006e75760008155600101620006ec565b6000602082840312156200071557600080fd5b81516001600160e01b0319811681146200072e57600080fd5b9392505050565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b82811015620007845785810182015185820160a00152810162000766565b828111156200079757600060a084870101525b5050601f01601f19169190910160a00195945050505050565b60008219821115620007d257634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620007ec57607f821691505b602082108114156200080e57634e487b7160e01b600052602260045260246000fd5b50919050565b612c3180620008246000396000f3fe6080604052600436106102e45760003560e01c806370a0823111610190578063a45ba8e7116100dc578063e0a8085311610095578063efbd73f41161006f578063efbd73f4146108ab578063f12f6d5d146108cb578063f19e75d4146108eb578063f2fde38b146108fe57600080fd5b8063e0a808531461082c578063e4386d261461084c578063e985e9c51461086257600080fd5b8063a45ba8e71461078b578063b071401b146107a0578063b88d4fde146107c0578063c87b56dd146107e0578063d5abeb0114610800578063d70a28d11461081657600080fd5b80638da5cb5b116101495780639c70b512116101235780639c70b512146107035780639e4f20ba14610722578063a0712d6814610758578063a22cb4651461076b57600080fd5b80638da5cb5b146106ba57806394354fd0146106d857806395d89b41146106ee57600080fd5b806370a0823114610602578063715018a61461062257806377c28390146106375780637cb64759146106645780637ec4a659146106845780638085145c146106a457600080fd5b80633c9527641161024f5780634fdd43cb116102085780635c975abb116101e25780635c975abb1461059357806362b99ad4146105ad5780636352211e146105c2578063686b2812146105e257600080fd5b80634fdd43cb1461053e578063518302271461055e5780635503a0e81461057e57600080fd5b80633c952764146104895780633ccfd60b146104a95780633ef0d36d146104be57806342842e0e146104d1578063438b6300146104f157806344a0d68a1461051e57600080fd5b806313faede6116102a157806313faede6146103da57806316ba10e0146103fe57806316c38b3c1461041e57806318160ddd1461043e57806323b872dd146104535780632eb4a7ab1461047357600080fd5b806301ffc9a7146102e957806305fa42bb1461031e57806306fdde0314610340578063081812fc14610362578063095ea7b31461039a5780631042779c146103ba575b600080fd5b3480156102f557600080fd5b50610309610304366004612790565b61091e565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b5061033e610339366004612777565b610970565b005b34801561034c57600080fd5b506103556109f0565b60405161031591906129f1565b34801561036e57600080fd5b5061038261037d366004612777565b610a82565b6040516001600160a01b039091168152602001610315565b3480156103a657600080fd5b5061033e6103b53660046126f1565b610ac6565b3480156103c657600080fd5b5061033e6103d5366004612777565b610b54565b3480156103e657600080fd5b506103f0600e5481565b604051908152602001610315565b34801561040a57600080fd5b5061033e6104193660046127ca565b610bcb565b34801561042a57600080fd5b5061033e61043936600461275c565b610c0c565b34801561044a57600080fd5b506103f0610c49565b34801561045f57600080fd5b5061033e61046e366004612610565b610c57565b34801561047f57600080fd5b506103f060095481565b34801561049557600080fd5b5061033e6104a436600461275c565b610c62565b3480156104b557600080fd5b5061033e610ca6565b61033e6104cc366004612835565b610d84565b3480156104dd57600080fd5b5061033e6104ec366004612610565b6110c2565b3480156104fd57600080fd5b5061051161050c3660046125c2565b6110dd565b60405161031591906129ad565b34801561052a57600080fd5b5061033e610539366004612777565b611224565b34801561054a57600080fd5b5061033e6105593660046127ca565b611253565b34801561056a57600080fd5b506013546103099062010000900460ff1681565b34801561058a57600080fd5b50610355611290565b34801561059f57600080fd5b506013546103099060ff1681565b3480156105b957600080fd5b5061035561131e565b3480156105ce57600080fd5b506103826105dd366004612777565b61132b565b3480156105ee57600080fd5b5061033e6105fd36600461271b565b61133d565b34801561060e57600080fd5b506103f061061d3660046125c2565b6113d9565b34801561062e57600080fd5b5061033e611427565b34801561064357600080fd5b506103f06106523660046125c2565b60146020526000908152604090205481565b34801561067057600080fd5b5061033e61067f366004612777565b61145d565b34801561069057600080fd5b5061033e61069f3660046127ca565b61148c565b3480156106b057600080fd5b506103f0600a5481565b3480156106c657600080fd5b506008546001600160a01b0316610382565b3480156106e457600080fd5b506103f060115481565b3480156106fa57600080fd5b506103556114c9565b34801561070f57600080fd5b5060135461030990610100900460ff1681565b34801561072e57600080fd5b506103f061073d3660046125c2565b6001600160a01b031660009081526014602052604090205490565b61033e610766366004612777565b6114d8565b34801561077757600080fd5b5061033e6107863660046126c7565b6116c1565b34801561079757600080fd5b50610355611757565b3480156107ac57600080fd5b5061033e6107bb366004612777565b611764565b3480156107cc57600080fd5b5061033e6107db36600461264c565b611793565b3480156107ec57600080fd5b506103556107fb366004612777565b6117e4565b34801561080c57600080fd5b506103f060105481565b34801561082257600080fd5b506103f0600f5481565b34801561083857600080fd5b5061033e61084736600461275c565b611954565b34801561085857600080fd5b506103f060125481565b34801561086e57600080fd5b5061030961087d3660046125dd565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156108b757600080fd5b5061033e6108c6366004612812565b61199a565b3480156108d757600080fd5b5061033e6108e6366004612777565b611a5b565b61033e6108f9366004612777565b611a8a565b34801561090a57600080fd5b5061033e6109193660046125c2565b611b15565b60006001600160e01b031982166380ac58cd60e01b148061094f57506001600160e01b03198216635b5e139f60e01b145b8061096a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b031633146109a35760405162461bcd60e51b815260040161099a90612a32565b60405180910390fd5b6010548111156109eb5760405162461bcd60e51b8152602060048201526013602482015272115e18d95959081d1bdd185b08185b5bdd5b9d606a1b604482015260640161099a565b600a55565b6060600280546109ff90612b23565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b90612b23565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8d82611bbc565b610aaa576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610ad18261132b565b9050806001600160a01b0316836001600160a01b03161415610b065760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610b265750610b24813361087d565b155b15610b44576040516367d9dca160e11b815260040160405180910390fd5b610b4f838383611bf5565b505050565b6008546001600160a01b03163314610b7e5760405162461bcd60e51b815260040161099a90612a32565b601054811115610bc65760405162461bcd60e51b8152602060048201526013602482015272115e18d95959081d1bdd185b08185b5bdd5b9d606a1b604482015260640161099a565b601255565b6008546001600160a01b03163314610bf55760405162461bcd60e51b815260040161099a90612a32565b8051610c0890600c90602084019061243d565b5050565b6008546001600160a01b03163314610c365760405162461bcd60e51b815260040161099a90612a32565b6013805460ff1916911515919091179055565b600154600054036000190190565b610b4f838383611c51565b6008546001600160a01b03163314610c8c5760405162461bcd60e51b815260040161099a90612a32565b601380549115156101000261ff0019909216919091179055565b6008546001600160a01b03163314610cd05760405162461bcd60e51b815260040161099a90612a32565b47600173bfecfd02a5213122d5f2fa31f79b439e7e4c61fd6064610cf48482612ac1565b610cfe9190612aad565b604051600081818185875af1925050503d8060008114610d3a576040519150601f19603f3d011682016040523d82523d6000602084013e610d3f565b606091505b50508091505080610c085760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161099a565b82610d976008546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610ddd57600081118015610dc157506011548111155b610ddd5760405162461bcd60e51b815260040161099a90612a04565b60105481610de9610c49565b610df39190612a95565b1115610e115760405162461bcd60e51b815260040161099a90612a67565b8380600f54610e209190612ac1565b341015610e655760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015260640161099a565b60135460ff1615610eb25760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b604482015260640161099a565b601354610100900460ff16610f175760405162461bcd60e51b815260206004820152602560248201527f4f6e6c7920616c6c6f77656420746f206d696e7420647572696e672077686974604482015264195b1a5cdd60da1b606482015260840161099a565b33600090815260146020526040902054600a54610f348783612a95565b1115610f7b5760405162461bcd60e51b8152602060048201526016602482015275115e18d95959590815d308135a5b9d08105b5bdd5b9d60521b604482015260640161099a565b610f853387611e3f565b610f8f8682612a95565b3360009081526014602090815260408083209390935560159052205460ff1615610ffb5760405162461bcd60e51b815260206004820152601760248201527f4164647265737320616c726561647920636c61696d6564000000000000000000604482015260640161099a565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611075868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611e59565b6110b95760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21026b2b935b63290283937b7b31760591b604482015260640161099a565b50505050505050565b610b4f83838360405180602001604052806000815250611793565b606060006110ea836113d9565b90506000816001600160401b0381111561110657611106612bcf565b60405190808252806020026020018201604052801561112f578160200160208202803683370190505b50905060016000805b848210801561114957506010548311155b1561121957600083815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820183905290916111b6575080516001600160a01b031615155b156111c057805191505b876001600160a01b0316826001600160a01b0316141561120657838584815181106111ed576111ed612bb9565b60209081029190910101528261120281612b5e565b9350505b8361121081612b5e565b94505050611138565b509195945050505050565b6008546001600160a01b0316331461124e5760405162461bcd60e51b815260040161099a90612a32565b600e55565b6008546001600160a01b0316331461127d5760405162461bcd60e51b815260040161099a90612a32565b8051610c0890600d90602084019061243d565b600c805461129d90612b23565b80601f01602080910402602001604051908101604052809291908181526020018280546112c990612b23565b80156113165780601f106112eb57610100808354040283529160200191611316565b820191906000526020600020905b8154815290600101906020018083116112f957829003601f168201915b505050505081565b600b805461129d90612b23565b600061133682611e6f565b5192915050565b6008546001600160a01b031633146113675760405162461bcd60e51b815260040161099a90612a32565b60005b81811015610b4f5760016015600085858581811061138a5761138a612bb9565b905060200201602081019061139f91906125c2565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113d181612b5e565b91505061136a565b60006001600160a01b038216611402576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146114515760405162461bcd60e51b815260040161099a90612a32565b61145b6000611f96565b565b6008546001600160a01b031633146114875760405162461bcd60e51b815260040161099a90612a32565b600955565b6008546001600160a01b031633146114b65760405162461bcd60e51b815260040161099a90612a32565b8051610c0890600b90602084019061243d565b6060600380546109ff90612b23565b806114eb6008546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146115315760008111801561151557506011548111155b6115315760405162461bcd60e51b815260040161099a90612a04565b6010548161153d610c49565b6115479190612a95565b11156115655760405162461bcd60e51b815260040161099a90612a67565b8180600e546115749190612ac1565b3410156115b95760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015260640161099a565b60135460ff16156116065760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b604482015260640161099a565b601354610100900460ff161561165e5760405162461bcd60e51b815260206004820152601760248201527f4e6f74206f70656e20746f207075626c69632079657421000000000000000000604482015260640161099a565b6012548361166b336113d9565b6116759190612a95565b11156116b75760405162461bcd60e51b8152602060048201526011602482015270115e18d9595908135a5b9d08131a5b5a5d607a1b604482015260640161099a565b610b4f3384611e3f565b6001600160a01b0382163314156116eb5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600d805461129d90612b23565b6008546001600160a01b0316331461178e5760405162461bcd60e51b815260040161099a90612a32565b601155565b61179e848484611c51565b6001600160a01b0383163b151580156117c057506117be84848484611fe8565b155b156117de576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606117ef82611bbc565b6118535760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161099a565b60135462010000900460ff166118f557600d805461187090612b23565b80601f016020809104026020016040519081016040528092919081815260200182805461189c90612b23565b80156118e95780601f106118be576101008083540402835291602001916118e9565b820191906000526020600020905b8154815290600101906020018083116118cc57829003601f168201915b50505050509050919050565b60006118ff6120e0565b9050600081511161191f576040518060200160405280600081525061194d565b80611929846120ef565b600c60405160200161193d939291906128ac565b6040516020818303038152906040525b9392505050565b6008546001600160a01b0316331461197e5760405162461bcd60e51b815260040161099a90612a32565b60138054911515620100000262ff000019909216919091179055565b816119ad6008546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146119f3576000811180156119d757506011548111155b6119f35760405162461bcd60e51b815260040161099a90612a04565b601054816119ff610c49565b611a099190612a95565b1115611a275760405162461bcd60e51b815260040161099a90612a67565b6008546001600160a01b03163314611a515760405162461bcd60e51b815260040161099a90612a32565b610b4f8284611e3f565b6008546001600160a01b03163314611a855760405162461bcd60e51b815260040161099a90612a32565b600f55565b6008546001600160a01b03163314611ab45760405162461bcd60e51b815260040161099a90612a32565b60008111611ad45760405162461bcd60e51b815260040161099a90612a04565b60105481611ae0610c49565b611aea9190612a95565b1115611b085760405162461bcd60e51b815260040161099a90612a67565b611b123382611e3f565b50565b6008546001600160a01b03163314611b3f5760405162461bcd60e51b815260040161099a90612a32565b6001600160a01b038116611ba45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099a565b611b1281611f96565b6001600160a01b03163b151590565b600081600111158015611bd0575060005482105b801561096a575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611c5c82611e6f565b9050836001600160a01b031681600001516001600160a01b031614611c935760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480611cb15750611cb1853361087d565b80611ccc575033611cc184610a82565b6001600160a01b0316145b905080611cec57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416611d1357604051633a954ecd60e21b815260040160405180910390fd5b611d1f60008487611bf5565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611df3576000548214611df357805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b610c088282604051806020016040528060008152506121ec565b600082611e6685846121f9565b14949350505050565b60408051606081018252600080825260208201819052918101919091528180600111158015611e9f575060005481105b15611f7d57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290611f7b5780516001600160a01b031615611f12579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611f76579392505050565b611f12565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061201d903390899088908890600401612970565b602060405180830381600087803b15801561203757600080fd5b505af1925050508015612067575060408051601f3d908101601f19168201909252612064918101906127ad565b60015b6120c2573d808015612095576040519150601f19603f3d011682016040523d82523d6000602084013e61209a565b606091505b5080516120ba576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600b80546109ff90612b23565b6060816121135750506040805180820190915260018152600360fc1b602082015290565b8160005b811561213d578061212781612b5e565b91506121369050600a83612aad565b9150612117565b6000816001600160401b0381111561215757612157612bcf565b6040519080825280601f01601f191660200182016040528015612181576020820181803683370190505b5090505b84156120d857612196600183612ae0565b91506121a3600a86612b79565b6121ae906030612a95565b60f81b8183815181106121c3576121c3612bb9565b60200101906001600160f81b031916908160001a9053506121e5600a86612aad565b9450612185565b610b4f838383600161226d565b600081815b845181101561226557600085828151811061221b5761221b612bb9565b602002602001015190508083116122415760008381526020829052604090209250612252565b600081815260208490526040902092505b508061225d81612b5e565b9150506121fe565b509392505050565b6000546001600160a01b03851661229657604051622e076360e81b815260040160405180910390fd5b836122b45760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561236557506001600160a01b0387163b15155b156123ee575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46123b66000888480600101955088611fe8565b6123d3576040516368d2bf6b60e11b815260040160405180910390fd5b8082141561236b5782600054146123e957600080fd5b612434565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156123ef575b50600055611e38565b82805461244990612b23565b90600052602060002090601f01602090048101928261246b57600085556124b1565b82601f1061248457805160ff19168380011785556124b1565b828001600101855582156124b1579182015b828111156124b1578251825591602001919060010190612496565b506124bd9291506124c1565b5090565b5b808211156124bd57600081556001016124c2565b60006001600160401b03808411156124f0576124f0612bcf565b604051601f8501601f19908116603f0116810190828211818310171561251857612518612bcf565b8160405280935085815286868601111561253157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461256257600080fd5b919050565b60008083601f84011261257957600080fd5b5081356001600160401b0381111561259057600080fd5b6020830191508360208260051b85010111156125ab57600080fd5b9250929050565b8035801515811461256257600080fd5b6000602082840312156125d457600080fd5b61194d8261254b565b600080604083850312156125f057600080fd5b6125f98361254b565b91506126076020840161254b565b90509250929050565b60008060006060848603121561262557600080fd5b61262e8461254b565b925061263c6020850161254b565b9150604084013590509250925092565b6000806000806080858703121561266257600080fd5b61266b8561254b565b93506126796020860161254b565b92506040850135915060608501356001600160401b0381111561269b57600080fd5b8501601f810187136126ac57600080fd5b6126bb878235602084016124d6565b91505092959194509250565b600080604083850312156126da57600080fd5b6126e38361254b565b9150612607602084016125b2565b6000806040838503121561270457600080fd5b61270d8361254b565b946020939093013593505050565b6000806020838503121561272e57600080fd5b82356001600160401b0381111561274457600080fd5b61275085828601612567565b90969095509350505050565b60006020828403121561276e57600080fd5b61194d826125b2565b60006020828403121561278957600080fd5b5035919050565b6000602082840312156127a257600080fd5b813561194d81612be5565b6000602082840312156127bf57600080fd5b815161194d81612be5565b6000602082840312156127dc57600080fd5b81356001600160401b038111156127f257600080fd5b8201601f8101841361280357600080fd5b6120d8848235602084016124d6565b6000806040838503121561282557600080fd5b823591506126076020840161254b565b60008060006040848603121561284a57600080fd5b8335925060208401356001600160401b0381111561286757600080fd5b61287386828701612567565b9497909650939450505050565b60008151808452612898816020860160208601612af7565b601f01601f19169290920160200192915050565b6000845160206128bf8285838a01612af7565b8551918401916128d28184848a01612af7565b8554920191600090600181811c90808316806128ef57607f831692505b85831081141561290d57634e487b7160e01b85526022600452602485fd5b80801561292157600181146129325761295f565b60ff1985168852838801955061295f565b60008b81526020902060005b858110156129575781548a82015290840190880161293e565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129a390830184612880565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129e5578351835292840192918401916001016129c9565b50909695505050505050565b60208152600061194d6020830184612880565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60008219821115612aa857612aa8612b8d565b500190565b600082612abc57612abc612ba3565b500490565b6000816000190483118215151615612adb57612adb612b8d565b500290565b600082821015612af257612af2612b8d565b500390565b60005b83811015612b12578181015183820152602001612afa565b838111156117de5750506000910152565b600181811c90821680612b3757607f821691505b60208210811415612b5857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b7257612b72612b8d565b5060010190565b600082612b8857612b88612ba3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b1257600080fdfea264697066735822122000c8f2d02bf43fd34c74b2f677d8334aa3af332fe5d927f29d3130e152fd3dd664736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Deployed Bytecode
0x6080604052600436106102e45760003560e01c806370a0823111610190578063a45ba8e7116100dc578063e0a8085311610095578063efbd73f41161006f578063efbd73f4146108ab578063f12f6d5d146108cb578063f19e75d4146108eb578063f2fde38b146108fe57600080fd5b8063e0a808531461082c578063e4386d261461084c578063e985e9c51461086257600080fd5b8063a45ba8e71461078b578063b071401b146107a0578063b88d4fde146107c0578063c87b56dd146107e0578063d5abeb0114610800578063d70a28d11461081657600080fd5b80638da5cb5b116101495780639c70b512116101235780639c70b512146107035780639e4f20ba14610722578063a0712d6814610758578063a22cb4651461076b57600080fd5b80638da5cb5b146106ba57806394354fd0146106d857806395d89b41146106ee57600080fd5b806370a0823114610602578063715018a61461062257806377c28390146106375780637cb64759146106645780637ec4a659146106845780638085145c146106a457600080fd5b80633c9527641161024f5780634fdd43cb116102085780635c975abb116101e25780635c975abb1461059357806362b99ad4146105ad5780636352211e146105c2578063686b2812146105e257600080fd5b80634fdd43cb1461053e578063518302271461055e5780635503a0e81461057e57600080fd5b80633c952764146104895780633ccfd60b146104a95780633ef0d36d146104be57806342842e0e146104d1578063438b6300146104f157806344a0d68a1461051e57600080fd5b806313faede6116102a157806313faede6146103da57806316ba10e0146103fe57806316c38b3c1461041e57806318160ddd1461043e57806323b872dd146104535780632eb4a7ab1461047357600080fd5b806301ffc9a7146102e957806305fa42bb1461031e57806306fdde0314610340578063081812fc14610362578063095ea7b31461039a5780631042779c146103ba575b600080fd5b3480156102f557600080fd5b50610309610304366004612790565b61091e565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b5061033e610339366004612777565b610970565b005b34801561034c57600080fd5b506103556109f0565b60405161031591906129f1565b34801561036e57600080fd5b5061038261037d366004612777565b610a82565b6040516001600160a01b039091168152602001610315565b3480156103a657600080fd5b5061033e6103b53660046126f1565b610ac6565b3480156103c657600080fd5b5061033e6103d5366004612777565b610b54565b3480156103e657600080fd5b506103f0600e5481565b604051908152602001610315565b34801561040a57600080fd5b5061033e6104193660046127ca565b610bcb565b34801561042a57600080fd5b5061033e61043936600461275c565b610c0c565b34801561044a57600080fd5b506103f0610c49565b34801561045f57600080fd5b5061033e61046e366004612610565b610c57565b34801561047f57600080fd5b506103f060095481565b34801561049557600080fd5b5061033e6104a436600461275c565b610c62565b3480156104b557600080fd5b5061033e610ca6565b61033e6104cc366004612835565b610d84565b3480156104dd57600080fd5b5061033e6104ec366004612610565b6110c2565b3480156104fd57600080fd5b5061051161050c3660046125c2565b6110dd565b60405161031591906129ad565b34801561052a57600080fd5b5061033e610539366004612777565b611224565b34801561054a57600080fd5b5061033e6105593660046127ca565b611253565b34801561056a57600080fd5b506013546103099062010000900460ff1681565b34801561058a57600080fd5b50610355611290565b34801561059f57600080fd5b506013546103099060ff1681565b3480156105b957600080fd5b5061035561131e565b3480156105ce57600080fd5b506103826105dd366004612777565b61132b565b3480156105ee57600080fd5b5061033e6105fd36600461271b565b61133d565b34801561060e57600080fd5b506103f061061d3660046125c2565b6113d9565b34801561062e57600080fd5b5061033e611427565b34801561064357600080fd5b506103f06106523660046125c2565b60146020526000908152604090205481565b34801561067057600080fd5b5061033e61067f366004612777565b61145d565b34801561069057600080fd5b5061033e61069f3660046127ca565b61148c565b3480156106b057600080fd5b506103f0600a5481565b3480156106c657600080fd5b506008546001600160a01b0316610382565b3480156106e457600080fd5b506103f060115481565b3480156106fa57600080fd5b506103556114c9565b34801561070f57600080fd5b5060135461030990610100900460ff1681565b34801561072e57600080fd5b506103f061073d3660046125c2565b6001600160a01b031660009081526014602052604090205490565b61033e610766366004612777565b6114d8565b34801561077757600080fd5b5061033e6107863660046126c7565b6116c1565b34801561079757600080fd5b50610355611757565b3480156107ac57600080fd5b5061033e6107bb366004612777565b611764565b3480156107cc57600080fd5b5061033e6107db36600461264c565b611793565b3480156107ec57600080fd5b506103556107fb366004612777565b6117e4565b34801561080c57600080fd5b506103f060105481565b34801561082257600080fd5b506103f0600f5481565b34801561083857600080fd5b5061033e61084736600461275c565b611954565b34801561085857600080fd5b506103f060125481565b34801561086e57600080fd5b5061030961087d3660046125dd565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156108b757600080fd5b5061033e6108c6366004612812565b61199a565b3480156108d757600080fd5b5061033e6108e6366004612777565b611a5b565b61033e6108f9366004612777565b611a8a565b34801561090a57600080fd5b5061033e6109193660046125c2565b611b15565b60006001600160e01b031982166380ac58cd60e01b148061094f57506001600160e01b03198216635b5e139f60e01b145b8061096a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b031633146109a35760405162461bcd60e51b815260040161099a90612a32565b60405180910390fd5b6010548111156109eb5760405162461bcd60e51b8152602060048201526013602482015272115e18d95959081d1bdd185b08185b5bdd5b9d606a1b604482015260640161099a565b600a55565b6060600280546109ff90612b23565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b90612b23565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8d82611bbc565b610aaa576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610ad18261132b565b9050806001600160a01b0316836001600160a01b03161415610b065760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610b265750610b24813361087d565b155b15610b44576040516367d9dca160e11b815260040160405180910390fd5b610b4f838383611bf5565b505050565b6008546001600160a01b03163314610b7e5760405162461bcd60e51b815260040161099a90612a32565b601054811115610bc65760405162461bcd60e51b8152602060048201526013602482015272115e18d95959081d1bdd185b08185b5bdd5b9d606a1b604482015260640161099a565b601255565b6008546001600160a01b03163314610bf55760405162461bcd60e51b815260040161099a90612a32565b8051610c0890600c90602084019061243d565b5050565b6008546001600160a01b03163314610c365760405162461bcd60e51b815260040161099a90612a32565b6013805460ff1916911515919091179055565b600154600054036000190190565b610b4f838383611c51565b6008546001600160a01b03163314610c8c5760405162461bcd60e51b815260040161099a90612a32565b601380549115156101000261ff0019909216919091179055565b6008546001600160a01b03163314610cd05760405162461bcd60e51b815260040161099a90612a32565b47600173bfecfd02a5213122d5f2fa31f79b439e7e4c61fd6064610cf48482612ac1565b610cfe9190612aad565b604051600081818185875af1925050503d8060008114610d3a576040519150601f19603f3d011682016040523d82523d6000602084013e610d3f565b606091505b50508091505080610c085760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161099a565b82610d976008546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610ddd57600081118015610dc157506011548111155b610ddd5760405162461bcd60e51b815260040161099a90612a04565b60105481610de9610c49565b610df39190612a95565b1115610e115760405162461bcd60e51b815260040161099a90612a67565b8380600f54610e209190612ac1565b341015610e655760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015260640161099a565b60135460ff1615610eb25760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b604482015260640161099a565b601354610100900460ff16610f175760405162461bcd60e51b815260206004820152602560248201527f4f6e6c7920616c6c6f77656420746f206d696e7420647572696e672077686974604482015264195b1a5cdd60da1b606482015260840161099a565b33600090815260146020526040902054600a54610f348783612a95565b1115610f7b5760405162461bcd60e51b8152602060048201526016602482015275115e18d95959590815d308135a5b9d08105b5bdd5b9d60521b604482015260640161099a565b610f853387611e3f565b610f8f8682612a95565b3360009081526014602090815260408083209390935560159052205460ff1615610ffb5760405162461bcd60e51b815260206004820152601760248201527f4164647265737320616c726561647920636c61696d6564000000000000000000604482015260640161099a565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611075868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611e59565b6110b95760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21026b2b935b63290283937b7b31760591b604482015260640161099a565b50505050505050565b610b4f83838360405180602001604052806000815250611793565b606060006110ea836113d9565b90506000816001600160401b0381111561110657611106612bcf565b60405190808252806020026020018201604052801561112f578160200160208202803683370190505b50905060016000805b848210801561114957506010548311155b1561121957600083815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820183905290916111b6575080516001600160a01b031615155b156111c057805191505b876001600160a01b0316826001600160a01b0316141561120657838584815181106111ed576111ed612bb9565b60209081029190910101528261120281612b5e565b9350505b8361121081612b5e565b94505050611138565b509195945050505050565b6008546001600160a01b0316331461124e5760405162461bcd60e51b815260040161099a90612a32565b600e55565b6008546001600160a01b0316331461127d5760405162461bcd60e51b815260040161099a90612a32565b8051610c0890600d90602084019061243d565b600c805461129d90612b23565b80601f01602080910402602001604051908101604052809291908181526020018280546112c990612b23565b80156113165780601f106112eb57610100808354040283529160200191611316565b820191906000526020600020905b8154815290600101906020018083116112f957829003601f168201915b505050505081565b600b805461129d90612b23565b600061133682611e6f565b5192915050565b6008546001600160a01b031633146113675760405162461bcd60e51b815260040161099a90612a32565b60005b81811015610b4f5760016015600085858581811061138a5761138a612bb9565b905060200201602081019061139f91906125c2565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113d181612b5e565b91505061136a565b60006001600160a01b038216611402576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146114515760405162461bcd60e51b815260040161099a90612a32565b61145b6000611f96565b565b6008546001600160a01b031633146114875760405162461bcd60e51b815260040161099a90612a32565b600955565b6008546001600160a01b031633146114b65760405162461bcd60e51b815260040161099a90612a32565b8051610c0890600b90602084019061243d565b6060600380546109ff90612b23565b806114eb6008546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146115315760008111801561151557506011548111155b6115315760405162461bcd60e51b815260040161099a90612a04565b6010548161153d610c49565b6115479190612a95565b11156115655760405162461bcd60e51b815260040161099a90612a67565b8180600e546115749190612ac1565b3410156115b95760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015260640161099a565b60135460ff16156116065760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b604482015260640161099a565b601354610100900460ff161561165e5760405162461bcd60e51b815260206004820152601760248201527f4e6f74206f70656e20746f207075626c69632079657421000000000000000000604482015260640161099a565b6012548361166b336113d9565b6116759190612a95565b11156116b75760405162461bcd60e51b8152602060048201526011602482015270115e18d9595908135a5b9d08131a5b5a5d607a1b604482015260640161099a565b610b4f3384611e3f565b6001600160a01b0382163314156116eb5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600d805461129d90612b23565b6008546001600160a01b0316331461178e5760405162461bcd60e51b815260040161099a90612a32565b601155565b61179e848484611c51565b6001600160a01b0383163b151580156117c057506117be84848484611fe8565b155b156117de576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606117ef82611bbc565b6118535760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161099a565b60135462010000900460ff166118f557600d805461187090612b23565b80601f016020809104026020016040519081016040528092919081815260200182805461189c90612b23565b80156118e95780601f106118be576101008083540402835291602001916118e9565b820191906000526020600020905b8154815290600101906020018083116118cc57829003601f168201915b50505050509050919050565b60006118ff6120e0565b9050600081511161191f576040518060200160405280600081525061194d565b80611929846120ef565b600c60405160200161193d939291906128ac565b6040516020818303038152906040525b9392505050565b6008546001600160a01b0316331461197e5760405162461bcd60e51b815260040161099a90612a32565b60138054911515620100000262ff000019909216919091179055565b816119ad6008546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146119f3576000811180156119d757506011548111155b6119f35760405162461bcd60e51b815260040161099a90612a04565b601054816119ff610c49565b611a099190612a95565b1115611a275760405162461bcd60e51b815260040161099a90612a67565b6008546001600160a01b03163314611a515760405162461bcd60e51b815260040161099a90612a32565b610b4f8284611e3f565b6008546001600160a01b03163314611a855760405162461bcd60e51b815260040161099a90612a32565b600f55565b6008546001600160a01b03163314611ab45760405162461bcd60e51b815260040161099a90612a32565b60008111611ad45760405162461bcd60e51b815260040161099a90612a04565b60105481611ae0610c49565b611aea9190612a95565b1115611b085760405162461bcd60e51b815260040161099a90612a67565b611b123382611e3f565b50565b6008546001600160a01b03163314611b3f5760405162461bcd60e51b815260040161099a90612a32565b6001600160a01b038116611ba45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099a565b611b1281611f96565b6001600160a01b03163b151590565b600081600111158015611bd0575060005482105b801561096a575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611c5c82611e6f565b9050836001600160a01b031681600001516001600160a01b031614611c935760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480611cb15750611cb1853361087d565b80611ccc575033611cc184610a82565b6001600160a01b0316145b905080611cec57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416611d1357604051633a954ecd60e21b815260040160405180910390fd5b611d1f60008487611bf5565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611df3576000548214611df357805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b610c088282604051806020016040528060008152506121ec565b600082611e6685846121f9565b14949350505050565b60408051606081018252600080825260208201819052918101919091528180600111158015611e9f575060005481105b15611f7d57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290611f7b5780516001600160a01b031615611f12579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611f76579392505050565b611f12565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061201d903390899088908890600401612970565b602060405180830381600087803b15801561203757600080fd5b505af1925050508015612067575060408051601f3d908101601f19168201909252612064918101906127ad565b60015b6120c2573d808015612095576040519150601f19603f3d011682016040523d82523d6000602084013e61209a565b606091505b5080516120ba576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600b80546109ff90612b23565b6060816121135750506040805180820190915260018152600360fc1b602082015290565b8160005b811561213d578061212781612b5e565b91506121369050600a83612aad565b9150612117565b6000816001600160401b0381111561215757612157612bcf565b6040519080825280601f01601f191660200182016040528015612181576020820181803683370190505b5090505b84156120d857612196600183612ae0565b91506121a3600a86612b79565b6121ae906030612a95565b60f81b8183815181106121c3576121c3612bb9565b60200101906001600160f81b031916908160001a9053506121e5600a86612aad565b9450612185565b610b4f838383600161226d565b600081815b845181101561226557600085828151811061221b5761221b612bb9565b602002602001015190508083116122415760008381526020829052604090209250612252565b600081815260208490526040902092505b508061225d81612b5e565b9150506121fe565b509392505050565b6000546001600160a01b03851661229657604051622e076360e81b815260040160405180910390fd5b836122b45760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561236557506001600160a01b0387163b15155b156123ee575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46123b66000888480600101955088611fe8565b6123d3576040516368d2bf6b60e11b815260040160405180910390fd5b8082141561236b5782600054146123e957600080fd5b612434565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156123ef575b50600055611e38565b82805461244990612b23565b90600052602060002090601f01602090048101928261246b57600085556124b1565b82601f1061248457805160ff19168380011785556124b1565b828001600101855582156124b1579182015b828111156124b1578251825591602001919060010190612496565b506124bd9291506124c1565b5090565b5b808211156124bd57600081556001016124c2565b60006001600160401b03808411156124f0576124f0612bcf565b604051601f8501601f19908116603f0116810190828211818310171561251857612518612bcf565b8160405280935085815286868601111561253157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461256257600080fd5b919050565b60008083601f84011261257957600080fd5b5081356001600160401b0381111561259057600080fd5b6020830191508360208260051b85010111156125ab57600080fd5b9250929050565b8035801515811461256257600080fd5b6000602082840312156125d457600080fd5b61194d8261254b565b600080604083850312156125f057600080fd5b6125f98361254b565b91506126076020840161254b565b90509250929050565b60008060006060848603121561262557600080fd5b61262e8461254b565b925061263c6020850161254b565b9150604084013590509250925092565b6000806000806080858703121561266257600080fd5b61266b8561254b565b93506126796020860161254b565b92506040850135915060608501356001600160401b0381111561269b57600080fd5b8501601f810187136126ac57600080fd5b6126bb878235602084016124d6565b91505092959194509250565b600080604083850312156126da57600080fd5b6126e38361254b565b9150612607602084016125b2565b6000806040838503121561270457600080fd5b61270d8361254b565b946020939093013593505050565b6000806020838503121561272e57600080fd5b82356001600160401b0381111561274457600080fd5b61275085828601612567565b90969095509350505050565b60006020828403121561276e57600080fd5b61194d826125b2565b60006020828403121561278957600080fd5b5035919050565b6000602082840312156127a257600080fd5b813561194d81612be5565b6000602082840312156127bf57600080fd5b815161194d81612be5565b6000602082840312156127dc57600080fd5b81356001600160401b038111156127f257600080fd5b8201601f8101841361280357600080fd5b6120d8848235602084016124d6565b6000806040838503121561282557600080fd5b823591506126076020840161254b565b60008060006040848603121561284a57600080fd5b8335925060208401356001600160401b0381111561286757600080fd5b61287386828701612567565b9497909650939450505050565b60008151808452612898816020860160208601612af7565b601f01601f19169290920160200192915050565b6000845160206128bf8285838a01612af7565b8551918401916128d28184848a01612af7565b8554920191600090600181811c90808316806128ef57607f831692505b85831081141561290d57634e487b7160e01b85526022600452602485fd5b80801561292157600181146129325761295f565b60ff1985168852838801955061295f565b60008b81526020902060005b858110156129575781548a82015290840190880161293e565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129a390830184612880565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129e5578351835292840192918401916001016129c9565b50909695505050505050565b60208152600061194d6020830184612880565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60008219821115612aa857612aa8612b8d565b500190565b600082612abc57612abc612ba3565b500490565b6000816000190483118215151615612adb57612adb612b8d565b500290565b600082821015612af257612af2612b8d565b500390565b60005b83811015612b12578181015183820152602001612afa565b838111156117de5750506000910152565b600181811c90821680612b3757607f821691505b60208210811415612b5857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b7257612b72612b8d565b5060010190565b600082612b8857612b88612ba3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b1257600080fdfea264697066735822122000c8f2d02bf43fd34c74b2f677d8334aa3af332fe5d927f29d3130e152fd3dd664736f6c63430008070033
Deployed Bytecode Sourcemap
47228:7298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26865:305;;;;;;;;;;-1:-1:-1;26865:305:0;;;;;:::i;:::-;;:::i;:::-;;;9809:14:1;;9802:22;9784:41;;9772:2;9757:18;26865:305:0;;;;;;;;52612:222;;;;;;;;;;-1:-1:-1;52612:222:0;;;;;:::i;:::-;;:::i;:::-;;29978:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31481:204::-;;;;;;;;;;-1:-1:-1;31481:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8470:32:1;;;8452:51;;8440:2;8425:18;31481:204:0;8306:203:1;31044:371:0;;;;;;;;;;-1:-1:-1;31044:371:0;;;;;:::i;:::-;;:::i;52840:166::-;;;;;;;;;;-1:-1:-1;52840:166:0;;;;;:::i;:::-;;:::i;47605:32::-;;;;;;;;;;;;;;;;;;;9982:25:1;;;9970:2;9955:18;47605:32:0;9836:177:1;53392:100:0;;;;;;;;;;-1:-1:-1;53392:100:0;;;;;:::i;:::-;;:::i;53498:77::-;;;;;;;;;;-1:-1:-1;53498:77:0;;;;;:::i;:::-;;:::i;26114:303::-;;;;;;;;;;;;;:::i;32346:170::-;;;;;;;;;;-1:-1:-1;32346:170:0;;;;;:::i;:::-;;:::i;47314:94::-;;;;;;;;;;;;;;;;53685:95;;;;;;;;;;-1:-1:-1;53685:95:0;;;;;:::i;:::-;;:::i;53803:423::-;;;;;;;;;;;;;:::i;49787:778::-;;;;;;:::i;:::-;;:::i;32587:185::-;;;;;;;;;;-1:-1:-1;32587:185:0;;;;;:::i;:::-;;:::i;51001:796::-;;;;;;;;;;-1:-1:-1;51001:796:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;52442:74::-;;;;;;;;;;-1:-1:-1;52442:74:0;;;;;:::i;:::-;;:::i;53148:132::-;;;;;;;;;;-1:-1:-1;53148:132:0;;;;;:::i;:::-;;:::i;47879:28::-;;;;;;;;;;-1:-1:-1;47879:28:0;;;;;;;;;;;47526:33;;;;;;;;;;;;;:::i;47810:25::-;;;;;;;;;;-1:-1:-1;47810:25:0;;;;;;;;47469:28;;;;;;;;;;;;;:::i;29786:125::-;;;;;;;;;;-1:-1:-1;29786:125:0;;;;;:::i;:::-;;:::i;54232:181::-;;;;;;;;;;-1:-1:-1;54232:181:0;;;;;:::i;:::-;;:::i;27234:206::-;;;;;;;;;;-1:-1:-1;27234:206:0;;;;;:::i;:::-;;:::i;46323:103::-;;;;;;;;;;;;;:::i;47912:46::-;;;;;;;;;;-1:-1:-1;47912:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;53581:98;;;;;;;;;;-1:-1:-1;53581:98:0;;;;;:::i;:::-;;:::i;53286:100::-;;;;;;;;;;-1:-1:-1;53286:100:0;;;;;:::i;:::-;;:::i;47418:41::-;;;;;;;;;;;;;;;;45672:87;;;;;;;;;;-1:-1:-1;45745:6:0;;-1:-1:-1;;;;;45745:6:0;45672:87;;47722:37;;;;;;;;;;;;;;;;30147:104;;;;;;;;;;;;;:::i;47840:34::-;;;;;;;;;;-1:-1:-1;47840:34:0;;;;;;;;;;;50730:107;;;;;;;;;;-1:-1:-1;50730:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;50813:18:0;50788:7;50813:18;;;:11;:18;;;;;;;50730:107;49158:365;;;;;;:::i;:::-;;:::i;31757:287::-;;;;;;;;;;-1:-1:-1;31757:287:0;;;;;:::i;:::-;;:::i;47565:31::-;;;;;;;;;;;;;:::i;53012:130::-;;;;;;;;;;-1:-1:-1;53012:130:0;;;;;:::i;:::-;;:::i;32843:369::-;;;;;;;;;;-1:-1:-1;32843:369:0;;;;;:::i;:::-;;:::i;51904:445::-;;;;;;;;;;-1:-1:-1;51904:445:0;;;;;:::i;:::-;;:::i;47685:31::-;;;;;;;;;;;;;;;;47645:34;;;;;;;;;;;;;;;;52355:81;;;;;;;;;;-1:-1:-1;52355:81:0;;;;;:::i;:::-;;:::i;47765:37::-;;;;;;;;;;;;;;;;32115:164;;;;;;;;;;-1:-1:-1;32115:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32236:25:0;;;32212:4;32236:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32115:164;50569:155;;;;;;;;;;-1:-1:-1;50569:155:0;;;;;:::i;:::-;;:::i;52522:83::-;;;;;;;;;;-1:-1:-1;52522:83:0;;;;;:::i;:::-;;:::i;49529:251::-;;;;;;:::i;:::-;;:::i;46581:201::-;;;;;;;;;;-1:-1:-1;46581:201:0;;;;;:::i;:::-;;:::i;26865:305::-;26967:4;-1:-1:-1;;;;;;27004:40:0;;-1:-1:-1;;;27004:40:0;;:105;;-1:-1:-1;;;;;;;27061:48:0;;-1:-1:-1;;;27061:48:0;27004:105;:158;;;-1:-1:-1;;;;;;;;;;13583:40:0;;;27126:36;26984:178;26865:305;-1:-1:-1;;26865:305:0:o;52612:222::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;;;;;;;;;52739:9:::1;;52712:23;:36;;52704:68;;;::::0;-1:-1:-1;;;52704:68:0;;12997:2:1;52704:68:0::1;::::0;::::1;12979:21:1::0;13036:2;13016:18;;;13009:30;-1:-1:-1;;;13055:18:1;;;13048:49;13114:18;;52704:68:0::1;12795:343:1::0;52704:68:0::1;52779:22;:48:::0;52612:222::o;29978:100::-;30032:13;30065:5;30058:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29978:100;:::o;31481:204::-;31549:7;31574:16;31582:7;31574;:16::i;:::-;31569:64;;31599:34;;-1:-1:-1;;;31599:34:0;;;;;;;;;;;31569:64;-1:-1:-1;31653:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31653:24:0;;31481:204::o;31044:371::-;31117:13;31133:24;31149:7;31133:15;:24::i;:::-;31117:40;;31178:5;-1:-1:-1;;;;;31172:11:0;:2;-1:-1:-1;;;;;31172:11:0;;31168:48;;;31192:24;;-1:-1:-1;;;31192:24:0;;;;;;;;;;;31168:48;22461:10;-1:-1:-1;;;;;31233:21:0;;;;;;:63;;-1:-1:-1;31259:37:0;31276:5;22461:10;32115:164;:::i;31259:37::-;31258:38;31233:63;31229:138;;;31320:35;;-1:-1:-1;;;31320:35:0;;;;;;;;;;;31229:138;31379:28;31388:2;31392:7;31401:5;31379:8;:28::i;:::-;31106:309;31044:371;;:::o;52840:166::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;52930:9:::1;;52919:7;:20;;52911:52;;;::::0;-1:-1:-1;;;52911:52:0;;12997:2:1;52911:52:0::1;::::0;::::1;12979:21:1::0;13036:2;13016:18;;;13009:30;-1:-1:-1;;;13055:18:1;;;13048:49;13114:18;;52911:52:0::1;12795:343:1::0;52911:52:0::1;52972:18;:28:::0;52840:166::o;53392:100::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;53464:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;53392:100:::0;:::o;53498:77::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;53554:6:::1;:15:::0;;-1:-1:-1;;53554:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53498:77::o;26114:303::-;51891:1;26368:12;26158:7;26352:13;:28;-1:-1:-1;;26352:46:0;;26114:303::o;32346:170::-;32480:28;32490:4;32496:2;32500:7;32480:9;:28::i;53685:95::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;53750:15:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;53750:24:0;;::::1;::::0;;;::::1;::::0;;53685:95::o;53803:423::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;53877:21:::1;53924:4;53963:42;54091:3;54066:21;53877::::0;54091:3;54066:21:::1;:::i;:::-;54065:29;;;;:::i;:::-;53955:215;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53941:229;;;;;54189:7;54181:35;;;::::0;-1:-1:-1;;;54181:35:0;;11197:2:1;54181:35:0::1;::::0;::::1;11179:21:1::0;11236:2;11216:18;;;11209:30;-1:-1:-1;;;11255:18:1;;;11248:45;11310:18;;54181:35:0::1;10995:339:1::0;49787:778:0;49880:11;48270:7;45745:6;;-1:-1:-1;;;;;45745:6:0;;45672:87;48270:7;-1:-1:-1;;;;;48256:21:0;:10;-1:-1:-1;;;;;48256:21:0;;48252:131;;48308:1;48294:11;:15;:52;;;;;48328:18;;48313:11;:33;;48294:52;48286:85;;;;-1:-1:-1;;;48286:85:0;;;;;;;:::i;:::-;48428:9;;48413:11;48397:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;48389:73;;;;-1:-1:-1;;;48389:73:0;;;;;;;:::i;:::-;49915:11:::1;48711;48702:6;;:20;;;;:::i;:::-;48689:9;:33;;48681:65;;;::::0;-1:-1:-1;;;48681:65:0;;15527:2:1;48681:65:0::1;::::0;::::1;15509:21:1::0;15566:2;15546:18;;;15539:30;-1:-1:-1;;;15585:18:1;;;15578:49;15644:18;;48681:65:0::1;15325:343:1::0;48681:65:0::1;49946:6:::2;::::0;::::2;;49945:7;49937:43;;;::::0;-1:-1:-1;;;49937:43:0;;14058:2:1;49937:43:0::2;::::0;::::2;14040:21:1::0;14097:2;14077:18;;;14070:30;-1:-1:-1;;;14116:18:1;;;14109:53;14179:18;;49937:43:0::2;13856:347:1::0;49937:43:0::2;49997:15;::::0;::::2;::::0;::::2;;;49989:65;;;::::0;-1:-1:-1;;;49989:65:0;;11890:2:1;49989:65:0::2;::::0;::::2;11872:21:1::0;11929:2;11909:18;;;11902:30;11968:34;11948:18;;;11941:62;-1:-1:-1;;;12019:18:1;;;12012:35;12064:19;;49989:65:0::2;11688:401:1::0;49989:65:0::2;50095:10;50065:14;50813:18:::0;;;:11;:18;;;;;;50147:22:::2;::::0;50123:20:::2;50132:11:::0;50813:18;50123:20:::2;:::i;:::-;:46;;50115:81;;;::::0;-1:-1:-1;;;50115:81:0;;12646:2:1;50115:81:0::2;::::0;::::2;12628:21:1::0;12685:2;12665:18;;;12658:30;-1:-1:-1;;;12704:18:1;;;12697:52;12766:18;;50115:81:0::2;12444:346:1::0;50115:81:0::2;50207:36;22461:10:::0;50231:11:::2;50207:9;:36::i;:::-;50278:20;50287:11:::0;50278:6;:20:::2;:::i;:::-;50264:10;50252:23;::::0;;;:11:::2;:23;::::0;;;;;;;:46;;;;50316:20:::2;:32:::0;;;;::::2;;50315:33;50307:69;;;::::0;-1:-1:-1;;;50307:69:0;;13706:2:1;50307:69:0::2;::::0;::::2;13688:21:1::0;13745:2;13725:18;;;13718:30;13784:25;13764:18;;;13757:53;13827:18;;50307:69:0::2;13504:347:1::0;50307:69:0::2;50410:28;::::0;-1:-1:-1;;50427:10:0::2;6479:2:1::0;6475:15;6471:53;50410:28:0::2;::::0;::::2;6459:66:1::0;50385:12:0::2;::::0;6541::1;;50410:28:0::2;;;;;;;;;;;;50400:39;;;;;;50385:54;;50456:43;50475:5;;50456:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;50482:10:0::2;::::0;;-1:-1:-1;50494:4:0;;-1:-1:-1;50456:18:0::2;:43::i;:::-;50448:101;;;::::0;-1:-1:-1;;;50448:101:0;;12296:2:1;50448:101:0::2;::::0;::::2;12278:21:1::0;12335:2;12315:18;;;12308:30;-1:-1:-1;;;12354:18:1;;;12347:51;12415:18;;50448:101:0::2;12094:345:1::0;50448:101:0::2;49928:637;;48469:1:::1;49787:778:::0;;;;:::o;32587:185::-;32725:39;32742:4;32748:2;32752:7;32725:39;;;;;;;;;;;;:16;:39::i;51001:796::-;51061:16;51086:23;51112:17;51122:6;51112:9;:17::i;:::-;51086:43;;51136:30;51183:15;-1:-1:-1;;;;;51169:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51169:30:0;-1:-1:-1;51136:63:0;-1:-1:-1;51891:1:0;51206:22;;51322:441;51347:15;51329;:33;:64;;;;;51384:9;;51366:14;:27;;51329:64;51322:441;;;51404:31;51438:27;;;:11;:27;;;;;;;;;51404:61;;;;;;;;;-1:-1:-1;;;;;51404:61:0;;;;-1:-1:-1;;;51404:61:0;;-1:-1:-1;;;;;51404:61:0;;;;;;;;-1:-1:-1;;;51404:61:0;;;;;;;;;;;;;;;;51480:49;;-1:-1:-1;51501:14:0;;-1:-1:-1;;;;;51501:28:0;;;51480:49;51476:111;;;51563:14;;;-1:-1:-1;51476:111:0;51623:6;-1:-1:-1;;;;;51601:28:0;:18;-1:-1:-1;;;;;51601:28:0;;51597:132;;;51675:14;51642:13;51656:15;51642:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;51702:17;;;;:::i;:::-;;;;51597:132;51739:16;;;;:::i;:::-;;;;51395:368;51322:441;;;-1:-1:-1;51778:13:0;;51001:796;-1:-1:-1;;;;;51001:796:0:o;52442:74::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;52498:4:::1;:12:::0;52442:74::o;53148:132::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;53236:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;47526:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47469:28::-;;;;;;;:::i;29786:125::-;29850:7;29877:21;29890:7;29877:12;:21::i;:::-;:26;;29786:125;-1:-1:-1;;29786:125:0:o;54232:181::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;54317:6:::1;54312:96;54327:17:::0;;::::1;54312:96;;;54396:4;54362:20;:31;54383:6;;54390:1;54383:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;54362:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;54362:31:0;:38;;-1:-1:-1;;54362:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54346:3;::::1;::::0;::::1;:::i;:::-;;;;54312:96;;27234:206:::0;27298:7;-1:-1:-1;;;;;27322:19:0;;27318:60;;27350:28;;-1:-1:-1;;;27350:28:0;;;;;;;;;;;27318:60;-1:-1:-1;;;;;;27404:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;27404:27:0;;27234:206::o;46323:103::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;46388:30:::1;46415:1;46388:18;:30::i;:::-;46323:103::o:0;53581:98::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;53649:10:::1;:24:::0;53581:98::o;53286:100::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;53358:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;30147:104::-:0;30203:13;30236:7;30229:14;;;;;:::i;49158:365::-;49223:11;48270:7;45745:6;;-1:-1:-1;;;;;45745:6:0;;45672:87;48270:7;-1:-1:-1;;;;;48256:21:0;:10;-1:-1:-1;;;;;48256:21:0;;48252:131;;48308:1;48294:11;:15;:52;;;;;48328:18;;48313:11;:33;;48294:52;48286:85;;;;-1:-1:-1;;;48286:85:0;;;;;;;:::i;:::-;48428:9;;48413:11;48397:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;48389:73;;;;-1:-1:-1;;;48389:73:0;;;;;;;:::i;:::-;49256:11:::1;48567;48560:4;;:18;;;;:::i;:::-;48547:9;:31;;48539:63;;;::::0;-1:-1:-1;;;48539:63:0;;15527:2:1;48539:63:0::1;::::0;::::1;15509:21:1::0;15566:2;15546:18;;;15539:30;-1:-1:-1;;;15585:18:1;;;15578:49;15644:18;;48539:63:0::1;15325:343:1::0;48539:63:0::1;49285:6:::2;::::0;::::2;;49284:7;49276:43;;;::::0;-1:-1:-1;;;49276:43:0;;14058:2:1;49276:43:0::2;::::0;::::2;14040:21:1::0;14097:2;14077:18;;;14070:30;-1:-1:-1;;;14116:18:1;;;14109:53;14179:18;;49276:43:0::2;13856:347:1::0;49276:43:0::2;49335:15;::::0;::::2;::::0;::::2;;;49334:16;49326:52;;;::::0;-1:-1:-1;;;49326:52:0;;15175:2:1;49326:52:0::2;::::0;::::2;15157:21:1::0;15214:2;15194:18;;;15187:30;15253:25;15233:18;;;15226:53;15296:18;;49326:52:0::2;14973:347:1::0;49326:52:0::2;49432:18;;49417:11;49393:21;49403:10;49393:9;:21::i;:::-;:35;;;;:::i;:::-;:57;;49385:87;;;::::0;-1:-1:-1;;;49385:87:0;;10444:2:1;49385:87:0::2;::::0;::::2;10426:21:1::0;10483:2;10463:18;;;10456:30;-1:-1:-1;;;10502:18:1;;;10495:47;10559:18;;49385:87:0::2;10242:341:1::0;49385:87:0::2;49481:36;22461:10:::0;49505:11:::2;49481:9;:36::i;31757:287::-:0;-1:-1:-1;;;;;31856:24:0;;22461:10;31856:24;31852:54;;;31889:17;;-1:-1:-1;;;31889:17:0;;;;;;;;;;;31852:54;22461:10;31919:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31919:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31919:53:0;;;;;;;;;;31988:48;;9784:41:1;;;31919:42:0;;22461:10;31988:48;;9757:18:1;31988:48:0;;;;;;;31757:287;;:::o;47565:31::-;;;;;;;:::i;53012:130::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;53096:18:::1;:40:::0;53012:130::o;32843:369::-;33010:28;33020:4;33026:2;33030:7;33010:9;:28::i;:::-;-1:-1:-1;;;;;33053:13:0;;3686:19;:23;;33053:76;;;;;33073:56;33104:4;33110:2;33114:7;33123:5;33073:30;:56::i;:::-;33072:57;33053:76;33049:156;;;33153:40;;-1:-1:-1;;;33153:40:0;;;;;;;;;;;33049:156;32843:369;;;;:::o;51904:445::-;51978:13;52008:17;52016:8;52008:7;:17::i;:::-;52000:77;;;;-1:-1:-1;;;52000:77:0;;14410:2:1;52000:77:0;;;14392:21:1;14449:2;14429:18;;;14422:30;14488:34;14468:18;;;14461:62;-1:-1:-1;;;14539:18:1;;;14532:45;14594:19;;52000:77:0;14208:411:1;52000:77:0;52090:8;;;;;;;52086:64;;52125:17;52118:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51904:445;;;:::o;52086:64::-;52158:28;52189:10;:8;:10::i;:::-;52158:41;;52244:1;52219:14;52213:28;:32;:130;;;;;;;;;;;;;;;;;52281:14;52297:19;:8;:17;:19::i;:::-;52318:9;52264:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52213:130;52206:137;51904:445;-1:-1:-1;;;51904:445:0:o;52355:81::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;52413:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;52413:17:0;;::::1;::::0;;;::::1;::::0;;52355:81::o;50569:155::-;50655:11;48270:7;45745:6;;-1:-1:-1;;;;;45745:6:0;;45672:87;48270:7;-1:-1:-1;;;;;48256:21:0;:10;-1:-1:-1;;;;;48256:21:0;;48252:131;;48308:1;48294:11;:15;:52;;;;;48328:18;;48313:11;:33;;48294:52;48286:85;;;;-1:-1:-1;;;48286:85:0;;;;;;;:::i;:::-;48428:9;;48413:11;48397:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;48389:73;;;;-1:-1:-1;;;48389:73:0;;;;;;;:::i;:::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23:::1;45884:68;;;;-1:-1:-1::0;;;45884:68:0::1;;;;;;;:::i;:::-;50685:33:::2;50695:9;50706:11;50685:9;:33::i;52522:83::-:0;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;52582:6:::1;:16:::0;52522:83::o;49529:251::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;49624:1:::1;49610:11;:15;49602:48;;;;-1:-1:-1::0;;;49602:48:0::1;;;;;;;:::i;:::-;49697:9;;49682:11;49666:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;49658:73;;;;-1:-1:-1::0;;;49658:73:0::1;;;;;;;:::i;:::-;49738:36;22461:10:::0;49762:11:::1;49738:9;:36::i;:::-;49529:251:::0;:::o;46581:201::-;45745:6;;-1:-1:-1;;;;;45745:6:0;22461:10;45892:23;45884:68;;;;-1:-1:-1;;;45884:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46670:22:0;::::1;46662:73;;;::::0;-1:-1:-1;;;46662:73:0;;10790:2:1;46662:73:0::1;::::0;::::1;10772:21:1::0;10829:2;10809:18;;;10802:30;10868:34;10848:18;;;10841:62;-1:-1:-1;;;10919:18:1;;;10912:36;10965:19;;46662:73:0::1;10588:402:1::0;46662:73:0::1;46746:28;46765:8;46746:18;:28::i;3391:326::-:0;-1:-1:-1;;;;;3686:19:0;;:23;;;3391:326::o;33467:174::-;33524:4;33567:7;51891:1;33548:26;;:53;;;;;33588:13;;33578:7;:23;33548:53;:85;;;;-1:-1:-1;;33606:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;33606:27:0;;;;33605:28;;33467:174::o;41624:196::-;41739:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;41739:29:0;-1:-1:-1;;;;;41739:29:0;;;;;;;;;41784:28;;41739:24;;41784:28;;;;;;;41624:196;;;:::o;36567:2130::-;36682:35;36720:21;36733:7;36720:12;:21::i;:::-;36682:59;;36780:4;-1:-1:-1;;;;;36758:26:0;:13;:18;;;-1:-1:-1;;;;;36758:26:0;;36754:67;;36793:28;;-1:-1:-1;;;36793:28:0;;;;;;;;;;;36754:67;36834:22;22461:10;-1:-1:-1;;;;;36860:20:0;;;;:73;;-1:-1:-1;36897:36:0;36914:4;22461:10;32115:164;:::i;36897:36::-;36860:126;;;-1:-1:-1;22461:10:0;36950:20;36962:7;36950:11;:20::i;:::-;-1:-1:-1;;;;;36950:36:0;;36860:126;36834:153;;37005:17;37000:66;;37031:35;;-1:-1:-1;;;37031:35:0;;;;;;;;;;;37000:66;-1:-1:-1;;;;;37081:16:0;;37077:52;;37106:23;;-1:-1:-1;;;37106:23:0;;;;;;;;;;;37077:52;37250:35;37267:1;37271:7;37280:4;37250:8;:35::i;:::-;-1:-1:-1;;;;;37581:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;37581:31:0;;;-1:-1:-1;;;;;37581:31:0;;;-1:-1:-1;;37581:31:0;;;;;;;37627:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;37627:29:0;;;;;;;;;;;37707:20;;;:11;:20;;;;;;37742:18;;-1:-1:-1;;;;;;37775:49:0;;;;-1:-1:-1;;;37808:15:0;37775:49;;;;;;;;;;38098:11;;38158:24;;;;;38201:13;;37707:20;;38158:24;;38201:13;38197:384;;38411:13;;38396:11;:28;38392:174;;38449:20;;38518:28;;;;-1:-1:-1;;;;;38492:54:0;-1:-1:-1;;;38492:54:0;-1:-1:-1;;;;;;38492:54:0;;;-1:-1:-1;;;;;38449:20:0;;38492:54;;;;38392:174;37556:1036;;;38628:7;38624:2;-1:-1:-1;;;;;38609:27:0;38618:4;-1:-1:-1;;;;;38609:27:0;;;;;;;;;;;38647:42;36671:2026;;36567:2130;;;:::o;33649:104::-;33718:27;33728:2;33732:8;33718:27;;;;;;;;;;;;:9;:27::i;20236:190::-;20361:4;20414;20385:25;20398:5;20405:4;20385:12;:25::i;:::-;:33;;20236:190;-1:-1:-1;;;;20236:190:0:o;28615:1109::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;28726:7:0;;51891:1;28775:23;;:47;;;;;28809:13;;28802:4;:20;28775:47;28771:886;;;28843:31;28877:17;;;:11;:17;;;;;;;;;28843:51;;;;;;;;;-1:-1:-1;;;;;28843:51:0;;;;-1:-1:-1;;;28843:51:0;;-1:-1:-1;;;;;28843:51:0;;;;;;;;-1:-1:-1;;;28843:51:0;;;;;;;;;;;;;;28913:729;;28963:14;;-1:-1:-1;;;;;28963:28:0;;28959:101;;29027:9;28615:1109;-1:-1:-1;;;28615:1109:0:o;28959:101::-;-1:-1:-1;;;29402:6:0;29447:17;;;;:11;:17;;;;;;;;;29435:29;;;;;;;;;-1:-1:-1;;;;;29435:29:0;;;;;-1:-1:-1;;;29435:29:0;;-1:-1:-1;;;;;29435:29:0;;;;;;;;-1:-1:-1;;;29435:29:0;;;;;;;;;;;;;29495:28;29491:109;;29563:9;28615:1109;-1:-1:-1;;;28615:1109:0:o;29491:109::-;29362:261;;;28824:833;28771:886;29685:31;;-1:-1:-1;;;29685:31:0;;;;;;;;;;;46942:191;47035:6;;;-1:-1:-1;;;;;47052:17:0;;;-1:-1:-1;;;;;;47052:17:0;;;;;;;47085:40;;47035:6;;;47052:17;47035:6;;47085:40;;47016:16;;47085:40;47005:128;46942:191;:::o;42312:667::-;42496:72;;-1:-1:-1;;;42496:72:0;;42475:4;;-1:-1:-1;;;;;42496:36:0;;;;;:72;;22461:10;;42547:4;;42553:7;;42562:5;;42496:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42496:72:0;;;;;;;;-1:-1:-1;;42496:72:0;;;;;;;;;;;;:::i;:::-;;;42492:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42730:13:0;;42726:235;;42776:40;;-1:-1:-1;;;42776:40:0;;;;;;;;;;;42726:235;42919:6;42913:13;42904:6;42900:2;42896:15;42889:38;42492:480;-1:-1:-1;;;;;;42615:55:0;-1:-1:-1;;;42615:55:0;;-1:-1:-1;42492:480:0;42312:667;;;;;;:::o;54419:104::-;54479:13;54508:9;54501:16;;;;;:::i;399:723::-;455:13;676:10;672:53;;-1:-1:-1;;703:10:0;;;;;;;;;;;;-1:-1:-1;;;703:10:0;;;;;399:723::o;672:53::-;750:5;735:12;791:78;798:9;;791:78;;824:8;;;;:::i;:::-;;-1:-1:-1;847:10:0;;-1:-1:-1;855:2:0;847:10;;:::i;:::-;;;791:78;;;879:19;911:6;-1:-1:-1;;;;;901:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;901:17:0;;879:39;;929:154;936:10;;929:154;;963:11;973:1;963:11;;:::i;:::-;;-1:-1:-1;1032:10:0;1040:2;1032:5;:10;:::i;:::-;1019:24;;:2;:24;:::i;:::-;1006:39;;989:6;996;989:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;989:56:0;;;;;;;;-1:-1:-1;1060:11:0;1069:2;1060:11;;:::i;:::-;;;929:154;;34116:163;34239:32;34245:2;34249:8;34259:5;34266:4;34239:5;:32::i;20788:675::-;20871:7;20914:4;20871:7;20929:497;20953:5;:12;20949:1;:16;20929:497;;;20987:20;21010:5;21016:1;21010:8;;;;;;;;:::i;:::-;;;;;;;20987:31;;21053:12;21037;:28;21033:382;;21539:13;21589:15;;;21625:4;21618:15;;;21672:4;21656:21;;21165:57;;21033:382;;;21539:13;21589:15;;;21625:4;21618:15;;;21672:4;21656:21;;21342:57;;21033:382;-1:-1:-1;20967:3:0;;;;:::i;:::-;;;;20929:497;;;-1:-1:-1;21443:12:0;20788:675;-1:-1:-1;;;20788:675:0:o;34538:1775::-;34677:20;34700:13;-1:-1:-1;;;;;34728:16:0;;34724:48;;34753:19;;-1:-1:-1;;;34753:19:0;;;;;;;;;;;34724:48;34787:13;34783:44;;34809:18;;-1:-1:-1;;;34809:18:0;;;;;;;;;;;34783:44;-1:-1:-1;;;;;35178:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;35237:49:0;;-1:-1:-1;;;;;35178:44:0;;;;;;;35237:49;;;;-1:-1:-1;;35178:44:0;;;;;;35237:49;;;;;;;;;;;;;;;;35303:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;35353:66:0;;;;-1:-1:-1;;;35403:15:0;35353:66;;;;;;;;;;35303:25;35500:23;;;35544:4;:23;;;;-1:-1:-1;;;;;;35552:13:0;;3686:19;:23;;35552:15;35540:641;;;35588:314;35619:38;;35644:12;;-1:-1:-1;;;;;35619:38:0;;;35636:1;;35619:38;;35636:1;;35619:38;35685:69;35724:1;35728:2;35732:14;;;;;;35748:5;35685:30;:69::i;:::-;35680:174;;35790:40;;-1:-1:-1;;;35790:40:0;;;;;;;;;;;35680:174;35897:3;35881:12;:19;;35588:314;;35983:12;35966:13;;:29;35962:43;;35997:8;;;35962:43;35540:641;;;36046:120;36077:40;;36102:14;;;;;-1:-1:-1;;;;;36077:40:0;;;36094:1;;36077:40;;36094:1;;36077:40;36161:3;36145:12;:19;;36046:120;;35540:641;-1:-1:-1;36195:13:0;:28;36245:60;32843:369;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;-1:-1:-1;;;;;149:2:1;141:6;138:14;135:40;;;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:72;;;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:45;;;532:1;529;522:12;491:45;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;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:367::-;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:55;;973:1;970;963:12;922:55;-1:-1:-1;996:20:1;;-1:-1:-1;;;;;1028:30:1;;1025:50;;;1071:1;1068;1061:12;1025:50;1108:4;1100:6;1096:17;1084:29;;1168:3;1161:4;1151:6;1148:1;1144:14;1136:6;1132:27;1128:38;1125:47;1122:67;;;1185:1;1182;1175:12;1122:67;828:367;;;;;:::o;1200:160::-;1265:20;;1321:13;;1314:21;1304:32;;1294:60;;1350:1;1347;1340:12;1365:186;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;1516:29;1535:9;1516:29;:::i;1556:260::-;1624:6;1632;1685:2;1673:9;1664:7;1660:23;1656:32;1653:52;;;1701:1;1698;1691:12;1653:52;1724:29;1743:9;1724:29;:::i;:::-;1714:39;;1772:38;1806:2;1795:9;1791:18;1772:38;:::i;:::-;1762:48;;1556:260;;;;;:::o;1821:328::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2006:29;2025:9;2006:29;:::i;:::-;1996:39;;2054:38;2088:2;2077:9;2073:18;2054:38;:::i;:::-;2044:48;;2139:2;2128:9;2124:18;2111:32;2101:42;;1821:328;;;;;:::o;2154:666::-;2249:6;2257;2265;2273;2326:3;2314:9;2305:7;2301:23;2297:33;2294:53;;;2343:1;2340;2333:12;2294:53;2366:29;2385:9;2366:29;:::i;:::-;2356:39;;2414:38;2448:2;2437:9;2433:18;2414:38;:::i;:::-;2404:48;;2499:2;2488:9;2484:18;2471:32;2461:42;;2554:2;2543:9;2539:18;2526:32;-1:-1:-1;;;;;2573:6:1;2570:30;2567:50;;;2613:1;2610;2603:12;2567:50;2636:22;;2689:4;2681:13;;2677:27;-1:-1:-1;2667:55:1;;2718:1;2715;2708:12;2667:55;2741:73;2806:7;2801:2;2788:16;2783:2;2779;2775:11;2741:73;:::i;:::-;2731:83;;;2154:666;;;;;;;:::o;2825:254::-;2890:6;2898;2951:2;2939:9;2930:7;2926:23;2922:32;2919:52;;;2967:1;2964;2957:12;2919:52;2990:29;3009:9;2990:29;:::i;:::-;2980:39;;3038:35;3069:2;3058:9;3054:18;3038:35;:::i;3084:254::-;3152:6;3160;3213:2;3201:9;3192:7;3188:23;3184:32;3181:52;;;3229:1;3226;3219:12;3181:52;3252:29;3271:9;3252:29;:::i;:::-;3242:39;3328:2;3313:18;;;;3300:32;;-1:-1:-1;;;3084:254:1:o;3343:437::-;3429:6;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:52;;;3506:1;3503;3496:12;3458:52;3546:9;3533:23;-1:-1:-1;;;;;3571:6:1;3568:30;3565:50;;;3611:1;3608;3601:12;3565:50;3650:70;3712:7;3703:6;3692:9;3688:22;3650:70;:::i;:::-;3739:8;;3624:96;;-1:-1:-1;3343:437:1;-1:-1:-1;;;;3343:437:1:o;3785:180::-;3841:6;3894:2;3882:9;3873:7;3869:23;3865:32;3862:52;;;3910:1;3907;3900:12;3862:52;3933:26;3949:9;3933:26;:::i;3970:180::-;4029:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:52;;;4098:1;4095;4088:12;4050:52;-1:-1:-1;4121:23:1;;3970:180;-1:-1:-1;3970:180:1:o;4155:245::-;4213:6;4266:2;4254:9;4245:7;4241:23;4237:32;4234:52;;;4282:1;4279;4272:12;4234:52;4321:9;4308:23;4340:30;4364:5;4340:30;:::i;4405:249::-;4474:6;4527:2;4515:9;4506:7;4502:23;4498:32;4495:52;;;4543:1;4540;4533:12;4495:52;4575:9;4569:16;4594:30;4618:5;4594:30;:::i;4659:450::-;4728:6;4781:2;4769:9;4760:7;4756:23;4752:32;4749:52;;;4797:1;4794;4787:12;4749:52;4837:9;4824:23;-1:-1:-1;;;;;4862:6:1;4859:30;4856:50;;;4902:1;4899;4892:12;4856:50;4925:22;;4978:4;4970:13;;4966:27;-1:-1:-1;4956:55:1;;5007:1;5004;4997:12;4956:55;5030:73;5095:7;5090:2;5077:16;5072:2;5068;5064:11;5030:73;:::i;5299:254::-;5367:6;5375;5428:2;5416:9;5407:7;5403:23;5399:32;5396:52;;;5444:1;5441;5434:12;5396:52;5480:9;5467:23;5457:33;;5509:38;5543:2;5532:9;5528:18;5509:38;:::i;5558:505::-;5653:6;5661;5669;5722:2;5710:9;5701:7;5697:23;5693:32;5690:52;;;5738:1;5735;5728:12;5690:52;5774:9;5761:23;5751:33;;5835:2;5824:9;5820:18;5807:32;-1:-1:-1;;;;;5854:6:1;5851:30;5848:50;;;5894:1;5891;5884:12;5848:50;5933:70;5995:7;5986:6;5975:9;5971:22;5933:70;:::i;:::-;5558:505;;6022:8;;-1:-1:-1;5907:96:1;;-1:-1:-1;;;;5558:505:1:o;6068:257::-;6109:3;6147:5;6141:12;6174:6;6169:3;6162:19;6190:63;6246:6;6239:4;6234:3;6230:14;6223:4;6216:5;6212:16;6190:63;:::i;:::-;6307:2;6286:15;-1:-1:-1;;6282:29:1;6273:39;;;;6314:4;6269:50;;6068:257;-1:-1:-1;;6068:257:1:o;6564:1527::-;6788:3;6826:6;6820:13;6852:4;6865:51;6909:6;6904:3;6899:2;6891:6;6887:15;6865:51;:::i;:::-;6979:13;;6938:16;;;;7001:55;6979:13;6938:16;7023:15;;;7001:55;:::i;:::-;7145:13;;7078:20;;;7118:1;;7205;7227:18;;;;7280;;;;7307:93;;7385:4;7375:8;7371:19;7359:31;;7307:93;7448:2;7438:8;7435:16;7415:18;7412:40;7409:167;;;-1:-1:-1;;;7475:33:1;;7531:4;7528:1;7521:15;7561:4;7482:3;7549:17;7409:167;7592:18;7619:110;;;;7743:1;7738:328;;;;7585:481;;7619:110;-1:-1:-1;;7654:24:1;;7640:39;;7699:20;;;;-1:-1:-1;7619:110:1;;7738:328;15928:1;15921:14;;;15965:4;15952:18;;7833:1;7847:169;7861:8;7858:1;7855:15;7847:169;;;7943:14;;7928:13;;;7921:37;7986:16;;;;7878:10;;7847:169;;;7851:3;;8047:8;8040:5;8036:20;8029:27;;7585:481;-1:-1:-1;8082:3:1;;6564:1527;-1:-1:-1;;;;;;;;;;;6564:1527:1:o;8514:488::-;-1:-1:-1;;;;;8783:15:1;;;8765:34;;8835:15;;8830:2;8815:18;;8808:43;8882:2;8867:18;;8860:34;;;8930:3;8925:2;8910:18;;8903:31;;;8708:4;;8951:45;;8976:19;;8968:6;8951:45;:::i;:::-;8943:53;8514:488;-1:-1:-1;;;;;;8514:488:1:o;9007:632::-;9178:2;9230:21;;;9300:13;;9203:18;;;9322:22;;;9149:4;;9178:2;9401:15;;;;9375:2;9360:18;;;9149:4;9444:169;9458:6;9455:1;9452:13;9444:169;;;9519:13;;9507:26;;9588:15;;;;9553:12;;;;9480:1;9473:9;9444:169;;;-1:-1:-1;9630:3:1;;9007:632;-1:-1:-1;;;;;;9007:632:1:o;10018:219::-;10167:2;10156:9;10149:21;10130:4;10187:44;10227:2;10216:9;10212:18;10204:6;10187:44;:::i;11339:344::-;11541:2;11523:21;;;11580:2;11560:18;;;11553:30;-1:-1:-1;;;11614:2:1;11599:18;;11592:50;11674:2;11659:18;;11339:344::o;13143:356::-;13345:2;13327:21;;;13364:18;;;13357:30;13423:34;13418:2;13403:18;;13396:62;13490:2;13475:18;;13143:356::o;14624:344::-;14826:2;14808:21;;;14865:2;14845:18;;;14838:30;-1:-1:-1;;;14899:2:1;14884:18;;14877:50;14959:2;14944:18;;14624:344::o;15981:128::-;16021:3;16052:1;16048:6;16045:1;16042:13;16039:39;;;16058:18;;:::i;:::-;-1:-1:-1;16094:9:1;;15981:128::o;16114:120::-;16154:1;16180;16170:35;;16185:18;;:::i;:::-;-1:-1:-1;16219:9:1;;16114:120::o;16239:168::-;16279:7;16345:1;16341;16337:6;16333:14;16330:1;16327:21;16322:1;16315:9;16308:17;16304:45;16301:71;;;16352:18;;:::i;:::-;-1:-1:-1;16392:9:1;;16239:168::o;16412:125::-;16452:4;16480:1;16477;16474:8;16471:34;;;16485:18;;:::i;:::-;-1:-1:-1;16522:9:1;;16412:125::o;16542:258::-;16614:1;16624:113;16638:6;16635:1;16632:13;16624:113;;;16714:11;;;16708:18;16695:11;;;16688:39;16660:2;16653:10;16624:113;;;16755:6;16752:1;16749:13;16746:48;;;-1:-1:-1;;16790:1:1;16772:16;;16765:27;16542:258::o;16805:380::-;16884:1;16880:12;;;;16927;;;16948:61;;17002:4;16994:6;16990:17;16980:27;;16948:61;17055:2;17047:6;17044:14;17024:18;17021:38;17018:161;;;17101:10;17096:3;17092:20;17089:1;17082:31;17136:4;17133:1;17126:15;17164:4;17161:1;17154:15;17018:161;;16805:380;;;:::o;17190:135::-;17229:3;-1:-1:-1;;17250:17:1;;17247:43;;;17270:18;;:::i;:::-;-1:-1:-1;17317:1:1;17306:13;;17190:135::o;17330:112::-;17362:1;17388;17378:35;;17393:18;;:::i;:::-;-1:-1:-1;17427:9:1;;17330:112::o;17447:127::-;17508:10;17503:3;17499:20;17496:1;17489:31;17539:4;17536:1;17529:15;17563:4;17560:1;17553:15;17579:127;17640:10;17635:3;17631:20;17628:1;17621:31;17671:4;17668:1;17661:15;17695:4;17692:1;17685:15;17711:127;17772:10;17767:3;17763:20;17760:1;17753:31;17803:4;17800:1;17793:15;17827:4;17824:1;17817:15;17843:127;17904:10;17899:3;17895:20;17892:1;17885:31;17935:4;17932:1;17925:15;17959:4;17956:1;17949:15;17975:131;-1:-1:-1;;;;;;18049:32:1;;18039:43;;18029:71;;18096:1;18093;18086:12
Swarm Source
ipfs://00c8f2d02bf43fd34c74b2f677d8334aa3af332fe5d927f29d3130e152fd3dd6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.