Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
751 TRIPZ
Holders
186
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 TRIPZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TripToadz
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-12 */ /* ████████╗██████╗░██╗██████╗░████████╗░█████╗░░█████╗░██████╗░███████╗ ╚══██╔══╝██╔══██╗██║██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗╚════██║ ░░░██║░░░██████╔╝██║██████╔╝░░░██║░░░██║░░██║███████║██║░░██║░░███╔═╝ ░░░██║░░░██╔══██╗██║██╔═══╝░░░░██║░░░██║░░██║██╔══██║██║░░██║██╔══╝░░ ░░░██║░░░██║░░██║██║██║░░░░░░░░██║░░░╚█████╔╝██║░░██║██████╔╝███████╗ ░░░╚═╝░░░╚═╝░░╚═╝╚═╝╚═╝░░░░░░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝╚═════╝░╚══════╝ */ // Sources flattened with hardhat v2.6.5 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // 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); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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 {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File contracts/TripToadzNFT.sol pragma solidity ^0.8.2; contract TripToadz is ERC721, ERC721Enumerable, Pausable, Ownable { /* ████████╗██████╗░██╗██████╗░████████╗░█████╗░░█████╗░██████╗░███████╗ ╚══██╔══╝██╔══██╗██║██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗╚════██║ ░░░██║░░░██████╔╝██║██████╔╝░░░██║░░░██║░░██║███████║██║░░██║░░███╔═╝ ░░░██║░░░██╔══██╗██║██╔═══╝░░░░██║░░░██║░░██║██╔══██║██║░░██║██╔══╝░░ ░░░██║░░░██║░░██║██║██║░░░░░░░░██║░░░╚█████╔╝██║░░██║██████╔╝███████╗ ░░░╚═╝░░░╚═╝░░╚═╝╚═╝╚═╝░░░░░░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝╚═════╝░╚══════╝ */ using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; string public baseURI; uint256 public cost = 0.05 ether; uint256 public maxSupply = 6969; uint256 public maxMintAmount = 10; constructor(string memory defaultBaseURI) ERC721("TripToadz", "TRIPZ") { setBaseURI(defaultBaseURI); } // Minting function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(_mintAmount > 0, "amount must be >0"); require(_mintAmount <= maxMintAmount, "amount must < max"); require(supply + _mintAmount <= maxSupply, "Mint sold out!"); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { _tokenIdCounter.increment(); _safeMint(_to, _tokenIdCounter.current()); } } function withdraw() public payable onlyOwner { require( payable(msg.sender).send(address(this).balance), "could not withdraw" ); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setBaseURI(string memory _newURI) public onlyOwner { baseURI = _newURI; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function safeMint(address _to, uint256 _tokenId) public onlyOwner { _safeMint(_to, _tokenId); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override(ERC721, ERC721Enumerable) whenNotPaused { super._beforeTokenTransfer(from, to, tokenId); } // The following functions are overrides required by Solidity. function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"defaultBaseURI","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":"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":"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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeMint","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":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405266b1a2bc2ec50000600d55611b39600e55600a600f553480156200002757600080fd5b5060405162002a0f38038062002a0f8339810160408190526200004a9162000256565b60408051808201825260098152682a3934b82a37b0b23d60b91b6020808301918252835180850190945260058452642a2924a82d60d91b9084015281519192916200009891600091620001b0565b508051620000ae906001906020840190620001b0565b5050600a805460ff1916905550620000c633620000d8565b620000d18162000132565b506200037f565b600a80546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03610100909104163314620001975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001ac90600c906020840190620001b0565b5050565b828054620001be906200032c565b90600052602060002090601f016020900481019282620001e257600085556200022d565b82601f10620001fd57805160ff19168380011785556200022d565b828001600101855582156200022d579182015b828111156200022d57825182559160200191906001019062000210565b506200023b9291506200023f565b5090565b5b808211156200023b576000815560010162000240565b6000602080838503121562000269578182fd5b82516001600160401b038082111562000280578384fd5b818501915085601f83011262000294578384fd5b815181811115620002a957620002a962000369565b604051601f8201601f19908116603f01168101908382118183101715620002d457620002d462000369565b816040528281528886848701011115620002ec578687fd5b8693505b828410156200030f5784840186015181850187015292850192620002f0565b828411156200032057868684830101525b98975050505050505050565b600181811c908216806200034157607f821691505b602082108114156200036357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612680806200038f6000396000f3fe6080604052600436106101cd5760003560e01c80635c975abb116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd146104d1578063d5abeb01146104f1578063e985e9c514610507578063f2fde38b1461055057600080fd5b806395d89b411461045c578063a144819414610471578063a22cb46514610491578063b88d4fde146104b157600080fd5b806370a08231116100d157806370a08231146103ef578063715018a61461040f5780638456cb59146104245780638da5cb5b1461043957600080fd5b80635c975abb146103a25780636352211e146103ba5780636c0360eb146103da57600080fd5b806323b872dd1161016f57806340c10f191161013e57806340c10f191461032f57806342842e0e146103425780634f6ccce71461036257806355f804b31461038257600080fd5b806323b872dd146102d25780632f745c59146102f25780633ccfd60b146103125780633f4ba83a1461031a57600080fd5b8063095ea7b3116101ab578063095ea7b31461026157806313faede61461028357806318160ddd146102a7578063239c70ae146102bc57600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610229575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046123ba565b610570565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061021c610581565b6040516101fe91906124e7565b34801561023557600080fd5b50610249610244366004612438565b610613565b6040516001600160a01b0390911681526020016101fe565b34801561026d57600080fd5b5061028161027c366004612391565b6106ad565b005b34801561028f57600080fd5b50610299600d5481565b6040519081526020016101fe565b3480156102b357600080fd5b50600854610299565b3480156102c857600080fd5b50610299600f5481565b3480156102de57600080fd5b506102816102ed3660046122a3565b6107df565b3480156102fe57600080fd5b5061029961030d366004612391565b610866565b61028161090e565b34801561032657600080fd5b506102816109d7565b61028161033d366004612391565b610a3f565b34801561034e57600080fd5b5061028161035d3660046122a3565b610c11565b34801561036e57600080fd5b5061029961037d366004612438565b610c2c565b34801561038e57600080fd5b5061028161039d3660046123f2565b610cde565b3480156103ae57600080fd5b50600a5460ff166101f2565b3480156103c657600080fd5b506102496103d5366004612438565b610d55565b3480156103e657600080fd5b5061021c610de0565b3480156103fb57600080fd5b5061029961040a366004612257565b610e6e565b34801561041b57600080fd5b50610281610f08565b34801561043057600080fd5b50610281610f72565b34801561044557600080fd5b50600a5461010090046001600160a01b0316610249565b34801561046857600080fd5b5061021c610fda565b34801561047d57600080fd5b5061028161048c366004612391565b610fe9565b34801561049d57600080fd5b506102816104ac366004612357565b611053565b3480156104bd57600080fd5b506102816104cc3660046122de565b611118565b3480156104dd57600080fd5b5061021c6104ec366004612438565b6111a0565b3480156104fd57600080fd5b50610299600e5481565b34801561051357600080fd5b506101f2610522366004612271565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561055c57600080fd5b5061028161056b366004612257565b611289565b600061057b82611371565b92915050565b60606000805461059090612588565b80601f01602080910402602001604051908101604052809291908181526020018280546105bc90612588565b80156106095780601f106105de57610100808354040283529160200191610609565b820191906000526020600020905b8154815290600101906020018083116105ec57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166106915760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006106b882610d55565b9050806001600160a01b0316836001600160a01b031614156107425760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610688565b336001600160a01b038216148061075e575061075e8133610522565b6107d05760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610688565b6107da83836113af565b505050565b6107e9338261142a565b61085b5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610688565b6107da838383611521565b600061087183610e6e565b82106108e55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610688565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b0361010090910416331461096e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b60405133904780156108fc02916000818181858888f193505050506109d55760405162461bcd60e51b815260206004820152601260248201527f636f756c64206e6f7420776974686472617700000000000000000000000000006044820152606401610688565b565b600a546001600160a01b03610100909104163314610a375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b6109d5611706565b6000610a4a60085490565b905060008211610a9c5760405162461bcd60e51b815260206004820152601160248201527f616d6f756e74206d757374206265203e300000000000000000000000000000006044820152606401610688565b600f54821115610aee5760405162461bcd60e51b815260206004820152601160248201527f616d6f756e74206d757374203c206d61780000000000000000000000000000006044820152606401610688565b600e54610afb83836124fa565b1115610b495760405162461bcd60e51b815260206004820152600e60248201527f4d696e7420736f6c64206f7574210000000000000000000000000000000000006044820152606401610688565b600a5461010090046001600160a01b03166001600160a01b0316336001600160a01b031614610bcf5781600d54610b809190612526565b341015610bcf5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610688565b60015b828111610c0b57610be7600b80546001019055565b610bf984610bf4600b5490565b6117a2565b80610c03816125c3565b915050610bd2565b50505050565b6107da83838360405180602001604052806000815250611118565b6000610c3760085490565b8210610cab5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610688565b60088281548110610ccc57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600a546001600160a01b03610100909104163314610d3e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b8051610d5190600c90602084019061212c565b5050565b6000818152600260205260408120546001600160a01b03168061057b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610688565b600c8054610ded90612588565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1990612588565b8015610e665780601f10610e3b57610100808354040283529160200191610e66565b820191906000526020600020905b815481529060010190602001808311610e4957829003601f168201915b505050505081565b60006001600160a01b038216610eec5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610688565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03610100909104163314610f685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b6109d560006117bc565b600a546001600160a01b03610100909104163314610fd25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b6109d561182d565b60606001805461059090612588565b600a546001600160a01b036101009091041633146110495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b610d5182826117a2565b6001600160a01b0382163314156110ac5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610688565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611122338361142a565b6111945760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610688565b610c0b848484846118b5565b6000818152600260205260409020546060906001600160a01b031661122d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610688565b6000611237611933565b905060008151116112575760405180602001604052806000815250611282565b8061126184611942565b60405160200161127292919061247c565b6040516020818303038152906040525b9392505050565b600a546001600160a01b036101009091041633146112e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b6001600160a01b0381166113655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610688565b61136e816117bc565b50565b60006001600160e01b031982167f780e9d6300000000000000000000000000000000000000000000000000000000148061057b575061057b82611a90565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906113f182610d55565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166114a35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610688565b60006114ae83610d55565b9050806001600160a01b0316846001600160a01b031614806114e95750836001600160a01b03166114de84610613565b6001600160a01b0316145b8061151957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661153482610d55565b6001600160a01b0316146115b05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610688565b6001600160a01b03821661162b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610688565b611636838383611b2b565b6116416000826113af565b6001600160a01b038316600090815260036020526040812080546001929061166a908490612545565b90915550506001600160a01b03821660009081526003602052604081208054600192906116989084906124fa565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a5460ff166117585760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610688565b600a805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610d51828260405180602001604052806000815250611b89565b600a80546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a5460ff16156118805760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610688565b600a805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117853390565b6118c0848484611521565b6118cc84848484611c07565b610c0b5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610688565b6060600c805461059090612588565b60608161198257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156119ac5780611996816125c3565b91506119a59050600a83612512565b9150611986565b60008167ffffffffffffffff8111156119d557634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119ff576020820181803683370190505b5090505b841561151957611a14600183612545565b9150611a21600a866125de565b611a2c9060306124fa565b60f81b818381518110611a4f57634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611a89600a86612512565b9450611a03565b60006001600160e01b031982167f80ac58cd000000000000000000000000000000000000000000000000000000001480611af357506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061057b57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161461057b565b600a5460ff1615611b7e5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610688565b6107da838383611d5f565b611b938383611e17565b611ba06000848484611c07565b6107da5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610688565b60006001600160a01b0384163b15611d5457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c4b9033908990889088906004016124ab565b602060405180830381600087803b158015611c6557600080fd5b505af1925050508015611c95575060408051601f3d908101601f19168201909252611c92918101906123d6565b60015b611d3a573d808015611cc3576040519150601f19603f3d011682016040523d82523d6000602084013e611cc8565b606091505b508051611d325760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610688565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611519565b506001949350505050565b6001600160a01b038316611dba57611db581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ddd565b816001600160a01b0316836001600160a01b031614611ddd57611ddd8382611f72565b6001600160a01b038216611df4576107da8161200f565b826001600160a01b0316826001600160a01b0316146107da576107da82826120e8565b6001600160a01b038216611e6d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610688565b6000818152600260205260409020546001600160a01b031615611ed25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610688565b611ede60008383611b2b565b6001600160a01b0382166000908152600360205260408120805460019290611f079084906124fa565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611f7f84610e6e565b611f899190612545565b600083815260076020526040902054909150808214611fdc576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061202190600190612545565b6000838152600960205260408120546008805493945090928490811061205757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061208657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806120cc57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006120f383610e6e565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461213890612588565b90600052602060002090601f01602090048101928261215a57600085556121a0565b82601f1061217357805160ff19168380011785556121a0565b828001600101855582156121a0579182015b828111156121a0578251825591602001919060010190612185565b506121ac9291506121b0565b5090565b5b808211156121ac57600081556001016121b1565b600067ffffffffffffffff808411156121e0576121e061261e565b604051601f8501601f19908116603f011681019082821181831017156122085761220861261e565b8160405280935085815286868601111561222157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461225257600080fd5b919050565b600060208284031215612268578081fd5b6112828261223b565b60008060408385031215612283578081fd5b61228c8361223b565b915061229a6020840161223b565b90509250929050565b6000806000606084860312156122b7578081fd5b6122c08461223b565b92506122ce6020850161223b565b9150604084013590509250925092565b600080600080608085870312156122f3578081fd5b6122fc8561223b565b935061230a6020860161223b565b925060408501359150606085013567ffffffffffffffff81111561232c578182fd5b8501601f8101871361233c578182fd5b61234b878235602084016121c5565b91505092959194509250565b60008060408385031215612369578182fd5b6123728361223b565b915060208301358015158114612386578182fd5b809150509250929050565b600080604083850312156123a3578182fd5b6123ac8361223b565b946020939093013593505050565b6000602082840312156123cb578081fd5b813561128281612634565b6000602082840312156123e7578081fd5b815161128281612634565b600060208284031215612403578081fd5b813567ffffffffffffffff811115612419578182fd5b8201601f81018413612429578182fd5b611519848235602084016121c5565b600060208284031215612449578081fd5b5035919050565b6000815180845261246881602086016020860161255c565b601f01601f19169290920160200192915050565b6000835161248e81846020880161255c565b8351908301906124a281836020880161255c565b01949350505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526124dd6080830184612450565b9695505050505050565b6020815260006112826020830184612450565b6000821982111561250d5761250d6125f2565b500190565b60008261252157612521612608565b500490565b6000816000190483118215151615612540576125406125f2565b500290565b600082821015612557576125576125f2565b500390565b60005b8381101561257757818101518382015260200161255f565b83811115610c0b5750506000910152565b600181811c9082168061259c57607f821691505b602082108114156125bd57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125d7576125d76125f2565b5060010190565b6000826125ed576125ed612608565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461136e57600080fdfea2646970667358221220df0e49a35080c268715c69345a52d50d2f59fe11f009cebf9f931ef6d3328d1564736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656967746a33786963796a703432756a6d646b346e7171376b376661616136696a686c746f79366c61747467716b336b7663697234342f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c80635c975abb116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd146104d1578063d5abeb01146104f1578063e985e9c514610507578063f2fde38b1461055057600080fd5b806395d89b411461045c578063a144819414610471578063a22cb46514610491578063b88d4fde146104b157600080fd5b806370a08231116100d157806370a08231146103ef578063715018a61461040f5780638456cb59146104245780638da5cb5b1461043957600080fd5b80635c975abb146103a25780636352211e146103ba5780636c0360eb146103da57600080fd5b806323b872dd1161016f57806340c10f191161013e57806340c10f191461032f57806342842e0e146103425780634f6ccce71461036257806355f804b31461038257600080fd5b806323b872dd146102d25780632f745c59146102f25780633ccfd60b146103125780633f4ba83a1461031a57600080fd5b8063095ea7b3116101ab578063095ea7b31461026157806313faede61461028357806318160ddd146102a7578063239c70ae146102bc57600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610229575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046123ba565b610570565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061021c610581565b6040516101fe91906124e7565b34801561023557600080fd5b50610249610244366004612438565b610613565b6040516001600160a01b0390911681526020016101fe565b34801561026d57600080fd5b5061028161027c366004612391565b6106ad565b005b34801561028f57600080fd5b50610299600d5481565b6040519081526020016101fe565b3480156102b357600080fd5b50600854610299565b3480156102c857600080fd5b50610299600f5481565b3480156102de57600080fd5b506102816102ed3660046122a3565b6107df565b3480156102fe57600080fd5b5061029961030d366004612391565b610866565b61028161090e565b34801561032657600080fd5b506102816109d7565b61028161033d366004612391565b610a3f565b34801561034e57600080fd5b5061028161035d3660046122a3565b610c11565b34801561036e57600080fd5b5061029961037d366004612438565b610c2c565b34801561038e57600080fd5b5061028161039d3660046123f2565b610cde565b3480156103ae57600080fd5b50600a5460ff166101f2565b3480156103c657600080fd5b506102496103d5366004612438565b610d55565b3480156103e657600080fd5b5061021c610de0565b3480156103fb57600080fd5b5061029961040a366004612257565b610e6e565b34801561041b57600080fd5b50610281610f08565b34801561043057600080fd5b50610281610f72565b34801561044557600080fd5b50600a5461010090046001600160a01b0316610249565b34801561046857600080fd5b5061021c610fda565b34801561047d57600080fd5b5061028161048c366004612391565b610fe9565b34801561049d57600080fd5b506102816104ac366004612357565b611053565b3480156104bd57600080fd5b506102816104cc3660046122de565b611118565b3480156104dd57600080fd5b5061021c6104ec366004612438565b6111a0565b3480156104fd57600080fd5b50610299600e5481565b34801561051357600080fd5b506101f2610522366004612271565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561055c57600080fd5b5061028161056b366004612257565b611289565b600061057b82611371565b92915050565b60606000805461059090612588565b80601f01602080910402602001604051908101604052809291908181526020018280546105bc90612588565b80156106095780601f106105de57610100808354040283529160200191610609565b820191906000526020600020905b8154815290600101906020018083116105ec57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166106915760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006106b882610d55565b9050806001600160a01b0316836001600160a01b031614156107425760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610688565b336001600160a01b038216148061075e575061075e8133610522565b6107d05760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610688565b6107da83836113af565b505050565b6107e9338261142a565b61085b5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610688565b6107da838383611521565b600061087183610e6e565b82106108e55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610688565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b0361010090910416331461096e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b60405133904780156108fc02916000818181858888f193505050506109d55760405162461bcd60e51b815260206004820152601260248201527f636f756c64206e6f7420776974686472617700000000000000000000000000006044820152606401610688565b565b600a546001600160a01b03610100909104163314610a375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b6109d5611706565b6000610a4a60085490565b905060008211610a9c5760405162461bcd60e51b815260206004820152601160248201527f616d6f756e74206d757374206265203e300000000000000000000000000000006044820152606401610688565b600f54821115610aee5760405162461bcd60e51b815260206004820152601160248201527f616d6f756e74206d757374203c206d61780000000000000000000000000000006044820152606401610688565b600e54610afb83836124fa565b1115610b495760405162461bcd60e51b815260206004820152600e60248201527f4d696e7420736f6c64206f7574210000000000000000000000000000000000006044820152606401610688565b600a5461010090046001600160a01b03166001600160a01b0316336001600160a01b031614610bcf5781600d54610b809190612526565b341015610bcf5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610688565b60015b828111610c0b57610be7600b80546001019055565b610bf984610bf4600b5490565b6117a2565b80610c03816125c3565b915050610bd2565b50505050565b6107da83838360405180602001604052806000815250611118565b6000610c3760085490565b8210610cab5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610688565b60088281548110610ccc57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600a546001600160a01b03610100909104163314610d3e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b8051610d5190600c90602084019061212c565b5050565b6000818152600260205260408120546001600160a01b03168061057b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610688565b600c8054610ded90612588565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1990612588565b8015610e665780601f10610e3b57610100808354040283529160200191610e66565b820191906000526020600020905b815481529060010190602001808311610e4957829003601f168201915b505050505081565b60006001600160a01b038216610eec5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610688565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03610100909104163314610f685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b6109d560006117bc565b600a546001600160a01b03610100909104163314610fd25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b6109d561182d565b60606001805461059090612588565b600a546001600160a01b036101009091041633146110495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b610d5182826117a2565b6001600160a01b0382163314156110ac5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610688565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611122338361142a565b6111945760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610688565b610c0b848484846118b5565b6000818152600260205260409020546060906001600160a01b031661122d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610688565b6000611237611933565b905060008151116112575760405180602001604052806000815250611282565b8061126184611942565b60405160200161127292919061247c565b6040516020818303038152906040525b9392505050565b600a546001600160a01b036101009091041633146112e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610688565b6001600160a01b0381166113655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610688565b61136e816117bc565b50565b60006001600160e01b031982167f780e9d6300000000000000000000000000000000000000000000000000000000148061057b575061057b82611a90565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906113f182610d55565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166114a35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610688565b60006114ae83610d55565b9050806001600160a01b0316846001600160a01b031614806114e95750836001600160a01b03166114de84610613565b6001600160a01b0316145b8061151957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661153482610d55565b6001600160a01b0316146115b05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610688565b6001600160a01b03821661162b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610688565b611636838383611b2b565b6116416000826113af565b6001600160a01b038316600090815260036020526040812080546001929061166a908490612545565b90915550506001600160a01b03821660009081526003602052604081208054600192906116989084906124fa565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a5460ff166117585760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610688565b600a805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610d51828260405180602001604052806000815250611b89565b600a80546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a5460ff16156118805760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610688565b600a805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117853390565b6118c0848484611521565b6118cc84848484611c07565b610c0b5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610688565b6060600c805461059090612588565b60608161198257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156119ac5780611996816125c3565b91506119a59050600a83612512565b9150611986565b60008167ffffffffffffffff8111156119d557634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119ff576020820181803683370190505b5090505b841561151957611a14600183612545565b9150611a21600a866125de565b611a2c9060306124fa565b60f81b818381518110611a4f57634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611a89600a86612512565b9450611a03565b60006001600160e01b031982167f80ac58cd000000000000000000000000000000000000000000000000000000001480611af357506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061057b57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161461057b565b600a5460ff1615611b7e5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610688565b6107da838383611d5f565b611b938383611e17565b611ba06000848484611c07565b6107da5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610688565b60006001600160a01b0384163b15611d5457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c4b9033908990889088906004016124ab565b602060405180830381600087803b158015611c6557600080fd5b505af1925050508015611c95575060408051601f3d908101601f19168201909252611c92918101906123d6565b60015b611d3a573d808015611cc3576040519150601f19603f3d011682016040523d82523d6000602084013e611cc8565b606091505b508051611d325760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610688565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611519565b506001949350505050565b6001600160a01b038316611dba57611db581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ddd565b816001600160a01b0316836001600160a01b031614611ddd57611ddd8382611f72565b6001600160a01b038216611df4576107da8161200f565b826001600160a01b0316826001600160a01b0316146107da576107da82826120e8565b6001600160a01b038216611e6d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610688565b6000818152600260205260409020546001600160a01b031615611ed25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610688565b611ede60008383611b2b565b6001600160a01b0382166000908152600360205260408120805460019290611f079084906124fa565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611f7f84610e6e565b611f899190612545565b600083815260076020526040902054909150808214611fdc576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061202190600190612545565b6000838152600960205260408120546008805493945090928490811061205757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061208657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806120cc57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006120f383610e6e565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461213890612588565b90600052602060002090601f01602090048101928261215a57600085556121a0565b82601f1061217357805160ff19168380011785556121a0565b828001600101855582156121a0579182015b828111156121a0578251825591602001919060010190612185565b506121ac9291506121b0565b5090565b5b808211156121ac57600081556001016121b1565b600067ffffffffffffffff808411156121e0576121e061261e565b604051601f8501601f19908116603f011681019082821181831017156122085761220861261e565b8160405280935085815286868601111561222157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461225257600080fd5b919050565b600060208284031215612268578081fd5b6112828261223b565b60008060408385031215612283578081fd5b61228c8361223b565b915061229a6020840161223b565b90509250929050565b6000806000606084860312156122b7578081fd5b6122c08461223b565b92506122ce6020850161223b565b9150604084013590509250925092565b600080600080608085870312156122f3578081fd5b6122fc8561223b565b935061230a6020860161223b565b925060408501359150606085013567ffffffffffffffff81111561232c578182fd5b8501601f8101871361233c578182fd5b61234b878235602084016121c5565b91505092959194509250565b60008060408385031215612369578182fd5b6123728361223b565b915060208301358015158114612386578182fd5b809150509250929050565b600080604083850312156123a3578182fd5b6123ac8361223b565b946020939093013593505050565b6000602082840312156123cb578081fd5b813561128281612634565b6000602082840312156123e7578081fd5b815161128281612634565b600060208284031215612403578081fd5b813567ffffffffffffffff811115612419578182fd5b8201601f81018413612429578182fd5b611519848235602084016121c5565b600060208284031215612449578081fd5b5035919050565b6000815180845261246881602086016020860161255c565b601f01601f19169290920160200192915050565b6000835161248e81846020880161255c565b8351908301906124a281836020880161255c565b01949350505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526124dd6080830184612450565b9695505050505050565b6020815260006112826020830184612450565b6000821982111561250d5761250d6125f2565b500190565b60008261252157612521612608565b500490565b6000816000190483118215151615612540576125406125f2565b500290565b600082821015612557576125576125f2565b500390565b60005b8381101561257757818101518382015260200161255f565b83811115610c0b5750506000910152565b600181811c9082168061259c57607f821691505b602082108114156125bd57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125d7576125d76125f2565b5060010190565b6000826125ed576125ed612608565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461136e57600080fdfea2646970667358221220df0e49a35080c268715c69345a52d50d2f59fe11f009cebf9f931ef6d3328d1564736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656967746a33786963796a703432756a6d646b346e7171376b376661616136696a686c746f79366c61747467716b336b7663697234342f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : defaultBaseURI (string): ipfs://bafybeigtj3xicyjp42ujmdk4nqq7k7faaa6ijhltoy6lattgqk3kvcir44/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [2] : 697066733a2f2f6261667962656967746a33786963796a703432756a6d646b34
Arg [3] : 6e7171376b376661616136696a686c746f79366c61747467716b336b76636972
Arg [4] : 34342f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
49000:3586:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52371:212;;;;;;;;;;-1:-1:-1;52371:212:0;;;;;:::i;:::-;;:::i;:::-;;;5865:14:1;;5858:22;5840:41;;5828:2;5813:18;52371:212:0;;;;;;;;22993:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24552:221::-;;;;;;;;;;-1:-1:-1;24552:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5117:55:1;;;5099:74;;5087:2;5072:18;24552:221:0;5054:125:1;24075:411:0;;;;;;;;;;-1:-1:-1;24075:411:0;;;;;:::i;:::-;;:::i;:::-;;50513:32;;;;;;;;;;;;;;;;;;;15892:25:1;;;15880:2;15865:18;50513:32:0;15847:76:1;36740:113:0;;;;;;;;;;-1:-1:-1;36828:10:0;:17;36740:113;;50590:33;;;;;;;;;;;;;;;;25442:339;;;;;;;;;;-1:-1:-1;25442:339:0;;;;;:::i;:::-;;:::i;36408:256::-;;;;;;;;;;-1:-1:-1;36408:256:0;;;;;:::i;:::-;;:::i;51381:179::-;;;:::i;51874:65::-;;;;;;;;;;;;;:::i;50772:601::-;;;;;;:::i;:::-;;:::i;25852:185::-;;;;;;;;;;-1:-1:-1;25852:185:0;;;;;:::i;:::-;;:::i;36930:233::-;;;;;;;;;;-1:-1:-1;36930:233:0;;;;;:::i;:::-;;:::i;51701:96::-;;;;;;;;;;-1:-1:-1;51701:96:0;;;;;:::i;:::-;;:::i;43326:86::-;;;;;;;;;;-1:-1:-1;43397:7:0;;;;43326:86;;22687:239;;;;;;;;;;-1:-1:-1;22687:239:0;;;;;:::i;:::-;;:::i;50485:21::-;;;;;;;;;;;;;:::i;22417:208::-;;;;;;;;;;-1:-1:-1;22417:208:0;;;;;:::i;:::-;;:::i;46165:94::-;;;;;;;;;;;;;:::i;51805:61::-;;;;;;;;;;;;;:::i;45514:87::-;;;;;;;;;;-1:-1:-1;45587:6:0;;;;;-1:-1:-1;;;;;45587:6:0;45514:87;;23162:104;;;;;;;;;;;;;:::i;51947:109::-;;;;;;;;;;-1:-1:-1;51947:109:0;;;;;:::i;:::-;;:::i;24845:295::-;;;;;;;;;;-1:-1:-1;24845:295:0;;;;;:::i;:::-;;:::i;26108:328::-;;;;;;;;;;-1:-1:-1;26108:328:0;;;;;:::i;:::-;;:::i;23337:334::-;;;;;;;;;;-1:-1:-1;23337:334:0;;;;;:::i;:::-;;:::i;50552:31::-;;;;;;;;;;;;;;;;25211:164;;;;;;;;;;-1:-1:-1;25211:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;25332:25:0;;;25308:4;25332:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25211:164;46414:192;;;;;;;;;;-1:-1:-1;46414:192:0;;;;;:::i;:::-;;:::i;52371:212::-;52510:4;52539:36;52563:11;52539:23;:36::i;:::-;52532:43;52371:212;-1:-1:-1;;52371:212:0:o;22993:100::-;23047:13;23080:5;23073:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22993:100;:::o;24552:221::-;24628:7;28035:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28035:16:0;24648:73;;;;-1:-1:-1;;;24648:73:0;;12422:2:1;24648:73:0;;;12404:21:1;12461:2;12441:18;;;12434:30;12500:34;12480:18;;;12473:62;-1:-1:-1;;;12551:18:1;;;12544:42;12603:19;;24648:73:0;;;;;;;;;-1:-1:-1;24741:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24741:24:0;;24552:221::o;24075:411::-;24156:13;24172:23;24187:7;24172:14;:23::i;:::-;24156:39;;24220:5;-1:-1:-1;;;;;24214:11:0;:2;-1:-1:-1;;;;;24214:11:0;;;24206:57;;;;-1:-1:-1;;;24206:57:0;;14368:2:1;24206:57:0;;;14350:21:1;14407:2;14387:18;;;14380:30;14446:34;14426:18;;;14419:62;14517:3;14497:18;;;14490:31;14538:19;;24206:57:0;14340:223:1;24206:57:0;17536:10;-1:-1:-1;;;;;24298:21:0;;;;:62;;-1:-1:-1;24323:37:0;24340:5;17536:10;25211:164;:::i;24323:37::-;24276:168;;;;-1:-1:-1;;;24276:168:0;;10472:2:1;24276:168:0;;;10454:21:1;10511:2;10491:18;;;10484:30;10550:34;10530:18;;;10523:62;10621:26;10601:18;;;10594:54;10665:19;;24276:168:0;10444:246:1;24276:168:0;24457:21;24466:2;24470:7;24457:8;:21::i;:::-;24075:411;;;:::o;25442:339::-;25637:41;17536:10;25670:7;25637:18;:41::i;:::-;25629:103;;;;-1:-1:-1;;;25629:103:0;;15117:2:1;25629:103:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:34;15175:18;;;15168:62;15266:19;15246:18;;;15239:47;15303:19;;25629:103:0;15089:239:1;25629:103:0;25745:28;25755:4;25761:2;25765:7;25745:9;:28::i;36408:256::-;36505:7;36541:23;36558:5;36541:16;:23::i;:::-;36533:5;:31;36525:87;;;;-1:-1:-1;;;36525:87:0;;7014:2:1;36525:87:0;;;6996:21:1;7053:2;7033:18;;;7026:30;7092:34;7072:18;;;7065:62;7163:13;7143:18;;;7136:41;7194:19;;36525:87:0;6986:233:1;36525:87:0;-1:-1:-1;;;;;;36630:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;36408:256::o;51381:179::-;45587:6;;-1:-1:-1;;;;;45587:6:0;;;;;17536:10;45734:23;45726:68;;;;-1:-1:-1;;;45726:68:0;;13181:2:1;45726:68:0;;;13163:21:1;;;13200:18;;;13193:30;13259:34;13239:18;;;13232:62;13311:18;;45726:68:0;13153:182:1;45726:68:0;51459:47:::1;::::0;51467:10:::1;::::0;51484:21:::1;51459:47:::0;::::1;;;::::0;::::1;::::0;;;51484:21;51467:10;51459:47;::::1;;;;;;51437:115;;;::::0;-1:-1:-1;;;51437:115:0;;6318:2:1;51437:115:0::1;::::0;::::1;6300:21:1::0;6357:2;6337:18;;;6330:30;6396:20;6376:18;;;6369:48;6434:18;;51437:115:0::1;6290:168:1::0;51437:115:0::1;51381:179::o:0;51874:65::-;45587:6;;-1:-1:-1;;;;;45587:6:0;;;;;17536:10;45734:23;45726:68;;;;-1:-1:-1;;;45726:68:0;;13181:2:1;45726:68:0;;;13163:21:1;;;13200:18;;;13193:30;13259:34;13239:18;;;13232:62;13311:18;;45726:68:0;13153:182:1;45726:68:0;51921:10:::1;:8;:10::i;50772:601::-:0;50846:14;50863:13;36828:10;:17;;36740:113;50863:13;50846:30;;50909:1;50895:11;:15;50887:45;;;;-1:-1:-1;;;50887:45:0;;9781:2:1;50887:45:0;;;9763:21:1;9820:2;9800:18;;;9793:30;9859:19;9839:18;;;9832:47;9896:18;;50887:45:0;9753:167:1;50887:45:0;50966:13;;50951:11;:28;;50943:58;;;;-1:-1:-1;;;50943:58:0;;12835:2:1;50943:58:0;;;12817:21:1;12874:2;12854:18;;;12847:30;12913:19;12893:18;;;12886:47;12950:18;;50943:58:0;12807:167:1;50943:58:0;51044:9;;51020:20;51029:11;51020:6;:20;:::i;:::-;:33;;51012:60;;;;-1:-1:-1;;;51012:60:0;;12079:2:1;51012:60:0;;;12061:21:1;12118:2;12098:18;;;12091:30;12157:16;12137:18;;;12130:44;12191:18;;51012:60:0;12051:164:1;51012:60:0;45587:6;;;;;-1:-1:-1;;;;;45587:6:0;-1:-1:-1;;;;;51089:21:0;:10;-1:-1:-1;;;;;51089:21:0;;51085:116;;51155:11;51148:4;;:18;;;;:::i;:::-;51135:9;:31;;51127:62;;;;-1:-1:-1;;;51127:62:0;;14770:2:1;51127:62:0;;;14752:21:1;14809:2;14789:18;;;14782:30;14848:20;14828:18;;;14821:48;14886:18;;51127:62:0;14742:168:1;51127:62:0;51230:1;51213:153;51238:11;51233:1;:16;51213:153;;51271:27;:15;48541:19;;48559:1;48541:19;;;48452:127;51271:27;51313:41;51323:3;51328:25;:15;48422:14;;48330:114;51328:25;51313:9;:41::i;:::-;51251:3;;;;:::i;:::-;;;;51213:153;;;;50772:601;;;:::o;25852:185::-;25990:39;26007:4;26013:2;26017:7;25990:39;;;;;;;;;;;;:16;:39::i;36930:233::-;37005:7;37041:30;36828:10;:17;;36740:113;37041:30;37033:5;:38;37025:95;;;;-1:-1:-1;;;37025:95:0;;15535:2:1;37025:95:0;;;15517:21:1;15574:2;15554:18;;;15547:30;15613:34;15593:18;;;15586:62;15684:14;15664:18;;;15657:42;15716:19;;37025:95:0;15507:234:1;37025:95:0;37138:10;37149:5;37138:17;;;;;;-1:-1:-1;;;37138:17:0;;;;;;;;;;;;;;;;;37131:24;;36930:233;;;:::o;51701:96::-;45587:6;;-1:-1:-1;;;;;45587:6:0;;;;;17536:10;45734:23;45726:68;;;;-1:-1:-1;;;45726:68:0;;13181:2:1;45726:68:0;;;13163:21:1;;;13200:18;;;13193:30;13259:34;13239:18;;;13232:62;13311:18;;45726:68:0;13153:182:1;45726:68:0;51772:17;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;;51701:96:::0;:::o;22687:239::-;22759:7;22795:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22795:16:0;22830:19;22822:73;;;;-1:-1:-1;;;22822:73:0;;11308:2:1;22822:73:0;;;11290:21:1;11347:2;11327:18;;;11320:30;11386:34;11366:18;;;11359:62;11457:11;11437:18;;;11430:39;11486:19;;22822:73:0;11280:231:1;50485:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22417:208::-;22489:7;-1:-1:-1;;;;;22517:19:0;;22509:74;;;;-1:-1:-1;;;22509:74:0;;10897:2:1;22509:74:0;;;10879:21:1;10936:2;10916:18;;;10909:30;10975:34;10955:18;;;10948:62;11046:12;11026:18;;;11019:40;11076:19;;22509:74:0;10869:232:1;22509:74:0;-1:-1:-1;;;;;;22601:16:0;;;;;:9;:16;;;;;;;22417:208::o;46165:94::-;45587:6;;-1:-1:-1;;;;;45587:6:0;;;;;17536:10;45734:23;45726:68;;;;-1:-1:-1;;;45726:68:0;;13181:2:1;45726:68:0;;;13163:21:1;;;13200:18;;;13193:30;13259:34;13239:18;;;13232:62;13311:18;;45726:68:0;13153:182:1;45726:68:0;46230:21:::1;46248:1;46230:9;:21::i;51805:61::-:0;45587:6;;-1:-1:-1;;;;;45587:6:0;;;;;17536:10;45734:23;45726:68;;;;-1:-1:-1;;;45726:68:0;;13181:2:1;45726:68:0;;;13163:21:1;;;13200:18;;;13193:30;13259:34;13239:18;;;13232:62;13311:18;;45726:68:0;13153:182:1;45726:68:0;51850:8:::1;:6;:8::i;23162:104::-:0;23218:13;23251:7;23244:14;;;;;:::i;51947:109::-;45587:6;;-1:-1:-1;;;;;45587:6:0;;;;;17536:10;45734:23;45726:68;;;;-1:-1:-1;;;45726:68:0;;13181:2:1;45726:68:0;;;13163:21:1;;;13200:18;;;13193:30;13259:34;13239:18;;;13232:62;13311:18;;45726:68:0;13153:182:1;45726:68:0;52024:24:::1;52034:3;52039:8;52024:9;:24::i;24845:295::-:0;-1:-1:-1;;;;;24948:24:0;;17536:10;24948:24;;24940:62;;;;-1:-1:-1;;;24940:62:0;;9014:2:1;24940:62:0;;;8996:21:1;9053:2;9033:18;;;9026:30;9092:27;9072:18;;;9065:55;9137:18;;24940:62:0;8986:175:1;24940:62:0;17536:10;25015:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25015:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25015:53:0;;;;;;;;;;25084:48;;5840:41:1;;;25015:42:0;;17536:10;25084:48;;5813:18:1;25084:48:0;;;;;;;24845:295;;:::o;26108:328::-;26283:41;17536:10;26316:7;26283:18;:41::i;:::-;26275:103;;;;-1:-1:-1;;;26275:103:0;;15117:2:1;26275:103:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:34;15175:18;;;15168:62;15266:19;15246:18;;;15239:47;15303:19;;26275:103:0;15089:239:1;26275:103:0;26389:39;26403:4;26409:2;26413:7;26422:5;26389:13;:39::i;23337:334::-;28011:4;28035:16;;;:7;:16;;;;;;23410:13;;-1:-1:-1;;;;;28035:16:0;23436:76;;;;-1:-1:-1;;;23436:76:0;;13952:2:1;23436:76:0;;;13934:21:1;13991:2;13971:18;;;13964:30;14030:34;14010:18;;;14003:62;14101:17;14081:18;;;14074:45;14136:19;;23436:76:0;13924:237:1;23436:76:0;23525:21;23549:10;:8;:10::i;:::-;23525:34;;23601:1;23583:7;23577:21;:25;:86;;;;;;;;;;;;;;;;;23629:7;23638:18;:7;:16;:18::i;:::-;23612:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23577:86;23570:93;23337:334;-1:-1:-1;;;23337:334:0:o;46414:192::-;45587:6;;-1:-1:-1;;;;;45587:6:0;;;;;17536:10;45734:23;45726:68;;;;-1:-1:-1;;;45726:68:0;;13181:2:1;45726:68:0;;;13163:21:1;;;13200:18;;;13193:30;13259:34;13239:18;;;13232:62;13311:18;;45726:68:0;13153:182:1;45726:68:0;-1:-1:-1;;;;;46503:22:0;::::1;46495:73;;;::::0;-1:-1:-1;;;46495:73:0;;7845:2:1;46495:73:0::1;::::0;::::1;7827:21:1::0;7884:2;7864:18;;;7857:30;7923:34;7903:18;;;7896:62;7994:8;7974:18;;;7967:36;8020:19;;46495:73:0::1;7817:228:1::0;46495:73:0::1;46579:19;46589:8;46579:9;:19::i;:::-;46414:192:::0;:::o;36100:224::-;36202:4;-1:-1:-1;;;;;;36226:50:0;;36241:35;36226:50;;:90;;;36280:36;36304:11;36280:23;:36::i;31928:174::-;32003:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;32003:29:0;-1:-1:-1;;;;;32003:29:0;;;;;;;;:24;;32057:23;32003:24;32057:14;:23::i;:::-;-1:-1:-1;;;;;32048:46:0;;;;;;;;;;;31928:174;;:::o;28240:348::-;28333:4;28035:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28035:16:0;28350:73;;;;-1:-1:-1;;;28350:73:0;;9368:2:1;28350:73:0;;;9350:21:1;9407:2;9387:18;;;9380:30;9446:34;9426:18;;;9419:62;-1:-1:-1;;;9497:18:1;;;9490:42;9549:19;;28350:73:0;9340:234:1;28350:73:0;28434:13;28450:23;28465:7;28450:14;:23::i;:::-;28434:39;;28503:5;-1:-1:-1;;;;;28492:16:0;:7;-1:-1:-1;;;;;28492:16:0;;:51;;;;28536:7;-1:-1:-1;;;;;28512:31:0;:20;28524:7;28512:11;:20::i;:::-;-1:-1:-1;;;;;28512:31:0;;28492:51;:87;;;-1:-1:-1;;;;;;25332:25:0;;;25308:4;25332:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28547:32;28484:96;28240:348;-1:-1:-1;;;;28240:348:0:o;31232:578::-;31391:4;-1:-1:-1;;;;;31364:31:0;:23;31379:7;31364:14;:23::i;:::-;-1:-1:-1;;;;;31364:31:0;;31356:85;;;;-1:-1:-1;;;31356:85:0;;13542:2:1;31356:85:0;;;13524:21:1;13581:2;13561:18;;;13554:30;13620:34;13600:18;;;13593:62;13691:11;13671:18;;;13664:39;13720:19;;31356:85:0;13514:231:1;31356:85:0;-1:-1:-1;;;;;31460:16:0;;31452:65;;;;-1:-1:-1;;;31452:65:0;;8609:2:1;31452:65:0;;;8591:21:1;8648:2;8628:18;;;8621:30;8687:34;8667:18;;;8660:62;8758:6;8738:18;;;8731:34;8782:19;;31452:65:0;8581:226:1;31452:65:0;31530:39;31551:4;31557:2;31561:7;31530:20;:39::i;:::-;31634:29;31651:1;31655:7;31634:8;:29::i;:::-;-1:-1:-1;;;;;31676:15:0;;;;;;:9;:15;;;;;:20;;31695:1;;31676:15;:20;;31695:1;;31676:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31707:13:0;;;;;;:9;:13;;;;;:18;;31724:1;;31707:13;:18;;31724:1;;31707:18;:::i;:::-;;;;-1:-1:-1;;31736:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;31736:21:0;-1:-1:-1;;;;;31736:21:0;;;;;;;;;31775:27;;31736:16;;31775:27;;;;;;;31232:578;;;:::o;44385:120::-;43397:7;;;;43921:41;;;;-1:-1:-1;;;43921:41:0;;6665:2:1;43921:41:0;;;6647:21:1;6704:2;6684:18;;;6677:30;6743:22;6723:18;;;6716:50;6783:18;;43921:41:0;6637:170:1;43921:41:0;44444:7:::1;:15:::0;;-1:-1:-1;;44444:15:0::1;::::0;;44475:22:::1;17536:10:::0;44484:12:::1;44475:22;::::0;-1:-1:-1;;;;;5117:55:1;;;5099:74;;5087:2;5072:18;44475:22:0::1;;;;;;;44385:120::o:0;28930:110::-;29006:26;29016:2;29020:7;29006:26;;;;;;;;;;;;:9;:26::i;46614:173::-;46689:6;;;-1:-1:-1;;;;;46706:17:0;;;46689:6;46706:17;;;;;;;;;;46739:40;;46689:6;;;;;;;;46739:40;;46670:16;;46739:40;46614:173;;:::o;44126:118::-;43397:7;;;;43651:9;43643:38;;;;-1:-1:-1;;;43643:38:0;;10127:2:1;43643:38:0;;;10109:21:1;10166:2;10146:18;;;10139:30;10205:18;10185;;;10178:46;10241:18;;43643:38:0;10099:166:1;43643:38:0;44186:7:::1;:14:::0;;-1:-1:-1;;44186:14:0::1;44196:4;44186:14;::::0;;44216:20:::1;44223:12;17536:10:::0;;17456:98;27318:315;27475:28;27485:4;27491:2;27495:7;27475:9;:28::i;:::-;27522:48;27545:4;27551:2;27555:7;27564:5;27522:22;:48::i;:::-;27514:111;;;;-1:-1:-1;;;27514:111:0;;7426:2:1;27514:111:0;;;7408:21:1;7465:2;7445:18;;;7438:30;7504:34;7484:18;;;7477:62;-1:-1:-1;;;7555:18:1;;;7548:48;7613:19;;27514:111:0;7398:240:1;51585:108:0;51645:13;51678:7;51671:14;;;;;:::i;17987:723::-;18043:13;18264:10;18260:53;;-1:-1:-1;;18291:10:0;;;;;;;;;;;;;;;;;;17987:723::o;18260:53::-;18338:5;18323:12;18379:78;18386:9;;18379:78;;18412:8;;;;:::i;:::-;;-1:-1:-1;18435:10:0;;-1:-1:-1;18443:2:0;18435:10;;:::i;:::-;;;18379:78;;;18467:19;18499:6;18489:17;;;;;;-1:-1:-1;;;18489:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18489:17:0;;18467:39;;18517:154;18524:10;;18517:154;;18551:11;18561:1;18551:11;;:::i;:::-;;-1:-1:-1;18620:10:0;18628:2;18620:5;:10;:::i;:::-;18607:24;;:2;:24;:::i;:::-;18594:39;;18577:6;18584;18577:14;;;;;;-1:-1:-1;;;18577:14:0;;;;;;;;;;;;:56;;;;;;;;;;-1:-1:-1;18648:11:0;18657:2;18648:11;;:::i;:::-;;;18517:154;;22048:305;22150:4;-1:-1:-1;;;;;;22187:40:0;;22202:25;22187:40;;:105;;-1:-1:-1;;;;;;;22244:48:0;;22259:33;22244:48;22187:105;:158;;;-1:-1:-1;20672:25:0;-1:-1:-1;;;;;;20657:40:0;;;22309:36;20548:157;52064:229;43397:7;;;;43651:9;43643:38;;;;-1:-1:-1;;;43643:38:0;;10127:2:1;43643:38:0;;;10109:21:1;10166:2;10146:18;;;10139:30;10205:18;10185;;;10178:46;10241:18;;43643:38:0;10099:166:1;43643:38:0;52240:45:::1;52267:4;52273:2;52277:7;52240:26;:45::i;29267:321::-:0;29397:18;29403:2;29407:7;29397:5;:18::i;:::-;29448:54;29479:1;29483:2;29487:7;29496:5;29448:22;:54::i;:::-;29426:154;;;;-1:-1:-1;;;29426:154:0;;7426:2:1;29426:154:0;;;7408:21:1;7465:2;7445:18;;;7438:30;7504:34;7484:18;;;7477:62;-1:-1:-1;;;7555:18:1;;;7548:48;7613:19;;29426:154:0;7398:240:1;32667:799:0;32822:4;-1:-1:-1;;;;;32843:13:0;;9817:20;9865:8;32839:620;;32879:72;;-1:-1:-1;;;32879:72:0;;-1:-1:-1;;;;;32879:36:0;;;;;:72;;17536:10;;32930:4;;32936:7;;32945:5;;32879:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32879:72:0;;;;;;;;-1:-1:-1;;32879:72:0;;;;;;;;;;;;:::i;:::-;;;32875:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33121:13:0;;33117:272;;33164:60;;-1:-1:-1;;;33164:60:0;;7426:2:1;33164:60:0;;;7408:21:1;7465:2;7445:18;;;7438:30;7504:34;7484:18;;;7477:62;-1:-1:-1;;;7555:18:1;;;7548:48;7613:19;;33164:60:0;7398:240:1;33117:272:0;33339:6;33333:13;33324:6;33320:2;33316:15;33309:38;32875:529;-1:-1:-1;;;;;;33002:51:0;-1:-1:-1;;;33002:51:0;;-1:-1:-1;32995:58:0;;32839:620;-1:-1:-1;33443:4:0;32667:799;;;;;;:::o;37776:589::-;-1:-1:-1;;;;;37982:18:0;;37978:187;;38017:40;38049:7;39192:10;:17;;39165:24;;;;:15;:24;;;;;:44;;;39220:24;;;;;;;;;;;;39088:164;38017:40;37978:187;;;38087:2;-1:-1:-1;;;;;38079:10:0;:4;-1:-1:-1;;;;;38079:10:0;;38075:90;;38106:47;38139:4;38145:7;38106:32;:47::i;:::-;-1:-1:-1;;;;;38179:16:0;;38175:183;;38212:45;38249:7;38212:36;:45::i;38175:183::-;38285:4;-1:-1:-1;;;;;38279:10:0;:2;-1:-1:-1;;;;;38279:10:0;;38275:83;;38306:40;38334:2;38338:7;38306:27;:40::i;29924:382::-;-1:-1:-1;;;;;30004:16:0;;29996:61;;;;-1:-1:-1;;;29996:61:0;;11718:2:1;29996:61:0;;;11700:21:1;;;11737:18;;;11730:30;11796:34;11776:18;;;11769:62;11848:18;;29996:61:0;11690:182:1;29996:61:0;28011:4;28035:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28035:16:0;:30;30068:58;;;;-1:-1:-1;;;30068:58:0;;8252:2:1;30068:58:0;;;8234:21:1;8291:2;8271:18;;;8264:30;8330;8310:18;;;8303:58;8378:18;;30068:58:0;8224:178:1;30068:58:0;30139:45;30168:1;30172:2;30176:7;30139:20;:45::i;:::-;-1:-1:-1;;;;;30197:13:0;;;;;;:9;:13;;;;;:18;;30214:1;;30197:13;:18;;30214:1;;30197:18;:::i;:::-;;;;-1:-1:-1;;30226:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;30226:21:0;-1:-1:-1;;;;;30226:21:0;;;;;;;;30265:33;;30226:16;;;30265:33;;30226:16;;30265:33;29924:382;;:::o;39879:988::-;40145:22;40195:1;40170:22;40187:4;40170:16;:22::i;:::-;:26;;;;:::i;:::-;40207:18;40228:26;;;:17;:26;;;;;;40145:51;;-1:-1:-1;40361:28:0;;;40357:328;;-1:-1:-1;;;;;40428:18:0;;40406:19;40428:18;;;:12;:18;;;;;;;;:34;;;;;;;;;40479:30;;;;;;:44;;;40596:30;;:17;:30;;;;;:43;;;40357:328;-1:-1:-1;40781:26:0;;;;:17;:26;;;;;;;;40774:33;;;-1:-1:-1;;;;;40825:18:0;;;;;:12;:18;;;;;:34;;;;;;;40818:41;39879:988::o;41162:1079::-;41440:10;:17;41415:22;;41440:21;;41460:1;;41440:21;:::i;:::-;41472:18;41493:24;;;:15;:24;;;;;;41866:10;:26;;41415:46;;-1:-1:-1;41493:24:0;;41415:46;;41866:26;;;;-1:-1:-1;;;41866:26:0;;;;;;;;;;;;;;;;;41844:48;;41930:11;41905:10;41916;41905:22;;;;;;-1:-1:-1;;;41905:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;42010:28;;;:15;:28;;;;;;;:41;;;42182:24;;;;;42175:31;42217:10;:16;;;;;-1:-1:-1;;;42217:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;41162:1079;;;;:::o;38666:221::-;38751:14;38768:20;38785:2;38768:16;:20::i;:::-;-1:-1:-1;;;;;38799:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;38844:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;38666:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:196::-;718:20;;-1:-1:-1;;;;;767:54:1;;757:65;;747:2;;836:1;833;826:12;747:2;699:147;;;:::o;851:196::-;910:6;963:2;951:9;942:7;938:23;934:32;931:2;;;984:6;976;969:22;931:2;1012:29;1031:9;1012:29;:::i;1052:270::-;1120:6;1128;1181:2;1169:9;1160:7;1156:23;1152:32;1149:2;;;1202:6;1194;1187:22;1149:2;1230:29;1249:9;1230:29;:::i;:::-;1220:39;;1278:38;1312:2;1301:9;1297:18;1278:38;:::i;:::-;1268:48;;1139:183;;;;;:::o;1327:338::-;1404:6;1412;1420;1473:2;1461:9;1452:7;1448:23;1444:32;1441:2;;;1494:6;1486;1479:22;1441:2;1522:29;1541:9;1522:29;:::i;:::-;1512:39;;1570:38;1604:2;1593:9;1589:18;1570:38;:::i;:::-;1560:48;;1655:2;1644:9;1640:18;1627:32;1617:42;;1431:234;;;;;:::o;1670:696::-;1765:6;1773;1781;1789;1842:3;1830:9;1821:7;1817:23;1813:33;1810:2;;;1864:6;1856;1849:22;1810:2;1892:29;1911:9;1892:29;:::i;:::-;1882:39;;1940:38;1974:2;1963:9;1959:18;1940:38;:::i;:::-;1930:48;;2025:2;2014:9;2010:18;1997:32;1987:42;;2080:2;2069:9;2065:18;2052:32;2107:18;2099:6;2096:30;2093:2;;;2144:6;2136;2129:22;2093:2;2172:22;;2225:4;2217:13;;2213:27;-1:-1:-1;2203:2:1;;2259:6;2251;2244:22;2203:2;2287:73;2352:7;2347:2;2334:16;2329:2;2325;2321:11;2287:73;:::i;:::-;2277:83;;;1800:566;;;;;;;:::o;2371:367::-;2436:6;2444;2497:2;2485:9;2476:7;2472:23;2468:32;2465:2;;;2518:6;2510;2503:22;2465:2;2546:29;2565:9;2546:29;:::i;:::-;2536:39;;2625:2;2614:9;2610:18;2597:32;2672:5;2665:13;2658:21;2651:5;2648:32;2638:2;;2699:6;2691;2684:22;2638:2;2727:5;2717:15;;;2455:283;;;;;:::o;2743:264::-;2811:6;2819;2872:2;2860:9;2851:7;2847:23;2843:32;2840:2;;;2893:6;2885;2878:22;2840:2;2921:29;2940:9;2921:29;:::i;:::-;2911:39;2997:2;2982:18;;;;2969:32;;-1:-1:-1;;;2830:177:1:o;3012:255::-;3070:6;3123:2;3111:9;3102:7;3098:23;3094:32;3091:2;;;3144:6;3136;3129:22;3091:2;3188:9;3175:23;3207:30;3231:5;3207:30;:::i;3272:259::-;3341:6;3394:2;3382:9;3373:7;3369:23;3365:32;3362:2;;;3415:6;3407;3400:22;3362:2;3452:9;3446:16;3471:30;3495:5;3471:30;:::i;3536:480::-;3605:6;3658:2;3646:9;3637:7;3633:23;3629:32;3626:2;;;3679:6;3671;3664:22;3626:2;3724:9;3711:23;3757:18;3749:6;3746:30;3743:2;;;3794:6;3786;3779:22;3743:2;3822:22;;3875:4;3867:13;;3863:27;-1:-1:-1;3853:2:1;;3909:6;3901;3894:22;3853:2;3937:73;4002:7;3997:2;3984:16;3979:2;3975;3971:11;3937:73;:::i;4021:190::-;4080:6;4133:2;4121:9;4112:7;4108:23;4104:32;4101:2;;;4154:6;4146;4139:22;4101:2;-1:-1:-1;4182:23:1;;4091:120;-1:-1:-1;4091:120:1:o;4216:257::-;4257:3;4295:5;4289:12;4322:6;4317:3;4310:19;4338:63;4394:6;4387:4;4382:3;4378:14;4371:4;4364:5;4360:16;4338:63;:::i;:::-;4455:2;4434:15;-1:-1:-1;;4430:29:1;4421:39;;;;4462:4;4417:50;;4265:208;-1:-1:-1;;4265:208:1:o;4478:470::-;4657:3;4695:6;4689:13;4711:53;4757:6;4752:3;4745:4;4737:6;4733:17;4711:53;:::i;:::-;4827:13;;4786:16;;;;4849:57;4827:13;4786:16;4883:4;4871:17;;4849:57;:::i;:::-;4922:20;;4665:283;-1:-1:-1;;;;4665:283:1:o;5184:511::-;5378:4;-1:-1:-1;;;;;5488:2:1;5480:6;5476:15;5465:9;5458:34;5540:2;5532:6;5528:15;5523:2;5512:9;5508:18;5501:43;;5580:6;5575:2;5564:9;5560:18;5553:34;5623:3;5618:2;5607:9;5603:18;5596:31;5644:45;5684:3;5673:9;5669:19;5661:6;5644:45;:::i;:::-;5636:53;5387:308;-1:-1:-1;;;;;;5387:308:1:o;5892:219::-;6041:2;6030:9;6023:21;6004:4;6061:44;6101:2;6090:9;6086:18;6078:6;6061:44;:::i;15928:128::-;15968:3;15999:1;15995:6;15992:1;15989:13;15986:2;;;16005:18;;:::i;:::-;-1:-1:-1;16041:9:1;;15976:80::o;16061:120::-;16101:1;16127;16117:2;;16132:18;;:::i;:::-;-1:-1:-1;16166:9:1;;16107:74::o;16186:168::-;16226:7;16292:1;16288;16284:6;16280:14;16277:1;16274:21;16269:1;16262:9;16255:17;16251:45;16248:2;;;16299:18;;:::i;:::-;-1:-1:-1;16339:9:1;;16238:116::o;16359:125::-;16399:4;16427:1;16424;16421:8;16418:2;;;16432:18;;:::i;:::-;-1:-1:-1;16469:9:1;;16408:76::o;16489:258::-;16561:1;16571:113;16585:6;16582:1;16579:13;16571:113;;;16661:11;;;16655:18;16642:11;;;16635:39;16607:2;16600:10;16571:113;;;16702:6;16699:1;16696:13;16693:2;;;-1:-1:-1;;16737:1:1;16719:16;;16712:27;16542:205::o;16752:437::-;16831:1;16827:12;;;;16874;;;16895:2;;16949:4;16941:6;16937:17;16927:27;;16895:2;17002;16994:6;16991:14;16971:18;16968:38;16965:2;;;-1:-1:-1;;;17036:1:1;17029:88;17140:4;17137:1;17130:15;17168:4;17165:1;17158:15;16965:2;;16807:382;;;:::o;17194:135::-;17233:3;-1:-1:-1;;17254:17:1;;17251:2;;;17274:18;;:::i;:::-;-1:-1:-1;17321:1:1;17310:13;;17241:88::o;17334:112::-;17366:1;17392;17382:2;;17397:18;;:::i;:::-;-1:-1:-1;17431:9:1;;17372:74::o;17451:184::-;-1:-1:-1;;;17500:1:1;17493:88;17600:4;17597:1;17590:15;17624:4;17621:1;17614:15;17640:184;-1:-1:-1;;;17689:1:1;17682:88;17789:4;17786:1;17779:15;17813:4;17810:1;17803:15;17829:184;-1:-1:-1;;;17878:1:1;17871:88;17978:4;17975:1;17968:15;18002:4;17999:1;17992:15;18018:177;-1:-1:-1;;;;;;18096:5:1;18092:78;18085:5;18082:89;18072:2;;18185:1;18182;18175:12
Swarm Source
ipfs://df0e49a35080c268715c69345a52d50d2f59fe11f009cebf9f931ef6d3328d15
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.