ERC-721
NFT
Overview
Max Total Supply
2,667 Moji
Holders
743
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MojiLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Moji
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-28 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: moji.sol pragma solidity ^0.8.0; /// SPDX-License-Identifier: UNLICENSED /* _________________ ____ ____ ______ ____ ____ _____ ______ _____ _____ ______ _______ _____ ____ ____ / \| | | | ___|\ \ | | | | ____|\ \ ___|\ \ ____|\ \ ____|\ \ | \/ \ ____|\ \ | || | \______ ______/| | | || \ \ | | | || | \ \| \ \ / /\ \ | | \ \ / /\ \ / /\ \ | || | \( / / )/ | |_| || ,_____/| | | | || |______/| ,_____/| / / \ \ | |______/ / /\ / /\ | / / \ \ | || | ' | | ' | .-. || \--'\_|/ | | ____ | || |----'\ | \--'\_|/ | | | || |----'\ / /\ \_/ / / /|| | | | ____ | || | | | | | | || /___/| | | | || || |_____/ | /___/| | | | || |_____/ | | \|_|/ / / || | | || | | || | / // | | | || \____|\ | | | || || | | \____|\ |\ \ / /|| | | | | | ||\ \ / /|| | | || | /___// |____| |____||____ ' /| |____|/____/||____||____| |____ ' /| | \_____\/____/ ||____| |\____\ |____| /| \_____\/____/ ||\____\|____||____| |` | | | | || /_____/ | | | ||| || | | /_____/ | \ | || | /| | | | | | | / \ | || | /| | | || | |____| |____| |____||____| | / |____|_____|/|____||____| |____| | / \|____||____|/ |____| \|____| |____|/ \|____||____|/ \|____|____||____| \( \( )/ \( |_____|/ \( )/ \( )/ \( |_____|/ \( )/ )/ \( )/ \( )/ \( )/ \( ' ' ' ' )/ ' ' ' ' ' )/ ' ' ' ' ' ' ' ' ' ' */ contract Moji is ERC721, Ownable, ReentrancyGuard { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenIdTracker; string public baseURI; string public baseExtension = ".json"; uint256 public maxTx = 20; uint256 public maxSupply = 10000; uint256 public price = 0.1 ether; address[] private onePerWallet = [0xa7B1Cdc1Fcdc2b50d5b7BF7DCfe9fe99F5C4444e,0xdd57FBf4d770209a184107fCbf5af17F698A7a15,0xd8fF99d3EF09Bd09C8EA6951480Fa5c67F646564, 0xe865Fd3b7121Fc3C06d94f5fD3c57bb6af84Fa20,0x4D65f9476eA2E9fd547Ae6CFfa40618057FE6bc1,0x73F2ce001de7952E1134fA307692B3F5c9962339, 0xDb6C5455D8FFC7adeF7a29FE777255Dbc50aB439]; address[] private fourPerWallet = [0x84C0a538cAa0131033d574Dcbd8e5B0E4119E07F, 0x737d9C3086B7eC2080eBC4B9d30a16A1edCDF234, 0xE4f8393A69E7A96F5aCd8be4Fc4322Be5482d8aC, 0x6cC7626Eb2452b9848e5bc6cEd88622f16d53530, 0x106d5044E340072f555487aA42e0DdE60a211d4C, 0x6de9e02244d934F1DfFe64D754c4f3628B6c2f0c, 0xFbb2CB595bbdA26984945A7DdAD572cc37d3C19a, 0x98D3E5BEb3E72Ee0a15e3fB855536342594262D1, 0x3c8B79b1A0F745048DEB0889aE828De138ae2Caf, 0xd0b525888BB71d306C3Cc4E5420B2E47029c73b4, 0x48500B7278b92766497716B4414Dfc008D595070, 0xcE763B4C9a45f1752e87E6dC568e0De48e1A49A9, 0xA2d8f0cFe86d02f568ACA2D615C22bD9D1064A10, 0x0F315D2b987f23B9100448B7D570bDD2AA1685E2, 0xB966238e09e0fE4822a63c60F4D349C779Ad55A5, 0x6d138650C9608b908e0d4E63C194bB85A154ae05, 0x901Edf6396C87b53C51F546dDf2BEDA886406113, 0x097f25a56dc97C76374C532D7d635c405fAc7415, 0xf4685082eBC2ee41C07aD532b488153178285496, 0xBc998D9CB9E2E97a9606626E30313c986c9be820, 0x6c0951920299eE25Ece10298fBE345938A54E38a, 0x01F32C0186d080112f499E7003CA8d078D177958, 0x5E107D623164c1c56298276F70cEf3C66d8A92D0 ]; address[] private eightPerWallet = [0x21962FfDAF261055B5532ca459FD8cFbca43f805, 0x26AFF3e1b9F8606631F9f64007a73178d67e456a, 0x8Bcd2AeDf3Ad38b2946aE548cDD573A8D5Cbc77c, 0x677A208cbe2DDDaBeEe1E3053800bF2630E60050, 0xb0079c46fDaBf986CB640495B5c338c83D7E1782, 0xEaF46ccc75982a64482F37B02828b59588493Efd, 0x96cf91C58D973deDF7f4f7742E5117eff056751a, 0x53d35A9F28880A1b23Ef3907C2441eb9e1af02De, 0xb78e33bA05a66C8A9e6Dd1CE4045E4baf1Aa57e1, 0xc4AB27747E267E5E6b7095D9c1c136D2a5CCb9c5, 0x3dF2D820e8EbB1A3858754339942E5362d75165E, 0xD0B688E9e259D8f78070354880184262Cc2824c3, 0xB066026497EE9c3003B4361033276b88FD2B6D2D, 0xEb78580EFBdf4324c18e1477932493a7C7c35574]; address[] private tenPerWallet = [0x825a62a064210AF559C6e8df416D4943bFAf0a05, 0x8d54c1bE2FFd5786f0f672f66FCce53eF8973028, 0x99076e3451f1fce90f681B70128CED4731e95D7C, 0x3fc70cb5f7aF3876391BDDc22aD359Fe91e5Adb7, 0xc2E36F41d73b366846D635a8a94af000490599BD, 0x1f91B16233419C6a47ccE15d22d93045c287eb61, 0xf60EF8b4AD850Eca92a3F9a00641a300441f4452, 0xd065aC8dc7Bbf3097bCdE664367c6274054FCB56, 0x7A0C04B13A3432fc0711E4A1d295CdcEe4014Ee9, 0xf3f5ddcD55B9A2f9a4b726D8B364b0309e175c10, 0x3cd17e9C026547Ce1C846eaeeF4905545A7739e3, 0x951589a5EE1Ab503D0eefE9F7E8418c10DdF91F7, 0xb8d63862fA0E123ff1dA5460e3E922C6422b5be5, 0x45466C3690c7f1464e4042B099956C050DF47a75]; address[] private twentyEightPerWallet = [0x430036B4d0D7bFcB03eEF5d7ad990435D01a3F1b, 0xe3C4F628182A811B42E61A58C1B8f120eeaD22Ea, 0xBFa64620e3078827aeBfe8F3bd880ed13ecFEfdB, 0x00fEEFaEE9a7db578597a44371eCC7393f2D7455, 0xbeE8565DC9D2b1d0de2d53c8408B383Ce994D459, 0x80895B90240b047570B466300c45dbb50C8ecCFc, 0xA61d61Cc03a7CEd10a5fa7D0955FaAEEd133b03C, 0xe11611A6fb8A98B40C4C32907d56cEFDE9625f3a, 0xa1a6B190F332570510D7251c59b783caa8bd09c1, 0x9e6B85efD7a0319e4bB0010bF960e0785C977C84, 0x35dC053352eD6B0Ce7E136068808E727C5481309, 0x5032e053517546C34d067aFac4DbE94226eFd59D, 0x4e27F2CF1Bc6d9E3AfA4Aba3D51b61419dE30a35, 0xd00e6D0406E2dE8bd3a7307A110732c99D037755, 0x11deC69eE4f235D0e42Fc8BDa5d8aE7d0B134B19, 0x9Ae9e4a50357196E41E7b5F0670b2F08A2baE814, 0x9BC36724078Ce38e535E11870cC4C9BE210E2e2d, 0xE135F406F1a292b8F6bd8446fc43319Ea1A9124d, 0x111bb952E44fb1D43BD1D8861e965E0b0EcF5Df4]; bool public presaleOpen = false; bool public mainSaleOpen = false; mapping (address => bool) private presaleWallets; mapping (address => uint256) public walletPurchaseLimit; event mint(address to, uint total); event withdraw(uint total); event giveawayNft(address to, uint tokenID); constructor(string memory _initBaseURI) ERC721("The Life Of Moji", "Moji") { setBaseURI(_initBaseURI); //Premint 500 for owner for(uint i=0;i<500;i++) { _tokenIdTracker.increment(); _safeMint(0xF7282e61dB0377cd6C4e0657D39Fe7ea0Ea8Be6D, totalToken()); } } modifier isMainsaleOpen() { require(mainSaleOpen == true); _; } modifier isPresaleOpen() { require(presaleOpen == true); _; } function totalSupply() public view returns (uint256) { return totalToken(); } function firstTeamMint() public onlyOwner { for(uint i=0; i<onePerWallet.length; i++) { for(uint x=0; x<1; x++) { _tokenIdTracker.increment(); _safeMint(onePerWallet[i], totalToken()); } } for(uint i=0; i<fourPerWallet.length; i++) { for(uint x=0; x<4; x++) { _tokenIdTracker.increment(); _safeMint(fourPerWallet[i], totalToken()); } } } function secondTeamMint() public onlyOwner { for(uint i=0; i<eightPerWallet.length; i++) { for(uint x=0; x<8; x++) { _tokenIdTracker.increment(); _safeMint(eightPerWallet[i], totalToken()); } } for(uint i=0; i<tenPerWallet.length; i++) { for(uint x=0; x<10; x++) { _tokenIdTracker.increment(); _safeMint(tenPerWallet[i], totalToken()); } } } function finalTeamMint() public onlyOwner { for(uint i=0; i<twentyEightPerWallet.length; i++) { for(uint x=0; x<28; x++) { _tokenIdTracker.increment(); _safeMint(twentyEightPerWallet[i], totalToken()); } } } function totalToken() public view returns (uint256) { return _tokenIdTracker.current(); } function flipPresale(bool _pre) public onlyOwner { presaleOpen = _pre; } function flipMainsale(bool _main) public onlyOwner { mainSaleOpen = _main; } function preSale(uint256 mintTotal) public payable isPresaleOpen nonReentrant { require(totalToken() < maxSupply && (totalToken() + mintTotal) <= maxSupply, "SOLD OUT!"); require(presaleWallets[msg.sender] == true, "You aren't whitelisted!"); require(mintTotal >= 1 && mintTotal <= maxTx, "Mint Amount Incorrect"); require((walletPurchaseLimit[msg.sender] < maxTx) && ((walletPurchaseLimit[msg.sender] + mintTotal) <= maxTx ), "You have passed your minting limit!"); require(msg.value >= (price * mintTotal), "Incorrect amount of Eth sent!"); walletPurchaseLimit[msg.sender] += mintTotal; for(uint256 i=0; i<mintTotal; i++) { require(totalToken() < maxSupply, "SOLD OUT!"); _tokenIdTracker.increment(); _safeMint(msg.sender, totalToken()); emit mint(msg.sender, totalToken()); } } function mainSale(uint256 mintTotal)public payable isMainsaleOpen nonReentrant { require(mintTotal >= 1 && mintTotal <= maxTx, "Mint Amount Incorrect"); require(totalToken() < maxSupply && (totalToken() + mintTotal) <= maxSupply, "SOLD OUT!"); require(walletPurchaseLimit[msg.sender] < maxTx, "You have passed your minting limit!"); require((walletPurchaseLimit[msg.sender] < maxTx) && ((walletPurchaseLimit[msg.sender] + mintTotal) <= maxTx ), "You have passed your minting limit!"); require(msg.value >= (price * mintTotal), "Incorrect amount of Eth sent!"); walletPurchaseLimit[msg.sender] += mintTotal; for(uint256 i=0; i<mintTotal; i++) { require(totalToken() < maxSupply, "SOLD OUT!"); _tokenIdTracker.increment(); _safeMint(msg.sender, totalToken()); emit mint(msg.sender, totalToken()); } } function addWhiteList(address[] memory presaleAddress) public onlyOwner { for(uint256 i=0; i<presaleAddress.length; i++) { presaleWallets[presaleAddress[i]] = true; } } function removeWhiteList(address[] memory presaleAddress) public onlyOwner { for(uint256 i=0; i<presaleAddress.length; i++) { presaleWallets[presaleAddress[i]] = false; } } function isAddressWhitelisted(address _incomingAddress) public view returns (bool) { return presaleWallets[_incomingAddress]; } function airdropNft(address airdropPatricipent, uint8 tokenID) public payable onlyOwner { _transfer(address(this), airdropPatricipent, tokenID); emit giveawayNft(airdropPatricipent, tokenID); } function withdrawContractEther(address payable recipient) external onlyOwner { emit withdraw(getBalance()); recipient.transfer(getBalance()); } function getBalance() public view returns(uint) { return address(this).balance; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"giveawayNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"withdraw","type":"event"},{"inputs":[{"internalType":"address[]","name":"presaleAddress","type":"address[]"}],"name":"addWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"airdropPatricipent","type":"address"},{"internalType":"uint8","name":"tokenID","type":"uint8"}],"name":"airdropNft","outputs":[],"stateMutability":"payable","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalTeamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstTeamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_main","type":"bool"}],"name":"flipMainsale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pre","type":"bool"}],"name":"flipPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_incomingAddress","type":"address"}],"name":"isAddressWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintTotal","type":"uint256"}],"name":"mainSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mainSaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintTotal","type":"uint256"}],"name":"preSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"presaleAddress","type":"address[]"}],"name":"removeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondTeamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletPurchaseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawContractEther","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600a919062000e4e565b506014600b55612710600c5567016345785d8a0000600d556040805160e08101825273a7b1cdc1fcdc2b50d5b7bf7dcfe9fe99f5c4444e815273dd57fbf4d770209a184107fcbf5af17f698a7a15602082015273d8ff99d3ef09bd09c8ea6951480fa5c67f6465649181019190915273e865fd3b7121fc3c06d94f5fd3c57bb6af84fa206060820152734d65f9476ea2e9fd547ae6cffa40618057fe6bc160808201527373f2ce001de7952e1134fa307692b3f5c996233960a082015273db6c5455d8ffc7adef7a29fe777255dbc50ab43960c08201526200010f90600e90600762000edd565b50604080516102e0810182527384c0a538caa0131033d574dcbd8e5b0e4119e07f815273737d9c3086b7ec2080ebc4b9d30a16a1edcdf234602082015273e4f8393a69e7a96f5acd8be4fc4322be5482d8ac91810191909152736cc7626eb2452b9848e5bc6ced88622f16d53530606082015273106d5044e340072f555487aa42e0dde60a211d4c6080820152736de9e02244d934f1dffe64d754c4f3628b6c2f0c60a082015273fbb2cb595bbda26984945a7ddad572cc37d3c19a60c08201527398d3e5beb3e72ee0a15e3fb855536342594262d160e0820152733c8b79b1a0f745048deb0889ae828de138ae2caf61010082015273d0b525888bb71d306c3cc4e5420b2e47029c73b46101208201527348500b7278b92766497716b4414dfc008d59507061014082015273ce763b4c9a45f1752e87e6dc568e0de48e1a49a961016082015273a2d8f0cfe86d02f568aca2d615c22bd9d1064a10610180820152730f315d2b987f23b9100448b7d570bdd2aa1685e26101a082015273b966238e09e0fe4822a63c60f4d349c779ad55a56101c0820152736d138650c9608b908e0d4e63c194bb85a154ae056101e082015273901edf6396c87b53c51f546ddf2beda88640611361020082015273097f25a56dc97c76374c532d7d635c405fac741561022082015273f4685082ebc2ee41c07ad532b48815317828549661024082015273bc998d9cb9e2e97a9606626e30313c986c9be820610260820152736c0951920299ee25ece10298fbe345938a54e38a6102808201527301f32c0186d080112f499e7003ca8d078d1779586102a0820152735e107d623164c1c56298276f70cef3c66d8a92d06102c08201526200038f90600f90601762000edd565b50604080516101c0810182527321962ffdaf261055b5532ca459fd8cfbca43f80581527326aff3e1b9f8606631f9f64007a73178d67e456a6020820152738bcd2aedf3ad38b2946ae548cdd573a8d5cbc77c9181019190915273677a208cbe2dddabeee1e3053800bf2630e60050606082015273b0079c46fdabf986cb640495b5c338c83d7e1782608082015273eaf46ccc75982a64482f37b02828b59588493efd60a08201527396cf91c58d973dedf7f4f7742e5117eff056751a60c08201527353d35a9f28880a1b23ef3907c2441eb9e1af02de60e082015273b78e33ba05a66c8a9e6dd1ce4045e4baf1aa57e161010082015273c4ab27747e267e5e6b7095d9c1c136d2a5ccb9c5610120820152733df2d820e8ebb1a3858754339942e5362d75165e61014082015273d0b688e9e259d8f78070354880184262cc2824c361016082015273b066026497ee9c3003b4361033276b88fd2b6d2d61018082015273eb78580efbdf4324c18e1477932493a7c7c355746101a08201526200051c90601090600e62000edd565b50604080516101c08101825273825a62a064210af559c6e8df416d4943bfaf0a058152738d54c1be2ffd5786f0f672f66fcce53ef897302860208201527399076e3451f1fce90f681b70128ced4731e95d7c91810191909152733fc70cb5f7af3876391bddc22ad359fe91e5adb7606082015273c2e36f41d73b366846d635a8a94af000490599bd6080820152731f91b16233419c6a47cce15d22d93045c287eb6160a082015273f60ef8b4ad850eca92a3f9a00641a300441f445260c082015273d065ac8dc7bbf3097bcde664367c6274054fcb5660e0820152737a0c04b13a3432fc0711e4a1d295cdcee4014ee961010082015273f3f5ddcd55b9a2f9a4b726d8b364b0309e175c10610120820152733cd17e9c026547ce1c846eaeef4905545a7739e361014082015273951589a5ee1ab503d0eefe9f7e8418c10ddf91f761016082015273b8d63862fa0e123ff1da5460e3e922c6422b5be56101808201527345466c3690c7f1464e4042b099956c050df47a756101a0820152620006a990601190600e62000edd565b50604080516102608101825273430036b4d0d7bfcb03eef5d7ad990435d01a3f1b815273e3c4f628182a811b42e61a58c1b8f120eead22ea602082015273bfa64620e3078827aebfe8f3bd880ed13ecfefdb9181019190915272feefaee9a7db578597a44371ecc7393f2d7455606082015273bee8565dc9d2b1d0de2d53c8408b383ce994d45960808201527380895b90240b047570b466300c45dbb50c8eccfc60a082015273a61d61cc03a7ced10a5fa7d0955faaeed133b03c60c082015273e11611a6fb8a98b40c4c32907d56cefde9625f3a60e082015273a1a6b190f332570510d7251c59b783caa8bd09c1610100820152739e6b85efd7a0319e4bb0010bf960e0785c977c846101208201527335dc053352ed6b0ce7e136068808e727c5481309610140820152735032e053517546c34d067afac4dbe94226efd59d610160820152734e27f2cf1bc6d9e3afa4aba3d51b61419de30a3561018082015273d00e6d0406e2de8bd3a7307a110732c99d0377556101a08201527311dec69ee4f235d0e42fc8bda5d8ae7d0b134b196101c0820152739ae9e4a50357196e41e7b5f0670b2f08a2bae8146101e0820152739bc36724078ce38e535e11870cc4c9be210e2e2d61020082015273e135f406f1a292b8f6bd8446fc43319ea1a9124d61022082015273111bb952e44fb1d43bd1d8861e965e0b0ecf5df4610240820152620008bc90601290601362000edd565b506013805461ffff19169055348015620008d557600080fd5b5060405162003b1938038062003b19833981016040819052620008f89162000f7f565b604080518082018252601081526f546865204c696665204f66204d6f6a6960801b6020808301918252835180850190945260048452634d6f6a6960e01b9084015281519192916200094c9160009162000e4e565b5080516200096290600190602084019062000e4e565b5050506200097f62000979620009fa60201b60201c565b620009fe565b60016007556200098f8162000a50565b60005b6101f4811015620009f257620009b4600862000ac960201b620018eb1760201c565b620009dd73f7282e61db0377cd6c4e0657d39fe7ea0ea8be6d620009d762000ad2565b62000af0565b80620009e98162001118565b91505062000992565b505062001162565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b0316331462000ab05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b805162000ac590600990602084019062000e4e565b5050565b80546001019055565b600062000aeb600862000b1260201b620018f41760201c565b905090565b62000ac582826040518060200160405280600081525062000b1660201b60201c565b5490565b62000b22838362000b8e565b62000b31600084848462000cd6565b62000b895760405162461bcd60e51b8152602060048201526032602482015260008051602062003af983398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000aa7565b505050565b6001600160a01b03821662000be65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640162000aa7565b6000818152600260205260409020546001600160a01b03161562000c4d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000aa7565b6001600160a01b038216600090815260036020526040812080546001929062000c789084906200108d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600062000cf7846001600160a01b031662000e3f60201b620018f81760201c565b1562000e3357604051630a85bd0160e11b81526001600160a01b0385169063150b7a029062000d3190339089908890889060040162001037565b602060405180830381600087803b15801562000d4c57600080fd5b505af192505050801562000d7f575060408051601f3d908101601f1916820190925262000d7c9181019062000f4c565b60015b62000e18573d80801562000db0576040519150601f19603f3d011682016040523d82523d6000602084013e62000db5565b606091505b50805162000e105760405162461bcd60e51b8152602060048201526032602482015260008051602062003af983398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000aa7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062000e37565b5060015b949350505050565b6001600160a01b03163b151590565b82805462000e5c90620010db565b90600052602060002090601f01602090048101928262000e80576000855562000ecb565b82601f1062000e9b57805160ff191683800117855562000ecb565b8280016001018555821562000ecb579182015b8281111562000ecb57825182559160200191906001019062000eae565b5062000ed992915062000f35565b5090565b82805482825590600052602060002090810192821562000ecb579160200282015b8281111562000ecb57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000efe565b5b8082111562000ed9576000815560010162000f36565b60006020828403121562000f5f57600080fd5b81516001600160e01b03198116811462000f7857600080fd5b9392505050565b60006020828403121562000f9257600080fd5b81516001600160401b038082111562000faa57600080fd5b818401915084601f83011262000fbf57600080fd5b81518181111562000fd45762000fd46200114c565b604051601f8201601f19908116603f0116810190838211818310171562000fff5762000fff6200114c565b816040528281528760208487010111156200101957600080fd5b6200102c836020830160208801620010a8565b979650505050505050565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620010768160a0850160208701620010a8565b601f01601f19169190910160a00195945050505050565b60008219821115620010a357620010a362001136565b500190565b60005b83811015620010c5578181015183820152602001620010ab565b83811115620010d5576000848401525b50505050565b600181811c90821680620010f057607f821691505b602082108114156200111257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200112f576200112f62001136565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61298780620011726000396000f3fe60806040526004361061023b5760003560e01c806370a082311161012e578063a16d605a116100ab578063c87b56dd1161006f578063c87b56dd14610658578063d5abeb0114610678578063dd15753c1461068e578063e985e9c5146106a3578063f2fde38b146106ec57600080fd5b8063a16d605a146105c9578063a22cb465146105e9578063b88d4fde14610609578063bee6348a14610629578063c66828621461064357600080fd5b80638da5cb5b116100f25780638da5cb5b1461054057806395d89b411461055e5780639d656f3714610573578063a035b1fe14610586578063a06bf9c91461059c57600080fd5b806370a08231146104c0578063715018a6146104e0578063725cf690146104f55780637437681e1461050a5780637cb69cd31461052057600080fd5b806323b872dd116101bc5780635e1045ec116101805780635e1045ec14610443578063626be567146104635780636352211e1461047857806363f88e33146104985780636c0360eb146104ab57600080fd5b806323b872dd146103a357806339745791146103c357806342842e0e146103e357806355f804b3146104035780635d3c2d231461042357600080fd5b8063095ea7b311610203578063095ea7b31461030557806312065fe014610325578063131f41041461034257806313f44d101461035557806318160ddd1461038e57600080fd5b806301ffc9a71461024057806304be80a61461027557806305bf08011461028c57806306fdde03146102ab578063081812fc146102cd575b600080fd5b34801561024c57600080fd5b5061026061025b36600461248b565b61070c565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061028a61075e565b005b34801561029857600080fd5b5060135461026090610100900460ff1681565b3480156102b757600080fd5b506102c061087b565b60405161026c9190612654565b3480156102d957600080fd5b506102ed6102e836600461250e565b61090d565b6040516001600160a01b03909116815260200161026c565b34801561031157600080fd5b5061028a610320366004612357565b6109a2565b34801561033157600080fd5b50475b60405190815260200161026c565b61028a61035036600461250e565b610ab8565b34801561036157600080fd5b5061026061037036600461220b565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561039a57600080fd5b50610334610db5565b3480156103af57600080fd5b5061028a6103be366004612261565b610dc4565b3480156103cf57600080fd5b5061028a6103de3660046123b7565b610df5565b3480156103ef57600080fd5b5061028a6103fe366004612261565b610e8b565b34801561040f57600080fd5b5061028a61041e3660046124c5565b610ea6565b34801561042f57600080fd5b5061028a61043e366004612470565b610ee3565b34801561044f57600080fd5b5061028a61045e3660046123b7565b610f20565b34801561046f57600080fd5b50610334610fb2565b34801561048457600080fd5b506102ed61049336600461250e565b610fbd565b61028a6104a636600461250e565b611034565b3480156104b757600080fd5b506102c06112fa565b3480156104cc57600080fd5b506103346104db36600461220b565b611388565b3480156104ec57600080fd5b5061028a61140f565b34801561050157600080fd5b5061028a611445565b34801561051657600080fd5b50610334600b5481565b34801561052c57600080fd5b5061028a61053b366004612470565b6114d1565b34801561054c57600080fd5b506006546001600160a01b03166102ed565b34801561056a57600080fd5b506102c0611515565b61028a610581366004612383565b611524565b34801561059257600080fd5b50610334600d5481565b3480156105a857600080fd5b506103346105b736600461220b565b60156020526000908152604090205481565b3480156105d557600080fd5b5061028a6105e436600461220b565b6115a4565b3480156105f557600080fd5b5061028a610604366004612322565b611636565b34801561061557600080fd5b5061028a6106243660046122a2565b611641565b34801561063557600080fd5b506013546102609060ff1681565b34801561064f57600080fd5b506102c0611679565b34801561066457600080fd5b506102c061067336600461250e565b611686565b34801561068457600080fd5b50610334600c5481565b34801561069a57600080fd5b5061028a611764565b3480156106af57600080fd5b506102606106be366004612228565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106f857600080fd5b5061028a61070736600461220b565b611853565b60006001600160e01b031982166380ac58cd60e01b148061073d57506001600160e01b03198216635b5e139f60e01b145b8061075857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146107915760405162461bcd60e51b81526004016107889061271f565b60405180910390fd5b60005b6010548110156108155760005b6008811015610802576107b8600880546001019055565b6107f0601083815481106107ce576107ce6128fa565b6000918252602090912001546001600160a01b03166107eb610fb2565b611907565b806107fa8161289f565b9150506107a1565b508061080d8161289f565b915050610794565b5060005b6011548110156108785760005b600a8110156108655761083d600880546001019055565b610853601183815481106107ce576107ce6128fa565b8061085d8161289f565b915050610826565b50806108708161289f565b915050610819565b50565b60606000805461088a90612864565b80601f01602080910402602001604051908101604052809291908181526020018280546108b690612864565b80156109035780601f106108d857610100808354040283529160200191610903565b820191906000526020600020905b8154815290600101906020018083116108e657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109865760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610788565b506000908152600460205260409020546001600160a01b031690565b60006109ad82610fbd565b9050806001600160a01b0316836001600160a01b03161415610a1b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610788565b336001600160a01b0382161480610a375750610a3781336106be565b610aa95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610788565b610ab38383611921565b505050565b60135460ff161515600114610acc57600080fd5b60026007541415610b1f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610788565b6002600755600c54610b2f610fb2565b108015610b505750600c5481610b43610fb2565b610b4d91906127d6565b11155b610b6c5760405162461bcd60e51b8152600401610788906126fc565b3360009081526014602052604090205460ff161515600114610bd05760405162461bcd60e51b815260206004820152601760248201527f596f75206172656e27742077686974656c6973746564210000000000000000006044820152606401610788565b60018110158015610be35750600b548111155b610c275760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08105b5bdd5b9d08125b98dbdc9c9958dd605a1b6044820152606401610788565b600b5433600090815260156020526040902054108015610c635750600b5433600090815260156020526040902054610c609083906127d6565b11155b610c7f5760405162461bcd60e51b8152600401610788906126b9565b80600d54610c8d9190612802565b341015610cdc5760405162461bcd60e51b815260206004820152601d60248201527f496e636f727265637420616d6f756e74206f66204574682073656e74210000006044820152606401610788565b3360009081526015602052604081208054839290610cfb9084906127d6565b90915550600090505b81811015610dac57600c54610d17610fb2565b10610d345760405162461bcd60e51b8152600401610788906126fc565b610d42600880546001019055565b610d4e336107eb610fb2565b7f40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f284233610d78610fb2565b604080516001600160a01b03909316835260208301919091520160405180910390a180610da48161289f565b915050610d04565b50506001600755565b6000610dbf610fb2565b905090565b610dce338261198f565b610dea5760405162461bcd60e51b815260040161078890612754565b610ab3838383611a86565b6006546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016107889061271f565b60005b8151811015610e8757600060146000848481518110610e4357610e436128fa565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e7f8161289f565b915050610e22565b5050565b610ab383838360405180602001604052806000815250611641565b6006546001600160a01b03163314610ed05760405162461bcd60e51b81526004016107889061271f565b8051610e87906009906020840190612105565b6006546001600160a01b03163314610f0d5760405162461bcd60e51b81526004016107889061271f565b6013805460ff1916911515919091179055565b6006546001600160a01b03163314610f4a5760405162461bcd60e51b81526004016107889061271f565b60005b8151811015610e8757600160146000848481518110610f6e57610f6e6128fa565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610faa8161289f565b915050610f4d565b6000610dbf60085490565b6000818152600260205260408120546001600160a01b0316806107585760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610788565b60135460ff61010090910416151560011461104e57600080fd5b600260075414156110a15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610788565b6002600755600181108015906110b95750600b548111155b6110fd5760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08105b5bdd5b9d08125b98dbdc9c9958dd605a1b6044820152606401610788565b600c54611108610fb2565b1080156111295750600c548161111c610fb2565b61112691906127d6565b11155b6111455760405162461bcd60e51b8152600401610788906126fc565b600b5433600090815260156020526040902054106111755760405162461bcd60e51b8152600401610788906126b9565b600b54336000908152601560205260409020541080156111b15750600b54336000908152601560205260409020546111ae9083906127d6565b11155b6111cd5760405162461bcd60e51b8152600401610788906126b9565b80600d546111db9190612802565b34101561122a5760405162461bcd60e51b815260206004820152601d60248201527f496e636f727265637420616d6f756e74206f66204574682073656e74210000006044820152606401610788565b33600090815260156020526040812080548392906112499084906127d6565b90915550600090505b81811015610dac57600c54611265610fb2565b106112825760405162461bcd60e51b8152600401610788906126fc565b611290600880546001019055565b61129c336107eb610fb2565b7f40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f2842336112c6610fb2565b604080516001600160a01b03909316835260208301919091520160405180910390a1806112f28161289f565b915050611252565b6009805461130790612864565b80601f016020809104026020016040519081016040528092919081815260200182805461133390612864565b80156113805780601f1061135557610100808354040283529160200191611380565b820191906000526020600020905b81548152906001019060200180831161136357829003601f168201915b505050505081565b60006001600160a01b0382166113f35760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610788565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146114395760405162461bcd60e51b81526004016107889061271f565b6114436000611c22565b565b6006546001600160a01b0316331461146f5760405162461bcd60e51b81526004016107889061271f565b60005b6012548110156108785760005b601c8110156114be57611496600880546001019055565b6114ac601283815481106107ce576107ce6128fa565b806114b68161289f565b91505061147f565b50806114c98161289f565b915050611472565b6006546001600160a01b031633146114fb5760405162461bcd60e51b81526004016107889061271f565b601380549115156101000261ff0019909216919091179055565b60606001805461088a90612864565b6006546001600160a01b0316331461154e5760405162461bcd60e51b81526004016107889061271f565b61155c30838360ff16611a86565b604080516001600160a01b038416815260ff831660208201527fe2ae2d4299019f247f9b47047a994e121c067a8a2099ad43a45a99a0e4906d87910160405180910390a15050565b6006546001600160a01b031633146115ce5760405162461bcd60e51b81526004016107889061271f565b7f2e1a7d4d13322e7b96f9a57413e1525c250fb7a9021cf91d1540d5b69f16a49f4760405190815260200160405180910390a16040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610e87573d6000803e3d6000fd5b610e87338383611c74565b61164b338361198f565b6116675760405162461bcd60e51b815260040161078890612754565b61167384848484611d43565b50505050565b600a805461130790612864565b6000818152600260205260409020546060906001600160a01b03166117055760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610788565b600061170f611d76565b9050600081511161172f576040518060200160405280600081525061175d565b8061173984611d85565b600a60405160200161174d93929190612553565b6040516020818303038152906040525b9392505050565b6006546001600160a01b0316331461178e5760405162461bcd60e51b81526004016107889061271f565b60005b600e548110156117f05760005b60018110156117dd576117b5600880546001019055565b6117cb600e83815481106107ce576107ce6128fa565b806117d58161289f565b91505061179e565b50806117e88161289f565b915050611791565b5060005b600f548110156108785760005b600481101561184057611818600880546001019055565b61182e600f83815481106107ce576107ce6128fa565b806118388161289f565b915050611801565b508061184b8161289f565b9150506117f4565b6006546001600160a01b0316331461187d5760405162461bcd60e51b81526004016107889061271f565b6001600160a01b0381166118e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610788565b61087881611c22565b80546001019055565b5490565b6001600160a01b03163b151590565b610e87828260405180602001604052806000815250611e83565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061195682610fbd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611a085760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610788565b6000611a1383610fbd565b9050806001600160a01b0316846001600160a01b03161480611a4e5750836001600160a01b0316611a438461090d565b6001600160a01b0316145b80611a7e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a9982610fbd565b6001600160a01b031614611afd5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610788565b6001600160a01b038216611b5f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610788565b611b6a600082611921565b6001600160a01b0383166000908152600360205260408120805460019290611b93908490612821565b90915550506001600160a01b0382166000908152600360205260408120805460019290611bc19084906127d6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611cd65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610788565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d4e848484611a86565b611d5a84848484611eb6565b6116735760405162461bcd60e51b815260040161078890612667565b60606009805461088a90612864565b606081611da95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611dd35780611dbd8161289f565b9150611dcc9050600a836127ee565b9150611dad565b60008167ffffffffffffffff811115611dee57611dee612910565b6040519080825280601f01601f191660200182016040528015611e18576020820181803683370190505b5090505b8415611a7e57611e2d600183612821565b9150611e3a600a866128ba565b611e459060306127d6565b60f81b818381518110611e5a57611e5a6128fa565b60200101906001600160f81b031916908160001a905350611e7c600a866127ee565b9450611e1c565b611e8d8383611fc3565b611e9a6000848484611eb6565b610ab35760405162461bcd60e51b815260040161078890612667565b60006001600160a01b0384163b15611fb857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611efa903390899088908890600401612617565b602060405180830381600087803b158015611f1457600080fd5b505af1925050508015611f44575060408051601f3d908101601f19168201909252611f41918101906124a8565b60015b611f9e573d808015611f72576040519150601f19603f3d011682016040523d82523d6000602084013e611f77565b606091505b508051611f965760405162461bcd60e51b815260040161078890612667565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a7e565b506001949350505050565b6001600160a01b0382166120195760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610788565b6000818152600260205260409020546001600160a01b03161561207e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610788565b6001600160a01b03821660009081526003602052604081208054600192906120a79084906127d6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461211190612864565b90600052602060002090601f0160209004810192826121335760008555612179565b82601f1061214c57805160ff1916838001178555612179565b82800160010185558215612179579182015b8281111561217957825182559160200191906001019061215e565b50612185929150612189565b5090565b5b80821115612185576000815560010161218a565b600067ffffffffffffffff8311156121b8576121b8612910565b6121cb601f8401601f19166020016127a5565b90508281528383830111156121df57600080fd5b828260208301376000602084830101529392505050565b8035801515811461220657600080fd5b919050565b60006020828403121561221d57600080fd5b813561175d81612926565b6000806040838503121561223b57600080fd5b823561224681612926565b9150602083013561225681612926565b809150509250929050565b60008060006060848603121561227657600080fd5b833561228181612926565b9250602084013561229181612926565b929592945050506040919091013590565b600080600080608085870312156122b857600080fd5b84356122c381612926565b935060208501356122d381612926565b925060408501359150606085013567ffffffffffffffff8111156122f657600080fd5b8501601f8101871361230757600080fd5b6123168782356020840161219e565b91505092959194509250565b6000806040838503121561233557600080fd5b823561234081612926565b915061234e602084016121f6565b90509250929050565b6000806040838503121561236a57600080fd5b823561237581612926565b946020939093013593505050565b6000806040838503121561239657600080fd5b82356123a181612926565b9150602083013560ff8116811461225657600080fd5b600060208083850312156123ca57600080fd5b823567ffffffffffffffff808211156123e257600080fd5b818501915085601f8301126123f657600080fd5b81358181111561240857612408612910565b8060051b91506124198483016127a5565b8181528481019084860184860187018a101561243457600080fd5b600095505b83861015612463578035945061244e85612926565b84835260019590950194918601918601612439565b5098975050505050505050565b60006020828403121561248257600080fd5b61175d826121f6565b60006020828403121561249d57600080fd5b813561175d8161293b565b6000602082840312156124ba57600080fd5b815161175d8161293b565b6000602082840312156124d757600080fd5b813567ffffffffffffffff8111156124ee57600080fd5b8201601f810184136124ff57600080fd5b611a7e8482356020840161219e565b60006020828403121561252057600080fd5b5035919050565b6000815180845261253f816020860160208601612838565b601f01601f19169290920160200192915050565b6000845160206125668285838a01612838565b8551918401916125798184848a01612838565b8554920191600090600181811c908083168061259657607f831692505b8583108114156125b457634e487b7160e01b85526022600452602485fd5b8080156125c857600181146125d957612606565b60ff19851688528388019550612606565b60008b81526020902060005b858110156125fe5781548a8201529084019088016125e5565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061264a90830184612527565b9695505050505050565b60208152600061175d6020830184612527565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526023908201527f596f7520686176652070617373656420796f7572206d696e74696e67206c696d60408201526269742160e81b606082015260800190565b602080825260099082015268534f4c44204f55542160b81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156127ce576127ce612910565b604052919050565b600082198211156127e9576127e96128ce565b500190565b6000826127fd576127fd6128e4565b500490565b600081600019048311821515161561281c5761281c6128ce565b500290565b600082821015612833576128336128ce565b500390565b60005b8381101561285357818101518382015260200161283b565b838111156116735750506000910152565b600181811c9082168061287857607f821691505b6020821081141561289957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128b3576128b36128ce565b5060010190565b6000826128c9576128c96128e4565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461087857600080fd5b6001600160e01b03198116811461087857600080fdfea26469706673582212209918bcd80b74bca7961c3a82c0d2d111c08386c53bdbe23b0087bd65c4ed2b0364736f6c634300080700334552433732313a207472616e7366657220746f206e6f6e2045524337323152650000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5539437351427274554e74587964516a6370717444626d5642554842374a75583237416d334757625a3673442f000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c806370a082311161012e578063a16d605a116100ab578063c87b56dd1161006f578063c87b56dd14610658578063d5abeb0114610678578063dd15753c1461068e578063e985e9c5146106a3578063f2fde38b146106ec57600080fd5b8063a16d605a146105c9578063a22cb465146105e9578063b88d4fde14610609578063bee6348a14610629578063c66828621461064357600080fd5b80638da5cb5b116100f25780638da5cb5b1461054057806395d89b411461055e5780639d656f3714610573578063a035b1fe14610586578063a06bf9c91461059c57600080fd5b806370a08231146104c0578063715018a6146104e0578063725cf690146104f55780637437681e1461050a5780637cb69cd31461052057600080fd5b806323b872dd116101bc5780635e1045ec116101805780635e1045ec14610443578063626be567146104635780636352211e1461047857806363f88e33146104985780636c0360eb146104ab57600080fd5b806323b872dd146103a357806339745791146103c357806342842e0e146103e357806355f804b3146104035780635d3c2d231461042357600080fd5b8063095ea7b311610203578063095ea7b31461030557806312065fe014610325578063131f41041461034257806313f44d101461035557806318160ddd1461038e57600080fd5b806301ffc9a71461024057806304be80a61461027557806305bf08011461028c57806306fdde03146102ab578063081812fc146102cd575b600080fd5b34801561024c57600080fd5b5061026061025b36600461248b565b61070c565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061028a61075e565b005b34801561029857600080fd5b5060135461026090610100900460ff1681565b3480156102b757600080fd5b506102c061087b565b60405161026c9190612654565b3480156102d957600080fd5b506102ed6102e836600461250e565b61090d565b6040516001600160a01b03909116815260200161026c565b34801561031157600080fd5b5061028a610320366004612357565b6109a2565b34801561033157600080fd5b50475b60405190815260200161026c565b61028a61035036600461250e565b610ab8565b34801561036157600080fd5b5061026061037036600461220b565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561039a57600080fd5b50610334610db5565b3480156103af57600080fd5b5061028a6103be366004612261565b610dc4565b3480156103cf57600080fd5b5061028a6103de3660046123b7565b610df5565b3480156103ef57600080fd5b5061028a6103fe366004612261565b610e8b565b34801561040f57600080fd5b5061028a61041e3660046124c5565b610ea6565b34801561042f57600080fd5b5061028a61043e366004612470565b610ee3565b34801561044f57600080fd5b5061028a61045e3660046123b7565b610f20565b34801561046f57600080fd5b50610334610fb2565b34801561048457600080fd5b506102ed61049336600461250e565b610fbd565b61028a6104a636600461250e565b611034565b3480156104b757600080fd5b506102c06112fa565b3480156104cc57600080fd5b506103346104db36600461220b565b611388565b3480156104ec57600080fd5b5061028a61140f565b34801561050157600080fd5b5061028a611445565b34801561051657600080fd5b50610334600b5481565b34801561052c57600080fd5b5061028a61053b366004612470565b6114d1565b34801561054c57600080fd5b506006546001600160a01b03166102ed565b34801561056a57600080fd5b506102c0611515565b61028a610581366004612383565b611524565b34801561059257600080fd5b50610334600d5481565b3480156105a857600080fd5b506103346105b736600461220b565b60156020526000908152604090205481565b3480156105d557600080fd5b5061028a6105e436600461220b565b6115a4565b3480156105f557600080fd5b5061028a610604366004612322565b611636565b34801561061557600080fd5b5061028a6106243660046122a2565b611641565b34801561063557600080fd5b506013546102609060ff1681565b34801561064f57600080fd5b506102c0611679565b34801561066457600080fd5b506102c061067336600461250e565b611686565b34801561068457600080fd5b50610334600c5481565b34801561069a57600080fd5b5061028a611764565b3480156106af57600080fd5b506102606106be366004612228565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106f857600080fd5b5061028a61070736600461220b565b611853565b60006001600160e01b031982166380ac58cd60e01b148061073d57506001600160e01b03198216635b5e139f60e01b145b8061075857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146107915760405162461bcd60e51b81526004016107889061271f565b60405180910390fd5b60005b6010548110156108155760005b6008811015610802576107b8600880546001019055565b6107f0601083815481106107ce576107ce6128fa565b6000918252602090912001546001600160a01b03166107eb610fb2565b611907565b806107fa8161289f565b9150506107a1565b508061080d8161289f565b915050610794565b5060005b6011548110156108785760005b600a8110156108655761083d600880546001019055565b610853601183815481106107ce576107ce6128fa565b8061085d8161289f565b915050610826565b50806108708161289f565b915050610819565b50565b60606000805461088a90612864565b80601f01602080910402602001604051908101604052809291908181526020018280546108b690612864565b80156109035780601f106108d857610100808354040283529160200191610903565b820191906000526020600020905b8154815290600101906020018083116108e657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109865760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610788565b506000908152600460205260409020546001600160a01b031690565b60006109ad82610fbd565b9050806001600160a01b0316836001600160a01b03161415610a1b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610788565b336001600160a01b0382161480610a375750610a3781336106be565b610aa95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610788565b610ab38383611921565b505050565b60135460ff161515600114610acc57600080fd5b60026007541415610b1f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610788565b6002600755600c54610b2f610fb2565b108015610b505750600c5481610b43610fb2565b610b4d91906127d6565b11155b610b6c5760405162461bcd60e51b8152600401610788906126fc565b3360009081526014602052604090205460ff161515600114610bd05760405162461bcd60e51b815260206004820152601760248201527f596f75206172656e27742077686974656c6973746564210000000000000000006044820152606401610788565b60018110158015610be35750600b548111155b610c275760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08105b5bdd5b9d08125b98dbdc9c9958dd605a1b6044820152606401610788565b600b5433600090815260156020526040902054108015610c635750600b5433600090815260156020526040902054610c609083906127d6565b11155b610c7f5760405162461bcd60e51b8152600401610788906126b9565b80600d54610c8d9190612802565b341015610cdc5760405162461bcd60e51b815260206004820152601d60248201527f496e636f727265637420616d6f756e74206f66204574682073656e74210000006044820152606401610788565b3360009081526015602052604081208054839290610cfb9084906127d6565b90915550600090505b81811015610dac57600c54610d17610fb2565b10610d345760405162461bcd60e51b8152600401610788906126fc565b610d42600880546001019055565b610d4e336107eb610fb2565b7f40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f284233610d78610fb2565b604080516001600160a01b03909316835260208301919091520160405180910390a180610da48161289f565b915050610d04565b50506001600755565b6000610dbf610fb2565b905090565b610dce338261198f565b610dea5760405162461bcd60e51b815260040161078890612754565b610ab3838383611a86565b6006546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016107889061271f565b60005b8151811015610e8757600060146000848481518110610e4357610e436128fa565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e7f8161289f565b915050610e22565b5050565b610ab383838360405180602001604052806000815250611641565b6006546001600160a01b03163314610ed05760405162461bcd60e51b81526004016107889061271f565b8051610e87906009906020840190612105565b6006546001600160a01b03163314610f0d5760405162461bcd60e51b81526004016107889061271f565b6013805460ff1916911515919091179055565b6006546001600160a01b03163314610f4a5760405162461bcd60e51b81526004016107889061271f565b60005b8151811015610e8757600160146000848481518110610f6e57610f6e6128fa565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610faa8161289f565b915050610f4d565b6000610dbf60085490565b6000818152600260205260408120546001600160a01b0316806107585760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610788565b60135460ff61010090910416151560011461104e57600080fd5b600260075414156110a15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610788565b6002600755600181108015906110b95750600b548111155b6110fd5760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08105b5bdd5b9d08125b98dbdc9c9958dd605a1b6044820152606401610788565b600c54611108610fb2565b1080156111295750600c548161111c610fb2565b61112691906127d6565b11155b6111455760405162461bcd60e51b8152600401610788906126fc565b600b5433600090815260156020526040902054106111755760405162461bcd60e51b8152600401610788906126b9565b600b54336000908152601560205260409020541080156111b15750600b54336000908152601560205260409020546111ae9083906127d6565b11155b6111cd5760405162461bcd60e51b8152600401610788906126b9565b80600d546111db9190612802565b34101561122a5760405162461bcd60e51b815260206004820152601d60248201527f496e636f727265637420616d6f756e74206f66204574682073656e74210000006044820152606401610788565b33600090815260156020526040812080548392906112499084906127d6565b90915550600090505b81811015610dac57600c54611265610fb2565b106112825760405162461bcd60e51b8152600401610788906126fc565b611290600880546001019055565b61129c336107eb610fb2565b7f40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f2842336112c6610fb2565b604080516001600160a01b03909316835260208301919091520160405180910390a1806112f28161289f565b915050611252565b6009805461130790612864565b80601f016020809104026020016040519081016040528092919081815260200182805461133390612864565b80156113805780601f1061135557610100808354040283529160200191611380565b820191906000526020600020905b81548152906001019060200180831161136357829003601f168201915b505050505081565b60006001600160a01b0382166113f35760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610788565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146114395760405162461bcd60e51b81526004016107889061271f565b6114436000611c22565b565b6006546001600160a01b0316331461146f5760405162461bcd60e51b81526004016107889061271f565b60005b6012548110156108785760005b601c8110156114be57611496600880546001019055565b6114ac601283815481106107ce576107ce6128fa565b806114b68161289f565b91505061147f565b50806114c98161289f565b915050611472565b6006546001600160a01b031633146114fb5760405162461bcd60e51b81526004016107889061271f565b601380549115156101000261ff0019909216919091179055565b60606001805461088a90612864565b6006546001600160a01b0316331461154e5760405162461bcd60e51b81526004016107889061271f565b61155c30838360ff16611a86565b604080516001600160a01b038416815260ff831660208201527fe2ae2d4299019f247f9b47047a994e121c067a8a2099ad43a45a99a0e4906d87910160405180910390a15050565b6006546001600160a01b031633146115ce5760405162461bcd60e51b81526004016107889061271f565b7f2e1a7d4d13322e7b96f9a57413e1525c250fb7a9021cf91d1540d5b69f16a49f4760405190815260200160405180910390a16040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610e87573d6000803e3d6000fd5b610e87338383611c74565b61164b338361198f565b6116675760405162461bcd60e51b815260040161078890612754565b61167384848484611d43565b50505050565b600a805461130790612864565b6000818152600260205260409020546060906001600160a01b03166117055760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610788565b600061170f611d76565b9050600081511161172f576040518060200160405280600081525061175d565b8061173984611d85565b600a60405160200161174d93929190612553565b6040516020818303038152906040525b9392505050565b6006546001600160a01b0316331461178e5760405162461bcd60e51b81526004016107889061271f565b60005b600e548110156117f05760005b60018110156117dd576117b5600880546001019055565b6117cb600e83815481106107ce576107ce6128fa565b806117d58161289f565b91505061179e565b50806117e88161289f565b915050611791565b5060005b600f548110156108785760005b600481101561184057611818600880546001019055565b61182e600f83815481106107ce576107ce6128fa565b806118388161289f565b915050611801565b508061184b8161289f565b9150506117f4565b6006546001600160a01b0316331461187d5760405162461bcd60e51b81526004016107889061271f565b6001600160a01b0381166118e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610788565b61087881611c22565b80546001019055565b5490565b6001600160a01b03163b151590565b610e87828260405180602001604052806000815250611e83565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061195682610fbd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611a085760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610788565b6000611a1383610fbd565b9050806001600160a01b0316846001600160a01b03161480611a4e5750836001600160a01b0316611a438461090d565b6001600160a01b0316145b80611a7e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a9982610fbd565b6001600160a01b031614611afd5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610788565b6001600160a01b038216611b5f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610788565b611b6a600082611921565b6001600160a01b0383166000908152600360205260408120805460019290611b93908490612821565b90915550506001600160a01b0382166000908152600360205260408120805460019290611bc19084906127d6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611cd65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610788565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d4e848484611a86565b611d5a84848484611eb6565b6116735760405162461bcd60e51b815260040161078890612667565b60606009805461088a90612864565b606081611da95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611dd35780611dbd8161289f565b9150611dcc9050600a836127ee565b9150611dad565b60008167ffffffffffffffff811115611dee57611dee612910565b6040519080825280601f01601f191660200182016040528015611e18576020820181803683370190505b5090505b8415611a7e57611e2d600183612821565b9150611e3a600a866128ba565b611e459060306127d6565b60f81b818381518110611e5a57611e5a6128fa565b60200101906001600160f81b031916908160001a905350611e7c600a866127ee565b9450611e1c565b611e8d8383611fc3565b611e9a6000848484611eb6565b610ab35760405162461bcd60e51b815260040161078890612667565b60006001600160a01b0384163b15611fb857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611efa903390899088908890600401612617565b602060405180830381600087803b158015611f1457600080fd5b505af1925050508015611f44575060408051601f3d908101601f19168201909252611f41918101906124a8565b60015b611f9e573d808015611f72576040519150601f19603f3d011682016040523d82523d6000602084013e611f77565b606091505b508051611f965760405162461bcd60e51b815260040161078890612667565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a7e565b506001949350505050565b6001600160a01b0382166120195760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610788565b6000818152600260205260409020546001600160a01b03161561207e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610788565b6001600160a01b03821660009081526003602052604081208054600192906120a79084906127d6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461211190612864565b90600052602060002090601f0160209004810192826121335760008555612179565b82601f1061214c57805160ff1916838001178555612179565b82800160010185558215612179579182015b8281111561217957825182559160200191906001019061215e565b50612185929150612189565b5090565b5b80821115612185576000815560010161218a565b600067ffffffffffffffff8311156121b8576121b8612910565b6121cb601f8401601f19166020016127a5565b90508281528383830111156121df57600080fd5b828260208301376000602084830101529392505050565b8035801515811461220657600080fd5b919050565b60006020828403121561221d57600080fd5b813561175d81612926565b6000806040838503121561223b57600080fd5b823561224681612926565b9150602083013561225681612926565b809150509250929050565b60008060006060848603121561227657600080fd5b833561228181612926565b9250602084013561229181612926565b929592945050506040919091013590565b600080600080608085870312156122b857600080fd5b84356122c381612926565b935060208501356122d381612926565b925060408501359150606085013567ffffffffffffffff8111156122f657600080fd5b8501601f8101871361230757600080fd5b6123168782356020840161219e565b91505092959194509250565b6000806040838503121561233557600080fd5b823561234081612926565b915061234e602084016121f6565b90509250929050565b6000806040838503121561236a57600080fd5b823561237581612926565b946020939093013593505050565b6000806040838503121561239657600080fd5b82356123a181612926565b9150602083013560ff8116811461225657600080fd5b600060208083850312156123ca57600080fd5b823567ffffffffffffffff808211156123e257600080fd5b818501915085601f8301126123f657600080fd5b81358181111561240857612408612910565b8060051b91506124198483016127a5565b8181528481019084860184860187018a101561243457600080fd5b600095505b83861015612463578035945061244e85612926565b84835260019590950194918601918601612439565b5098975050505050505050565b60006020828403121561248257600080fd5b61175d826121f6565b60006020828403121561249d57600080fd5b813561175d8161293b565b6000602082840312156124ba57600080fd5b815161175d8161293b565b6000602082840312156124d757600080fd5b813567ffffffffffffffff8111156124ee57600080fd5b8201601f810184136124ff57600080fd5b611a7e8482356020840161219e565b60006020828403121561252057600080fd5b5035919050565b6000815180845261253f816020860160208601612838565b601f01601f19169290920160200192915050565b6000845160206125668285838a01612838565b8551918401916125798184848a01612838565b8554920191600090600181811c908083168061259657607f831692505b8583108114156125b457634e487b7160e01b85526022600452602485fd5b8080156125c857600181146125d957612606565b60ff19851688528388019550612606565b60008b81526020902060005b858110156125fe5781548a8201529084019088016125e5565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061264a90830184612527565b9695505050505050565b60208152600061175d6020830184612527565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526023908201527f596f7520686176652070617373656420796f7572206d696e74696e67206c696d60408201526269742160e81b606082015260800190565b602080825260099082015268534f4c44204f55542160b81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156127ce576127ce612910565b604052919050565b600082198211156127e9576127e96128ce565b500190565b6000826127fd576127fd6128e4565b500490565b600081600019048311821515161561281c5761281c6128ce565b500290565b600082821015612833576128336128ce565b500390565b60005b8381101561285357818101518382015260200161283b565b838111156116735750506000910152565b600181811c9082168061287857607f821691505b6020821081141561289957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128b3576128b36128ce565b5060010190565b6000826128c9576128c96128e4565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461087857600080fd5b6001600160e01b03198116811461087857600080fdfea26469706673582212209918bcd80b74bca7961c3a82c0d2d111c08386c53bdbe23b0087bd65c4ed2b0364736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5539437351427274554e74587964516a6370717444626d5642554842374a75583237416d334757625a3673442f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://gateway.pinata.cloud/ipfs/QmU9CsQBrtUNtXydQjcpqtDbmVBUHB7JuX27Am3GWbZ6sD/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d5539437351427274554e74587964516a6370717444626d5642554842
Arg [4] : 374a75583237416d334757625a3673442f000000000000000000000000000000
Deployed Bytecode Sourcemap
44782:10614:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28939:305;;;;;;;;;;-1:-1:-1;28939:305:0;;;;;:::i;:::-;;:::i;:::-;;;9405:14:1;;9398:22;9380:41;;9368:2;9353:18;28939:305:0;;;;;;;;50503:551;;;;;;;;;;;;;:::i;:::-;;49001:32;;;;;;;;;;-1:-1:-1;49001:32:0;;;;;;;;;;;29884:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31443:221::-;;;;;;;;;;-1:-1:-1;31443:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8136:32:1;;;8118:51;;8106:2;8091:18;31443:221:0;7972:203:1;30966:411:0;;;;;;;;;;-1:-1:-1;30966:411:0;;;;;:::i;:::-;;:::i;54666:100::-;;;;;;;;;;-1:-1:-1;54737:21:0;54666:100;;;18341:25:1;;;18329:2;18314:18;54666:100:0;18195:177:1;51702:945:0;;;;;;:::i;:::-;;:::i;54100:146::-;;;;;;;;;;-1:-1:-1;54100:146:0;;;;;:::i;:::-;-1:-1:-1;;;;;54206:32:0;54177:4;54206:32;;;:14;:32;;;;;;;;;54100:146;49842:96;;;;;;;;;;;;;:::i;32193:339::-;;;;;;;;;;-1:-1:-1;32193:339:0;;;;;:::i;:::-;;:::i;53859:222::-;;;;;;;;;;-1:-1:-1;53859:222:0;;;;;:::i;:::-;;:::i;32603:185::-;;;;;;;;;;-1:-1:-1;32603:185:0;;;;;:::i;:::-;;:::i;54896:104::-;;;;;;;;;;-1:-1:-1;54896:104:0;;;;;:::i;:::-;;:::i;51502:91::-;;;;;;;;;;-1:-1:-1;51502:91:0;;;;;:::i;:::-;;:::i;53635:218::-;;;;;;;;;;-1:-1:-1;53635:218:0;;;;;:::i;:::-;;:::i;51387:107::-;;;;;;;;;;;;;:::i;29578:239::-;;;;;;;;;;-1:-1:-1;29578:239:0;;;;;:::i;:::-;;:::i;52659:965::-;;;;;;:::i;:::-;;:::i;44969:21::-;;;;;;;;;;;;;:::i;29308:208::-;;;;;;;;;;-1:-1:-1;29308:208:0;;;;;:::i;:::-;;:::i;9219:103::-;;;;;;;;;;;;;:::i;51062:317::-;;;;;;;;;;;;;:::i;45041:25::-;;;;;;;;;;;;;;;;51599:95;;;;;;;;;;-1:-1:-1;51599:95:0;;;;;:::i;:::-;;:::i;8568:87::-;;;;;;;;;;-1:-1:-1;8641:6:0;;-1:-1:-1;;;;;8641:6:0;8568:87;;30053:104;;;;;;;;;;;;;:::i;54257:221::-;;;;;;:::i;:::-;;:::i;45118:32::-;;;;;;;;;;;;;;;;49101:55;;;;;;;;;;-1:-1:-1;49101:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;54489:171;;;;;;;;;;-1:-1:-1;54489:171:0;;;;;:::i;:::-;;:::i;31736:155::-;;;;;;;;;;-1:-1:-1;31736:155:0;;;;;:::i;:::-;;:::i;32859:328::-;;;;;;;;;;-1:-1:-1;32859:328:0;;;;;:::i;:::-;;:::i;48963:31::-;;;;;;;;;;-1:-1:-1;48963:31:0;;;;;;;;44997:37;;;;;;;;;;;;;:::i;55011:375::-;;;;;;;;;;-1:-1:-1;55011:375:0;;;;;:::i;:::-;;:::i;45073:32::-;;;;;;;;;;;;;;;;49946:549;;;;;;;;;;;;;:::i;31962:164::-;;;;;;;;;;-1:-1:-1;31962:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32083:25:0;;;32059:4;32083:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31962:164;9477:201;;;;;;;;;;-1:-1:-1;9477:201:0;;;;;:::i;:::-;;:::i;28939:305::-;29041:4;-1:-1:-1;;;;;;29078:40:0;;-1:-1:-1;;;29078:40:0;;:105;;-1:-1:-1;;;;;;;29135:48:0;;-1:-1:-1;;;29135:48:0;29078:105;:158;;;-1:-1:-1;;;;;;;;;;21658:40:0;;;29200:36;29058:178;28939:305;-1:-1:-1;;28939:305:0:o;50503:551::-;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;;;;;;;;;50566:6:::1;50562:239;50578:14;:21:::0;50576:23;::::1;50562:239;;;50634:6;50630:160;50646:1;50644;:3;50630:160;;;50686:27;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;50686:27:::1;50732:42;50742:14;50757:1;50742:17;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;50742:17:0::1;50761:12;:10;:12::i;:::-;50732:9;:42::i;:::-;50649:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50630:160;;;-1:-1:-1::0;50601:3:0;::::1;::::0;::::1;:::i;:::-;;;;50562:239;;;;50815:6;50811:236;50827:12;:19:::0;50825:21;::::1;50811:236;;;50881:6;50877:159;50893:2;50891:1;:4;50877:159;;;50934:27;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;50934:27:::1;50980:40;50990:12;51003:1;50990:15;;;;;;;;:::i;50980:40::-;50897:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50877:159;;;-1:-1:-1::0;50848:3:0;::::1;::::0;::::1;:::i;:::-;;;;50811:236;;;;50503:551::o:0;29884:100::-;29938:13;29971:5;29964:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29884:100;:::o;31443:221::-;31519:7;34786:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34786:16:0;31539:73;;;;-1:-1:-1;;;31539:73:0;;14988:2:1;31539:73:0;;;14970:21:1;15027:2;15007:18;;;15000:30;15066:34;15046:18;;;15039:62;-1:-1:-1;;;15117:18:1;;;15110:42;15169:19;;31539:73:0;14786:408:1;31539:73:0;-1:-1:-1;31632:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31632:24:0;;31443:221::o;30966:411::-;31047:13;31063:23;31078:7;31063:14;:23::i;:::-;31047:39;;31111:5;-1:-1:-1;;;;;31105:11:0;:2;-1:-1:-1;;;;;31105:11:0;;;31097:57;;;;-1:-1:-1;;;31097:57:0;;16865:2:1;31097:57:0;;;16847:21:1;16904:2;16884:18;;;16877:30;16943:34;16923:18;;;16916:62;-1:-1:-1;;;16994:18:1;;;16987:31;17035:19;;31097:57:0;16663:397:1;31097:57:0;7319:10;-1:-1:-1;;;;;31189:21:0;;;;:62;;-1:-1:-1;31214:37:0;31231:5;7319:10;31962:164;:::i;31214:37::-;31167:168;;;;-1:-1:-1;;;31167:168:0;;13381:2:1;31167:168:0;;;13363:21:1;13420:2;13400:18;;;13393:30;13459:34;13439:18;;;13432:62;13530:26;13510:18;;;13503:54;13574:19;;31167:168:0;13179:420:1;31167:168:0;31348:21;31357:2;31361:7;31348:8;:21::i;:::-;31036:341;30966:411;;:::o;51702:945::-;49794:11;;;;:19;;:11;:19;49786:28;;;;;;3383:1:::1;3981:7;;:19;;3973:63;;;::::0;-1:-1:-1;;;3973:63:0;;18037:2:1;3973:63:0::1;::::0;::::1;18019:21:1::0;18076:2;18056:18;;;18049:30;18115:33;18095:18;;;18088:61;18166:18;;3973:63:0::1;17835:355:1::0;3973:63:0::1;3383:1;4114:7;:18:::0;51819:9:::2;::::0;51804:12:::2;:10;:12::i;:::-;:24;:67;;;;;51862:9;;51848;51833:12;:10;:12::i;:::-;:24;;;;:::i;:::-;51832:39;;51804:67;51796:89;;;;-1:-1:-1::0;;;51796:89:0::2;;;;;;;:::i;:::-;51919:10;51904:26;::::0;;;:14:::2;:26;::::0;;;;;::::2;;:34;;:26:::0;:34:::2;51896:70;;;::::0;-1:-1:-1;;;51896:70:0;;17685:2:1;51896:70:0::2;::::0;::::2;17667:21:1::0;17724:2;17704:18;;;17697:30;17763:25;17743:18;;;17736:53;17806:18;;51896:70:0::2;17483:347:1::0;51896:70:0::2;51998:1;51985:9;:14;;:36;;;;;52016:5;;52003:9;:18;;51985:36;51977:70;;;::::0;-1:-1:-1;;;51977:70:0;;15738:2:1;51977:70:0::2;::::0;::::2;15720:21:1::0;15777:2;15757:18;;;15750:30;-1:-1:-1;;;15796:18:1;;;15789:51;15857:18;;51977:70:0::2;15536:345:1::0;51977:70:0::2;52101:5;::::0;52087:10:::2;52067:31;::::0;;;:19:::2;:31;::::0;;;;;:39:::2;52066:102:::0;::::2;;;-1:-1:-1::0;52161:5:0::2;::::0;52133:10:::2;52113:31;::::0;;;:19:::2;:31;::::0;;;;;:43:::2;::::0;52147:9;;52113:43:::2;:::i;:::-;52112:54;;52066:102;52058:150;;;;-1:-1:-1::0;;;52058:150:0::2;;;;;;;:::i;:::-;52249:9;52241:5;;:17;;;;:::i;:::-;52227:9;:32;;52219:74;;;::::0;-1:-1:-1;;;52219:74:0;;9858:2:1;52219:74:0::2;::::0;::::2;9840:21:1::0;9897:2;9877:18;;;9870:30;9936:31;9916:18;;;9909:59;9985:18;;52219:74:0::2;9656:353:1::0;52219:74:0::2;52334:10;52314:31;::::0;;;:19:::2;:31;::::0;;;;:44;;52349:9;;52314:31;:44:::2;::::0;52349:9;;52314:44:::2;:::i;:::-;::::0;;;-1:-1:-1;52383:9:0::2;::::0;-1:-1:-1;52379:259:0::2;52398:9;52396:1;:11;52379:259;;;52461:9;;52446:12;:10;:12::i;:::-;:24;52438:46;;;;-1:-1:-1::0;;;52438:46:0::2;;;;;;;:::i;:::-;52499:27;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;52499:27:::2;52541:35;52551:10;52563:12;:10;:12::i;52541:35::-;52596:30;52601:10;52613:12;:10;:12::i;:::-;52596:30;::::0;;-1:-1:-1;;;;;8865:32:1;;;8847:51;;8929:2;8914:18;;8907:34;;;;8820:18;52596:30:0::2;;;;;;;52409:3:::0;::::2;::::0;::::2;:::i;:::-;;;;52379:259;;;-1:-1:-1::0;;3339:1:0::1;4293:7;:22:::0;51702:945::o;49842:96::-;49886:7;49918:12;:10;:12::i;:::-;49911:19;;49842:96;:::o;32193:339::-;32388:41;7319:10;32421:7;32388:18;:41::i;:::-;32380:103;;;;-1:-1:-1;;;32380:103:0;;;;;;;:::i;:::-;32496:28;32506:4;32512:2;32516:7;32496:9;:28::i;53859:222::-;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;53954:9:::1;53950:124;53969:14;:21;53967:1;:23;53950:124;;;54057:5;54021:14;:33;54036:14;54051:1;54036:17;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;54021:33:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;54021:33:0;:41;;-1:-1:-1;;54021:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53992:3;::::1;::::0;::::1;:::i;:::-;;;;53950:124;;;;53859:222:::0;:::o;32603:185::-;32741:39;32758:4;32764:2;32768:7;32741:39;;;;;;;;;;;;:16;:39::i;54896:104::-;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;54971:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;51502:91::-:0;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;51567:11:::1;:18:::0;;-1:-1:-1;;51567:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51502:91::o;53635:218::-;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;53727:9:::1;53723:123;53742:14;:21;53740:1;:23;53723:123;;;53830:4;53794:14;:33;53809:14;53824:1;53809:17;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;53794:33:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;53794:33:0;:40;;-1:-1:-1;;53794:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53765:3;::::1;::::0;::::1;:::i;:::-;;;;53723:123;;51387:107:::0;51430:7;51461:25;:15;1017:14;;925:114;29578:239;29650:7;29686:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29686:16:0;29721:19;29713:73;;;;-1:-1:-1;;;29713:73:0;;14217:2:1;29713:73:0;;;14199:21:1;14256:2;14236:18;;;14229:30;14295:34;14275:18;;;14268:62;-1:-1:-1;;;14346:18:1;;;14339:39;14395:19;;29713:73:0;14015:405:1;52659:965:0;49696:12;;;;;;;;:20;;:12;:20;49688:29;;;;;;3383:1:::1;3981:7;;:19;;3973:63;;;::::0;-1:-1:-1;;;3973:63:0;;18037:2:1;3973:63:0::1;::::0;::::1;18019:21:1::0;18076:2;18056:18;;;18049:30;18115:33;18095:18;;;18088:61;18166:18;;3973:63:0::1;17835:355:1::0;3973:63:0::1;3383:1;4114:7;:18:::0;52775:1:::2;52762:14:::0;::::2;::::0;::::2;::::0;:36:::2;;;52793:5;;52780:9;:18;;52762:36;52754:70;;;::::0;-1:-1:-1;;;52754:70:0;;15738:2:1;52754:70:0::2;::::0;::::2;15720:21:1::0;15777:2;15757:18;;;15750:30;-1:-1:-1;;;15796:18:1;;;15789:51;15857:18;;52754:70:0::2;15536:345:1::0;52754:70:0::2;52858:9;;52843:12;:10;:12::i;:::-;:24;:67;;;;;52901:9;;52887;52872:12;:10;:12::i;:::-;:24;;;;:::i;:::-;52871:39;;52843:67;52835:89;;;;-1:-1:-1::0;;;52835:89:0::2;;;;;;;:::i;:::-;52977:5;::::0;52963:10:::2;52943:31;::::0;;;:19:::2;:31;::::0;;;;;:39:::2;52935:87;;;;-1:-1:-1::0;;;52935:87:0::2;;;;;;;:::i;:::-;53076:5;::::0;53062:10:::2;53042:31;::::0;;;:19:::2;:31;::::0;;;;;:39:::2;53041:102:::0;::::2;;;-1:-1:-1::0;53136:5:0::2;::::0;53108:10:::2;53088:31;::::0;;;:19:::2;:31;::::0;;;;;:43:::2;::::0;53122:9;;53088:43:::2;:::i;:::-;53087:54;;53041:102;53033:150;;;;-1:-1:-1::0;;;53033:150:0::2;;;;;;;:::i;:::-;53224:9;53216:5;;:17;;;;:::i;:::-;53202:9;:32;;53194:74;;;::::0;-1:-1:-1;;;53194:74:0;;9858:2:1;53194:74:0::2;::::0;::::2;9840:21:1::0;9897:2;9877:18;;;9870:30;9936:31;9916:18;;;9909:59;9985:18;;53194:74:0::2;9656:353:1::0;53194:74:0::2;53309:10;53289:31;::::0;;;:19:::2;:31;::::0;;;;:44;;53324:9;;53289:31;:44:::2;::::0;53324:9;;53289:44:::2;:::i;:::-;::::0;;;-1:-1:-1;53360:9:0::2;::::0;-1:-1:-1;53356:259:0::2;53375:9;53373:1;:11;53356:259;;;53438:9;;53423:12;:10;:12::i;:::-;:24;53415:46;;;;-1:-1:-1::0;;;53415:46:0::2;;;;;;;:::i;:::-;53476:27;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;53476:27:::2;53518:35;53528:10;53540:12;:10;:12::i;53518:35::-;53573:30;53578:10;53590:12;:10;:12::i;:::-;53573:30;::::0;;-1:-1:-1;;;;;8865:32:1;;;8847:51;;8929:2;8914:18;;8907:34;;;;8820:18;53573:30:0::2;;;;;;;53386:3:::0;::::2;::::0;::::2;:::i;:::-;;;;53356:259;;44969:21:::0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29308:208::-;29380:7;-1:-1:-1;;;;;29408:19:0;;29400:74;;;;-1:-1:-1;;;29400:74:0;;13806:2:1;29400:74:0;;;13788:21:1;13845:2;13825:18;;;13818:30;13884:34;13864:18;;;13857:62;-1:-1:-1;;;13935:18:1;;;13928:40;13985:19;;29400:74:0;13604:406:1;29400:74:0;-1:-1:-1;;;;;;29492:16:0;;;;;:9;:16;;;;;;;29308:208::o;9219:103::-;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;9284:30:::1;9311:1;9284:18;:30::i;:::-;9219:103::o:0;51062:317::-;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;51124:6:::1;51120:252;51136:20;:27:::0;51134:29;::::1;51120:252;;;51198:6;51194:167;51210:2;51208:1;:4;51194:167;;;51251:27;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;51251:27:::1;51297:48;51307:20;51328:1;51307:23;;;;;;;;:::i;51297:48::-;51214:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51194:167;;;-1:-1:-1::0;51165:3:0;::::1;::::0;::::1;:::i;:::-;;;;51120:252;;51599:95:::0;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;51666:12:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;51666:20:0;;::::1;::::0;;;::::1;::::0;;51599:95::o;30053:104::-;30109:13;30142:7;30135:14;;;;;:::i;54257:221::-;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;54361:53:::1;54379:4;54386:18;54406:7;54361:53;;:9;:53::i;:::-;54430:40;::::0;;-1:-1:-1;;;;;9142:32:1;;9124:51;;9223:4;9211:17;;9206:2;9191:18;;9184:45;54430:40:0::1;::::0;9097:18:1;54430:40:0::1;;;;;;;54257:221:::0;;:::o;54489:171::-;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;54587:22:::1;54737:21:::0;54587:22:::1;::::0;18341:25:1;;;18329:2;18314:18;54587:22:0::1;;;;;;;54620:32;::::0;-1:-1:-1;;;;;54620:18:0;::::1;::::0;54737:21;54620:32;::::1;;;::::0;::::1;::::0;;;54737:21;54620:18;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;31736:155:::0;31831:52;7319:10;31864:8;31874;31831:18;:52::i;32859:328::-;33034:41;7319:10;33067:7;33034:18;:41::i;:::-;33026:103;;;;-1:-1:-1;;;33026:103:0;;;;;;;:::i;:::-;33140:39;33154:4;33160:2;33164:7;33173:5;33140:13;:39::i;:::-;32859:328;;;;:::o;44997:37::-;;;;;;;:::i;55011:375::-;34762:4;34786:16;;;:7;:16;;;;;;55084:13;;-1:-1:-1;;;;;34786:16:0;55115:76;;;;-1:-1:-1;;;55115:76:0;;16449:2:1;55115:76:0;;;16431:21:1;16488:2;16468:18;;;16461:30;16527:34;16507:18;;;16500:62;-1:-1:-1;;;16578:18:1;;;16571:45;16633:19;;55115:76:0;16247:411:1;55115:76:0;55204:28;55235:10;:8;:10::i;:::-;55204:41;;55294:1;55269:14;55263:28;:32;:115;;;;;;;;;;;;;;;;;55322:14;55338:18;:7;:16;:18::i;:::-;55358:13;55305:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55263:115;55256:122;55011:375;-1:-1:-1;;;55011:375:0:o;49946:549::-;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;50008:6:::1;50004:235;50020:12;:19:::0;50018:21;::::1;50004:235;;;50074:6;50070:158;50086:1;50084;:3;50070:158;;;50126:27;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;50126:27:::1;50172:40;50182:12;50195:1;50182:15;;;;;;;;:::i;50172:40::-;50089:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50070:158;;;-1:-1:-1::0;50041:3:0;::::1;::::0;::::1;:::i;:::-;;;;50004:235;;;;50255:6;50251:237;50267:13;:20:::0;50265:22;::::1;50251:237;;;50322:6;50318:159;50334:1;50332;:3;50318:159;;;50374:27;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;50374:27:::1;50420:41;50430:13;50444:1;50430:16;;;;;;;;:::i;50420:41::-;50337:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50318:159;;;-1:-1:-1::0;50289:3:0;::::1;::::0;::::1;:::i;:::-;;;;50251:237;;9477:201:::0;8641:6;;-1:-1:-1;;;;;8641:6:0;7319:10;8788:23;8780:68;;;;-1:-1:-1;;;8780:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9566:22:0;::::1;9558:73;;;::::0;-1:-1:-1;;;9558:73:0;;10635:2:1;9558:73:0::1;::::0;::::1;10617:21:1::0;10674:2;10654:18;;;10647:30;10713:34;10693:18;;;10686:62;-1:-1:-1;;;10764:18:1;;;10757:36;10810:19;;9558:73:0::1;10433:402:1::0;9558:73:0::1;9642:28;9661:8;9642:18;:28::i;1047:127::-:0;1136:19;;1154:1;1136:19;;;1047:127::o;925:114::-;1017:14;;925:114::o;11307:326::-;-1:-1:-1;;;;;11602:19:0;;:23;;;11307:326::o;35681:110::-;35757:26;35767:2;35771:7;35757:26;;;;;;;;;;;;:9;:26::i;38843:174::-;38918:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;38918:29:0;-1:-1:-1;;;;;38918:29:0;;;;;;;;:24;;38972:23;38918:24;38972:14;:23::i;:::-;-1:-1:-1;;;;;38963:46:0;;;;;;;;;;;38843:174;;:::o;34991:348::-;35084:4;34786:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34786:16:0;35101:73;;;;-1:-1:-1;;;35101:73:0;;12968:2:1;35101:73:0;;;12950:21:1;13007:2;12987:18;;;12980:30;13046:34;13026:18;;;13019:62;-1:-1:-1;;;13097:18:1;;;13090:42;13149:19;;35101:73:0;12766:408:1;35101:73:0;35185:13;35201:23;35216:7;35201:14;:23::i;:::-;35185:39;;35254:5;-1:-1:-1;;;;;35243:16:0;:7;-1:-1:-1;;;;;35243:16:0;;:51;;;;35287:7;-1:-1:-1;;;;;35263:31:0;:20;35275:7;35263:11;:20::i;:::-;-1:-1:-1;;;;;35263:31:0;;35243:51;:87;;;-1:-1:-1;;;;;;32083:25:0;;;32059:4;32083:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;35298:32;35235:96;34991:348;-1:-1:-1;;;;34991:348:0:o;38100:625::-;38259:4;-1:-1:-1;;;;;38232:31:0;:23;38247:7;38232:14;:23::i;:::-;-1:-1:-1;;;;;38232:31:0;;38224:81;;;;-1:-1:-1;;;38224:81:0;;11042:2:1;38224:81:0;;;11024:21:1;11081:2;11061:18;;;11054:30;11120:34;11100:18;;;11093:62;-1:-1:-1;;;11171:18:1;;;11164:35;11216:19;;38224:81:0;10840:401:1;38224:81:0;-1:-1:-1;;;;;38324:16:0;;38316:65;;;;-1:-1:-1;;;38316:65:0;;12209:2:1;38316:65:0;;;12191:21:1;12248:2;12228:18;;;12221:30;12287:34;12267:18;;;12260:62;-1:-1:-1;;;12338:18:1;;;12331:34;12382:19;;38316:65:0;12007:400:1;38316:65:0;38498:29;38515:1;38519:7;38498:8;:29::i;:::-;-1:-1:-1;;;;;38540:15:0;;;;;;:9;:15;;;;;:20;;38559:1;;38540:15;:20;;38559:1;;38540:20;:::i;:::-;;;;-1:-1:-1;;;;;;;38571:13:0;;;;;;:9;:13;;;;;:18;;38588:1;;38571:13;:18;;38588:1;;38571:18;:::i;:::-;;;;-1:-1:-1;;38600:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;38600:21:0;-1:-1:-1;;;;;38600:21:0;;;;;;;;;38639:27;;38600:16;;38639:27;;;;;;;31036:341;30966:411;;:::o;9838:191::-;9931:6;;;-1:-1:-1;;;;;9948:17:0;;;-1:-1:-1;;;;;;9948:17:0;;;;;;;9981:40;;9931:6;;;9948:17;9931:6;;9981:40;;9912:16;;9981:40;9901:128;9838:191;:::o;39159:315::-;39314:8;-1:-1:-1;;;;;39305:17:0;:5;-1:-1:-1;;;;;39305:17:0;;;39297:55;;;;-1:-1:-1;;;39297:55:0;;12614:2:1;39297:55:0;;;12596:21:1;12653:2;12633:18;;;12626:30;12692:27;12672:18;;;12665:55;12737:18;;39297:55:0;12412:349:1;39297:55:0;-1:-1:-1;;;;;39363:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;39363:46:0;;;;;;;;;;39425:41;;9380::1;;;39425::0;;9353:18:1;39425:41:0;;;;;;;39159:315;;;:::o;34069:::-;34226:28;34236:4;34242:2;34246:7;34226:9;:28::i;:::-;34273:48;34296:4;34302:2;34306:7;34315:5;34273:22;:48::i;:::-;34265:111;;;;-1:-1:-1;;;34265:111:0;;;;;;;:::i;54777:108::-;54837:13;54870:7;54863:14;;;;;:::i;4748:723::-;4804:13;5025:10;5021:53;;-1:-1:-1;;5052:10:0;;;;;;;;;;;;-1:-1:-1;;;5052:10:0;;;;;4748:723::o;5021:53::-;5099:5;5084:12;5140:78;5147:9;;5140:78;;5173:8;;;;:::i;:::-;;-1:-1:-1;5196:10:0;;-1:-1:-1;5204:2:0;5196:10;;:::i;:::-;;;5140:78;;;5228:19;5260:6;5250:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5250:17:0;;5228:39;;5278:154;5285:10;;5278:154;;5312:11;5322:1;5312:11;;:::i;:::-;;-1:-1:-1;5381:10:0;5389:2;5381:5;:10;:::i;:::-;5368:24;;:2;:24;:::i;:::-;5355:39;;5338:6;5345;5338:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5338:56:0;;;;;;;;-1:-1:-1;5409:11:0;5418:2;5409:11;;:::i;:::-;;;5278:154;;36018:321;36148:18;36154:2;36158:7;36148:5;:18::i;:::-;36199:54;36230:1;36234:2;36238:7;36247:5;36199:22;:54::i;:::-;36177:154;;;;-1:-1:-1;;;36177:154:0;;;;;;;:::i;40039:799::-;40194:4;-1:-1:-1;;;;;40215:13:0;;11602:19;:23;40211:620;;40251:72;;-1:-1:-1;;;40251:72:0;;-1:-1:-1;;;;;40251:36:0;;;;;:72;;7319:10;;40302:4;;40308:7;;40317:5;;40251:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40251:72:0;;;;;;;;-1:-1:-1;;40251:72:0;;;;;;;;;;;;:::i;:::-;;;40247:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40493:13:0;;40489:272;;40536:60;;-1:-1:-1;;;40536:60:0;;;;;;;:::i;40489:272::-;40711:6;40705:13;40696:6;40692:2;40688:15;40681:38;40247:529;-1:-1:-1;;;;;;40374:51:0;-1:-1:-1;;;40374:51:0;;-1:-1:-1;40367:58:0;;40211:620;-1:-1:-1;40815:4:0;40039:799;;;;;;:::o;36675:439::-;-1:-1:-1;;;;;36755:16:0;;36747:61;;;;-1:-1:-1;;;36747:61:0;;14627:2:1;36747:61:0;;;14609:21:1;;;14646:18;;;14639:30;14705:34;14685:18;;;14678:62;14757:18;;36747:61:0;14425:356:1;36747:61:0;34762:4;34786:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34786:16:0;:30;36819:58;;;;-1:-1:-1;;;36819:58:0;;11448:2:1;36819:58:0;;;11430:21:1;11487:2;11467:18;;;11460:30;11526;11506:18;;;11499:58;11574:18;;36819:58:0;11246:352:1;36819:58:0;-1:-1:-1;;;;;36948:13:0;;;;;;:9;:13;;;;;:18;;36965:1;;36948:13;:18;;36965:1;;36948:18;:::i;:::-;;;;-1:-1:-1;;36977:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36977:21:0;-1:-1:-1;;;;;36977:21:0;;;;;;;;37016:33;;36977:16;;;37016:33;;36977:16;;37016:33;53950:124:::1;53859:222:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:160::-;490:20;;546:13;;539:21;529:32;;519:60;;575:1;572;565:12;519:60;425:160;;;:::o;590:247::-;649:6;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;1102:388::-;1170:6;1178;1231:2;1219:9;1210:7;1206:23;1202:32;1199:52;;;1247:1;1244;1237:12;1199:52;1286:9;1273:23;1305:31;1330:5;1305:31;:::i;:::-;1355:5;-1:-1:-1;1412:2:1;1397:18;;1384:32;1425:33;1384:32;1425:33;:::i;:::-;1477:7;1467:17;;;1102:388;;;;;:::o;1495:456::-;1572:6;1580;1588;1641:2;1629:9;1620:7;1616:23;1612:32;1609:52;;;1657:1;1654;1647:12;1609:52;1696:9;1683:23;1715:31;1740:5;1715:31;:::i;:::-;1765:5;-1:-1:-1;1822:2:1;1807:18;;1794:32;1835:33;1794:32;1835:33;:::i;:::-;1495:456;;1887:7;;-1:-1:-1;;;1941:2:1;1926:18;;;;1913:32;;1495:456::o;1956:794::-;2051:6;2059;2067;2075;2128:3;2116:9;2107:7;2103:23;2099:33;2096:53;;;2145:1;2142;2135:12;2096:53;2184:9;2171:23;2203:31;2228:5;2203:31;:::i;:::-;2253:5;-1:-1:-1;2310:2:1;2295:18;;2282:32;2323:33;2282:32;2323:33;:::i;:::-;2375:7;-1:-1:-1;2429:2:1;2414:18;;2401:32;;-1:-1:-1;2484:2:1;2469:18;;2456:32;2511:18;2500:30;;2497:50;;;2543:1;2540;2533:12;2497:50;2566:22;;2619:4;2611:13;;2607:27;-1:-1:-1;2597:55:1;;2648:1;2645;2638:12;2597:55;2671:73;2736:7;2731:2;2718:16;2713:2;2709;2705:11;2671:73;:::i;:::-;2661:83;;;1956:794;;;;;;;:::o;2755:315::-;2820:6;2828;2881:2;2869:9;2860:7;2856:23;2852:32;2849:52;;;2897:1;2894;2887:12;2849:52;2936:9;2923:23;2955:31;2980:5;2955:31;:::i;:::-;3005:5;-1:-1:-1;3029:35:1;3060:2;3045:18;;3029:35;:::i;:::-;3019:45;;2755:315;;;;;:::o;3075:::-;3143:6;3151;3204:2;3192:9;3183:7;3179:23;3175:32;3172:52;;;3220:1;3217;3210:12;3172:52;3259:9;3246:23;3278:31;3303:5;3278:31;:::i;:::-;3328:5;3380:2;3365:18;;;;3352:32;;-1:-1:-1;;;3075:315:1:o;3395:412::-;3461:6;3469;3522:2;3510:9;3501:7;3497:23;3493:32;3490:52;;;3538:1;3535;3528:12;3490:52;3577:9;3564:23;3596:31;3621:5;3596:31;:::i;:::-;3646:5;-1:-1:-1;3703:2:1;3688:18;;3675:32;3751:4;3738:18;;3726:31;;3716:59;;3771:1;3768;3761:12;3812:1032;3896:6;3927:2;3970;3958:9;3949:7;3945:23;3941:32;3938:52;;;3986:1;3983;3976:12;3938:52;4026:9;4013:23;4055:18;4096:2;4088:6;4085:14;4082:34;;;4112:1;4109;4102:12;4082:34;4150:6;4139:9;4135:22;4125:32;;4195:7;4188:4;4184:2;4180:13;4176:27;4166:55;;4217:1;4214;4207:12;4166:55;4253:2;4240:16;4275:2;4271;4268:10;4265:36;;;4281:18;;:::i;:::-;4327:2;4324:1;4320:10;4310:20;;4350:28;4374:2;4370;4366:11;4350:28;:::i;:::-;4412:15;;;4443:12;;;;4475:11;;;4505;;;4501:20;;4498:33;-1:-1:-1;4495:53:1;;;4544:1;4541;4534:12;4495:53;4566:1;4557:10;;4576:238;4590:2;4587:1;4584:9;4576:238;;;4661:3;4648:17;4635:30;;4678:31;4703:5;4678:31;:::i;:::-;4722:18;;;4608:1;4601:9;;;;;4760:12;;;;4792;;4576:238;;;-1:-1:-1;4833:5:1;3812:1032;-1:-1:-1;;;;;;;;3812:1032:1:o;4849:180::-;4905:6;4958:2;4946:9;4937:7;4933:23;4929:32;4926:52;;;4974:1;4971;4964:12;4926:52;4997:26;5013:9;4997:26;:::i;5034:245::-;5092:6;5145:2;5133:9;5124:7;5120:23;5116:32;5113:52;;;5161:1;5158;5151:12;5113:52;5200:9;5187:23;5219:30;5243:5;5219:30;:::i;5284:249::-;5353:6;5406:2;5394:9;5385:7;5381:23;5377:32;5374:52;;;5422:1;5419;5412:12;5374:52;5454:9;5448:16;5473:30;5497:5;5473:30;:::i;5538:450::-;5607:6;5660:2;5648:9;5639:7;5635:23;5631:32;5628:52;;;5676:1;5673;5666:12;5628:52;5716:9;5703:23;5749:18;5741:6;5738:30;5735:50;;;5781:1;5778;5771:12;5735:50;5804:22;;5857:4;5849:13;;5845:27;-1:-1:-1;5835:55:1;;5886:1;5883;5876:12;5835:55;5909:73;5974:7;5969:2;5956:16;5951:2;5947;5943:11;5909:73;:::i;5993:180::-;6052:6;6105:2;6093:9;6084:7;6080:23;6076:32;6073:52;;;6121:1;6118;6111:12;6073:52;-1:-1:-1;6144:23:1;;5993:180;-1:-1:-1;5993:180:1:o;6178:257::-;6219:3;6257:5;6251:12;6284:6;6279:3;6272:19;6300:63;6356:6;6349:4;6344:3;6340:14;6333:4;6326:5;6322:16;6300:63;:::i;:::-;6417:2;6396:15;-1:-1:-1;;6392:29:1;6383:39;;;;6424:4;6379:50;;6178:257;-1:-1:-1;;6178:257:1:o;6440:1527::-;6664:3;6702:6;6696:13;6728:4;6741:51;6785:6;6780:3;6775:2;6767:6;6763:15;6741:51;:::i;:::-;6855:13;;6814:16;;;;6877:55;6855:13;6814:16;6899:15;;;6877:55;:::i;:::-;7021:13;;6954:20;;;6994:1;;7081;7103:18;;;;7156;;;;7183:93;;7261:4;7251:8;7247:19;7235:31;;7183:93;7324:2;7314:8;7311:16;7291:18;7288:40;7285:167;;;-1:-1:-1;;;7351:33:1;;7407:4;7404:1;7397:15;7437:4;7358:3;7425:17;7285:167;7468:18;7495:110;;;;7619:1;7614:328;;;;7461:481;;7495:110;-1:-1:-1;;7530:24:1;;7516:39;;7575:20;;;;-1:-1:-1;7495:110:1;;7614:328;18730:1;18723:14;;;18767:4;18754:18;;7709:1;7723:169;7737:8;7734:1;7731:15;7723:169;;;7819:14;;7804:13;;;7797:37;7862:16;;;;7754:10;;7723:169;;;7727:3;;7923:8;7916:5;7912:20;7905:27;;7461:481;-1:-1:-1;7958:3:1;;6440:1527;-1:-1:-1;;;;;;;;;;;6440:1527:1:o;8180:488::-;-1:-1:-1;;;;;8449:15:1;;;8431:34;;8501:15;;8496:2;8481:18;;8474:43;8548:2;8533:18;;8526:34;;;8596:3;8591:2;8576:18;;8569:31;;;8374:4;;8617:45;;8642:19;;8634:6;8617:45;:::i;:::-;8609:53;8180:488;-1:-1:-1;;;;;;8180:488:1:o;9432:219::-;9581:2;9570:9;9563:21;9544:4;9601:44;9641:2;9630:9;9626:18;9618:6;9601:44;:::i;10014:414::-;10216:2;10198:21;;;10255:2;10235:18;;;10228:30;10294:34;10289:2;10274:18;;10267:62;-1:-1:-1;;;10360:2:1;10345:18;;10338:48;10418:3;10403:19;;10014:414::o;11603:399::-;11805:2;11787:21;;;11844:2;11824:18;;;11817:30;11883:34;11878:2;11863:18;;11856:62;-1:-1:-1;;;11949:2:1;11934:18;;11927:33;11992:3;11977:19;;11603:399::o;15199:332::-;15401:2;15383:21;;;15440:1;15420:18;;;15413:29;-1:-1:-1;;;15473:2:1;15458:18;;15451:39;15522:2;15507:18;;15199:332::o;15886:356::-;16088:2;16070:21;;;16107:18;;;16100:30;16166:34;16161:2;16146:18;;16139:62;16233:2;16218:18;;15886:356::o;17065:413::-;17267:2;17249:21;;;17306:2;17286:18;;;17279:30;17345:34;17340:2;17325:18;;17318:62;-1:-1:-1;;;17411:2:1;17396:18;;17389:47;17468:3;17453:19;;17065:413::o;18377:275::-;18448:2;18442:9;18513:2;18494:13;;-1:-1:-1;;18490:27:1;18478:40;;18548:18;18533:34;;18569:22;;;18530:62;18527:88;;;18595:18;;:::i;:::-;18631:2;18624:22;18377:275;;-1:-1:-1;18377:275:1:o;18783:128::-;18823:3;18854:1;18850:6;18847:1;18844:13;18841:39;;;18860:18;;:::i;:::-;-1:-1:-1;18896:9:1;;18783:128::o;18916:120::-;18956:1;18982;18972:35;;18987:18;;:::i;:::-;-1:-1:-1;19021:9:1;;18916:120::o;19041:168::-;19081:7;19147:1;19143;19139:6;19135:14;19132:1;19129:21;19124:1;19117:9;19110:17;19106:45;19103:71;;;19154:18;;:::i;:::-;-1:-1:-1;19194:9:1;;19041:168::o;19214:125::-;19254:4;19282:1;19279;19276:8;19273:34;;;19287:18;;:::i;:::-;-1:-1:-1;19324:9:1;;19214:125::o;19344:258::-;19416:1;19426:113;19440:6;19437:1;19434:13;19426:113;;;19516:11;;;19510:18;19497:11;;;19490:39;19462:2;19455:10;19426:113;;;19557:6;19554:1;19551:13;19548:48;;;-1:-1:-1;;19592:1:1;19574:16;;19567:27;19344:258::o;19607:380::-;19686:1;19682:12;;;;19729;;;19750:61;;19804:4;19796:6;19792:17;19782:27;;19750:61;19857:2;19849:6;19846:14;19826:18;19823:38;19820:161;;;19903:10;19898:3;19894:20;19891:1;19884:31;19938:4;19935:1;19928:15;19966:4;19963:1;19956:15;19820:161;;19607:380;;;:::o;19992:135::-;20031:3;-1:-1:-1;;20052:17:1;;20049:43;;;20072:18;;:::i;:::-;-1:-1:-1;20119:1:1;20108:13;;19992:135::o;20132:112::-;20164:1;20190;20180:35;;20195:18;;:::i;:::-;-1:-1:-1;20229:9:1;;20132:112::o;20249:127::-;20310:10;20305:3;20301:20;20298:1;20291:31;20341:4;20338:1;20331:15;20365:4;20362:1;20355:15;20381:127;20442:10;20437:3;20433:20;20430:1;20423:31;20473:4;20470:1;20463:15;20497:4;20494:1;20487:15;20513:127;20574:10;20569:3;20565:20;20562:1;20555:31;20605:4;20602:1;20595:15;20629:4;20626:1;20619:15;20645:127;20706:10;20701:3;20697:20;20694:1;20687:31;20737:4;20734:1;20727:15;20761:4;20758:1;20751:15;20777:131;-1:-1:-1;;;;;20852:31:1;;20842:42;;20832:70;;20898:1;20895;20888:12;20913:131;-1:-1:-1;;;;;;20987:32:1;;20977:43;;20967:71;;21034:1;21031;21024:12
Swarm Source
ipfs://9918bcd80b74bca7961c3a82c0d2d111c08386c53bdbe23b0087bd65c4ed2b03
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.