ERC-721
Overview
Max Total Supply
0 NBT
Holders
43
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
NeoBots
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-08 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ 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/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.0 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: contracts/NeoBots.sol pragma solidity ^0.8.0; contract NeoBots is ERC721, Ownable { using Counters for Counters.Counter; using Strings for uint256; Counters.Counter _tokenIds; string currentBaseURI; constructor(string memory _baseURI) ERC721("NeoBots", "NBT") { currentBaseURI = _baseURI; } function changeBaseURI(string memory _newBaseURI) external onlyOwner { currentBaseURI = _newBaseURI; } function mint(address[] memory _receivers) external onlyOwner { for (uint256 i = 0; i < _receivers.length; i++) { _tokenIds.increment(); uint256 _tokenId = _tokenIds.current(); _safeMint(_receivers[i], _tokenId); } } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Requesting URI for nonexistent token"); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_receivers","type":"address[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200351038038062003510833981810160405281019062000037919062000432565b6040518060400160405280600781526020017f4e656f426f7473000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4e425400000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb929190620001e5565b508060019080519060200190620000d4929190620001e5565b505050620000f7620000eb6200011760201b60201c565b6200011f60201b60201c565b80600890805190602001906200010f929190620001e5565b5050620004e8565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f390620004b2565b90600052602060002090601f01602090048101928262000217576000855562000263565b82601f106200023257805160ff191683800117855562000263565b8280016001018555821562000263579182015b828111156200026257825182559160200191906001019062000245565b5b50905062000272919062000276565b5090565b5b808211156200029157600081600090555060010162000277565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002fe82620002b3565b810181811067ffffffffffffffff8211171562000320576200031f620002c4565b5b80604052505050565b60006200033562000295565b9050620003438282620002f3565b919050565b600067ffffffffffffffff821115620003665762000365620002c4565b5b6200037182620002b3565b9050602081019050919050565b60005b838110156200039e57808201518184015260208101905062000381565b83811115620003ae576000848401525b50505050565b6000620003cb620003c58462000348565b62000329565b905082815260208101848484011115620003ea57620003e9620002ae565b5b620003f78482856200037e565b509392505050565b600082601f830112620004175762000416620002a9565b5b815162000429848260208601620003b4565b91505092915050565b6000602082840312156200044b576200044a6200029f565b5b600082015167ffffffffffffffff8111156200046c576200046b620002a4565b5b6200047a84828501620003ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004cb57607f821691505b60208210811415620004e257620004e162000483565b5b50919050565b61301880620004f86000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde146102cb578063bd075b84146102e7578063c87b56dd14610303578063e985e9c514610333578063f2fde38b1461036357610116565b8063715018a6146102695780638da5cb5b1461027357806395d89b4114610291578063a22cb465146102af57610116565b806323b872dd116100e957806323b872dd146101b557806339a0c6f9146101d157806342842e0e146101ed5780636352211e1461020957806370a082311461023957610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b61013560048036038101906101309190611bb7565b61037f565b6040516101429190611bff565b60405180910390f35b610153610461565b6040516101609190611cb3565b60405180910390f35b610183600480360381019061017e9190611d0b565b6104f3565b6040516101909190611d79565b60405180910390f35b6101b360048036038101906101ae9190611dc0565b610578565b005b6101cf60048036038101906101ca9190611e00565b610690565b005b6101eb60048036038101906101e69190611f88565b6106f0565b005b61020760048036038101906102029190611e00565b610786565b005b610223600480360381019061021e9190611d0b565b6107a6565b6040516102309190611d79565b60405180910390f35b610253600480360381019061024e9190611fd1565b610858565b604051610260919061200d565b60405180910390f35b610271610910565b005b61027b610998565b6040516102889190611d79565b60405180910390f35b6102996109c2565b6040516102a69190611cb3565b60405180910390f35b6102c960048036038101906102c49190612054565b610a54565b005b6102e560048036038101906102e09190612135565b610a6a565b005b61030160048036038101906102fc9190612280565b610acc565b005b61031d60048036038101906103189190611d0b565b610ba8565b60405161032a9190611cb3565b60405180910390f35b61034d600480360381019061034891906122c9565b610c50565b60405161035a9190611bff565b60405180910390f35b61037d60048036038101906103789190611fd1565b610ce4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061044a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061045a575061045982610ddc565b5b9050919050565b60606000805461047090612338565b80601f016020809104026020016040519081016040528092919081815260200182805461049c90612338565b80156104e95780601f106104be576101008083540402835291602001916104e9565b820191906000526020600020905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b60006104fe82610e46565b61053d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610534906123dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610583826107a6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105eb9061246e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610613610eb2565b73ffffffffffffffffffffffffffffffffffffffff16148061064257506106418161063c610eb2565b610c50565b5b610681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067890612500565b60405180910390fd5b61068b8383610eba565b505050565b6106a161069b610eb2565b82610f73565b6106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d790612592565b60405180910390fd5b6106eb838383611051565b505050565b6106f8610eb2565b73ffffffffffffffffffffffffffffffffffffffff16610716610998565b73ffffffffffffffffffffffffffffffffffffffff161461076c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610763906125fe565b60405180910390fd5b8060089080519060200190610782929190611aa8565b5050565b6107a183838360405180602001604052806000815250610a6a565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084690612690565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090612722565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610918610eb2565b73ffffffffffffffffffffffffffffffffffffffff16610936610998565b73ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610983906125fe565b60405180910390fd5b61099660006112ad565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109d190612338565b80601f01602080910402602001604051908101604052809291908181526020018280546109fd90612338565b8015610a4a5780601f10610a1f57610100808354040283529160200191610a4a565b820191906000526020600020905b815481529060010190602001808311610a2d57829003601f168201915b5050505050905090565b610a66610a5f610eb2565b8383611373565b5050565b610a7b610a75610eb2565b83610f73565b610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190612592565b60405180910390fd5b610ac6848484846114e0565b50505050565b610ad4610eb2565b73ffffffffffffffffffffffffffffffffffffffff16610af2610998565b73ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f906125fe565b60405180910390fd5b60005b8151811015610ba457610b5e600761153c565b6000610b6a6007611552565b9050610b90838381518110610b8257610b81612742565b5b602002602001015182611560565b508080610b9c906127a0565b915050610b4b565b5050565b6060610bb382610e46565b610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be99061285b565b60405180910390fd5b600060088054610c0190612338565b905011610c1d5760405180602001604052806000815250610c49565b6008610c288361157e565b604051602001610c39929190612997565b6040516020818303038152906040525b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610cec610eb2565b73ffffffffffffffffffffffffffffffffffffffff16610d0a610998565b73ffffffffffffffffffffffffffffffffffffffff1614610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d57906125fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790612a38565b60405180910390fd5b610dd9816112ad565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f2d836107a6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610f7e82610e46565b610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490612aca565b60405180910390fd5b6000610fc8836107a6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061103757508373ffffffffffffffffffffffffffffffffffffffff1661101f846104f3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061104857506110478185610c50565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611071826107a6565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90612b5c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90612bee565b60405180910390fd5b6111428383836116df565b61114d600082610eba565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119d9190612c0e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f49190612c42565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612ce4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114d39190611bff565b60405180910390a3505050565b6114eb848484611051565b6114f7848484846116e4565b611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d90612d76565b60405180910390fd5b50505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b61157a82826040518060200160405280600081525061186c565b5050565b606060008214156115c6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506116da565b600082905060005b600082146115f85780806115e1906127a0565b915050600a826115f19190612dc5565b91506115ce565b60008167ffffffffffffffff81111561161457611613611e5d565b5b6040519080825280601f01601f1916602001820160405280156116465781602001600182028036833780820191505090505b5090505b600085146116d35760018261165f9190612c0e565b9150600a8561166e9190612df6565b603061167a9190612c42565b60f81b8183815181106116905761168f612742565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116cc9190612dc5565b945061164a565b8093505050505b919050565b505050565b60006117058473ffffffffffffffffffffffffffffffffffffffff166118c7565b1561185f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261172e610eb2565b8786866040518563ffffffff1660e01b81526004016117509493929190612e7c565b6020604051808303816000875af192505050801561178c57506040513d601f19601f820116820180604052508101906117899190612edd565b60015b61180f573d80600081146117bc576040519150601f19603f3d011682016040523d82523d6000602084013e6117c1565b606091505b50600081511415611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90612d76565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611864565b600190505b949350505050565b61187683836118da565b61188360008484846116e4565b6118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990612d76565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190612f56565b60405180910390fd5b61195381610e46565b15611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a90612fc2565b60405180910390fd5b61199f600083836116df565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ef9190612c42565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054611ab490612338565b90600052602060002090601f016020900481019282611ad65760008555611b1d565b82601f10611aef57805160ff1916838001178555611b1d565b82800160010185558215611b1d579182015b82811115611b1c578251825591602001919060010190611b01565b5b509050611b2a9190611b2e565b5090565b5b80821115611b47576000816000905550600101611b2f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611b9481611b5f565b8114611b9f57600080fd5b50565b600081359050611bb181611b8b565b92915050565b600060208284031215611bcd57611bcc611b55565b5b6000611bdb84828501611ba2565b91505092915050565b60008115159050919050565b611bf981611be4565b82525050565b6000602082019050611c146000830184611bf0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c54578082015181840152602081019050611c39565b83811115611c63576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c8582611c1a565b611c8f8185611c25565b9350611c9f818560208601611c36565b611ca881611c69565b840191505092915050565b60006020820190508181036000830152611ccd8184611c7a565b905092915050565b6000819050919050565b611ce881611cd5565b8114611cf357600080fd5b50565b600081359050611d0581611cdf565b92915050565b600060208284031215611d2157611d20611b55565b5b6000611d2f84828501611cf6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d6382611d38565b9050919050565b611d7381611d58565b82525050565b6000602082019050611d8e6000830184611d6a565b92915050565b611d9d81611d58565b8114611da857600080fd5b50565b600081359050611dba81611d94565b92915050565b60008060408385031215611dd757611dd6611b55565b5b6000611de585828601611dab565b9250506020611df685828601611cf6565b9150509250929050565b600080600060608486031215611e1957611e18611b55565b5b6000611e2786828701611dab565b9350506020611e3886828701611dab565b9250506040611e4986828701611cf6565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e9582611c69565b810181811067ffffffffffffffff82111715611eb457611eb3611e5d565b5b80604052505050565b6000611ec7611b4b565b9050611ed38282611e8c565b919050565b600067ffffffffffffffff821115611ef357611ef2611e5d565b5b611efc82611c69565b9050602081019050919050565b82818337600083830152505050565b6000611f2b611f2684611ed8565b611ebd565b905082815260208101848484011115611f4757611f46611e58565b5b611f52848285611f09565b509392505050565b600082601f830112611f6f57611f6e611e53565b5b8135611f7f848260208601611f18565b91505092915050565b600060208284031215611f9e57611f9d611b55565b5b600082013567ffffffffffffffff811115611fbc57611fbb611b5a565b5b611fc884828501611f5a565b91505092915050565b600060208284031215611fe757611fe6611b55565b5b6000611ff584828501611dab565b91505092915050565b61200781611cd5565b82525050565b60006020820190506120226000830184611ffe565b92915050565b61203181611be4565b811461203c57600080fd5b50565b60008135905061204e81612028565b92915050565b6000806040838503121561206b5761206a611b55565b5b600061207985828601611dab565b925050602061208a8582860161203f565b9150509250929050565b600067ffffffffffffffff8211156120af576120ae611e5d565b5b6120b882611c69565b9050602081019050919050565b60006120d86120d384612094565b611ebd565b9050828152602081018484840111156120f4576120f3611e58565b5b6120ff848285611f09565b509392505050565b600082601f83011261211c5761211b611e53565b5b813561212c8482602086016120c5565b91505092915050565b6000806000806080858703121561214f5761214e611b55565b5b600061215d87828801611dab565b945050602061216e87828801611dab565b935050604061217f87828801611cf6565b925050606085013567ffffffffffffffff8111156121a05761219f611b5a565b5b6121ac87828801612107565b91505092959194509250565b600067ffffffffffffffff8211156121d3576121d2611e5d565b5b602082029050602081019050919050565b600080fd5b60006121fc6121f7846121b8565b611ebd565b9050808382526020820190506020840283018581111561221f5761221e6121e4565b5b835b8181101561224857806122348882611dab565b845260208401935050602081019050612221565b5050509392505050565b600082601f83011261226757612266611e53565b5b81356122778482602086016121e9565b91505092915050565b60006020828403121561229657612295611b55565b5b600082013567ffffffffffffffff8111156122b4576122b3611b5a565b5b6122c084828501612252565b91505092915050565b600080604083850312156122e0576122df611b55565b5b60006122ee85828601611dab565b92505060206122ff85828601611dab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061235057607f821691505b6020821081141561236457612363612309565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006123c6602c83611c25565b91506123d18261236a565b604082019050919050565b600060208201905081810360008301526123f5816123b9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612458602183611c25565b9150612463826123fc565b604082019050919050565b600060208201905081810360008301526124878161244b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006124ea603883611c25565b91506124f58261248e565b604082019050919050565b60006020820190508181036000830152612519816124dd565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061257c603183611c25565b915061258782612520565b604082019050919050565b600060208201905081810360008301526125ab8161256f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125e8602083611c25565b91506125f3826125b2565b602082019050919050565b60006020820190508181036000830152612617816125db565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061267a602983611c25565b91506126858261261e565b604082019050919050565b600060208201905081810360008301526126a98161266d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061270c602a83611c25565b9150612717826126b0565b604082019050919050565b6000602082019050818103600083015261273b816126ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127ab82611cd5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127de576127dd612771565b5b600182019050919050565b7f52657175657374696e672055524920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b6000612845602483611c25565b9150612850826127e9565b604082019050919050565b6000602082019050818103600083015261287481612838565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546128a881612338565b6128b2818661287b565b945060018216600081146128cd57600181146128de57612911565b60ff19831686528186019350612911565b6128e785612886565b60005b83811015612909578154818901526001820191506020810190506128ea565b838801955050505b50505092915050565b600061292582611c1a565b61292f818561287b565b935061293f818560208601611c36565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061298160058361287b565b915061298c8261294b565b600582019050919050565b60006129a3828561289b565b91506129af828461291a565b91506129ba82612974565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a22602683611c25565b9150612a2d826129c6565b604082019050919050565b60006020820190508181036000830152612a5181612a15565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612ab4602c83611c25565b9150612abf82612a58565b604082019050919050565b60006020820190508181036000830152612ae381612aa7565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000612b46602983611c25565b9150612b5182612aea565b604082019050919050565b60006020820190508181036000830152612b7581612b39565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612bd8602483611c25565b9150612be382612b7c565b604082019050919050565b60006020820190508181036000830152612c0781612bcb565b9050919050565b6000612c1982611cd5565b9150612c2483611cd5565b925082821015612c3757612c36612771565b5b828203905092915050565b6000612c4d82611cd5565b9150612c5883611cd5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c8d57612c8c612771565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612cce601983611c25565b9150612cd982612c98565b602082019050919050565b60006020820190508181036000830152612cfd81612cc1565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612d60603283611c25565b9150612d6b82612d04565b604082019050919050565b60006020820190508181036000830152612d8f81612d53565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612dd082611cd5565b9150612ddb83611cd5565b925082612deb57612dea612d96565b5b828204905092915050565b6000612e0182611cd5565b9150612e0c83611cd5565b925082612e1c57612e1b612d96565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000612e4e82612e27565b612e588185612e32565b9350612e68818560208601611c36565b612e7181611c69565b840191505092915050565b6000608082019050612e916000830187611d6a565b612e9e6020830186611d6a565b612eab6040830185611ffe565b8181036060830152612ebd8184612e43565b905095945050505050565b600081519050612ed781611b8b565b92915050565b600060208284031215612ef357612ef2611b55565b5b6000612f0184828501612ec8565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612f40602083611c25565b9150612f4b82612f0a565b602082019050919050565b60006020820190508181036000830152612f6f81612f33565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612fac601c83611c25565b9150612fb782612f76565b602082019050919050565b60006020820190508181036000830152612fdb81612f9f565b905091905056fea2646970667358221220d3a0baf70c2ec8a513f44c14b31be38b6a1a670e9cc0db43ae7008c2147e01d964736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d624a445355374a336652665a71557141716d734146534c7a564763717379577872785832476e66754b4750502f00000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde146102cb578063bd075b84146102e7578063c87b56dd14610303578063e985e9c514610333578063f2fde38b1461036357610116565b8063715018a6146102695780638da5cb5b1461027357806395d89b4114610291578063a22cb465146102af57610116565b806323b872dd116100e957806323b872dd146101b557806339a0c6f9146101d157806342842e0e146101ed5780636352211e1461020957806370a082311461023957610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b61013560048036038101906101309190611bb7565b61037f565b6040516101429190611bff565b60405180910390f35b610153610461565b6040516101609190611cb3565b60405180910390f35b610183600480360381019061017e9190611d0b565b6104f3565b6040516101909190611d79565b60405180910390f35b6101b360048036038101906101ae9190611dc0565b610578565b005b6101cf60048036038101906101ca9190611e00565b610690565b005b6101eb60048036038101906101e69190611f88565b6106f0565b005b61020760048036038101906102029190611e00565b610786565b005b610223600480360381019061021e9190611d0b565b6107a6565b6040516102309190611d79565b60405180910390f35b610253600480360381019061024e9190611fd1565b610858565b604051610260919061200d565b60405180910390f35b610271610910565b005b61027b610998565b6040516102889190611d79565b60405180910390f35b6102996109c2565b6040516102a69190611cb3565b60405180910390f35b6102c960048036038101906102c49190612054565b610a54565b005b6102e560048036038101906102e09190612135565b610a6a565b005b61030160048036038101906102fc9190612280565b610acc565b005b61031d60048036038101906103189190611d0b565b610ba8565b60405161032a9190611cb3565b60405180910390f35b61034d600480360381019061034891906122c9565b610c50565b60405161035a9190611bff565b60405180910390f35b61037d60048036038101906103789190611fd1565b610ce4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061044a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061045a575061045982610ddc565b5b9050919050565b60606000805461047090612338565b80601f016020809104026020016040519081016040528092919081815260200182805461049c90612338565b80156104e95780601f106104be576101008083540402835291602001916104e9565b820191906000526020600020905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b60006104fe82610e46565b61053d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610534906123dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610583826107a6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105eb9061246e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610613610eb2565b73ffffffffffffffffffffffffffffffffffffffff16148061064257506106418161063c610eb2565b610c50565b5b610681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067890612500565b60405180910390fd5b61068b8383610eba565b505050565b6106a161069b610eb2565b82610f73565b6106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d790612592565b60405180910390fd5b6106eb838383611051565b505050565b6106f8610eb2565b73ffffffffffffffffffffffffffffffffffffffff16610716610998565b73ffffffffffffffffffffffffffffffffffffffff161461076c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610763906125fe565b60405180910390fd5b8060089080519060200190610782929190611aa8565b5050565b6107a183838360405180602001604052806000815250610a6a565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084690612690565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090612722565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610918610eb2565b73ffffffffffffffffffffffffffffffffffffffff16610936610998565b73ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610983906125fe565b60405180910390fd5b61099660006112ad565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109d190612338565b80601f01602080910402602001604051908101604052809291908181526020018280546109fd90612338565b8015610a4a5780601f10610a1f57610100808354040283529160200191610a4a565b820191906000526020600020905b815481529060010190602001808311610a2d57829003601f168201915b5050505050905090565b610a66610a5f610eb2565b8383611373565b5050565b610a7b610a75610eb2565b83610f73565b610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190612592565b60405180910390fd5b610ac6848484846114e0565b50505050565b610ad4610eb2565b73ffffffffffffffffffffffffffffffffffffffff16610af2610998565b73ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f906125fe565b60405180910390fd5b60005b8151811015610ba457610b5e600761153c565b6000610b6a6007611552565b9050610b90838381518110610b8257610b81612742565b5b602002602001015182611560565b508080610b9c906127a0565b915050610b4b565b5050565b6060610bb382610e46565b610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be99061285b565b60405180910390fd5b600060088054610c0190612338565b905011610c1d5760405180602001604052806000815250610c49565b6008610c288361157e565b604051602001610c39929190612997565b6040516020818303038152906040525b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610cec610eb2565b73ffffffffffffffffffffffffffffffffffffffff16610d0a610998565b73ffffffffffffffffffffffffffffffffffffffff1614610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d57906125fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790612a38565b60405180910390fd5b610dd9816112ad565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f2d836107a6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610f7e82610e46565b610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490612aca565b60405180910390fd5b6000610fc8836107a6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061103757508373ffffffffffffffffffffffffffffffffffffffff1661101f846104f3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061104857506110478185610c50565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611071826107a6565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90612b5c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90612bee565b60405180910390fd5b6111428383836116df565b61114d600082610eba565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119d9190612c0e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f49190612c42565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612ce4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114d39190611bff565b60405180910390a3505050565b6114eb848484611051565b6114f7848484846116e4565b611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d90612d76565b60405180910390fd5b50505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b61157a82826040518060200160405280600081525061186c565b5050565b606060008214156115c6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506116da565b600082905060005b600082146115f85780806115e1906127a0565b915050600a826115f19190612dc5565b91506115ce565b60008167ffffffffffffffff81111561161457611613611e5d565b5b6040519080825280601f01601f1916602001820160405280156116465781602001600182028036833780820191505090505b5090505b600085146116d35760018261165f9190612c0e565b9150600a8561166e9190612df6565b603061167a9190612c42565b60f81b8183815181106116905761168f612742565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116cc9190612dc5565b945061164a565b8093505050505b919050565b505050565b60006117058473ffffffffffffffffffffffffffffffffffffffff166118c7565b1561185f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261172e610eb2565b8786866040518563ffffffff1660e01b81526004016117509493929190612e7c565b6020604051808303816000875af192505050801561178c57506040513d601f19601f820116820180604052508101906117899190612edd565b60015b61180f573d80600081146117bc576040519150601f19603f3d011682016040523d82523d6000602084013e6117c1565b606091505b50600081511415611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90612d76565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611864565b600190505b949350505050565b61187683836118da565b61188360008484846116e4565b6118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990612d76565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190612f56565b60405180910390fd5b61195381610e46565b15611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a90612fc2565b60405180910390fd5b61199f600083836116df565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ef9190612c42565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054611ab490612338565b90600052602060002090601f016020900481019282611ad65760008555611b1d565b82601f10611aef57805160ff1916838001178555611b1d565b82800160010185558215611b1d579182015b82811115611b1c578251825591602001919060010190611b01565b5b509050611b2a9190611b2e565b5090565b5b80821115611b47576000816000905550600101611b2f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611b9481611b5f565b8114611b9f57600080fd5b50565b600081359050611bb181611b8b565b92915050565b600060208284031215611bcd57611bcc611b55565b5b6000611bdb84828501611ba2565b91505092915050565b60008115159050919050565b611bf981611be4565b82525050565b6000602082019050611c146000830184611bf0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c54578082015181840152602081019050611c39565b83811115611c63576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c8582611c1a565b611c8f8185611c25565b9350611c9f818560208601611c36565b611ca881611c69565b840191505092915050565b60006020820190508181036000830152611ccd8184611c7a565b905092915050565b6000819050919050565b611ce881611cd5565b8114611cf357600080fd5b50565b600081359050611d0581611cdf565b92915050565b600060208284031215611d2157611d20611b55565b5b6000611d2f84828501611cf6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d6382611d38565b9050919050565b611d7381611d58565b82525050565b6000602082019050611d8e6000830184611d6a565b92915050565b611d9d81611d58565b8114611da857600080fd5b50565b600081359050611dba81611d94565b92915050565b60008060408385031215611dd757611dd6611b55565b5b6000611de585828601611dab565b9250506020611df685828601611cf6565b9150509250929050565b600080600060608486031215611e1957611e18611b55565b5b6000611e2786828701611dab565b9350506020611e3886828701611dab565b9250506040611e4986828701611cf6565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e9582611c69565b810181811067ffffffffffffffff82111715611eb457611eb3611e5d565b5b80604052505050565b6000611ec7611b4b565b9050611ed38282611e8c565b919050565b600067ffffffffffffffff821115611ef357611ef2611e5d565b5b611efc82611c69565b9050602081019050919050565b82818337600083830152505050565b6000611f2b611f2684611ed8565b611ebd565b905082815260208101848484011115611f4757611f46611e58565b5b611f52848285611f09565b509392505050565b600082601f830112611f6f57611f6e611e53565b5b8135611f7f848260208601611f18565b91505092915050565b600060208284031215611f9e57611f9d611b55565b5b600082013567ffffffffffffffff811115611fbc57611fbb611b5a565b5b611fc884828501611f5a565b91505092915050565b600060208284031215611fe757611fe6611b55565b5b6000611ff584828501611dab565b91505092915050565b61200781611cd5565b82525050565b60006020820190506120226000830184611ffe565b92915050565b61203181611be4565b811461203c57600080fd5b50565b60008135905061204e81612028565b92915050565b6000806040838503121561206b5761206a611b55565b5b600061207985828601611dab565b925050602061208a8582860161203f565b9150509250929050565b600067ffffffffffffffff8211156120af576120ae611e5d565b5b6120b882611c69565b9050602081019050919050565b60006120d86120d384612094565b611ebd565b9050828152602081018484840111156120f4576120f3611e58565b5b6120ff848285611f09565b509392505050565b600082601f83011261211c5761211b611e53565b5b813561212c8482602086016120c5565b91505092915050565b6000806000806080858703121561214f5761214e611b55565b5b600061215d87828801611dab565b945050602061216e87828801611dab565b935050604061217f87828801611cf6565b925050606085013567ffffffffffffffff8111156121a05761219f611b5a565b5b6121ac87828801612107565b91505092959194509250565b600067ffffffffffffffff8211156121d3576121d2611e5d565b5b602082029050602081019050919050565b600080fd5b60006121fc6121f7846121b8565b611ebd565b9050808382526020820190506020840283018581111561221f5761221e6121e4565b5b835b8181101561224857806122348882611dab565b845260208401935050602081019050612221565b5050509392505050565b600082601f83011261226757612266611e53565b5b81356122778482602086016121e9565b91505092915050565b60006020828403121561229657612295611b55565b5b600082013567ffffffffffffffff8111156122b4576122b3611b5a565b5b6122c084828501612252565b91505092915050565b600080604083850312156122e0576122df611b55565b5b60006122ee85828601611dab565b92505060206122ff85828601611dab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061235057607f821691505b6020821081141561236457612363612309565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006123c6602c83611c25565b91506123d18261236a565b604082019050919050565b600060208201905081810360008301526123f5816123b9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612458602183611c25565b9150612463826123fc565b604082019050919050565b600060208201905081810360008301526124878161244b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006124ea603883611c25565b91506124f58261248e565b604082019050919050565b60006020820190508181036000830152612519816124dd565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061257c603183611c25565b915061258782612520565b604082019050919050565b600060208201905081810360008301526125ab8161256f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125e8602083611c25565b91506125f3826125b2565b602082019050919050565b60006020820190508181036000830152612617816125db565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061267a602983611c25565b91506126858261261e565b604082019050919050565b600060208201905081810360008301526126a98161266d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061270c602a83611c25565b9150612717826126b0565b604082019050919050565b6000602082019050818103600083015261273b816126ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127ab82611cd5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127de576127dd612771565b5b600182019050919050565b7f52657175657374696e672055524920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b6000612845602483611c25565b9150612850826127e9565b604082019050919050565b6000602082019050818103600083015261287481612838565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546128a881612338565b6128b2818661287b565b945060018216600081146128cd57600181146128de57612911565b60ff19831686528186019350612911565b6128e785612886565b60005b83811015612909578154818901526001820191506020810190506128ea565b838801955050505b50505092915050565b600061292582611c1a565b61292f818561287b565b935061293f818560208601611c36565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061298160058361287b565b915061298c8261294b565b600582019050919050565b60006129a3828561289b565b91506129af828461291a565b91506129ba82612974565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a22602683611c25565b9150612a2d826129c6565b604082019050919050565b60006020820190508181036000830152612a5181612a15565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612ab4602c83611c25565b9150612abf82612a58565b604082019050919050565b60006020820190508181036000830152612ae381612aa7565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000612b46602983611c25565b9150612b5182612aea565b604082019050919050565b60006020820190508181036000830152612b7581612b39565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612bd8602483611c25565b9150612be382612b7c565b604082019050919050565b60006020820190508181036000830152612c0781612bcb565b9050919050565b6000612c1982611cd5565b9150612c2483611cd5565b925082821015612c3757612c36612771565b5b828203905092915050565b6000612c4d82611cd5565b9150612c5883611cd5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c8d57612c8c612771565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612cce601983611c25565b9150612cd982612c98565b602082019050919050565b60006020820190508181036000830152612cfd81612cc1565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612d60603283611c25565b9150612d6b82612d04565b604082019050919050565b60006020820190508181036000830152612d8f81612d53565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612dd082611cd5565b9150612ddb83611cd5565b925082612deb57612dea612d96565b5b828204905092915050565b6000612e0182611cd5565b9150612e0c83611cd5565b925082612e1c57612e1b612d96565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000612e4e82612e27565b612e588185612e32565b9350612e68818560208601611c36565b612e7181611c69565b840191505092915050565b6000608082019050612e916000830187611d6a565b612e9e6020830186611d6a565b612eab6040830185611ffe565b8181036060830152612ebd8184612e43565b905095945050505050565b600081519050612ed781611b8b565b92915050565b600060208284031215612ef357612ef2611b55565b5b6000612f0184828501612ec8565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612f40602083611c25565b9150612f4b82612f0a565b602082019050919050565b60006020820190508181036000830152612f6f81612f33565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612fac601c83611c25565b9150612fb782612f76565b602082019050919050565b60006020820190508181036000830152612fdb81612f9f565b905091905056fea2646970667358221220d3a0baf70c2ec8a513f44c14b31be38b6a1a670e9cc0db43ae7008c2147e01d964736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d624a445355374a336652665a71557141716d734146534c7a564763717379577872785832476e66754b4750502f00000000000000000000
-----Decoded View---------------
Arg [0] : _baseURI (string): ipfs://QmbJDSU7J3fRfZqUqAqmsAFSLzVGcqsyWxrxX2GnfuKGPP/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d624a445355374a336652665a71557141716d734146534c
Arg [3] : 7a564763717379577872785832476e66754b4750502f00000000000000000000
Deployed Bytecode Sourcemap
37727:938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21227:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22172:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23731:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23254:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24481:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38006:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24891:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21866:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21596:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35378:103;;;:::i;:::-;;34727:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22341:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24024:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25147:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38122:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38378:284;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24250:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35636:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21227:305;21329:4;21381:25;21366:40;;;:11;:40;;;;:105;;;;21438:33;21423:48;;;:11;:48;;;;21366:105;:158;;;;21488:36;21512:11;21488:23;:36::i;:::-;21366:158;21346:178;;21227:305;;;:::o;22172:100::-;22226:13;22259:5;22252:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22172:100;:::o;23731:221::-;23807:7;23835:16;23843:7;23835;:16::i;:::-;23827:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23920:15;:24;23936:7;23920:24;;;;;;;;;;;;;;;;;;;;;23913:31;;23731:221;;;:::o;23254:411::-;23335:13;23351:23;23366:7;23351:14;:23::i;:::-;23335:39;;23399:5;23393:11;;:2;:11;;;;23385:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23493:5;23477:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23502:37;23519:5;23526:12;:10;:12::i;:::-;23502:16;:37::i;:::-;23477:62;23455:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23636:21;23645:2;23649:7;23636:8;:21::i;:::-;23324:341;23254:411;;:::o;24481:339::-;24676:41;24695:12;:10;:12::i;:::-;24709:7;24676:18;:41::i;:::-;24668:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24784:28;24794:4;24800:2;24804:7;24784:9;:28::i;:::-;24481:339;;;:::o;38006:110::-;34958:12;:10;:12::i;:::-;34947:23;;:7;:5;:7::i;:::-;:23;;;34939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38099:11:::1;38082:14;:28;;;;;;;;;;;;:::i;:::-;;38006:110:::0;:::o;24891:185::-;25029:39;25046:4;25052:2;25056:7;25029:39;;;;;;;;;;;;:16;:39::i;:::-;24891:185;;;:::o;21866:239::-;21938:7;21958:13;21974:7;:16;21982:7;21974:16;;;;;;;;;;;;;;;;;;;;;21958:32;;22026:1;22009:19;;:5;:19;;;;22001:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22092:5;22085:12;;;21866:239;;;:::o;21596:208::-;21668:7;21713:1;21696:19;;:5;:19;;;;21688:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21780:9;:16;21790:5;21780:16;;;;;;;;;;;;;;;;21773:23;;21596:208;;;:::o;35378:103::-;34958:12;:10;:12::i;:::-;34947:23;;:7;:5;:7::i;:::-;:23;;;34939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35443:30:::1;35470:1;35443:18;:30::i;:::-;35378:103::o:0;34727:87::-;34773:7;34800:6;;;;;;;;;;;34793:13;;34727:87;:::o;22341:104::-;22397:13;22430:7;22423:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22341:104;:::o;24024:155::-;24119:52;24138:12;:10;:12::i;:::-;24152:8;24162;24119:18;:52::i;:::-;24024:155;;:::o;25147:328::-;25322:41;25341:12;:10;:12::i;:::-;25355:7;25322:18;:41::i;:::-;25314:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25428:39;25442:4;25448:2;25452:7;25461:5;25428:13;:39::i;:::-;25147:328;;;;:::o;38122:250::-;34958:12;:10;:12::i;:::-;34947:23;;:7;:5;:7::i;:::-;:23;;;34939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38196:9:::1;38191:176;38215:10;:17;38211:1;:21;38191:176;;;38248:21;:9;:19;:21::i;:::-;38278:16;38297:19;:9;:17;:19::i;:::-;38278:38;;38325:34;38335:10;38346:1;38335:13;;;;;;;;:::i;:::-;;;;;;;;38350:8;38325:9;:34::i;:::-;38239:128;38234:3;;;;;:::i;:::-;;;;38191:176;;;;38122:250:::0;:::o;38378:284::-;38444:13;38474:17;38482:8;38474:7;:17::i;:::-;38466:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38577:1;38552:14;38546:28;;;;;:::i;:::-;;;:32;:110;;;;;;;;;;;;;;;;;38605:14;38621:19;:8;:17;:19::i;:::-;38588:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38546:110;38539:117;;38378:284;;;:::o;24250:164::-;24347:4;24371:18;:25;24390:5;24371:25;;;;;;;;;;;;;;;:35;24397:8;24371:35;;;;;;;;;;;;;;;;;;;;;;;;;24364:42;;24250:164;;;;:::o;35636:201::-;34958:12;:10;:12::i;:::-;34947:23;;:7;:5;:7::i;:::-;:23;;;34939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35745:1:::1;35725:22;;:8;:22;;;;35717:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35801:28;35820:8;35801:18;:28::i;:::-;35636:201:::0;:::o;19673:157::-;19758:4;19797:25;19782:40;;;:11;:40;;;;19775:47;;19673:157;;;:::o;26985:127::-;27050:4;27102:1;27074:30;;:7;:16;27082:7;27074:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27067:37;;26985:127;;;:::o;16474:98::-;16527:7;16554:10;16547:17;;16474:98;:::o;30967:174::-;31069:2;31042:15;:24;31058:7;31042:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31125:7;31121:2;31087:46;;31096:23;31111:7;31096:14;:23::i;:::-;31087:46;;;;;;;;;;;;30967:174;;:::o;27279:348::-;27372:4;27397:16;27405:7;27397;:16::i;:::-;27389:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27473:13;27489:23;27504:7;27489:14;:23::i;:::-;27473:39;;27542:5;27531:16;;:7;:16;;;:51;;;;27575:7;27551:31;;:20;27563:7;27551:11;:20::i;:::-;:31;;;27531:51;:87;;;;27586:32;27603:5;27610:7;27586:16;:32::i;:::-;27531:87;27523:96;;;27279:348;;;;:::o;30271:578::-;30430:4;30403:31;;:23;30418:7;30403:14;:23::i;:::-;:31;;;30395:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30513:1;30499:16;;:2;:16;;;;30491:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30569:39;30590:4;30596:2;30600:7;30569:20;:39::i;:::-;30673:29;30690:1;30694:7;30673:8;:29::i;:::-;30734:1;30715:9;:15;30725:4;30715:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30763:1;30746:9;:13;30756:2;30746:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30794:2;30775:7;:16;30783:7;30775:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30833:7;30829:2;30814:27;;30823:4;30814:27;;;;;;;;;;;;30271:578;;;:::o;35997:191::-;36071:16;36090:6;;;;;;;;;;;36071:25;;36116:8;36107:6;;:17;;;;;;;;;;;;;;;;;;36171:8;36140:40;;36161:8;36140:40;;;;;;;;;;;;36060:128;35997:191;:::o;31283:315::-;31438:8;31429:17;;:5;:17;;;;31421:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31525:8;31487:18;:25;31506:5;31487:25;;;;;;;;;;;;;;;:35;31513:8;31487:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31571:8;31549:41;;31564:5;31549:41;;;31581:8;31549:41;;;;;;:::i;:::-;;;;;;;;31283:315;;;:::o;26357:::-;26514:28;26524:4;26530:2;26534:7;26514:9;:28::i;:::-;26561:48;26584:4;26590:2;26594:7;26603:5;26561:22;:48::i;:::-;26553:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26357:315;;;;:::o;37187:127::-;37294:1;37276:7;:14;;;:19;;;;;;;;;;;37187:127;:::o;37065:114::-;37130:7;37157;:14;;;37150:21;;37065:114;;;:::o;27969:110::-;28045:26;28055:2;28059:7;28045:26;;;;;;;;;;;;:9;:26::i;:::-;27969:110;;:::o;17051:723::-;17107:13;17337:1;17328:5;:10;17324:53;;;17355:10;;;;;;;;;;;;;;;;;;;;;17324:53;17387:12;17402:5;17387:20;;17418:14;17443:78;17458:1;17450:4;:9;17443:78;;17476:8;;;;;:::i;:::-;;;;17507:2;17499:10;;;;;:::i;:::-;;;17443:78;;;17531:19;17563:6;17553:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17531:39;;17581:154;17597:1;17588:5;:10;17581:154;;17625:1;17615:11;;;;;:::i;:::-;;;17692:2;17684:5;:10;;;;:::i;:::-;17671:2;:24;;;;:::i;:::-;17658:39;;17641:6;17648;17641:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17721:2;17712:11;;;;;:::i;:::-;;;17581:154;;;17759:6;17745:21;;;;;17051:723;;;;:::o;33534:126::-;;;;:::o;32163:799::-;32318:4;32339:15;:2;:13;;;:15::i;:::-;32335:620;;;32391:2;32375:36;;;32412:12;:10;:12::i;:::-;32426:4;32432:7;32441:5;32375:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32371:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32634:1;32617:6;:13;:18;32613:272;;;32660:60;;;;;;;;;;:::i;:::-;;;;;;;;32613:272;32835:6;32829:13;32820:6;32816:2;32812:15;32805:38;32371:529;32508:41;;;32498:51;;;:6;:51;;;;32491:58;;;;;32335:620;32939:4;32932:11;;32163:799;;;;;;;:::o;28306:321::-;28436:18;28442:2;28446:7;28436:5;:18::i;:::-;28487:54;28518:1;28522:2;28526:7;28535:5;28487:22;:54::i;:::-;28465:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28306:321;;;:::o;8466:387::-;8526:4;8734:12;8801:7;8789:20;8781:28;;8844:1;8837:4;:8;8830:15;;;8466:387;;;:::o;28963:382::-;29057:1;29043:16;;:2;:16;;;;29035:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29116:16;29124:7;29116;:16::i;:::-;29115:17;29107:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29178:45;29207:1;29211:2;29215:7;29178:20;:45::i;:::-;29253:1;29236:9;:13;29246:2;29236:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29284:2;29265:7;:16;29273:7;29265:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29329:7;29325:2;29304:33;;29321:1;29304:33;;;;;;;;;;;;28963:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:117::-;5672:1;5669;5662:12;5686:117;5795:1;5792;5785:12;5809:180;5857:77;5854:1;5847:88;5954:4;5951:1;5944:15;5978:4;5975:1;5968:15;5995:281;6078:27;6100:4;6078:27;:::i;:::-;6070:6;6066:40;6208:6;6196:10;6193:22;6172:18;6160:10;6157:34;6154:62;6151:88;;;6219:18;;:::i;:::-;6151:88;6259:10;6255:2;6248:22;6038:238;5995:281;;:::o;6282:129::-;6316:6;6343:20;;:::i;:::-;6333:30;;6372:33;6400:4;6392:6;6372:33;:::i;:::-;6282:129;;;:::o;6417:308::-;6479:4;6569:18;6561:6;6558:30;6555:56;;;6591:18;;:::i;:::-;6555:56;6629:29;6651:6;6629:29;:::i;:::-;6621:37;;6713:4;6707;6703:15;6695:23;;6417:308;;;:::o;6731:154::-;6815:6;6810:3;6805;6792:30;6877:1;6868:6;6863:3;6859:16;6852:27;6731:154;;;:::o;6891:412::-;6969:5;6994:66;7010:49;7052:6;7010:49;:::i;:::-;6994:66;:::i;:::-;6985:75;;7083:6;7076:5;7069:21;7121:4;7114:5;7110:16;7159:3;7150:6;7145:3;7141:16;7138:25;7135:112;;;7166:79;;:::i;:::-;7135:112;7256:41;7290:6;7285:3;7280;7256:41;:::i;:::-;6975:328;6891:412;;;;;:::o;7323:340::-;7379:5;7428:3;7421:4;7413:6;7409:17;7405:27;7395:122;;7436:79;;:::i;:::-;7395:122;7553:6;7540:20;7578:79;7653:3;7645:6;7638:4;7630:6;7626:17;7578:79;:::i;:::-;7569:88;;7385:278;7323:340;;;;:::o;7669:509::-;7738:6;7787:2;7775:9;7766:7;7762:23;7758:32;7755:119;;;7793:79;;:::i;:::-;7755:119;7941:1;7930:9;7926:17;7913:31;7971:18;7963:6;7960:30;7957:117;;;7993:79;;:::i;:::-;7957:117;8098:63;8153:7;8144:6;8133:9;8129:22;8098:63;:::i;:::-;8088:73;;7884:287;7669:509;;;;:::o;8184:329::-;8243:6;8292:2;8280:9;8271:7;8267:23;8263:32;8260:119;;;8298:79;;:::i;:::-;8260:119;8418:1;8443:53;8488:7;8479:6;8468:9;8464:22;8443:53;:::i;:::-;8433:63;;8389:117;8184:329;;;;:::o;8519:118::-;8606:24;8624:5;8606:24;:::i;:::-;8601:3;8594:37;8519:118;;:::o;8643:222::-;8736:4;8774:2;8763:9;8759:18;8751:26;;8787:71;8855:1;8844:9;8840:17;8831:6;8787:71;:::i;:::-;8643:222;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:307::-;9667:4;9757:18;9749:6;9746:30;9743:56;;;9779:18;;:::i;:::-;9743:56;9817:29;9839:6;9817:29;:::i;:::-;9809:37;;9901:4;9895;9891:15;9883:23;;9606:307;;;:::o;9919:410::-;9996:5;10021:65;10037:48;10078:6;10037:48;:::i;:::-;10021:65;:::i;:::-;10012:74;;10109:6;10102:5;10095:21;10147:4;10140:5;10136:16;10185:3;10176:6;10171:3;10167:16;10164:25;10161:112;;;10192:79;;:::i;:::-;10161:112;10282:41;10316:6;10311:3;10306;10282:41;:::i;:::-;10002:327;9919:410;;;;;:::o;10348:338::-;10403:5;10452:3;10445:4;10437:6;10433:17;10429:27;10419:122;;10460:79;;:::i;:::-;10419:122;10577:6;10564:20;10602:78;10676:3;10668:6;10661:4;10653:6;10649:17;10602:78;:::i;:::-;10593:87;;10409:277;10348:338;;;;:::o;10692:943::-;10787:6;10795;10803;10811;10860:3;10848:9;10839:7;10835:23;10831:33;10828:120;;;10867:79;;:::i;:::-;10828:120;10987:1;11012:53;11057:7;11048:6;11037:9;11033:22;11012:53;:::i;:::-;11002:63;;10958:117;11114:2;11140:53;11185:7;11176:6;11165:9;11161:22;11140:53;:::i;:::-;11130:63;;11085:118;11242:2;11268:53;11313:7;11304:6;11293:9;11289:22;11268:53;:::i;:::-;11258:63;;11213:118;11398:2;11387:9;11383:18;11370:32;11429:18;11421:6;11418:30;11415:117;;;11451:79;;:::i;:::-;11415:117;11556:62;11610:7;11601:6;11590:9;11586:22;11556:62;:::i;:::-;11546:72;;11341:287;10692:943;;;;;;;:::o;11641:311::-;11718:4;11808:18;11800:6;11797:30;11794:56;;;11830:18;;:::i;:::-;11794:56;11880:4;11872:6;11868:17;11860:25;;11940:4;11934;11930:15;11922:23;;11641:311;;;:::o;11958:117::-;12067:1;12064;12057:12;12098:710;12194:5;12219:81;12235:64;12292:6;12235:64;:::i;:::-;12219:81;:::i;:::-;12210:90;;12320:5;12349:6;12342:5;12335:21;12383:4;12376:5;12372:16;12365:23;;12436:4;12428:6;12424:17;12416:6;12412:30;12465:3;12457:6;12454:15;12451:122;;;12484:79;;:::i;:::-;12451:122;12599:6;12582:220;12616:6;12611:3;12608:15;12582:220;;;12691:3;12720:37;12753:3;12741:10;12720:37;:::i;:::-;12715:3;12708:50;12787:4;12782:3;12778:14;12771:21;;12658:144;12642:4;12637:3;12633:14;12626:21;;12582:220;;;12586:21;12200:608;;12098:710;;;;;:::o;12831:370::-;12902:5;12951:3;12944:4;12936:6;12932:17;12928:27;12918:122;;12959:79;;:::i;:::-;12918:122;13076:6;13063:20;13101:94;13191:3;13183:6;13176:4;13168:6;13164:17;13101:94;:::i;:::-;13092:103;;12908:293;12831:370;;;;:::o;13207:539::-;13291:6;13340:2;13328:9;13319:7;13315:23;13311:32;13308:119;;;13346:79;;:::i;:::-;13308:119;13494:1;13483:9;13479:17;13466:31;13524:18;13516:6;13513:30;13510:117;;;13546:79;;:::i;:::-;13510:117;13651:78;13721:7;13712:6;13701:9;13697:22;13651:78;:::i;:::-;13641:88;;13437:302;13207:539;;;;:::o;13752:474::-;13820:6;13828;13877:2;13865:9;13856:7;13852:23;13848:32;13845:119;;;13883:79;;:::i;:::-;13845:119;14003:1;14028:53;14073:7;14064:6;14053:9;14049:22;14028:53;:::i;:::-;14018:63;;13974:117;14130:2;14156:53;14201:7;14192:6;14181:9;14177:22;14156:53;:::i;:::-;14146:63;;14101:118;13752:474;;;;;:::o;14232:180::-;14280:77;14277:1;14270:88;14377:4;14374:1;14367:15;14401:4;14398:1;14391:15;14418:320;14462:6;14499:1;14493:4;14489:12;14479:22;;14546:1;14540:4;14536:12;14567:18;14557:81;;14623:4;14615:6;14611:17;14601:27;;14557:81;14685:2;14677:6;14674:14;14654:18;14651:38;14648:84;;;14704:18;;:::i;:::-;14648:84;14469:269;14418:320;;;:::o;14744:231::-;14884:34;14880:1;14872:6;14868:14;14861:58;14953:14;14948:2;14940:6;14936:15;14929:39;14744:231;:::o;14981:366::-;15123:3;15144:67;15208:2;15203:3;15144:67;:::i;:::-;15137:74;;15220:93;15309:3;15220:93;:::i;:::-;15338:2;15333:3;15329:12;15322:19;;14981:366;;;:::o;15353:419::-;15519:4;15557:2;15546:9;15542:18;15534:26;;15606:9;15600:4;15596:20;15592:1;15581:9;15577:17;15570:47;15634:131;15760:4;15634:131;:::i;:::-;15626:139;;15353:419;;;:::o;15778:220::-;15918:34;15914:1;15906:6;15902:14;15895:58;15987:3;15982:2;15974:6;15970:15;15963:28;15778:220;:::o;16004:366::-;16146:3;16167:67;16231:2;16226:3;16167:67;:::i;:::-;16160:74;;16243:93;16332:3;16243:93;:::i;:::-;16361:2;16356:3;16352:12;16345:19;;16004:366;;;:::o;16376:419::-;16542:4;16580:2;16569:9;16565:18;16557:26;;16629:9;16623:4;16619:20;16615:1;16604:9;16600:17;16593:47;16657:131;16783:4;16657:131;:::i;:::-;16649:139;;16376:419;;;:::o;16801:243::-;16941:34;16937:1;16929:6;16925:14;16918:58;17010:26;17005:2;16997:6;16993:15;16986:51;16801:243;:::o;17050:366::-;17192:3;17213:67;17277:2;17272:3;17213:67;:::i;:::-;17206:74;;17289:93;17378:3;17289:93;:::i;:::-;17407:2;17402:3;17398:12;17391:19;;17050:366;;;:::o;17422:419::-;17588:4;17626:2;17615:9;17611:18;17603:26;;17675:9;17669:4;17665:20;17661:1;17650:9;17646:17;17639:47;17703:131;17829:4;17703:131;:::i;:::-;17695:139;;17422:419;;;:::o;17847:236::-;17987:34;17983:1;17975:6;17971:14;17964:58;18056:19;18051:2;18043:6;18039:15;18032:44;17847:236;:::o;18089:366::-;18231:3;18252:67;18316:2;18311:3;18252:67;:::i;:::-;18245:74;;18328:93;18417:3;18328:93;:::i;:::-;18446:2;18441:3;18437:12;18430:19;;18089:366;;;:::o;18461:419::-;18627:4;18665:2;18654:9;18650:18;18642:26;;18714:9;18708:4;18704:20;18700:1;18689:9;18685:17;18678:47;18742:131;18868:4;18742:131;:::i;:::-;18734:139;;18461:419;;;:::o;18886:182::-;19026:34;19022:1;19014:6;19010:14;19003:58;18886:182;:::o;19074:366::-;19216:3;19237:67;19301:2;19296:3;19237:67;:::i;:::-;19230:74;;19313:93;19402:3;19313:93;:::i;:::-;19431:2;19426:3;19422:12;19415:19;;19074:366;;;:::o;19446:419::-;19612:4;19650:2;19639:9;19635:18;19627:26;;19699:9;19693:4;19689:20;19685:1;19674:9;19670:17;19663:47;19727:131;19853:4;19727:131;:::i;:::-;19719:139;;19446:419;;;:::o;19871:228::-;20011:34;20007:1;19999:6;19995:14;19988:58;20080:11;20075:2;20067:6;20063:15;20056:36;19871:228;:::o;20105:366::-;20247:3;20268:67;20332:2;20327:3;20268:67;:::i;:::-;20261:74;;20344:93;20433:3;20344:93;:::i;:::-;20462:2;20457:3;20453:12;20446:19;;20105:366;;;:::o;20477:419::-;20643:4;20681:2;20670:9;20666:18;20658:26;;20730:9;20724:4;20720:20;20716:1;20705:9;20701:17;20694:47;20758:131;20884:4;20758:131;:::i;:::-;20750:139;;20477:419;;;:::o;20902:229::-;21042:34;21038:1;21030:6;21026:14;21019:58;21111:12;21106:2;21098:6;21094:15;21087:37;20902:229;:::o;21137:366::-;21279:3;21300:67;21364:2;21359:3;21300:67;:::i;:::-;21293:74;;21376:93;21465:3;21376:93;:::i;:::-;21494:2;21489:3;21485:12;21478:19;;21137:366;;;:::o;21509:419::-;21675:4;21713:2;21702:9;21698:18;21690:26;;21762:9;21756:4;21752:20;21748:1;21737:9;21733:17;21726:47;21790:131;21916:4;21790:131;:::i;:::-;21782:139;;21509:419;;;:::o;21934:180::-;21982:77;21979:1;21972:88;22079:4;22076:1;22069:15;22103:4;22100:1;22093:15;22120:180;22168:77;22165:1;22158:88;22265:4;22262:1;22255:15;22289:4;22286:1;22279:15;22306:233;22345:3;22368:24;22386:5;22368:24;:::i;:::-;22359:33;;22414:66;22407:5;22404:77;22401:103;;;22484:18;;:::i;:::-;22401:103;22531:1;22524:5;22520:13;22513:20;;22306:233;;;:::o;22545:223::-;22685:34;22681:1;22673:6;22669:14;22662:58;22754:6;22749:2;22741:6;22737:15;22730:31;22545:223;:::o;22774:366::-;22916:3;22937:67;23001:2;22996:3;22937:67;:::i;:::-;22930:74;;23013:93;23102:3;23013:93;:::i;:::-;23131:2;23126:3;23122:12;23115:19;;22774:366;;;:::o;23146:419::-;23312:4;23350:2;23339:9;23335:18;23327:26;;23399:9;23393:4;23389:20;23385:1;23374:9;23370:17;23363:47;23427:131;23553:4;23427:131;:::i;:::-;23419:139;;23146:419;;;:::o;23571:148::-;23673:11;23710:3;23695:18;;23571:148;;;;:::o;23725:141::-;23774:4;23797:3;23789:11;;23820:3;23817:1;23810:14;23854:4;23851:1;23841:18;23833:26;;23725:141;;;:::o;23896:845::-;23999:3;24036:5;24030:12;24065:36;24091:9;24065:36;:::i;:::-;24117:89;24199:6;24194:3;24117:89;:::i;:::-;24110:96;;24237:1;24226:9;24222:17;24253:1;24248:137;;;;24399:1;24394:341;;;;24215:520;;24248:137;24332:4;24328:9;24317;24313:25;24308:3;24301:38;24368:6;24363:3;24359:16;24352:23;;24248:137;;24394:341;24461:38;24493:5;24461:38;:::i;:::-;24521:1;24535:154;24549:6;24546:1;24543:13;24535:154;;;24623:7;24617:14;24613:1;24608:3;24604:11;24597:35;24673:1;24664:7;24660:15;24649:26;;24571:4;24568:1;24564:12;24559:17;;24535:154;;;24718:6;24713:3;24709:16;24702:23;;24401:334;;24215:520;;24003:738;;23896:845;;;;:::o;24747:377::-;24853:3;24881:39;24914:5;24881:39;:::i;:::-;24936:89;25018:6;25013:3;24936:89;:::i;:::-;24929:96;;25034:52;25079:6;25074:3;25067:4;25060:5;25056:16;25034:52;:::i;:::-;25111:6;25106:3;25102:16;25095:23;;24857:267;24747:377;;;;:::o;25130:155::-;25270:7;25266:1;25258:6;25254:14;25247:31;25130:155;:::o;25291:400::-;25451:3;25472:84;25554:1;25549:3;25472:84;:::i;:::-;25465:91;;25565:93;25654:3;25565:93;:::i;:::-;25683:1;25678:3;25674:11;25667:18;;25291:400;;;:::o;25697:695::-;25975:3;25997:92;26085:3;26076:6;25997:92;:::i;:::-;25990:99;;26106:95;26197:3;26188:6;26106:95;:::i;:::-;26099:102;;26218:148;26362:3;26218:148;:::i;:::-;26211:155;;26383:3;26376:10;;25697:695;;;;;:::o;26398:225::-;26538:34;26534:1;26526:6;26522:14;26515:58;26607:8;26602:2;26594:6;26590:15;26583:33;26398:225;:::o;26629:366::-;26771:3;26792:67;26856:2;26851:3;26792:67;:::i;:::-;26785:74;;26868:93;26957:3;26868:93;:::i;:::-;26986:2;26981:3;26977:12;26970:19;;26629:366;;;:::o;27001:419::-;27167:4;27205:2;27194:9;27190:18;27182:26;;27254:9;27248:4;27244:20;27240:1;27229:9;27225:17;27218:47;27282:131;27408:4;27282:131;:::i;:::-;27274:139;;27001:419;;;:::o;27426:231::-;27566:34;27562:1;27554:6;27550:14;27543:58;27635:14;27630:2;27622:6;27618:15;27611:39;27426:231;:::o;27663:366::-;27805:3;27826:67;27890:2;27885:3;27826:67;:::i;:::-;27819:74;;27902:93;27991:3;27902:93;:::i;:::-;28020:2;28015:3;28011:12;28004:19;;27663:366;;;:::o;28035:419::-;28201:4;28239:2;28228:9;28224:18;28216:26;;28288:9;28282:4;28278:20;28274:1;28263:9;28259:17;28252:47;28316:131;28442:4;28316:131;:::i;:::-;28308:139;;28035:419;;;:::o;28460:228::-;28600:34;28596:1;28588:6;28584:14;28577:58;28669:11;28664:2;28656:6;28652:15;28645:36;28460:228;:::o;28694:366::-;28836:3;28857:67;28921:2;28916:3;28857:67;:::i;:::-;28850:74;;28933:93;29022:3;28933:93;:::i;:::-;29051:2;29046:3;29042:12;29035:19;;28694:366;;;:::o;29066:419::-;29232:4;29270:2;29259:9;29255:18;29247:26;;29319:9;29313:4;29309:20;29305:1;29294:9;29290:17;29283:47;29347:131;29473:4;29347:131;:::i;:::-;29339:139;;29066:419;;;:::o;29491:223::-;29631:34;29627:1;29619:6;29615:14;29608:58;29700:6;29695:2;29687:6;29683:15;29676:31;29491:223;:::o;29720:366::-;29862:3;29883:67;29947:2;29942:3;29883:67;:::i;:::-;29876:74;;29959:93;30048:3;29959:93;:::i;:::-;30077:2;30072:3;30068:12;30061:19;;29720:366;;;:::o;30092:419::-;30258:4;30296:2;30285:9;30281:18;30273:26;;30345:9;30339:4;30335:20;30331:1;30320:9;30316:17;30309:47;30373:131;30499:4;30373:131;:::i;:::-;30365:139;;30092:419;;;:::o;30517:191::-;30557:4;30577:20;30595:1;30577:20;:::i;:::-;30572:25;;30611:20;30629:1;30611:20;:::i;:::-;30606:25;;30650:1;30647;30644:8;30641:34;;;30655:18;;:::i;:::-;30641:34;30700:1;30697;30693:9;30685:17;;30517:191;;;;:::o;30714:305::-;30754:3;30773:20;30791:1;30773:20;:::i;:::-;30768:25;;30807:20;30825:1;30807:20;:::i;:::-;30802:25;;30961:1;30893:66;30889:74;30886:1;30883:81;30880:107;;;30967:18;;:::i;:::-;30880:107;31011:1;31008;31004:9;30997:16;;30714:305;;;;:::o;31025:175::-;31165:27;31161:1;31153:6;31149:14;31142:51;31025:175;:::o;31206:366::-;31348:3;31369:67;31433:2;31428:3;31369:67;:::i;:::-;31362:74;;31445:93;31534:3;31445:93;:::i;:::-;31563:2;31558:3;31554:12;31547:19;;31206:366;;;:::o;31578:419::-;31744:4;31782:2;31771:9;31767:18;31759:26;;31831:9;31825:4;31821:20;31817:1;31806:9;31802:17;31795:47;31859:131;31985:4;31859:131;:::i;:::-;31851:139;;31578:419;;;:::o;32003:237::-;32143:34;32139:1;32131:6;32127:14;32120:58;32212:20;32207:2;32199:6;32195:15;32188:45;32003:237;:::o;32246:366::-;32388:3;32409:67;32473:2;32468:3;32409:67;:::i;:::-;32402:74;;32485:93;32574:3;32485:93;:::i;:::-;32603:2;32598:3;32594:12;32587:19;;32246:366;;;:::o;32618:419::-;32784:4;32822:2;32811:9;32807:18;32799:26;;32871:9;32865:4;32861:20;32857:1;32846:9;32842:17;32835:47;32899:131;33025:4;32899:131;:::i;:::-;32891:139;;32618:419;;;:::o;33043:180::-;33091:77;33088:1;33081:88;33188:4;33185:1;33178:15;33212:4;33209:1;33202:15;33229:185;33269:1;33286:20;33304:1;33286:20;:::i;:::-;33281:25;;33320:20;33338:1;33320:20;:::i;:::-;33315:25;;33359:1;33349:35;;33364:18;;:::i;:::-;33349:35;33406:1;33403;33399:9;33394:14;;33229:185;;;;:::o;33420:176::-;33452:1;33469:20;33487:1;33469:20;:::i;:::-;33464:25;;33503:20;33521:1;33503:20;:::i;:::-;33498:25;;33542:1;33532:35;;33547:18;;:::i;:::-;33532:35;33588:1;33585;33581:9;33576:14;;33420:176;;;;:::o;33602:98::-;33653:6;33687:5;33681:12;33671:22;;33602:98;;;:::o;33706:168::-;33789:11;33823:6;33818:3;33811:19;33863:4;33858:3;33854:14;33839:29;;33706:168;;;;:::o;33880:360::-;33966:3;33994:38;34026:5;33994:38;:::i;:::-;34048:70;34111:6;34106:3;34048:70;:::i;:::-;34041:77;;34127:52;34172:6;34167:3;34160:4;34153:5;34149:16;34127:52;:::i;:::-;34204:29;34226:6;34204:29;:::i;:::-;34199:3;34195:39;34188:46;;33970:270;33880:360;;;;:::o;34246:640::-;34441:4;34479:3;34468:9;34464:19;34456:27;;34493:71;34561:1;34550:9;34546:17;34537:6;34493:71;:::i;:::-;34574:72;34642:2;34631:9;34627:18;34618:6;34574:72;:::i;:::-;34656;34724:2;34713:9;34709:18;34700:6;34656:72;:::i;:::-;34775:9;34769:4;34765:20;34760:2;34749:9;34745:18;34738:48;34803:76;34874:4;34865:6;34803:76;:::i;:::-;34795:84;;34246:640;;;;;;;:::o;34892:141::-;34948:5;34979:6;34973:13;34964:22;;34995:32;35021:5;34995:32;:::i;:::-;34892:141;;;;:::o;35039:349::-;35108:6;35157:2;35145:9;35136:7;35132:23;35128:32;35125:119;;;35163:79;;:::i;:::-;35125:119;35283:1;35308:63;35363:7;35354:6;35343:9;35339:22;35308:63;:::i;:::-;35298:73;;35254:127;35039:349;;;;:::o;35394:182::-;35534:34;35530:1;35522:6;35518:14;35511:58;35394:182;:::o;35582:366::-;35724:3;35745:67;35809:2;35804:3;35745:67;:::i;:::-;35738:74;;35821:93;35910:3;35821:93;:::i;:::-;35939:2;35934:3;35930:12;35923:19;;35582:366;;;:::o;35954:419::-;36120:4;36158:2;36147:9;36143:18;36135:26;;36207:9;36201:4;36197:20;36193:1;36182:9;36178:17;36171:47;36235:131;36361:4;36235:131;:::i;:::-;36227:139;;35954:419;;;:::o;36379:178::-;36519:30;36515:1;36507:6;36503:14;36496:54;36379:178;:::o;36563:366::-;36705:3;36726:67;36790:2;36785:3;36726:67;:::i;:::-;36719:74;;36802:93;36891:3;36802:93;:::i;:::-;36920:2;36915:3;36911:12;36904:19;;36563:366;;;:::o;36935:419::-;37101:4;37139:2;37128:9;37124:18;37116:26;;37188:9;37182:4;37178:20;37174:1;37163:9;37159:17;37152:47;37216:131;37342:4;37216:131;:::i;:::-;37208:139;;36935:419;;;:::o
Swarm Source
ipfs://d3a0baf70c2ec8a513f44c14b31be38b6a1a670e9cc0db43ae7008c2147e01d9
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.