ERC-721
NFT
Overview
Max Total Supply
2,228 CCC
Holders
593
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CCCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-24 */ // SPDX-License-Identifier: MIT 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); } /** * @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; } /** * @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); } /** * @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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success,) = recipient.call{value : amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value : value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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; } } /** * @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); } } /** * @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; } } /** * @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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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; } } contract NFT is ERC721, Ownable { using Counters for Counters.Counter; using Strings for uint256; enum State {SETUP, FREE, PAID, PAUSE, REVEALED} uint256 public cost = 0.05 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 21; Counters.Counter private tokenIdCounter; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; State public state; mapping(address => uint8) public whitelisted; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); _mint(); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function freeMint(uint8 _mintAmount) public { require(state == State.FREE || state == State.REVEALED, "must be FREE or REVEALED state."); require(_mintAmount <= whitelisted[msg.sender], "Out of quota."); require(tokenIdCounter.current() + _mintAmount <= maxSupply, "maxSupply reached"); whitelisted[msg.sender] -= _mintAmount; for (uint256 i = 1; i <= _mintAmount; i++) { _mint(); } } // public function mint(uint8 _mintAmount) public payable { require(state == State.PAID || state == State.REVEALED, "must be PAID or REVEALED state."); require(_mintAmount <= maxMintAmount, "can not mint more than maxMintAmount"); require(tokenIdCounter.current() + _mintAmount <= maxSupply, "maxSupply reached"); require(msg.value == cost * _mintAmount, "you need to send exact cost."); for (uint256 i = 1; i <= _mintAmount; i++) { _mint(); } } function _mint() internal { tokenIdCounter.increment(); uint256 tokenId = tokenIdCounter.current(); _safeMint(msg.sender, tokenId); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (state != State.REVEALED) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function setState(State _state) public onlyOwner { state = _state; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setMaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function whitelistUserBatch(address[] memory _users, uint8 quota) public onlyOwner { for (uint i = 0; i < _users.length; i++) { whitelisted[_users[i]] = quota; } } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = 0; } function totalSupply() public view returns (uint256) { return tokenIdCounter.current(); } function withdraw() public payable onlyOwner { // This will payout the owner 100% of the contract balance. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os,) = payable(owner()).call{value : address(this).balance}(""); require(os); // ============================================================================= } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","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"},{"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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum NFT.State","name":"_state","type":"uint8"}],"name":"setState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"state","outputs":[{"internalType":"enum NFT.State","name":"","type":"uint8"}],"stateMutability":"view","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":[{"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":"_users","type":"address[]"},{"internalType":"uint8","name":"quota","type":"uint8"}],"name":"whitelistUserBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
66b1a2bc2ec50000600755612710600855601560095560c06040526005608081905264173539b7b760d91b60a09081526200003e91600c9190620005a2565b503480156200004c57600080fd5b5060405162002de838038062002de88339810160408190526200006f916200070c565b83518490849062000088906000906020850190620005a2565b5080516200009e906001906020840190620005a2565b505050620000bb620000b5620000e560201b60201c565b620000e9565b620000c6826200013b565b620000d181620001a3565b620000db62000203565b50505050620008c8565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b031633146200018a5760405162461bcd60e51b8152602060048201819052602482015260008051602062002dc883398151915260448201526064015b60405180910390fd5b80516200019f90600b906020840190620005a2565b5050565b6006546001600160a01b03163314620001ee5760405162461bcd60e51b8152602060048201819052602482015260008051602062002dc8833981519152604482015260640162000181565b80516200019f90600d906020840190620005a2565b6200021a600a6200024460201b620014f71760201c565b600062000233600a6200024d60201b620015001760201c565b905062000241338262000251565b50565b80546001019055565b5490565b6200019f8282604051806020016040528060008152506200027360201b60201c565b6200027f8383620002eb565b6200028e600084848462000433565b620002e65760405162461bcd60e51b8152602060048201526032602482015260008051602062002da883398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000181565b505050565b6001600160a01b038216620003435760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640162000181565b6000818152600260205260409020546001600160a01b031615620003aa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000181565b6001600160a01b0382166000908152600360205260408120805460019290620003d59084906200081b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600062000454846001600160a01b03166200059c60201b620015041760201c565b156200059057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906200048e903390899088908890600401620007c5565b602060405180830381600087803b158015620004a957600080fd5b505af1925050508015620004dc575060408051601f3d908101601f19168201909252620004d991810190620006d9565b60015b62000575573d8080156200050d576040519150601f19603f3d011682016040523d82523d6000602084013e62000512565b606091505b5080516200056d5760405162461bcd60e51b8152602060048201526032602482015260008051602062002da883398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000181565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062000594565b5060015b949350505050565b3b151590565b828054620005b09062000875565b90600052602060002090601f016020900481019282620005d457600085556200061f565b82601f10620005ef57805160ff19168380011785556200061f565b828001600101855582156200061f579182015b828111156200061f57825182559160200191906001019062000602565b506200062d92915062000631565b5090565b5b808211156200062d576000815560010162000632565b600082601f8301126200065a57600080fd5b81516001600160401b0380821115620006775762000677620008b2565b604051601f8301601f19908116603f01168101908282118183101715620006a257620006a2620008b2565b81604052838152866020858801011115620006bc57600080fd5b620006cf84602083016020890162000842565b9695505050505050565b600060208284031215620006ec57600080fd5b81516001600160e01b0319811681146200070557600080fd5b9392505050565b600080600080608085870312156200072357600080fd5b84516001600160401b03808211156200073b57600080fd5b620007498883890162000648565b955060208701519150808211156200076057600080fd5b6200076e8883890162000648565b945060408701519150808211156200078557600080fd5b620007938883890162000648565b93506060870151915080821115620007aa57600080fd5b50620007b98782880162000648565b91505092959194509250565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620008048160a085016020870162000842565b601f01601f19169190910160a00195945050505050565b600082198211156200083d57634e487b7160e01b600052601160045260246000fd5b500190565b60005b838110156200085f57818101518382015260200162000845565b838111156200086f576000848401525b50505050565b600181811c908216806200088a57607f821691505b60208210811415620008ac57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6124d080620008d86000396000f3fe60806040526004361061020f5760003560e01c80636c0360eb11610118578063c6682862116100a0578063d936547e1161006f578063d936547e146105b3578063da3ef23f146105f5578063e985e9c514610615578063f2c4ce1e1461065e578063f2fde38b1461067e57600080fd5b8063c668286214610548578063c87b56dd1461055d578063c87c089c1461057d578063d5abeb011461059d57600080fd5b80638da5cb5b116100e75780638da5cb5b146104ae57806395d89b41146104cc578063a22cb465146104e1578063b88d4fde14610501578063c19d93fb1461052157600080fd5b80636c0360eb146104515780636ecd23061461046657806370a0823114610479578063715018a61461049957600080fd5b806323b872dd1161019b57806342842e0e1161016a57806342842e0e146103b157806344a0d68a146103d157806355f804b3146103f157806356de96db146104115780636352211e1461043157600080fd5b806323b872dd146103495780632448a9fe1461036957806330cc7ae0146103895780633ccfd60b146103a957600080fd5b8063088a4ed0116101e2578063088a4ed0146102b8578063095ea7b3146102da57806313faede6146102fa57806318160ddd1461031e578063239c70ae1461033357600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063081c8c44146102a3575b600080fd5b34801561022057600080fd5b5061023461022f366004611fb2565b61069e565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106f0565b60405161024091906121df565b34801561027757600080fd5b5061028b610286366004612056565b610782565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b5061025e61081c565b3480156102c457600080fd5b506102d86102d3366004612056565b6108aa565b005b3480156102e657600080fd5b506102d86102f5366004611ec2565b6108d9565b34801561030657600080fd5b5061031060075481565b604051908152602001610240565b34801561032a57600080fd5b506103106109ef565b34801561033f57600080fd5b5061031060095481565b34801561035557600080fd5b506102d8610364366004611dce565b6109ff565b34801561037557600080fd5b506102d8610384366004611eec565b610a30565b34801561039557600080fd5b506102d86103a4366004611d80565b610ad0565b6102d8610b1b565b3480156103bd57600080fd5b506102d86103cc366004611dce565b610bb9565b3480156103dd57600080fd5b506102d86103ec366004612056565b610bd4565b3480156103fd57600080fd5b506102d861040c36600461200d565b610c03565b34801561041d57600080fd5b506102d861042c366004611fec565b610c44565b34801561043d57600080fd5b5061028b61044c366004612056565b610c95565b34801561045d57600080fd5b5061025e610d0c565b6102d861047436600461206f565b610d19565b34801561048557600080fd5b50610310610494366004611d80565b610ee3565b3480156104a557600080fd5b506102d8610f6a565b3480156104ba57600080fd5b506006546001600160a01b031661028b565b3480156104d857600080fd5b5061025e610fa0565b3480156104ed57600080fd5b506102d86104fc366004611e86565b610faf565b34801561050d57600080fd5b506102d861051c366004611e0a565b611074565b34801561052d57600080fd5b50600e5461053b9060ff1681565b60405161024091906121b7565b34801561055457600080fd5b5061025e6110ac565b34801561056957600080fd5b5061025e610578366004612056565b6110b9565b34801561058957600080fd5b506102d861059836600461206f565b611247565b3480156105a957600080fd5b5061031060085481565b3480156105bf57600080fd5b506105e36105ce366004611d80565b600f6020526000908152604090205460ff1681565b60405160ff9091168152602001610240565b34801561060157600080fd5b506102d861061036600461200d565b6113e5565b34801561062157600080fd5b50610234610630366004611d9b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561066a57600080fd5b506102d861067936600461200d565b611422565b34801561068a57600080fd5b506102d8610699366004611d80565b61145f565b60006001600160e01b031982166380ac58cd60e01b14806106cf57506001600160e01b03198216635b5e139f60e01b145b806106ea57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106ff906123ac565b80601f016020809104026020016040519081016040528092919081815260200182805461072b906123ac565b80156107785780601f1061074d57610100808354040283529160200191610778565b820191906000526020600020905b81548152906001019060200180831161075b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108005760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600d8054610829906123ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610855906123ac565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b505050505081565b6006546001600160a01b031633146108d45760405162461bcd60e51b81526004016107f790612244565b600955565b60006108e482610c95565b9050806001600160a01b0316836001600160a01b031614156109525760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107f7565b336001600160a01b038216148061096e575061096e8133610630565b6109e05760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107f7565b6109ea838361150a565b505050565b60006109fa600a5490565b905090565b610a093382611578565b610a255760405162461bcd60e51b81526004016107f790612279565b6109ea83838361166f565b6006546001600160a01b03163314610a5a5760405162461bcd60e51b81526004016107f790612244565b60005b82518110156109ea5781600f6000858481518110610a7d57610a7d612458565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080610ac8906123e7565b915050610a5d565b6006546001600160a01b03163314610afa5760405162461bcd60e51b81526004016107f790612244565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6006546001600160a01b03163314610b455760405162461bcd60e51b81526004016107f790612244565b6000610b596006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ba3576040519150601f19603f3d011682016040523d82523d6000602084013e610ba8565b606091505b5050905080610bb657600080fd5b50565b6109ea83838360405180602001604052806000815250611074565b6006546001600160a01b03163314610bfe5760405162461bcd60e51b81526004016107f790612244565b600755565b6006546001600160a01b03163314610c2d5760405162461bcd60e51b81526004016107f790612244565b8051610c4090600b906020840190611c62565b5050565b6006546001600160a01b03163314610c6e5760405162461bcd60e51b81526004016107f790612244565b600e805482919060ff19166001836004811115610c8d57610c8d612442565b021790555050565b6000818152600260205260408120546001600160a01b0316806106ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107f7565b600b8054610829906123ac565b6002600e5460ff166004811115610d3257610d32612442565b1480610d5457506004600e5460ff166004811115610d5257610d52612442565b145b610da05760405162461bcd60e51b815260206004820152601f60248201527f6d7573742062652050414944206f722052455645414c45442073746174652e0060448201526064016107f7565b6009548160ff161115610e015760405162461bcd60e51b8152602060048201526024808201527f63616e206e6f74206d696e74206d6f7265207468616e206d61784d696e74416d6044820152631bdd5b9d60e21b60648201526084016107f7565b6008548160ff16610e11600a5490565b610e1b91906122fb565b1115610e5d5760405162461bcd60e51b81526020600482015260116024820152701b585e14dd5c1c1b1e481c995858da1959607a1b60448201526064016107f7565b8060ff16600754610e6e9190612327565b3414610ebc5760405162461bcd60e51b815260206004820152601c60248201527f796f75206e65656420746f2073656e6420657861637420636f73742e0000000060448201526064016107f7565b60015b8160ff168111610c4057610ed161180f565b80610edb816123e7565b915050610ebf565b60006001600160a01b038216610f4e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107f7565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610f945760405162461bcd60e51b81526004016107f790612244565b610f9e6000611834565b565b6060600180546106ff906123ac565b6001600160a01b0382163314156110085760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107f7565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61107e3383611578565b61109a5760405162461bcd60e51b81526004016107f790612279565b6110a684848484611886565b50505050565b600c8054610829906123ac565b6000818152600260205260409020546060906001600160a01b03166111385760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107f7565b6004600e5460ff16600481111561115157611151612442565b146111e857600d8054611163906123ac565b80601f016020809104026020016040519081016040528092919081815260200182805461118f906123ac565b80156111dc5780601f106111b1576101008083540402835291602001916111dc565b820191906000526020600020905b8154815290600101906020018083116111bf57829003601f168201915b50505050509050919050565b60006111f26118b9565b905060008151116112125760405180602001604052806000815250611240565b8061121c846118c8565b600c604051602001611230939291906120b6565b6040516020818303038152906040525b9392505050565b6001600e5460ff16600481111561126057611260612442565b148061128257506004600e5460ff16600481111561128057611280612442565b145b6112ce5760405162461bcd60e51b815260206004820152601f60248201527f6d7573742062652046524545206f722052455645414c45442073746174652e0060448201526064016107f7565b336000908152600f602052604090205460ff90811690821611156113245760405162461bcd60e51b815260206004820152600d60248201526c27baba1037b31038bab7ba309760991b60448201526064016107f7565b6008548160ff16611334600a5490565b61133e91906122fb565b11156113805760405162461bcd60e51b81526020600482015260116024820152701b585e14dd5c1c1b1e481c995858da1959607a1b60448201526064016107f7565b336000908152600f6020526040812080548392906113a290849060ff1661235d565b92506101000a81548160ff021916908360ff1602179055506000600190505b8160ff168111610c40576113d361180f565b806113dd816123e7565b9150506113c1565b6006546001600160a01b0316331461140f5760405162461bcd60e51b81526004016107f790612244565b8051610c4090600c906020840190611c62565b6006546001600160a01b0316331461144c5760405162461bcd60e51b81526004016107f790612244565b8051610c4090600d906020840190611c62565b6006546001600160a01b031633146114895760405162461bcd60e51b81526004016107f790612244565b6001600160a01b0381166114ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f7565b610bb681611834565b80546001019055565b5490565b3b151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061153f82610c95565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166115f15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b60006115fc83610c95565b9050806001600160a01b0316846001600160a01b031614806116375750836001600160a01b031661162c84610782565b6001600160a01b0316145b8061166757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661168282610c95565b6001600160a01b0316146116ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107f7565b6001600160a01b03821661174c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b61175760008261150a565b6001600160a01b0383166000908152600360205260408120805460019290611780908490612346565b90915550506001600160a01b03821660009081526003602052604081208054600192906117ae9084906122fb565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61181d600a80546001019055565b6000611828600a5490565b9050610bb633826119c6565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61189184848461166f565b61189d848484846119e0565b6110a65760405162461bcd60e51b81526004016107f7906121f2565b6060600b80546106ff906123ac565b6060816118ec5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119165780611900816123e7565b915061190f9050600a83612313565b91506118f0565b60008167ffffffffffffffff8111156119315761193161246e565b6040519080825280601f01601f19166020018201604052801561195b576020820181803683370190505b5090505b841561166757611970600183612346565b915061197d600a86612402565b6119889060306122fb565b60f81b81838151811061199d5761199d612458565b60200101906001600160f81b031916908160001a9053506119bf600a86612313565b945061195f565b610c40828260405180602001604052806000815250611aed565b60006001600160a01b0384163b15611ae257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611a2490339089908890889060040161217a565b602060405180830381600087803b158015611a3e57600080fd5b505af1925050508015611a6e575060408051601f3d908101601f19168201909252611a6b91810190611fcf565b60015b611ac8573d808015611a9c576040519150601f19603f3d011682016040523d82523d6000602084013e611aa1565b606091505b508051611ac05760405162461bcd60e51b81526004016107f7906121f2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611667565b506001949350505050565b611af78383611b20565b611b0460008484846119e0565b6109ea5760405162461bcd60e51b81526004016107f7906121f2565b6001600160a01b038216611b765760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107f7565b6000818152600260205260409020546001600160a01b031615611bdb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107f7565b6001600160a01b0382166000908152600360205260408120805460019290611c049084906122fb565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611c6e906123ac565b90600052602060002090601f016020900481019282611c905760008555611cd6565b82601f10611ca957805160ff1916838001178555611cd6565b82800160010185558215611cd6579182015b82811115611cd6578251825591602001919060010190611cbb565b50611ce2929150611ce6565b5090565b5b80821115611ce25760008155600101611ce7565b600067ffffffffffffffff831115611d1557611d1561246e565b611d28601f8401601f19166020016122ca565b9050828152838383011115611d3c57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114611d6a57600080fd5b919050565b803560ff81168114611d6a57600080fd5b600060208284031215611d9257600080fd5b61124082611d53565b60008060408385031215611dae57600080fd5b611db783611d53565b9150611dc560208401611d53565b90509250929050565b600080600060608486031215611de357600080fd5b611dec84611d53565b9250611dfa60208501611d53565b9150604084013590509250925092565b60008060008060808587031215611e2057600080fd5b611e2985611d53565b9350611e3760208601611d53565b925060408501359150606085013567ffffffffffffffff811115611e5a57600080fd5b8501601f81018713611e6b57600080fd5b611e7a87823560208401611cfb565b91505092959194509250565b60008060408385031215611e9957600080fd5b611ea283611d53565b915060208301358015158114611eb757600080fd5b809150509250929050565b60008060408385031215611ed557600080fd5b611ede83611d53565b946020939093013593505050565b60008060408385031215611eff57600080fd5b823567ffffffffffffffff80821115611f1757600080fd5b818501915085601f830112611f2b57600080fd5b8135602082821115611f3f57611f3f61246e565b8160051b9250611f508184016122ca565b8281528181019085830185870184018b1015611f6b57600080fd5b600096505b84871015611f9557611f8181611d53565b835260019690960195918301918301611f70565b509650611fa59050878201611d6f565b9450505050509250929050565b600060208284031215611fc457600080fd5b813561124081612484565b600060208284031215611fe157600080fd5b815161124081612484565b600060208284031215611ffe57600080fd5b81356005811061124057600080fd5b60006020828403121561201f57600080fd5b813567ffffffffffffffff81111561203657600080fd5b8201601f8101841361204757600080fd5b61166784823560208401611cfb565b60006020828403121561206857600080fd5b5035919050565b60006020828403121561208157600080fd5b61124082611d6f565b600081518084526120a2816020860160208601612380565b601f01601f19169290920160200192915050565b6000845160206120c98285838a01612380565b8551918401916120dc8184848a01612380565b8554920191600090600181811c90808316806120f957607f831692505b85831081141561211757634e487b7160e01b85526022600452602485fd5b80801561212b576001811461213c57612169565b60ff19851688528388019550612169565b60008b81526020902060005b858110156121615781548a820152908401908801612148565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121ad9083018461208a565b9695505050505050565b60208101600583106121d957634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000611240602083018461208a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156122f3576122f361246e565b604052919050565b6000821982111561230e5761230e612416565b500190565b6000826123225761232261242c565b500490565b600081600019048311821515161561234157612341612416565b500290565b60008282101561235857612358612416565b500390565b600060ff821660ff84168082101561237757612377612416565b90039392505050565b60005b8381101561239b578181015183820152602001612383565b838111156110a65750506000910152565b600181811c908216806123c057607f821691505b602082108114156123e157634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156123fb576123fb612416565b5060010190565b6000826124115761241161242c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610bb657600080fdfea26469706673582212202a35c530eab8549bbd6b6fbb9717227c001a496a70cf40ae1ebb171f738eb53964736f6c634300080700334552433732313a207472616e7366657220746f206e6f6e2045524337323152654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000001343727970746f20436f756e74727920436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343434300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6147456a6a424d6a6d5377504c31596e4a714d4347756e47503871706f54787554586753575062564e4e53772f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d62774a323335456539665953796a4d7248524b71796339667138346879534e6963676d5450704451464b507a2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c80636c0360eb11610118578063c6682862116100a0578063d936547e1161006f578063d936547e146105b3578063da3ef23f146105f5578063e985e9c514610615578063f2c4ce1e1461065e578063f2fde38b1461067e57600080fd5b8063c668286214610548578063c87b56dd1461055d578063c87c089c1461057d578063d5abeb011461059d57600080fd5b80638da5cb5b116100e75780638da5cb5b146104ae57806395d89b41146104cc578063a22cb465146104e1578063b88d4fde14610501578063c19d93fb1461052157600080fd5b80636c0360eb146104515780636ecd23061461046657806370a0823114610479578063715018a61461049957600080fd5b806323b872dd1161019b57806342842e0e1161016a57806342842e0e146103b157806344a0d68a146103d157806355f804b3146103f157806356de96db146104115780636352211e1461043157600080fd5b806323b872dd146103495780632448a9fe1461036957806330cc7ae0146103895780633ccfd60b146103a957600080fd5b8063088a4ed0116101e2578063088a4ed0146102b8578063095ea7b3146102da57806313faede6146102fa57806318160ddd1461031e578063239c70ae1461033357600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063081c8c44146102a3575b600080fd5b34801561022057600080fd5b5061023461022f366004611fb2565b61069e565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106f0565b60405161024091906121df565b34801561027757600080fd5b5061028b610286366004612056565b610782565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b5061025e61081c565b3480156102c457600080fd5b506102d86102d3366004612056565b6108aa565b005b3480156102e657600080fd5b506102d86102f5366004611ec2565b6108d9565b34801561030657600080fd5b5061031060075481565b604051908152602001610240565b34801561032a57600080fd5b506103106109ef565b34801561033f57600080fd5b5061031060095481565b34801561035557600080fd5b506102d8610364366004611dce565b6109ff565b34801561037557600080fd5b506102d8610384366004611eec565b610a30565b34801561039557600080fd5b506102d86103a4366004611d80565b610ad0565b6102d8610b1b565b3480156103bd57600080fd5b506102d86103cc366004611dce565b610bb9565b3480156103dd57600080fd5b506102d86103ec366004612056565b610bd4565b3480156103fd57600080fd5b506102d861040c36600461200d565b610c03565b34801561041d57600080fd5b506102d861042c366004611fec565b610c44565b34801561043d57600080fd5b5061028b61044c366004612056565b610c95565b34801561045d57600080fd5b5061025e610d0c565b6102d861047436600461206f565b610d19565b34801561048557600080fd5b50610310610494366004611d80565b610ee3565b3480156104a557600080fd5b506102d8610f6a565b3480156104ba57600080fd5b506006546001600160a01b031661028b565b3480156104d857600080fd5b5061025e610fa0565b3480156104ed57600080fd5b506102d86104fc366004611e86565b610faf565b34801561050d57600080fd5b506102d861051c366004611e0a565b611074565b34801561052d57600080fd5b50600e5461053b9060ff1681565b60405161024091906121b7565b34801561055457600080fd5b5061025e6110ac565b34801561056957600080fd5b5061025e610578366004612056565b6110b9565b34801561058957600080fd5b506102d861059836600461206f565b611247565b3480156105a957600080fd5b5061031060085481565b3480156105bf57600080fd5b506105e36105ce366004611d80565b600f6020526000908152604090205460ff1681565b60405160ff9091168152602001610240565b34801561060157600080fd5b506102d861061036600461200d565b6113e5565b34801561062157600080fd5b50610234610630366004611d9b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561066a57600080fd5b506102d861067936600461200d565b611422565b34801561068a57600080fd5b506102d8610699366004611d80565b61145f565b60006001600160e01b031982166380ac58cd60e01b14806106cf57506001600160e01b03198216635b5e139f60e01b145b806106ea57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106ff906123ac565b80601f016020809104026020016040519081016040528092919081815260200182805461072b906123ac565b80156107785780601f1061074d57610100808354040283529160200191610778565b820191906000526020600020905b81548152906001019060200180831161075b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108005760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600d8054610829906123ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610855906123ac565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b505050505081565b6006546001600160a01b031633146108d45760405162461bcd60e51b81526004016107f790612244565b600955565b60006108e482610c95565b9050806001600160a01b0316836001600160a01b031614156109525760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107f7565b336001600160a01b038216148061096e575061096e8133610630565b6109e05760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107f7565b6109ea838361150a565b505050565b60006109fa600a5490565b905090565b610a093382611578565b610a255760405162461bcd60e51b81526004016107f790612279565b6109ea83838361166f565b6006546001600160a01b03163314610a5a5760405162461bcd60e51b81526004016107f790612244565b60005b82518110156109ea5781600f6000858481518110610a7d57610a7d612458565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080610ac8906123e7565b915050610a5d565b6006546001600160a01b03163314610afa5760405162461bcd60e51b81526004016107f790612244565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6006546001600160a01b03163314610b455760405162461bcd60e51b81526004016107f790612244565b6000610b596006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ba3576040519150601f19603f3d011682016040523d82523d6000602084013e610ba8565b606091505b5050905080610bb657600080fd5b50565b6109ea83838360405180602001604052806000815250611074565b6006546001600160a01b03163314610bfe5760405162461bcd60e51b81526004016107f790612244565b600755565b6006546001600160a01b03163314610c2d5760405162461bcd60e51b81526004016107f790612244565b8051610c4090600b906020840190611c62565b5050565b6006546001600160a01b03163314610c6e5760405162461bcd60e51b81526004016107f790612244565b600e805482919060ff19166001836004811115610c8d57610c8d612442565b021790555050565b6000818152600260205260408120546001600160a01b0316806106ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107f7565b600b8054610829906123ac565b6002600e5460ff166004811115610d3257610d32612442565b1480610d5457506004600e5460ff166004811115610d5257610d52612442565b145b610da05760405162461bcd60e51b815260206004820152601f60248201527f6d7573742062652050414944206f722052455645414c45442073746174652e0060448201526064016107f7565b6009548160ff161115610e015760405162461bcd60e51b8152602060048201526024808201527f63616e206e6f74206d696e74206d6f7265207468616e206d61784d696e74416d6044820152631bdd5b9d60e21b60648201526084016107f7565b6008548160ff16610e11600a5490565b610e1b91906122fb565b1115610e5d5760405162461bcd60e51b81526020600482015260116024820152701b585e14dd5c1c1b1e481c995858da1959607a1b60448201526064016107f7565b8060ff16600754610e6e9190612327565b3414610ebc5760405162461bcd60e51b815260206004820152601c60248201527f796f75206e65656420746f2073656e6420657861637420636f73742e0000000060448201526064016107f7565b60015b8160ff168111610c4057610ed161180f565b80610edb816123e7565b915050610ebf565b60006001600160a01b038216610f4e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107f7565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610f945760405162461bcd60e51b81526004016107f790612244565b610f9e6000611834565b565b6060600180546106ff906123ac565b6001600160a01b0382163314156110085760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107f7565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61107e3383611578565b61109a5760405162461bcd60e51b81526004016107f790612279565b6110a684848484611886565b50505050565b600c8054610829906123ac565b6000818152600260205260409020546060906001600160a01b03166111385760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107f7565b6004600e5460ff16600481111561115157611151612442565b146111e857600d8054611163906123ac565b80601f016020809104026020016040519081016040528092919081815260200182805461118f906123ac565b80156111dc5780601f106111b1576101008083540402835291602001916111dc565b820191906000526020600020905b8154815290600101906020018083116111bf57829003601f168201915b50505050509050919050565b60006111f26118b9565b905060008151116112125760405180602001604052806000815250611240565b8061121c846118c8565b600c604051602001611230939291906120b6565b6040516020818303038152906040525b9392505050565b6001600e5460ff16600481111561126057611260612442565b148061128257506004600e5460ff16600481111561128057611280612442565b145b6112ce5760405162461bcd60e51b815260206004820152601f60248201527f6d7573742062652046524545206f722052455645414c45442073746174652e0060448201526064016107f7565b336000908152600f602052604090205460ff90811690821611156113245760405162461bcd60e51b815260206004820152600d60248201526c27baba1037b31038bab7ba309760991b60448201526064016107f7565b6008548160ff16611334600a5490565b61133e91906122fb565b11156113805760405162461bcd60e51b81526020600482015260116024820152701b585e14dd5c1c1b1e481c995858da1959607a1b60448201526064016107f7565b336000908152600f6020526040812080548392906113a290849060ff1661235d565b92506101000a81548160ff021916908360ff1602179055506000600190505b8160ff168111610c40576113d361180f565b806113dd816123e7565b9150506113c1565b6006546001600160a01b0316331461140f5760405162461bcd60e51b81526004016107f790612244565b8051610c4090600c906020840190611c62565b6006546001600160a01b0316331461144c5760405162461bcd60e51b81526004016107f790612244565b8051610c4090600d906020840190611c62565b6006546001600160a01b031633146114895760405162461bcd60e51b81526004016107f790612244565b6001600160a01b0381166114ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f7565b610bb681611834565b80546001019055565b5490565b3b151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061153f82610c95565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166115f15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b60006115fc83610c95565b9050806001600160a01b0316846001600160a01b031614806116375750836001600160a01b031661162c84610782565b6001600160a01b0316145b8061166757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661168282610c95565b6001600160a01b0316146116ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107f7565b6001600160a01b03821661174c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b61175760008261150a565b6001600160a01b0383166000908152600360205260408120805460019290611780908490612346565b90915550506001600160a01b03821660009081526003602052604081208054600192906117ae9084906122fb565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61181d600a80546001019055565b6000611828600a5490565b9050610bb633826119c6565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61189184848461166f565b61189d848484846119e0565b6110a65760405162461bcd60e51b81526004016107f7906121f2565b6060600b80546106ff906123ac565b6060816118ec5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119165780611900816123e7565b915061190f9050600a83612313565b91506118f0565b60008167ffffffffffffffff8111156119315761193161246e565b6040519080825280601f01601f19166020018201604052801561195b576020820181803683370190505b5090505b841561166757611970600183612346565b915061197d600a86612402565b6119889060306122fb565b60f81b81838151811061199d5761199d612458565b60200101906001600160f81b031916908160001a9053506119bf600a86612313565b945061195f565b610c40828260405180602001604052806000815250611aed565b60006001600160a01b0384163b15611ae257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611a2490339089908890889060040161217a565b602060405180830381600087803b158015611a3e57600080fd5b505af1925050508015611a6e575060408051601f3d908101601f19168201909252611a6b91810190611fcf565b60015b611ac8573d808015611a9c576040519150601f19603f3d011682016040523d82523d6000602084013e611aa1565b606091505b508051611ac05760405162461bcd60e51b81526004016107f7906121f2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611667565b506001949350505050565b611af78383611b20565b611b0460008484846119e0565b6109ea5760405162461bcd60e51b81526004016107f7906121f2565b6001600160a01b038216611b765760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107f7565b6000818152600260205260409020546001600160a01b031615611bdb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107f7565b6001600160a01b0382166000908152600360205260408120805460019290611c049084906122fb565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611c6e906123ac565b90600052602060002090601f016020900481019282611c905760008555611cd6565b82601f10611ca957805160ff1916838001178555611cd6565b82800160010185558215611cd6579182015b82811115611cd6578251825591602001919060010190611cbb565b50611ce2929150611ce6565b5090565b5b80821115611ce25760008155600101611ce7565b600067ffffffffffffffff831115611d1557611d1561246e565b611d28601f8401601f19166020016122ca565b9050828152838383011115611d3c57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114611d6a57600080fd5b919050565b803560ff81168114611d6a57600080fd5b600060208284031215611d9257600080fd5b61124082611d53565b60008060408385031215611dae57600080fd5b611db783611d53565b9150611dc560208401611d53565b90509250929050565b600080600060608486031215611de357600080fd5b611dec84611d53565b9250611dfa60208501611d53565b9150604084013590509250925092565b60008060008060808587031215611e2057600080fd5b611e2985611d53565b9350611e3760208601611d53565b925060408501359150606085013567ffffffffffffffff811115611e5a57600080fd5b8501601f81018713611e6b57600080fd5b611e7a87823560208401611cfb565b91505092959194509250565b60008060408385031215611e9957600080fd5b611ea283611d53565b915060208301358015158114611eb757600080fd5b809150509250929050565b60008060408385031215611ed557600080fd5b611ede83611d53565b946020939093013593505050565b60008060408385031215611eff57600080fd5b823567ffffffffffffffff80821115611f1757600080fd5b818501915085601f830112611f2b57600080fd5b8135602082821115611f3f57611f3f61246e565b8160051b9250611f508184016122ca565b8281528181019085830185870184018b1015611f6b57600080fd5b600096505b84871015611f9557611f8181611d53565b835260019690960195918301918301611f70565b509650611fa59050878201611d6f565b9450505050509250929050565b600060208284031215611fc457600080fd5b813561124081612484565b600060208284031215611fe157600080fd5b815161124081612484565b600060208284031215611ffe57600080fd5b81356005811061124057600080fd5b60006020828403121561201f57600080fd5b813567ffffffffffffffff81111561203657600080fd5b8201601f8101841361204757600080fd5b61166784823560208401611cfb565b60006020828403121561206857600080fd5b5035919050565b60006020828403121561208157600080fd5b61124082611d6f565b600081518084526120a2816020860160208601612380565b601f01601f19169290920160200192915050565b6000845160206120c98285838a01612380565b8551918401916120dc8184848a01612380565b8554920191600090600181811c90808316806120f957607f831692505b85831081141561211757634e487b7160e01b85526022600452602485fd5b80801561212b576001811461213c57612169565b60ff19851688528388019550612169565b60008b81526020902060005b858110156121615781548a820152908401908801612148565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121ad9083018461208a565b9695505050505050565b60208101600583106121d957634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000611240602083018461208a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156122f3576122f361246e565b604052919050565b6000821982111561230e5761230e612416565b500190565b6000826123225761232261242c565b500490565b600081600019048311821515161561234157612341612416565b500290565b60008282101561235857612358612416565b500390565b600060ff821660ff84168082101561237757612377612416565b90039392505050565b60005b8381101561239b578181015183820152602001612383565b838111156110a65750506000910152565b600181811c908216806123c057607f821691505b602082108114156123e157634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156123fb576123fb612416565b5060010190565b6000826124115761241161242c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610bb657600080fdfea26469706673582212202a35c530eab8549bbd6b6fbb9717227c001a496a70cf40ae1ebb171f738eb53964736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000001343727970746f20436f756e74727920436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343434300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6147456a6a424d6a6d5377504c31596e4a714d4347756e47503871706f54787554586753575062564e4e53772f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d62774a323335456539665953796a4d7248524b71796339667138346879534e6963676d5450704451464b507a2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Crypto Country Club
Arg [1] : _symbol (string): CCC
Arg [2] : _initBaseURI (string): ipfs://QmaGEjjBMjmSwPL1YnJqMCGunGP8qpoTxuTXgSWPbVNNSw/
Arg [3] : _initNotRevealedUri (string): ipfs://QmbwJ235Ee9fYSyjMrHRKqyc9fq84hySNicgmTPpDQFKPz/hidden.json
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [5] : 43727970746f20436f756e74727920436c756200000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4343430000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d6147456a6a424d6a6d5377504c31596e4a714d4347756e
Arg [10] : 47503871706f54787554586753575062564e4e53772f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [12] : 697066733a2f2f516d62774a323335456539665953796a4d7248524b71796339
Arg [13] : 667138346879534e6963676d5450704451464b507a2f68696464656e2e6a736f
Arg [14] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
35445:4325:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19842:293;;;;;;;;;;-1:-1:-1;19842:293:0;;;;;:::i;:::-;;:::i;:::-;;;8347:14:1;;8340:22;8322:41;;8310:2;8295:18;19842:293:0;;;;;;;;20775:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22334:221::-;;;;;;;;;;-1:-1:-1;22334:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7645:32:1;;;7627:51;;7615:2;7600:18;22334:221:0;7481:203:1;35851:28:0;;;;;;;;;;;;;:::i;38336:122::-;;;;;;;;;;-1:-1:-1;38336:122:0;;;;;:::i;:::-;;:::i;:::-;;21857:411;;;;;;;;;;-1:-1:-1;21857:411:0;;;;;:::i;:::-;;:::i;35615:32::-;;;;;;;;;;;;;;;;;;;17639:25:1;;;17627:2;17612:18;35615:32:0;17493:177:1;39165:103:0;;;;;;;;;;;;;:::i;35693:33::-;;;;;;;;;;;;;;;;23224:339;;;;;;;;;;-1:-1:-1;23224:339:0;;;;;:::i;:::-;;:::i;38848:199::-;;;;;;;;;;-1:-1:-1;38848:199:0;;;;;:::i;:::-;;:::i;39055:102::-;;;;;;;;;;-1:-1:-1;39055:102:0;;;;;:::i;:::-;;:::i;39276:491::-;;;:::i;23634:185::-;;;;;;;;;;-1:-1:-1;23634:185:0;;;;;:::i;:::-;;:::i;38242:86::-;;;;;;;;;;-1:-1:-1;38242:86:0;;;;;:::i;:::-;;:::i;38600:104::-;;;;;;;;;;-1:-1:-1;38600:104:0;;;;;:::i;:::-;;:::i;38152:82::-;;;;;;;;;;-1:-1:-1;38152:82:0;;;;;:::i;:::-;;:::i;20469:239::-;;;;;;;;;;-1:-1:-1;20469:239:0;;;;;:::i;:::-;;:::i;35779:21::-;;;;;;;;;;;;;:::i;36908:511::-;;;;;;:::i;:::-;;:::i;20199:208::-;;;;;;;;;;-1:-1:-1;20199:208:0;;;;;:::i;:::-;;:::i;33514:94::-;;;;;;;;;;;;;:::i;32863:87::-;;;;;;;;;;-1:-1:-1;32936:6:0;;-1:-1:-1;;;;;32936:6:0;32863:87;;20944:104;;;;;;;;;;;;;:::i;22627:295::-;;;;;;;;;;-1:-1:-1;22627:295:0;;;;;:::i;:::-;;:::i;23890:328::-;;;;;;;;;;-1:-1:-1;23890:328:0;;;;;:::i;:::-;;:::i;35886:18::-;;;;;;;;;;-1:-1:-1;35886:18:0;;;;;;;;;;;;;;;:::i;35807:37::-;;;;;;;;;;;;;:::i;37600:544::-;;;;;;;;;;-1:-1:-1;37600:544:0;;;;;:::i;:::-;;:::i;36423:462::-;;;;;;;;;;-1:-1:-1;36423:462:0;;;;;:::i;:::-;;:::i;35654:32::-;;;;;;;;;;;;;;;;35911:44;;;;;;;;;;-1:-1:-1;35911:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17847:4:1;17835:17;;;17817:36;;17805:2;17790:18;35911:44:0;17675:184:1;38712:128:0;;;;;;;;;;-1:-1:-1;38712:128:0;;;;;:::i;:::-;;:::i;22993:164::-;;;;;;;;;;-1:-1:-1;22993:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23114:25:0;;;23090:4;23114:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22993:164;38466:126;;;;;;;;;;-1:-1:-1;38466:126:0;;;;;:::i;:::-;;:::i;33763:192::-;;;;;;;;;;-1:-1:-1;33763:192:0;;;;;:::i;:::-;;:::i;19842:293::-;19944:4;-1:-1:-1;;;;;;19977:40:0;;-1:-1:-1;;;19977:40:0;;:101;;-1:-1:-1;;;;;;;20030:48:0;;-1:-1:-1;;;20030:48:0;19977:101;:150;;;-1:-1:-1;;;;;;;;;;18560:40:0;;;20091:36;19961:166;19842:293;-1:-1:-1;;19842:293:0:o;20775:100::-;20829:13;20862:5;20855:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20775:100;:::o;22334:221::-;22410:7;25817:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25817:16:0;22430:73;;;;-1:-1:-1;;;22430:73:0;;14150:2:1;22430:73:0;;;14132:21:1;14189:2;14169:18;;;14162:30;14228:34;14208:18;;;14201:62;-1:-1:-1;;;14279:18:1;;;14272:42;14331:19;;22430:73:0;;;;;;;;;-1:-1:-1;22523:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22523:24:0;;22334:221::o;35851:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38336:122::-;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;38417:13:::1;:33:::0;38336:122::o;21857:411::-;21938:13;21954:23;21969:7;21954:14;:23::i;:::-;21938:39;;22002:5;-1:-1:-1;;;;;21996:11:0;:2;-1:-1:-1;;;;;21996:11:0;;;21988:57;;;;-1:-1:-1;;;21988:57:0;;15750:2:1;21988:57:0;;;15732:21:1;15789:2;15769:18;;;15762:30;15828:34;15808:18;;;15801:62;-1:-1:-1;;;15879:18:1;;;15872:31;15920:19;;21988:57:0;15548:397:1;21988:57:0;15634:10;-1:-1:-1;;;;;22080:21:0;;;;:62;;-1:-1:-1;22105:37:0;22122:5;15634:10;22993:164;:::i;22105:37::-;22058:168;;;;-1:-1:-1;;;22058:168:0;;12201:2:1;22058:168:0;;;12183:21:1;12240:2;12220:18;;;12213:30;12279:34;12259:18;;;12252:62;12350:26;12330:18;;;12323:54;12394:19;;22058:168:0;11999:420:1;22058:168:0;22239:21;22248:2;22252:7;22239:8;:21::i;:::-;21927:341;21857:411;;:::o;39165:103::-;39209:7;39236:24;:14;34966;;34874:114;39236:24;39229:31;;39165:103;:::o;23224:339::-;23419:41;15634:10;23452:7;23419:18;:41::i;:::-;23411:103;;;;-1:-1:-1;;;23411:103:0;;;;;;;:::i;:::-;23527:28;23537:4;23543:2;23547:7;23527:9;:28::i;38848:199::-;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;38947:6:::1;38942:98;38963:6;:13;38959:1;:17;38942:98;;;39023:5;38998:11;:22;39010:6;39017:1;39010:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;38998:22:0::1;-1:-1:-1::0;;;;;38998:22:0::1;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;38978:3;;;;;:::i;:::-;;;;38942:98;;39055:102:::0;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39127:18:0::1;39148:1;39127:18:::0;;;:11:::1;:18;::::0;;;;:22;;-1:-1:-1;;39127:22:0::1;::::0;;39055:102::o;39276:491::-;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;39579:7:::1;39599;32936:6:::0;;-1:-1:-1;;;;;32936:6:0;;32863:87;39599:7:::1;-1:-1:-1::0;;;;;39591:21:0::1;39621;39591:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39578:69;;;39666:2;39658:11;;;::::0;::::1;;39321:446;39276:491::o:0;23634:185::-;23772:39;23789:4;23795:2;23799:7;23772:39;;;;;;;;;;;;:16;:39::i;38242:86::-;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;38305:4:::1;:15:::0;38242:86::o;38600:104::-;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;38675:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;38600:104:::0;:::o;38152:82::-;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;38212:5:::1;:14:::0;;38220:6;;38212:5;-1:-1:-1;;38212:14:0::1;::::0;38220:6;38212:14:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;38152:82:::0;:::o;20469:239::-;20541:7;20577:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20577:16:0;20612:19;20604:73;;;;-1:-1:-1;;;20604:73:0;;13037:2:1;20604:73:0;;;13019:21:1;13076:2;13056:18;;;13049:30;13115:34;13095:18;;;13088:62;-1:-1:-1;;;13166:18:1;;;13159:39;13215:19;;20604:73:0;12835:405:1;35779:21:0;;;;;;;:::i;36908:511::-;36986:10;36977:5;;;;:19;;;;;;;;:::i;:::-;;:46;;;-1:-1:-1;37009:14:0;37000:5;;;;:23;;;;;;;;:::i;:::-;;36977:46;36969:90;;;;-1:-1:-1;;;36969:90:0;;16152:2:1;36969:90:0;;;16134:21:1;16191:2;16171:18;;;16164:30;16230:33;16210:18;;;16203:61;16281:18;;36969:90:0;15950:355:1;36969:90:0;37093:13;;37078:11;:28;;;;37070:77;;;;-1:-1:-1;;;37070:77:0;;16930:2:1;37070:77:0;;;16912:21:1;16969:2;16949:18;;;16942:30;17008:34;16988:18;;;16981:62;-1:-1:-1;;;17059:18:1;;;17052:34;17103:19;;37070:77:0;16728:400:1;37070:77:0;37208:9;;37193:11;37166:38;;:24;:14;34966;;34874:114;37166:24;:38;;;;:::i;:::-;:51;;37158:81;;;;-1:-1:-1;;;37158:81:0;;9143:2:1;37158:81:0;;;9125:21:1;9182:2;9162:18;;;9155:30;-1:-1:-1;;;9201:18:1;;;9194:47;9258:18;;37158:81:0;8941:341:1;37158:81:0;37278:11;37271:18;;:4;;:18;;;;:::i;:::-;37258:9;:31;37250:72;;;;-1:-1:-1;;;37250:72:0;;11431:2:1;37250:72:0;;;11413:21:1;11470:2;11450:18;;;11443:30;11509;11489:18;;;11482:58;11557:18;;37250:72:0;11229:352:1;37250:72:0;37352:1;37335:77;37360:11;37355:16;;:1;:16;37335:77;;37393:7;:5;:7::i;:::-;37373:3;;;;:::i;:::-;;;;37335:77;;20199:208;20271:7;-1:-1:-1;;;;;20299:19:0;;20291:74;;;;-1:-1:-1;;;20291:74:0;;12626:2:1;20291:74:0;;;12608:21:1;12665:2;12645:18;;;12638:30;12704:34;12684:18;;;12677:62;-1:-1:-1;;;12755:18:1;;;12748:40;12805:19;;20291:74:0;12424:406:1;20291:74:0;-1:-1:-1;;;;;;20383:16:0;;;;;:9;:16;;;;;;;20199:208::o;33514:94::-;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;33579:21:::1;33597:1;33579:9;:21::i;:::-;33514:94::o:0;20944:104::-;21000:13;21033:7;21026:14;;;;;:::i;22627:295::-;-1:-1:-1;;;;;22730:24:0;;15634:10;22730:24;;22722:62;;;;-1:-1:-1;;;22722:62:0;;11077:2:1;22722:62:0;;;11059:21:1;11116:2;11096:18;;;11089:30;11155:27;11135:18;;;11128:55;11200:18;;22722:62:0;10875:349:1;22722:62:0;15634:10;22797:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22797:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22797:53:0;;;;;;;;;;22866:48;;8322:41:1;;;22797:42:0;;15634:10;22866:48;;8295:18:1;22866:48:0;;;;;;;22627:295;;:::o;23890:328::-;24065:41;15634:10;24098:7;24065:18;:41::i;:::-;24057:103;;;;-1:-1:-1;;;24057:103:0;;;;;;;:::i;:::-;24171:39;24185:4;24191:2;24195:7;24204:5;24171:13;:39::i;:::-;23890:328;;;;:::o;35807:37::-;;;;;;;:::i;37600:544::-;25793:4;25817:16;;;:7;:16;;;;;;37698:13;;-1:-1:-1;;;;;25817:16:0;37729:113;;;;-1:-1:-1;;;37729:113:0;;15334:2:1;37729:113:0;;;15316:21:1;15373:2;15353:18;;;15346:30;15412:34;15392:18;;;15385:62;-1:-1:-1;;;15463:18:1;;;15456:45;15518:19;;37729:113:0;15132:411:1;37729:113:0;37868:14;37859:5;;;;:23;;;;;;;;:::i;:::-;;37855:77;;37906:14;37899:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37600:544;;;:::o;37855:77::-;37944:28;37975:10;:8;:10::i;:::-;37944:41;;38034:1;38009:14;38003:28;:32;:133;;;;;;;;;;;;;;;;;38071:14;38087:18;:7;:16;:18::i;:::-;38107:13;38054:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38003:133;37996:140;37600:544;-1:-1:-1;;;37600:544:0:o;36423:462::-;36497:10;36488:5;;;;:19;;;;;;;;:::i;:::-;;:46;;;-1:-1:-1;36520:14:0;36511:5;;;;:23;;;;;;;;:::i;:::-;;36488:46;36480:90;;;;-1:-1:-1;;;36480:90:0;;17335:2:1;36480:90:0;;;17317:21:1;17374:2;17354:18;;;17347:30;17413:33;17393:18;;;17386:61;17464:18;;36480:90:0;17133:355:1;36480:90:0;36616:10;36604:23;;;;:11;:23;;;;;;;;;;36589:38;;;;;36581:64;;;;-1:-1:-1;;;36581:64:0;;13447:2:1;36581:64:0;;;13429:21:1;13486:2;13466:18;;;13459:30;-1:-1:-1;;;13505:18:1;;;13498:43;13558:18;;36581:64:0;13245:337:1;36581:64:0;36706:9;;36691:11;36664:38;;:24;:14;34966;;34874:114;36664:24;:38;;;;:::i;:::-;:51;;36656:81;;;;-1:-1:-1;;;36656:81:0;;9143:2:1;36656:81:0;;;9125:21:1;9182:2;9162:18;;;9155:30;-1:-1:-1;;;9201:18:1;;;9194:47;9258:18;;36656:81:0;8941:341:1;36656:81:0;36762:10;36750:23;;;;:11;:23;;;;;:38;;36777:11;;36750:23;:38;;36777:11;;36750:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36806:9;36818:1;36806:13;;36801:77;36826:11;36821:16;;:1;:16;36801:77;;36859:7;:5;:7::i;:::-;36839:3;;;;:::i;:::-;;;;36801:77;;38712:128;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;38799:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;38466:126::-:0;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;38552:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;33763:192::-:0;32936:6;;-1:-1:-1;;;;;32936:6:0;15634:10;33083:23;33075:68;;;;-1:-1:-1;;;33075:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33852:22:0;::::1;33844:73;;;::::0;-1:-1:-1;;;33844:73:0;;9908:2:1;33844:73:0::1;::::0;::::1;9890:21:1::0;9947:2;9927:18;;;9920:30;9986:34;9966:18;;;9959:62;-1:-1:-1;;;10037:18:1;;;10030:36;10083:19;;33844:73:0::1;9706:402:1::0;33844:73:0::1;33928:19;33938:8;33928:9;:19::i;34996:115::-:0;35077:19;;35095:1;35077:19;;;34996:115::o;34874:114::-;34966:14;;34874:114::o;7682:387::-;8005:20;8053:8;;;7682:387::o;29710:174::-;29785:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;29785:29:0;-1:-1:-1;;;;;29785:29:0;;;;;;;;:24;;29839:23;29785:24;29839:14;:23::i;:::-;-1:-1:-1;;;;;29830:46:0;;;;;;;;;;;29710:174;;:::o;26022:348::-;26115:4;25817:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25817:16:0;26132:73;;;;-1:-1:-1;;;26132:73:0;;11788:2:1;26132:73:0;;;11770:21:1;11827:2;11807:18;;;11800:30;11866:34;11846:18;;;11839:62;-1:-1:-1;;;11917:18:1;;;11910:42;11969:19;;26132:73:0;11586:408:1;26132:73:0;26216:13;26232:23;26247:7;26232:14;:23::i;:::-;26216:39;;26285:5;-1:-1:-1;;;;;26274:16:0;:7;-1:-1:-1;;;;;26274:16:0;;:51;;;;26318:7;-1:-1:-1;;;;;26294:31:0;:20;26306:7;26294:11;:20::i;:::-;-1:-1:-1;;;;;26294:31:0;;26274:51;:87;;;-1:-1:-1;;;;;;23114:25:0;;;23090:4;23114:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26329:32;26266:96;26022:348;-1:-1:-1;;;;26022:348:0:o;29014:578::-;29173:4;-1:-1:-1;;;;;29146:31:0;:23;29161:7;29146:14;:23::i;:::-;-1:-1:-1;;;;;29146:31:0;;29138:85;;;;-1:-1:-1;;;29138:85:0;;14924:2:1;29138:85:0;;;14906:21:1;14963:2;14943:18;;;14936:30;15002:34;14982:18;;;14975:62;-1:-1:-1;;;15053:18:1;;;15046:39;15102:19;;29138:85:0;14722:405:1;29138:85:0;-1:-1:-1;;;;;29242:16:0;;29234:65;;;;-1:-1:-1;;;29234:65:0;;10672:2:1;29234:65:0;;;10654:21:1;10711:2;10691:18;;;10684:30;10750:34;10730:18;;;10723:62;-1:-1:-1;;;10801:18:1;;;10794:34;10845:19;;29234:65:0;10470:400:1;29234:65:0;29416:29;29433:1;29437:7;29416:8;:29::i;:::-;-1:-1:-1;;;;;29458:15:0;;;;;;:9;:15;;;;;:20;;29477:1;;29458:15;:20;;29477:1;;29458:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29489:13:0;;;;;;:9;:13;;;;;:18;;29506:1;;29489:13;:18;;29506:1;;29489:18;:::i;:::-;;;;-1:-1:-1;;29518:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29518:21:0;-1:-1:-1;;;;;29518:21:0;;;;;;;;;29557:27;;29518:16;;29557:27;;;;;;;29014:578;;;:::o;37427:165::-;37464:26;:14;35077:19;;35095:1;35077:19;;;34996:115;37464:26;37501:15;37519:24;:14;34966;;34874:114;37519:24;37501:42;;37554:30;37564:10;37576:7;37554:9;:30::i;33963:173::-;34038:6;;;-1:-1:-1;;;;;34055:17:0;;;-1:-1:-1;;;;;;34055:17:0;;;;;;;34088:40;;34038:6;;;34055:17;34038:6;;34088:40;;34019:16;;34088:40;34008:128;33963:173;:::o;25100:315::-;25257:28;25267:4;25273:2;25277:7;25257:9;:28::i;:::-;25304:48;25327:4;25333:2;25337:7;25346:5;25304:22;:48::i;:::-;25296:111;;;;-1:-1:-1;;;25296:111:0;;;;;;;:::i;36290:108::-;36350:13;36383:7;36376:14;;;;;:::i;15994:723::-;16050:13;16271:10;16267:53;;-1:-1:-1;;16298:10:0;;;;;;;;;;;;-1:-1:-1;;;16298:10:0;;;;;15994:723::o;16267:53::-;16345:5;16330:12;16386:78;16393:9;;16386:78;;16419:8;;;;:::i;:::-;;-1:-1:-1;16442:10:0;;-1:-1:-1;16450:2:0;16442:10;;:::i;:::-;;;16386:78;;;16474:19;16506:6;16496:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16496:17:0;;16474:39;;16524:154;16531:10;;16524:154;;16558:11;16568:1;16558:11;;:::i;:::-;;-1:-1:-1;16627:10:0;16635:2;16627:5;:10;:::i;:::-;16614:24;;:2;:24;:::i;:::-;16601:39;;16584:6;16591;16584:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;16584:56:0;;;;;;;;-1:-1:-1;16655:11:0;16664:2;16655:11;;:::i;:::-;;;16524:154;;26712:110;26788:26;26798:2;26802:7;26788:26;;;;;;;;;;;;:9;:26::i;30449:799::-;30604:4;-1:-1:-1;;;;;30625:13:0;;8005:20;8053:8;30621:620;;30661:72;;-1:-1:-1;;;30661:72:0;;-1:-1:-1;;;;;30661:36:0;;;;;:72;;15634:10;;30712:4;;30718:7;;30727:5;;30661:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30661:72:0;;;;;;;;-1:-1:-1;;30661:72:0;;;;;;;;;;;;:::i;:::-;;;30657:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30903:13:0;;30899:272;;30946:60;;-1:-1:-1;;;30946:60:0;;;;;;;:::i;30899:272::-;31121:6;31115:13;31106:6;31102:2;31098:15;31091:38;30657:529;-1:-1:-1;;;;;;30784:51:0;-1:-1:-1;;;30784:51:0;;-1:-1:-1;30777:58:0;;30621:620;-1:-1:-1;31225:4:0;30449:799;;;;;;:::o;27049:321::-;27179:18;27185:2;27189:7;27179:5;:18::i;:::-;27230:54;27261:1;27265:2;27269:7;27278:5;27230:22;:54::i;:::-;27208:154;;;;-1:-1:-1;;;27208:154:0;;;;;;;:::i;27706:382::-;-1:-1:-1;;;;;27786:16:0;;27778:61;;;;-1:-1:-1;;;27778:61:0;;13789:2:1;27778:61:0;;;13771:21:1;;;13808:18;;;13801:30;13867:34;13847:18;;;13840:62;13919:18;;27778:61:0;13587:356:1;27778:61:0;25793:4;25817:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25817:16:0;:30;27850:58;;;;-1:-1:-1;;;27850:58:0;;10315:2:1;27850:58:0;;;10297:21:1;10354:2;10334:18;;;10327:30;10393;10373:18;;;10366:58;10441:18;;27850:58:0;10113:352:1;27850:58:0;-1:-1:-1;;;;;27979:13:0;;;;;;:9;:13;;;;;:18;;27996:1;;27979:13;:18;;27996:1;;27979:18;:::i;:::-;;;;-1:-1:-1;;28008:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28008:21:0;-1:-1:-1;;;;;28008:21:0;;;;;;;;28047:33;;28008:16;;;28047:33;;28008:16;;28047:33;27706:382;;:::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:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:156::-;669:20;;729:4;718:16;;708:27;;698:55;;749:1;746;739:12;764:186;823:6;876:2;864:9;855:7;851:23;847:32;844:52;;;892:1;889;882:12;844:52;915:29;934:9;915:29;:::i;955:260::-;1023:6;1031;1084:2;1072:9;1063:7;1059:23;1055:32;1052:52;;;1100:1;1097;1090:12;1052:52;1123:29;1142:9;1123:29;:::i;:::-;1113:39;;1171:38;1205:2;1194:9;1190:18;1171:38;:::i;:::-;1161:48;;955:260;;;;;:::o;1220:328::-;1297:6;1305;1313;1366:2;1354:9;1345:7;1341:23;1337:32;1334:52;;;1382:1;1379;1372:12;1334:52;1405:29;1424:9;1405:29;:::i;:::-;1395:39;;1453:38;1487:2;1476:9;1472:18;1453:38;:::i;:::-;1443:48;;1538:2;1527:9;1523:18;1510:32;1500:42;;1220:328;;;;;:::o;1553:666::-;1648:6;1656;1664;1672;1725:3;1713:9;1704:7;1700:23;1696:33;1693:53;;;1742:1;1739;1732:12;1693:53;1765:29;1784:9;1765:29;:::i;:::-;1755:39;;1813:38;1847:2;1836:9;1832:18;1813:38;:::i;:::-;1803:48;;1898:2;1887:9;1883:18;1870:32;1860:42;;1953:2;1942:9;1938:18;1925:32;1980:18;1972:6;1969:30;1966:50;;;2012:1;2009;2002:12;1966:50;2035:22;;2088:4;2080:13;;2076:27;-1:-1:-1;2066:55:1;;2117:1;2114;2107:12;2066:55;2140:73;2205:7;2200:2;2187:16;2182:2;2178;2174:11;2140:73;:::i;:::-;2130:83;;;1553:666;;;;;;;:::o;2224:347::-;2289:6;2297;2350:2;2338:9;2329:7;2325:23;2321:32;2318:52;;;2366:1;2363;2356:12;2318:52;2389:29;2408:9;2389:29;:::i;:::-;2379:39;;2468:2;2457:9;2453:18;2440:32;2515:5;2508:13;2501:21;2494:5;2491:32;2481:60;;2537:1;2534;2527:12;2481:60;2560:5;2550:15;;;2224:347;;;;;:::o;2576:254::-;2644:6;2652;2705:2;2693:9;2684:7;2680:23;2676:32;2673:52;;;2721:1;2718;2711:12;2673:52;2744:29;2763:9;2744:29;:::i;:::-;2734:39;2820:2;2805:18;;;;2792:32;;-1:-1:-1;;;2576:254:1:o;2835:1035::-;2926:6;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3043:9;3030:23;3072:18;3113:2;3105:6;3102:14;3099:34;;;3129:1;3126;3119:12;3099:34;3167:6;3156:9;3152:22;3142:32;;3212:7;3205:4;3201:2;3197:13;3193:27;3183:55;;3234:1;3231;3224:12;3183:55;3270:2;3257:16;3292:4;3315:2;3311;3308:10;3305:36;;;3321:18;;:::i;:::-;3367:2;3364:1;3360:10;3350:20;;3390:28;3414:2;3410;3406:11;3390:28;:::i;:::-;3452:15;;;3483:12;;;;3515:11;;;3545;;;3541:20;;3538:33;-1:-1:-1;3535:53:1;;;3584:1;3581;3574:12;3535:53;3606:1;3597:10;;3616:169;3630:2;3627:1;3624:9;3616:169;;;3687:23;3706:3;3687:23;:::i;:::-;3675:36;;3648:1;3641:9;;;;;3731:12;;;;3763;;3616:169;;;-1:-1:-1;3804:5:1;-1:-1:-1;3828:36:1;;-1:-1:-1;3845:18:1;;;3828:36;:::i;:::-;3818:46;;;;;;2835:1035;;;;;:::o;3875:245::-;3933:6;3986:2;3974:9;3965:7;3961:23;3957:32;3954:52;;;4002:1;3999;3992:12;3954:52;4041:9;4028:23;4060:30;4084:5;4060:30;:::i;4125:249::-;4194:6;4247:2;4235:9;4226:7;4222:23;4218:32;4215:52;;;4263:1;4260;4253:12;4215:52;4295:9;4289:16;4314:30;4338:5;4314:30;:::i;4379:266::-;4448:6;4501:2;4489:9;4480:7;4476:23;4472:32;4469:52;;;4517:1;4514;4507:12;4469:52;4556:9;4543:23;4595:1;4588:5;4585:12;4575:40;;4611:1;4608;4601:12;4650:450;4719:6;4772:2;4760:9;4751:7;4747:23;4743:32;4740:52;;;4788:1;4785;4778:12;4740:52;4828:9;4815:23;4861:18;4853:6;4850:30;4847:50;;;4893:1;4890;4883:12;4847:50;4916:22;;4969:4;4961:13;;4957:27;-1:-1:-1;4947:55:1;;4998:1;4995;4988:12;4947:55;5021:73;5086:7;5081:2;5068:16;5063:2;5059;5055:11;5021:73;:::i;5105:180::-;5164:6;5217:2;5205:9;5196:7;5192:23;5188:32;5185:52;;;5233:1;5230;5223:12;5185:52;-1:-1:-1;5256:23:1;;5105:180;-1:-1:-1;5105:180:1:o;5290:182::-;5347:6;5400:2;5388:9;5379:7;5375:23;5371:32;5368:52;;;5416:1;5413;5406:12;5368:52;5439:27;5456:9;5439:27;:::i;5477:257::-;5518:3;5556:5;5550:12;5583:6;5578:3;5571:19;5599:63;5655:6;5648:4;5643:3;5639:14;5632:4;5625:5;5621:16;5599:63;:::i;:::-;5716:2;5695:15;-1:-1:-1;;5691:29:1;5682:39;;;;5723:4;5678:50;;5477:257;-1:-1:-1;;5477:257:1:o;5739:1527::-;5963:3;6001:6;5995:13;6027:4;6040:51;6084:6;6079:3;6074:2;6066:6;6062:15;6040:51;:::i;:::-;6154:13;;6113:16;;;;6176:55;6154:13;6113:16;6198:15;;;6176:55;:::i;:::-;6320:13;;6253:20;;;6293:1;;6380;6402:18;;;;6455;;;;6482:93;;6560:4;6550:8;6546:19;6534:31;;6482:93;6623:2;6613:8;6610:16;6590:18;6587:40;6584:167;;;-1:-1:-1;;;6650:33:1;;6706:4;6703:1;6696:15;6736:4;6657:3;6724:17;6584:167;6767:18;6794:110;;;;6918:1;6913:328;;;;6760:481;;6794:110;-1:-1:-1;;6829:24:1;;6815:39;;6874:20;;;;-1:-1:-1;6794:110:1;;6913:328;18217:1;18210:14;;;18254:4;18241:18;;7008:1;7022:169;7036:8;7033:1;7030:15;7022:169;;;7118:14;;7103:13;;;7096:37;7161:16;;;;7053:10;;7022:169;;;7026:3;;7222:8;7215:5;7211:20;7204:27;;6760:481;-1:-1:-1;7257:3:1;;5739:1527;-1:-1:-1;;;;;;;;;;;5739:1527:1:o;7689:488::-;-1:-1:-1;;;;;7958:15:1;;;7940:34;;8010:15;;8005:2;7990:18;;7983:43;8057:2;8042:18;;8035:34;;;8105:3;8100:2;8085:18;;8078:31;;;7883:4;;8126:45;;8151:19;;8143:6;8126:45;:::i;:::-;8118:53;7689:488;-1:-1:-1;;;;;;7689:488:1:o;8374:338::-;8516:2;8501:18;;8549:1;8538:13;;8528:144;;8594:10;8589:3;8585:20;8582:1;8575:31;8629:4;8626:1;8619:15;8657:4;8654:1;8647:15;8528:144;8681:25;;;8374:338;:::o;8717:219::-;8866:2;8855:9;8848:21;8829:4;8886:44;8926:2;8915:9;8911:18;8903:6;8886:44;:::i;9287:414::-;9489:2;9471:21;;;9528:2;9508:18;;;9501:30;9567:34;9562:2;9547:18;;9540:62;-1:-1:-1;;;9633:2:1;9618:18;;9611:48;9691:3;9676:19;;9287:414::o;14361:356::-;14563:2;14545:21;;;14582:18;;;14575:30;14641:34;14636:2;14621:18;;14614:62;14708:2;14693:18;;14361:356::o;16310:413::-;16512:2;16494:21;;;16551:2;16531:18;;;16524:30;16590:34;16585:2;16570:18;;16563:62;-1:-1:-1;;;16656:2:1;16641:18;;16634:47;16713:3;16698:19;;16310:413::o;17864:275::-;17935:2;17929:9;18000:2;17981:13;;-1:-1:-1;;17977:27:1;17965:40;;18035:18;18020:34;;18056:22;;;18017:62;18014:88;;;18082:18;;:::i;:::-;18118:2;18111:22;17864:275;;-1:-1:-1;17864:275:1:o;18270:128::-;18310:3;18341:1;18337:6;18334:1;18331:13;18328:39;;;18347:18;;:::i;:::-;-1:-1:-1;18383:9:1;;18270:128::o;18403:120::-;18443:1;18469;18459:35;;18474:18;;:::i;:::-;-1:-1:-1;18508:9:1;;18403:120::o;18528:168::-;18568:7;18634:1;18630;18626:6;18622:14;18619:1;18616:21;18611:1;18604:9;18597:17;18593:45;18590:71;;;18641:18;;:::i;:::-;-1:-1:-1;18681:9:1;;18528:168::o;18701:125::-;18741:4;18769:1;18766;18763:8;18760:34;;;18774:18;;:::i;:::-;-1:-1:-1;18811:9:1;;18701:125::o;18831:195::-;18869:4;18906;18903:1;18899:12;18938:4;18935:1;18931:12;18963:3;18958;18955:12;18952:38;;;18970:18;;:::i;:::-;19007:13;;;18831:195;-1:-1:-1;;;18831:195:1:o;19031:258::-;19103:1;19113:113;19127:6;19124:1;19121:13;19113:113;;;19203:11;;;19197:18;19184:11;;;19177:39;19149:2;19142:10;19113:113;;;19244:6;19241:1;19238:13;19235:48;;;-1:-1:-1;;19279:1:1;19261:16;;19254:27;19031:258::o;19294:380::-;19373:1;19369:12;;;;19416;;;19437:61;;19491:4;19483:6;19479:17;19469:27;;19437:61;19544:2;19536:6;19533:14;19513:18;19510:38;19507:161;;;19590:10;19585:3;19581:20;19578:1;19571:31;19625:4;19622:1;19615:15;19653:4;19650:1;19643:15;19507:161;;19294:380;;;:::o;19679:135::-;19718:3;-1:-1:-1;;19739:17:1;;19736:43;;;19759:18;;:::i;:::-;-1:-1:-1;19806:1:1;19795:13;;19679:135::o;19819:112::-;19851:1;19877;19867:35;;19882:18;;:::i;:::-;-1:-1:-1;19916:9:1;;19819:112::o;19936:127::-;19997:10;19992:3;19988:20;19985:1;19978:31;20028:4;20025:1;20018:15;20052:4;20049:1;20042:15;20068:127;20129:10;20124:3;20120:20;20117:1;20110:31;20160:4;20157:1;20150:15;20184:4;20181:1;20174:15;20200:127;20261:10;20256:3;20252:20;20249:1;20242:31;20292:4;20289:1;20282:15;20316:4;20313:1;20306:15;20332:127;20393:10;20388:3;20384:20;20381:1;20374:31;20424:4;20421:1;20414:15;20448:4;20445:1;20438:15;20464:127;20525:10;20520:3;20516:20;20513:1;20506:31;20556:4;20553:1;20546:15;20580:4;20577:1;20570:15;20596:131;-1:-1:-1;;;;;;20670:32:1;;20660:43;;20650:71;;20717:1;20714;20707:12
Swarm Source
ipfs://2a35c530eab8549bbd6b6fbb9717227c001a496a70cf40ae1ebb171f738eb539
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.