Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 53 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 17525864 | 989 days ago | IN | 0 ETH | 0.0006315 | ||||
| Mint | 15400139 | 1290 days ago | IN | 0 ETH | 0.00173737 | ||||
| Mint | 15400131 | 1290 days ago | IN | 0 ETH | 0.00174231 | ||||
| Mint | 15400120 | 1290 days ago | IN | 0 ETH | 0.00267054 | ||||
| Set Approval For... | 14215545 | 1479 days ago | IN | 0 ETH | 0.00270497 | ||||
| Transfer From | 13454179 | 1598 days ago | IN | 0 ETH | 0.00445272 | ||||
| Mint | 13323261 | 1619 days ago | IN | 0 ETH | 0.01476416 | ||||
| Mint | 13175887 | 1641 days ago | IN | 0 ETH | 0.01492684 | ||||
| Mint | 13172343 | 1642 days ago | IN | 0 ETH | 0.01453848 | ||||
| Mint | 13169241 | 1642 days ago | IN | 0 ETH | 0.01479992 | ||||
| Mint | 13169237 | 1642 days ago | IN | 0 ETH | 0.01479992 | ||||
| Mint | 13168648 | 1643 days ago | IN | 0 ETH | 0.01362679 | ||||
| Mint | 13168540 | 1643 days ago | IN | 0 ETH | 0.01845638 | ||||
| Mint | 13168524 | 1643 days ago | IN | 0 ETH | 0.01880461 | ||||
| Mint | 13168514 | 1643 days ago | IN | 0 ETH | 0.01863049 | ||||
| Mint | 13168365 | 1643 days ago | IN | 0 ETH | 0.02246106 | ||||
| Mint | 13168361 | 1643 days ago | IN | 0 ETH | 0.02054578 | ||||
| Mint | 13168357 | 1643 days ago | IN | 0 ETH | 0.02054578 | ||||
| Set Approval For... | 13167742 | 1643 days ago | IN | 0 ETH | 0.00492356 | ||||
| Mint | 13165286 | 1643 days ago | IN | 0 ETH | 0.01139967 | ||||
| Mint | 13162964 | 1643 days ago | IN | 0 ETH | 0.02108393 | ||||
| Mint | 13162851 | 1643 days ago | IN | 0 ETH | 0.01497404 | ||||
| Mint | 13162849 | 1643 days ago | IN | 0 ETH | 0.01470916 | ||||
| Mint | 13162009 | 1644 days ago | IN | 0 ETH | 0.01601526 | ||||
| Mint | 13160419 | 1644 days ago | IN | 0 ETH | 0.02596649 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
NumbersNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-09-08
*/
// Sources flattened with hardhat v2.6.2 https://hardhat.org
// File @openzeppelin/contracts/utils/introspection/IERC165.sol@v4.3.1
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@v4.3.1
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@v4.3.1
// SPDX-License-Identifier: MIT
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@v4.3.1
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@v4.3.1
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@v4.3.1
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@v4.3.1
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@v4.3.1
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@v4.3.1
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol@v4.3.1
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol@v4.3.1
pragma solidity ^0.8.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File @openzeppelin/contracts/security/ReentrancyGuard.sol@v4.3.1
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File contracts/NumbersNFT.sol
pragma solidity ^0.8.0;
contract NumbersNFT is ERC721Enumerable, ReentrancyGuard {
uint256 constant maxSupply = 10000;
uint256 lastMintedId = 10001;
uint public lastMintedInBlock;
constructor(uint256[10] memory Initial) ERC721("Numbers", "N") {
for (uint i=0; i<Initial.length; i++) {
_safeMint(_msgSender(), Initial[i]);
}
}
function random(uint256 seed) internal pure returns (uint256) {
return uint256(keccak256(abi.encodePacked(seed)));
}
function truncate(uint256 input, uint256 base) internal pure returns (uint256) {
return input % base;
}
function mint() public nonReentrant {
require(block.number != lastMintedInBlock, "Already one mint in this block");
lastMintedInBlock = block.number;
uint256 output = random(lastMintedId);
uint256 idToMint= truncate(output, maxSupply);
while (_exists(idToMint)) {
output = random(output);
idToMint = truncate(output, maxSupply);
}
lastMintedId = idToMint;
_safeMint(_msgSender(), idToMint);
}
function getText(uint256 tokenId) public view returns (string memory) {
return Strings.toString(tokenId);
}
function tokenURI(uint256 tokenId) override public view returns (string memory) {
string[3] memory parts;
parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: monospace; font-size: 60px; }</style><rect width="100%" height="100%" fill="black" /><text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" class="base">';
parts[1] = getText(tokenId);
parts[2] = '</text></svg>';
string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2]));
string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Number ', Strings.toString(tokenId), '", "description": "Numbers NFT - Spans the numbers 1 to 9999. Nothing more to it.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}'))));
output = string(abi.encodePacked('data:application/json;base64,', json));
return output;
}
}
/// [MIT License]
/// @title Base64
/// @notice Provides a function for encoding some bytes in base64
/// @author Brecht Devos <brecht@loopring.org>
library Base64 {
bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/// @notice Encodes some bytes to the base64 representation
function encode(bytes memory data) internal pure returns (string memory) {
uint256 len = data.length;
if (len == 0) return "";
// multiply by 4/3 rounded up
uint256 encodedLen = 4 * ((len + 2) / 3);
// Add some extra buffer at the end
bytes memory result = new bytes(encodedLen + 32);
bytes memory table = TABLE;
assembly {
let tablePtr := add(table, 1)
let resultPtr := add(result, 32)
for {
let i := 0
} lt(i, len) {
} {
i := add(i, 3)
let input := and(mload(add(data, i)), 0xffffff)
let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
out := shl(8, out)
out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
out := shl(8, out)
out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
out := shl(8, out)
out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
out := shl(224, out)
mstore(resultPtr, out)
resultPtr := add(resultPtr, 4)
}
switch mod(len, 3)
case 1 {
mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
}
case 2 {
mstore(sub(resultPtr, 1), shl(248, 0x3d))
}
mstore(result, encodedLen)
}
return string(result);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256[10]","name":"Initial","type":"uint256[10]"}],"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":"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":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getText","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMintedInBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052612711600b553480156200001757600080fd5b50604051620028a1380380620028a18339810160408190526200003a9162000819565b60408051808201825260078152664e756d6265727360c81b6020808301918252835180850190945260018452602760f91b908401528151919291620000829160009162000773565b5080516200009890600190602084019062000773565b50506001600a555060005b600a811015620000e757620000d2338383600a8110620000c757620000c762000a13565b6020020151620000ef565b80620000de81620009c9565b915050620000a3565b505062000a3f565b620001118282604051806020016040528060008152506200011560201b60201c565b5050565b62000121838362000191565b620001306000848484620002e7565b6200018c5760405162461bcd60e51b815260206004820152603260248201526000805160206200288183398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084015b60405180910390fd5b505050565b6001600160a01b038216620001e95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640162000183565b6000818152600260205260409020546001600160a01b031615620002505760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000183565b6200025e6000838362000450565b6001600160a01b03821660009081526003602052604081208054600192906200028990849062000957565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600062000308846001600160a01b03166200052c60201b62000ad31760201c565b156200044457604051630a85bd0160e11b81526001600160a01b0385169063150b7a029062000342903390899088908890600401620008dc565b602060405180830381600087803b1580156200035d57600080fd5b505af192505050801562000390575060408051601f3d908101601f191682019092526200038d91810190620008a9565b60015b62000429573d808015620003c1576040519150601f19603f3d011682016040523d82523d6000602084013e620003c6565b606091505b508051620004215760405162461bcd60e51b815260206004820152603260248201526000805160206200288183398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000183565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062000448565b5060015b949350505050565b620004688383836200018c60201b620005301760201c565b6001600160a01b038316620004c657620004c081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b620004ec565b816001600160a01b0316836001600160a01b031614620004ec57620004ec838262000532565b6001600160a01b03821662000506576200018c81620005df565b826001600160a01b0316826001600160a01b0316146200018c576200018c828262000699565b3b151590565b600060016200054c84620006ea60201b620008441760201c565b62000558919062000972565b600083815260076020526040902054909150808214620005ac576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090620005f39060019062000972565b600083815260096020526040812054600880549394509092849081106200061e576200061e62000a13565b90600052602060002001549050806008838154811062000642576200064262000a13565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806200067d576200067d620009fd565b6001900381819060005260206000200160009055905550505050565b6000620006b183620006ea60201b620008441760201c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b038216620007575760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840162000183565b506001600160a01b031660009081526003602052604090205490565b82805462000781906200098c565b90600052602060002090601f016020900481019282620007a55760008555620007f0565b82601f10620007c057805160ff1916838001178555620007f0565b82800160010185558215620007f0579182015b82811115620007f0578251825591602001919060010190620007d3565b50620007fe92915062000802565b5090565b5b80821115620007fe576000815560010162000803565b60006101408083850312156200082e57600080fd5b83601f8401126200083e57600080fd5b6040518181016001600160401b038111828210171562000862576200086262000a29565b60405280848381018710156200087757600080fd5b600093505b600a8410156200089e578051825260019390930192602091820191016200087c565b509095945050505050565b600060208284031215620008bc57600080fd5b81516001600160e01b031981168114620008d557600080fd5b9392505050565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b828110156200092b5785810182015185820160a0015281016200090d565b828111156200093e57600060a084870101525b5050601f01601f19169190910160a00195945050505050565b600082198211156200096d576200096d620009e7565b500190565b600082821015620009875762000987620009e7565b500390565b600181811c90821680620009a157607f821691505b60208210811415620009c357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620009e057620009e0620009e7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b611e328062000a4f6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806342842e0e116100ad57806395d89b411161007157806395d89b411461024b578063a22cb46514610253578063b88d4fde14610266578063c87b56dd14610279578063e985e9c51461028c57600080fd5b806342842e0e146101ec5780634f6ccce7146101ff5780636352211e1461021257806370a08231146102255780637f4ef9d41461023857600080fd5b80631249c58b116100f45780631249c58b146101a357806318160ddd146101ab57806323b872dd146101bd5780632f745c59146101d0578063341928c5146101e357600080fd5b806301ffc9a71461012657806306fdde031461014e578063081812fc14610163578063095ea7b31461018e575b600080fd5b610139610134366004611819565b6102c8565b60405190151581526020015b60405180910390f35b6101566102f3565b6040516101459190611a54565b610176610171366004611853565b610385565b6040516001600160a01b039091168152602001610145565b6101a161019c3660046117ef565b61041f565b005b6101a1610535565b6008545b604051908152602001610145565b6101a16101cb36600461169b565b610658565b6101af6101de3660046117ef565b610689565b6101af600c5481565b6101a16101fa36600461169b565b61071f565b6101af61020d366004611853565b61073a565b610176610220366004611853565b6107cd565b6101af61023336600461164d565b610844565b610156610246366004611853565b6108cb565b6101566108d6565b6101a16102613660046117b3565b6108e5565b6101a16102743660046116d7565b6109aa565b610156610287366004611853565b6109e2565b61013961029a366004611668565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b0319821663780e9d6360e01b14806102ed57506102ed82610ad9565b92915050565b60606000805461030290611b98565b80601f016020809104026020016040519081016040528092919081815260200182805461032e90611b98565b801561037b5780601f106103505761010080835404028352916020019161037b565b820191906000526020600020905b81548152906001019060200180831161035e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166104035760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061042a826107cd565b9050806001600160a01b0316836001600160a01b031614156104985760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016103fa565b336001600160a01b03821614806104b457506104b4813361029a565b6105265760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016103fa565b6105308383610b29565b505050565b6002600a5414156105885760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103fa565b6002600a55600c544314156105df5760405162461bcd60e51b815260206004820152601e60248201527f416c7265616479206f6e65206d696e7420696e207468697320626c6f636b000060448201526064016103fa565b43600c55600b546000906105f290610b97565b9050600061060282612710610bca565b90505b6000818152600260205260409020546001600160a01b0316156106405761062b82610b97565b915061063982612710610bca565b9050610605565b600b81905561064f3382610bdd565b50506001600a55565b6106623382610bfb565b61067e5760405162461bcd60e51b81526004016103fa90611ab9565b610530838383610cf2565b600061069483610844565b82106106f65760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016103fa565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610530838383604051806020016040528060008152506109aa565b600061074560085490565b82106107a85760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016103fa565b600882815481106107bb576107bb611c44565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806102ed5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016103fa565b60006001600160a01b0382166108af5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016103fa565b506001600160a01b031660009081526003602052604090205490565b60606102ed82610e9d565b60606001805461030290611b98565b6001600160a01b03821633141561093e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103fa565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109b43383610bfb565b6109d05760405162461bcd60e51b81526004016103fa90611ab9565b6109dc84848484610f9b565b50505050565b60606109ec61160a565b6040518061016001604052806101338152602001611cca61013391398152610a13836108cb565b6020828101918252604080518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b81840152818501819052845193519151600094610a5a949093929101611898565b60405160208183030381529060405290506000610aa7610a7986610e9d565b610a8284610fce565b604051602001610a93929190611920565b604051602081830303815290604052610fce565b905080604051602001610aba91906118db565b60408051601f1981840301815291905295945050505050565b3b151590565b60006001600160e01b031982166380ac58cd60e01b1480610b0a57506001600160e01b03198216635b5e139f60e01b145b806102ed57506301ffc9a760e01b6001600160e01b03198316146102ed565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610b5e826107cd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081604051602001610bac91815260200190565b60408051601f19818403018152919052805160209091012092915050565b6000610bd68284611bee565b9392505050565b610bf7828260405180602001604052806000815250611134565b5050565b6000818152600260205260408120546001600160a01b0316610c745760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016103fa565b6000610c7f836107cd565b9050806001600160a01b0316846001600160a01b03161480610cba5750836001600160a01b0316610caf84610385565b6001600160a01b0316145b80610cea57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610d05826107cd565b6001600160a01b031614610d6d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016103fa565b6001600160a01b038216610dcf5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103fa565b610dda838383611167565b610de5600082610b29565b6001600160a01b0383166000908152600360205260408120805460019290610e0e908490611b55565b90915550506001600160a01b0382166000908152600360205260408120805460019290610e3c908490611b0a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b606081610ec15750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610eeb5780610ed581611bd3565b9150610ee49050600a83611b22565b9150610ec5565b60008167ffffffffffffffff811115610f0657610f06611c5a565b6040519080825280601f01601f191660200182016040528015610f30576020820181803683370190505b5090505b8415610cea57610f45600183611b55565b9150610f52600a86611bee565b610f5d906030611b0a565b60f81b818381518110610f7257610f72611c44565b60200101906001600160f81b031916908160001a905350610f94600a86611b22565b9450610f34565b610fa6848484610cf2565b610fb28484848461121f565b6109dc5760405162461bcd60e51b81526004016103fa90611a67565b805160609080610fee575050604080516020810190915260008152919050565b60006003610ffd836002611b0a565b6110079190611b22565b611012906004611b36565b90506000611021826020611b0a565b67ffffffffffffffff81111561103957611039611c5a565b6040519080825280601f01601f191660200182016040528015611063576020820181803683370190505b5090506000604051806060016040528060408152602001611c8a604091399050600181016020830160005b868110156110ef576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161108e565b506003860660018114611109576002811461111a57611126565b613d3d60f01b600119830152611126565b603d60f81b6000198301525b505050918152949350505050565b61113e838361132c565b61114b600084848461121f565b6105305760405162461bcd60e51b81526004016103fa90611a67565b6001600160a01b0383166111c2576111bd81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6111e5565b816001600160a01b0316836001600160a01b0316146111e5576111e5838261147a565b6001600160a01b0382166111fc5761053081611517565b826001600160a01b0316826001600160a01b0316146105305761053082826115c6565b60006001600160a01b0384163b1561132157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611263903390899088908890600401611a17565b602060405180830381600087803b15801561127d57600080fd5b505af19250505080156112ad575060408051601f3d908101601f191682019092526112aa91810190611836565b60015b611307573d8080156112db576040519150601f19603f3d011682016040523d82523d6000602084013e6112e0565b606091505b5080516112ff5760405162461bcd60e51b81526004016103fa90611a67565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610cea565b506001949350505050565b6001600160a01b0382166113825760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103fa565b6000818152600260205260409020546001600160a01b0316156113e75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103fa565b6113f360008383611167565b6001600160a01b038216600090815260036020526040812080546001929061141c908490611b0a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000600161148784610844565b6114919190611b55565b6000838152600760205260409020549091508082146114e4576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061152990600190611b55565b6000838152600960205260408120546008805493945090928490811061155157611551611c44565b90600052602060002001549050806008838154811061157257611572611c44565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806115aa576115aa611c2e565b6001900381819060005260206000200160009055905550505050565b60006115d183610844565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60405180606001604052806003905b60608152602001906001900390816116195790505090565b80356001600160a01b038116811461164857600080fd5b919050565b60006020828403121561165f57600080fd5b610bd682611631565b6000806040838503121561167b57600080fd5b61168483611631565b915061169260208401611631565b90509250929050565b6000806000606084860312156116b057600080fd5b6116b984611631565b92506116c760208501611631565b9150604084013590509250925092565b600080600080608085870312156116ed57600080fd5b6116f685611631565b935061170460208601611631565b925060408501359150606085013567ffffffffffffffff8082111561172857600080fd5b818701915087601f83011261173c57600080fd5b81358181111561174e5761174e611c5a565b604051601f8201601f19908116603f0116810190838211818310171561177657611776611c5a565b816040528281528a602084870101111561178f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156117c657600080fd5b6117cf83611631565b9150602083013580151581146117e457600080fd5b809150509250929050565b6000806040838503121561180257600080fd5b61180b83611631565b946020939093013593505050565b60006020828403121561182b57600080fd5b8135610bd681611c70565b60006020828403121561184857600080fd5b8151610bd681611c70565b60006020828403121561186557600080fd5b5035919050565b60008151808452611884816020860160208601611b6c565b601f01601f19169290920160200192915050565b600084516118aa818460208901611b6c565b8451908301906118be818360208901611b6c565b84519101906118d1818360208801611b6c565b0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161191381601d850160208701611b6c565b91909101601d0192915050565b7003d913730b6b2911d1011273ab6b132b91607d1b8152825160009061194d816011850160208801611b6c565b7f222c20226465736372697074696f6e223a20224e756d62657273204e4654202d6011918401918201527f205370616e7320746865206e756d62657273203120746f20393939392e204e6f60318201527f7468696e67206d6f726520746f2069742e222c2022696d616765223a2022646160518201527f74613a696d6167652f7376672b786d6c3b6261736536342c0000000000000000607182015283516119fc816089840160208801611b6c565b61227d60f01b60899290910191820152608b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611a4a9083018461186c565b9695505050505050565b602081526000610bd6602083018461186c565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611b1d57611b1d611c02565b500190565b600082611b3157611b31611c18565b500490565b6000816000190483118215151615611b5057611b50611c02565b500290565b600082821015611b6757611b67611c02565b500390565b60005b83811015611b87578181015183820152602001611b6f565b838111156109dc5750506000910152565b600181811c90821680611bac57607f821691505b60208210811415611bcd57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611be757611be7611c02565b5060010190565b600082611bfd57611bfd611c18565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611c8657600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a206d6f6e6f73706163653b20666f6e742d73697a653a20363070783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d223530252220793d223530252220646f6d696e616e742d626173656c696e653d226d6964646c652220746578742d616e63686f723d226d6964646c652220636c6173733d2262617365223ea2646970667358221220a40436c1dce53a00f12ea7374ddde635fdced3c241b091d0fbc9476771e22a7d64736f6c634300080700334552433732313a207472616e7366657220746f206e6f6e204552433732315265000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000039000000000000000000000000000000000000000000000000000000000000032300000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000007c700000000000000000000000000000000000000000000000000000000000004bb000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000005d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c806342842e0e116100ad57806395d89b411161007157806395d89b411461024b578063a22cb46514610253578063b88d4fde14610266578063c87b56dd14610279578063e985e9c51461028c57600080fd5b806342842e0e146101ec5780634f6ccce7146101ff5780636352211e1461021257806370a08231146102255780637f4ef9d41461023857600080fd5b80631249c58b116100f45780631249c58b146101a357806318160ddd146101ab57806323b872dd146101bd5780632f745c59146101d0578063341928c5146101e357600080fd5b806301ffc9a71461012657806306fdde031461014e578063081812fc14610163578063095ea7b31461018e575b600080fd5b610139610134366004611819565b6102c8565b60405190151581526020015b60405180910390f35b6101566102f3565b6040516101459190611a54565b610176610171366004611853565b610385565b6040516001600160a01b039091168152602001610145565b6101a161019c3660046117ef565b61041f565b005b6101a1610535565b6008545b604051908152602001610145565b6101a16101cb36600461169b565b610658565b6101af6101de3660046117ef565b610689565b6101af600c5481565b6101a16101fa36600461169b565b61071f565b6101af61020d366004611853565b61073a565b610176610220366004611853565b6107cd565b6101af61023336600461164d565b610844565b610156610246366004611853565b6108cb565b6101566108d6565b6101a16102613660046117b3565b6108e5565b6101a16102743660046116d7565b6109aa565b610156610287366004611853565b6109e2565b61013961029a366004611668565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b0319821663780e9d6360e01b14806102ed57506102ed82610ad9565b92915050565b60606000805461030290611b98565b80601f016020809104026020016040519081016040528092919081815260200182805461032e90611b98565b801561037b5780601f106103505761010080835404028352916020019161037b565b820191906000526020600020905b81548152906001019060200180831161035e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166104035760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061042a826107cd565b9050806001600160a01b0316836001600160a01b031614156104985760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016103fa565b336001600160a01b03821614806104b457506104b4813361029a565b6105265760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016103fa565b6105308383610b29565b505050565b6002600a5414156105885760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103fa565b6002600a55600c544314156105df5760405162461bcd60e51b815260206004820152601e60248201527f416c7265616479206f6e65206d696e7420696e207468697320626c6f636b000060448201526064016103fa565b43600c55600b546000906105f290610b97565b9050600061060282612710610bca565b90505b6000818152600260205260409020546001600160a01b0316156106405761062b82610b97565b915061063982612710610bca565b9050610605565b600b81905561064f3382610bdd565b50506001600a55565b6106623382610bfb565b61067e5760405162461bcd60e51b81526004016103fa90611ab9565b610530838383610cf2565b600061069483610844565b82106106f65760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016103fa565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610530838383604051806020016040528060008152506109aa565b600061074560085490565b82106107a85760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016103fa565b600882815481106107bb576107bb611c44565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806102ed5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016103fa565b60006001600160a01b0382166108af5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016103fa565b506001600160a01b031660009081526003602052604090205490565b60606102ed82610e9d565b60606001805461030290611b98565b6001600160a01b03821633141561093e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103fa565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109b43383610bfb565b6109d05760405162461bcd60e51b81526004016103fa90611ab9565b6109dc84848484610f9b565b50505050565b60606109ec61160a565b6040518061016001604052806101338152602001611cca61013391398152610a13836108cb565b6020828101918252604080518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b81840152818501819052845193519151600094610a5a949093929101611898565b60405160208183030381529060405290506000610aa7610a7986610e9d565b610a8284610fce565b604051602001610a93929190611920565b604051602081830303815290604052610fce565b905080604051602001610aba91906118db565b60408051601f1981840301815291905295945050505050565b3b151590565b60006001600160e01b031982166380ac58cd60e01b1480610b0a57506001600160e01b03198216635b5e139f60e01b145b806102ed57506301ffc9a760e01b6001600160e01b03198316146102ed565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610b5e826107cd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081604051602001610bac91815260200190565b60408051601f19818403018152919052805160209091012092915050565b6000610bd68284611bee565b9392505050565b610bf7828260405180602001604052806000815250611134565b5050565b6000818152600260205260408120546001600160a01b0316610c745760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016103fa565b6000610c7f836107cd565b9050806001600160a01b0316846001600160a01b03161480610cba5750836001600160a01b0316610caf84610385565b6001600160a01b0316145b80610cea57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610d05826107cd565b6001600160a01b031614610d6d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016103fa565b6001600160a01b038216610dcf5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103fa565b610dda838383611167565b610de5600082610b29565b6001600160a01b0383166000908152600360205260408120805460019290610e0e908490611b55565b90915550506001600160a01b0382166000908152600360205260408120805460019290610e3c908490611b0a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b606081610ec15750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610eeb5780610ed581611bd3565b9150610ee49050600a83611b22565b9150610ec5565b60008167ffffffffffffffff811115610f0657610f06611c5a565b6040519080825280601f01601f191660200182016040528015610f30576020820181803683370190505b5090505b8415610cea57610f45600183611b55565b9150610f52600a86611bee565b610f5d906030611b0a565b60f81b818381518110610f7257610f72611c44565b60200101906001600160f81b031916908160001a905350610f94600a86611b22565b9450610f34565b610fa6848484610cf2565b610fb28484848461121f565b6109dc5760405162461bcd60e51b81526004016103fa90611a67565b805160609080610fee575050604080516020810190915260008152919050565b60006003610ffd836002611b0a565b6110079190611b22565b611012906004611b36565b90506000611021826020611b0a565b67ffffffffffffffff81111561103957611039611c5a565b6040519080825280601f01601f191660200182016040528015611063576020820181803683370190505b5090506000604051806060016040528060408152602001611c8a604091399050600181016020830160005b868110156110ef576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161108e565b506003860660018114611109576002811461111a57611126565b613d3d60f01b600119830152611126565b603d60f81b6000198301525b505050918152949350505050565b61113e838361132c565b61114b600084848461121f565b6105305760405162461bcd60e51b81526004016103fa90611a67565b6001600160a01b0383166111c2576111bd81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6111e5565b816001600160a01b0316836001600160a01b0316146111e5576111e5838261147a565b6001600160a01b0382166111fc5761053081611517565b826001600160a01b0316826001600160a01b0316146105305761053082826115c6565b60006001600160a01b0384163b1561132157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611263903390899088908890600401611a17565b602060405180830381600087803b15801561127d57600080fd5b505af19250505080156112ad575060408051601f3d908101601f191682019092526112aa91810190611836565b60015b611307573d8080156112db576040519150601f19603f3d011682016040523d82523d6000602084013e6112e0565b606091505b5080516112ff5760405162461bcd60e51b81526004016103fa90611a67565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610cea565b506001949350505050565b6001600160a01b0382166113825760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103fa565b6000818152600260205260409020546001600160a01b0316156113e75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103fa565b6113f360008383611167565b6001600160a01b038216600090815260036020526040812080546001929061141c908490611b0a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000600161148784610844565b6114919190611b55565b6000838152600760205260409020549091508082146114e4576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061152990600190611b55565b6000838152600960205260408120546008805493945090928490811061155157611551611c44565b90600052602060002001549050806008838154811061157257611572611c44565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806115aa576115aa611c2e565b6001900381819060005260206000200160009055905550505050565b60006115d183610844565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60405180606001604052806003905b60608152602001906001900390816116195790505090565b80356001600160a01b038116811461164857600080fd5b919050565b60006020828403121561165f57600080fd5b610bd682611631565b6000806040838503121561167b57600080fd5b61168483611631565b915061169260208401611631565b90509250929050565b6000806000606084860312156116b057600080fd5b6116b984611631565b92506116c760208501611631565b9150604084013590509250925092565b600080600080608085870312156116ed57600080fd5b6116f685611631565b935061170460208601611631565b925060408501359150606085013567ffffffffffffffff8082111561172857600080fd5b818701915087601f83011261173c57600080fd5b81358181111561174e5761174e611c5a565b604051601f8201601f19908116603f0116810190838211818310171561177657611776611c5a565b816040528281528a602084870101111561178f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156117c657600080fd5b6117cf83611631565b9150602083013580151581146117e457600080fd5b809150509250929050565b6000806040838503121561180257600080fd5b61180b83611631565b946020939093013593505050565b60006020828403121561182b57600080fd5b8135610bd681611c70565b60006020828403121561184857600080fd5b8151610bd681611c70565b60006020828403121561186557600080fd5b5035919050565b60008151808452611884816020860160208601611b6c565b601f01601f19169290920160200192915050565b600084516118aa818460208901611b6c565b8451908301906118be818360208901611b6c565b84519101906118d1818360208801611b6c565b0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161191381601d850160208701611b6c565b91909101601d0192915050565b7003d913730b6b2911d1011273ab6b132b91607d1b8152825160009061194d816011850160208801611b6c565b7f222c20226465736372697074696f6e223a20224e756d62657273204e4654202d6011918401918201527f205370616e7320746865206e756d62657273203120746f20393939392e204e6f60318201527f7468696e67206d6f726520746f2069742e222c2022696d616765223a2022646160518201527f74613a696d6167652f7376672b786d6c3b6261736536342c0000000000000000607182015283516119fc816089840160208801611b6c565b61227d60f01b60899290910191820152608b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611a4a9083018461186c565b9695505050505050565b602081526000610bd6602083018461186c565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611b1d57611b1d611c02565b500190565b600082611b3157611b31611c18565b500490565b6000816000190483118215151615611b5057611b50611c02565b500290565b600082821015611b6757611b67611c02565b500390565b60005b83811015611b87578181015183820152602001611b6f565b838111156109dc5750506000910152565b600181811c90821680611bac57607f821691505b60208210811415611bcd57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611be757611be7611c02565b5060010190565b600082611bfd57611bfd611c18565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611c8657600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a206d6f6e6f73706163653b20666f6e742d73697a653a20363070783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d223530252220793d223530252220646f6d696e616e742d626173656c696e653d226d6964646c652220746578742d616e63686f723d226d6964646c652220636c6173733d2262617365223ea2646970667358221220a40436c1dce53a00f12ea7374ddde635fdced3c241b091d0fbc9476771e22a7d64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000039000000000000000000000000000000000000000000000000000000000000032300000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000007c700000000000000000000000000000000000000000000000000000000000004bb000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000005d
-----Decoded View---------------
Arg [0] : Initial (uint256[10]): 3,22,57,803,723,1007,1991,1211,27,93
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000039
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000323
Arg [4] : 00000000000000000000000000000000000000000000000000000000000002d3
Arg [5] : 00000000000000000000000000000000000000000000000000000000000003ef
Arg [6] : 00000000000000000000000000000000000000000000000000000000000007c7
Arg [7] : 00000000000000000000000000000000000000000000000000000000000004bb
Arg [8] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [9] : 000000000000000000000000000000000000000000000000000000000000005d
Deployed Bytecode Sourcemap
43395:2030:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34742:220;;;;;;:::i;:::-;;:::i;:::-;;;7106:14:1;;7099:22;7081:41;;7069:2;7054:18;34742:220:0;;;;;;;;21719:100;;;:::i;:::-;;;;;;;:::i;23278:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6404:32:1;;;6386:51;;6374:2;6359:18;23278:221:0;6240:203:1;22801:411:0;;;;;;:::i;:::-;;:::i;:::-;;43944;;;:::i;35378:109::-;35462:10;:17;35378:109;;;14245:25:1;;;14233:2;14218:18;35378:109:0;14099:177:1;24168:339:0;;;;;;:::i;:::-;;:::i;35050:248::-;;;;;;:::i;:::-;;:::i;43526:29::-;;;;;;24578:185;;;;;;:::i;:::-;;:::i;35568:225::-;;;;;;:::i;:::-;;:::i;21413:239::-;;;;;;:::i;:::-;;:::i;21143:208::-;;;;;;:::i;:::-;;:::i;44359:109::-;;;;;;:::i;:::-;;:::i;21888:104::-;;;:::i;23571:295::-;;;;;;:::i;:::-;;:::i;24834:328::-;;;;;;:::i;:::-;;:::i;44472:950::-;;;;;;:::i;:::-;;:::i;23937:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24058:25:0;;;24034:4;24058:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23937:164;34742:220;34844:4;-1:-1:-1;;;;;;34864:50:0;;-1:-1:-1;;;34864:50:0;;:90;;;34918:36;34942:11;34918:23;:36::i;:::-;34857:97;34742:220;-1:-1:-1;;34742:220:0:o;21719:100::-;21773:13;21806:5;21799:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21719:100;:::o;23278:221::-;23354:7;26761:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26761:16:0;23374:73;;;;-1:-1:-1;;;23374:73:0;;11526:2:1;23374:73:0;;;11508:21:1;11565:2;11545:18;;;11538:30;11604:34;11584:18;;;11577:62;-1:-1:-1;;;11655:18:1;;;11648:42;11707:19;;23374:73:0;;;;;;;;;-1:-1:-1;23467:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23467:24:0;;23278:221::o;22801:411::-;22882:13;22898:23;22913:7;22898:14;:23::i;:::-;22882:39;;22946:5;-1:-1:-1;;;;;22940:11:0;:2;-1:-1:-1;;;;;22940:11:0;;;22932:57;;;;-1:-1:-1;;;22932:57:0;;12708:2:1;22932:57:0;;;12690:21:1;12747:2;12727:18;;;12720:30;12786:34;12766:18;;;12759:62;-1:-1:-1;;;12837:18:1;;;12830:31;12878:19;;22932:57:0;12506:397:1;22932:57:0;16274:10;-1:-1:-1;;;;;23024:21:0;;;;:62;;-1:-1:-1;23049:37:0;23066:5;16274:10;23937:164;:::i;23049:37::-;23002:168;;;;-1:-1:-1;;;23002:168:0;;9919:2:1;23002:168:0;;;9901:21:1;9958:2;9938:18;;;9931:30;9997:34;9977:18;;;9970:62;10068:26;10048:18;;;10041:54;10112:19;;23002:168:0;9717:420:1;23002:168:0;23183:21;23192:2;23196:7;23183:8;:21::i;:::-;22871:341;22801:411;;:::o;43944:::-;42499:1;43027:7;;:19;;43019:63;;;;-1:-1:-1;;;43019:63:0;;13941:2:1;43019:63:0;;;13923:21:1;13980:2;13960:18;;;13953:30;14019:33;13999:18;;;13992:61;14070:18;;43019:63:0;13739:355:1;43019:63:0;42499:1;43144:7;:18;44009:17:::1;::::0;43993:12:::1;:33;;43985:76;;;::::0;-1:-1:-1;;;43985:76:0;;11939:2:1;43985:76:0::1;::::0;::::1;11921:21:1::0;11978:2;11958:18;;;11951:30;12017:32;11997:18;;;11990:60;12067:18;;43985:76:0::1;11737:354:1::0;43985:76:0::1;44084:12;44064:17;:32:::0;44125:12:::1;::::0;44101:14:::1;::::0;44118:20:::1;::::0;:6:::1;:20::i;:::-;44101:37;;44141:16;44159:27;44168:6;43485:5;44159:8;:27::i;:::-;44141:45;;44191:97;26737:4:::0;26761:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26761:16:0;:30;44191:97:::1;;44229:14;44236:6;44229;:14::i;:::-;44220:23;;44257:27;44266:6;43485:5;44257:8;:27::i;:::-;44246:38;;44191:97;;;44292:12;:23:::0;;;44318:33:::1;16274:10:::0;44342:8:::1;44318:9;:33::i;:::-;-1:-1:-1::0;;42459:1:0;43291:7;:22;43944:411::o;24168:339::-;24363:41;16274:10;24396:7;24363:18;:41::i;:::-;24355:103;;;;-1:-1:-1;;;24355:103:0;;;;;;;:::i;:::-;24471:28;24481:4;24487:2;24491:7;24471:9;:28::i;35050:248::-;35147:7;35179:23;35196:5;35179:16;:23::i;:::-;35171:5;:31;35163:87;;;;-1:-1:-1;;;35163:87:0;;7559:2:1;35163:87:0;;;7541:21:1;7598:2;7578:18;;;7571:30;7637:34;7617:18;;;7610:62;-1:-1:-1;;;7688:18:1;;;7681:41;7739:19;;35163:87:0;7357:407:1;35163:87:0;-1:-1:-1;;;;;;35264:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;35050:248::o;24578:185::-;24716:39;24733:4;24739:2;24743:7;24716:39;;;;;;;;;;;;:16;:39::i;35568:225::-;35643:7;35675:30;35462:10;:17;;35378:109;35675:30;35667:5;:38;35659:95;;;;-1:-1:-1;;;35659:95:0;;13528:2:1;35659:95:0;;;13510:21:1;13567:2;13547:18;;;13540:30;13606:34;13586:18;;;13579:62;-1:-1:-1;;;13657:18:1;;;13650:42;13709:19;;35659:95:0;13326:408:1;35659:95:0;35768:10;35779:5;35768:17;;;;;;;;:::i;:::-;;;;;;;;;35761:24;;35568:225;;;:::o;21413:239::-;21485:7;21521:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21521:16:0;21556:19;21548:73;;;;-1:-1:-1;;;21548:73:0;;10755:2:1;21548:73:0;;;10737:21:1;10794:2;10774:18;;;10767:30;10833:34;10813:18;;;10806:62;-1:-1:-1;;;10884:18:1;;;10877:39;10933:19;;21548:73:0;10553:405:1;21143:208:0;21215:7;-1:-1:-1;;;;;21243:19:0;;21235:74;;;;-1:-1:-1;;;21235:74:0;;10344:2:1;21235:74:0;;;10326:21:1;10383:2;10363:18;;;10356:30;10422:34;10402:18;;;10395:62;-1:-1:-1;;;10473:18:1;;;10466:40;10523:19;;21235:74:0;10142:406:1;21235:74:0;-1:-1:-1;;;;;;21327:16:0;;;;;:9;:16;;;;;;;21143:208::o;44359:109::-;44414:13;44439:25;44456:7;44439:16;:25::i;21888:104::-;21944:13;21977:7;21970:14;;;;;:::i;23571:295::-;-1:-1:-1;;;;;23674:24:0;;16274:10;23674:24;;23666:62;;;;-1:-1:-1;;;23666:62:0;;9152:2:1;23666:62:0;;;9134:21:1;9191:2;9171:18;;;9164:30;9230:27;9210:18;;;9203:55;9275:18;;23666:62:0;8950:349:1;23666:62:0;16274:10;23741:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23741:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23741:53:0;;;;;;;;;;23810:48;;7081:41:1;;;23741:42:0;;16274:10;23810:48;;7054:18:1;23810:48:0;;;;;;;23571:295;;:::o;24834:328::-;25009:41;16274:10;25042:7;25009:18;:41::i;:::-;25001:103;;;;-1:-1:-1;;;25001:103:0;;;;;;;:::i;:::-;25115:39;25129:4;25135:2;25139:7;25148:5;25115:13;:39::i;:::-;24834:328;;;;:::o;44472:950::-;44537:13;44555:22;;:::i;:::-;44580:320;;;;;;;;;;;;;;;;;;;44916:16;44924:7;44916;:16::i;:::-;44905:8;;;;:27;;;44937:26;;;;;;;;;;;-1:-1:-1;;;44937:26:0;;;;:8;;;:26;;;45015:8;;45025;;44998:46;;-1:-1:-1;;44998:46:0;;45015:8;;45025;44937:26;44998:46;;:::i;:::-;;;;;;;;;;;;;44968:77;;45050:18;45071:254;45136:25;45153:7;45136:16;:25::i;:::-;45287:28;45307:6;45287:13;:28::i;:::-;45098:224;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45071:13;:254::i;:::-;45050:275;;45394:4;45344:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;45344:55:0;;;;;;;;;;44472:950;-1:-1:-1;;;;;44472:950:0:o;8232:387::-;8555:20;8603:8;;;8232:387::o;20786:293::-;20888:4;-1:-1:-1;;;;;;20921:40:0;;-1:-1:-1;;;20921:40:0;;:101;;-1:-1:-1;;;;;;;20974:48:0;;-1:-1:-1;;;20974:48:0;20921:101;:150;;;-1:-1:-1;;;;;;;;;;19395:40:0;;;21035:36;19286:157;30654:174;30729:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30729:29:0;-1:-1:-1;;;;;30729:29:0;;;;;;;;:24;;30783:23;30729:24;30783:14;:23::i;:::-;-1:-1:-1;;;;;30774:46:0;;;;;;;;;;;30654:174;;:::o;43713:118::-;43766:7;43820:4;43803:22;;;;;;6182:19:1;;6226:2;6217:12;;6053:182;43803:22:0;;;;-1:-1:-1;;43803:22:0;;;;;;;;;43793:33;;43803:22;43793:33;;;;;43713:118;-1:-1:-1;;43713:118:0:o;43835:105::-;43905:7;43924:12;43932:4;43924:5;:12;:::i;:::-;43917:19;43835:105;-1:-1:-1;;;43835:105:0:o;27656:110::-;27732:26;27742:2;27746:7;27732:26;;;;;;;;;;;;:9;:26::i;:::-;27656:110;;:::o;26966:348::-;27059:4;26761:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26761:16:0;27076:73;;;;-1:-1:-1;;;27076:73:0;;9506:2:1;27076:73:0;;;9488:21:1;9545:2;9525:18;;;9518:30;9584:34;9564:18;;;9557:62;-1:-1:-1;;;9635:18:1;;;9628:42;9687:19;;27076:73:0;9304:408:1;27076:73:0;27160:13;27176:23;27191:7;27176:14;:23::i;:::-;27160:39;;27229:5;-1:-1:-1;;;;;27218:16:0;:7;-1:-1:-1;;;;;27218:16:0;;:51;;;;27262:7;-1:-1:-1;;;;;27238:31:0;:20;27250:7;27238:11;:20::i;:::-;-1:-1:-1;;;;;27238:31:0;;27218:51;:87;;;-1:-1:-1;;;;;;24058:25:0;;;24034:4;24058:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27273:32;27210:96;26966:348;-1:-1:-1;;;;26966:348:0:o;29958:578::-;30117:4;-1:-1:-1;;;;;30090:31:0;:23;30105:7;30090:14;:23::i;:::-;-1:-1:-1;;;;;30090:31:0;;30082:85;;;;-1:-1:-1;;;30082:85:0;;12298:2:1;30082:85:0;;;12280:21:1;12337:2;12317:18;;;12310:30;12376:34;12356:18;;;12349:62;-1:-1:-1;;;12427:18:1;;;12420:39;12476:19;;30082:85:0;12096:405:1;30082:85:0;-1:-1:-1;;;;;30186:16:0;;30178:65;;;;-1:-1:-1;;;30178:65:0;;8747:2:1;30178:65:0;;;8729:21:1;8786:2;8766:18;;;8759:30;8825:34;8805:18;;;8798:62;-1:-1:-1;;;8876:18:1;;;8869:34;8920:19;;30178:65:0;8545:400:1;30178:65:0;30256:39;30277:4;30283:2;30287:7;30256:20;:39::i;:::-;30360:29;30377:1;30381:7;30360:8;:29::i;:::-;-1:-1:-1;;;;;30402:15:0;;;;;;:9;:15;;;;;:20;;30421:1;;30402:15;:20;;30421:1;;30402:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30433:13:0;;;;;;:9;:13;;;;;:18;;30450:1;;30433:13;:18;;30450:1;;30433:18;:::i;:::-;;;;-1:-1:-1;;30462:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30462:21:0;-1:-1:-1;;;;;30462:21:0;;;;;;;;;30501:27;;30462:16;;30501:27;;;;;;;29958:578;;;:::o;16725:723::-;16781:13;17002:10;16998:53;;-1:-1:-1;;17029:10:0;;;;;;;;;;;;-1:-1:-1;;;17029:10:0;;;;;16725:723::o;16998:53::-;17076:5;17061:12;17117:78;17124:9;;17117:78;;17150:8;;;;:::i;:::-;;-1:-1:-1;17173:10:0;;-1:-1:-1;17181:2:0;17173:10;;:::i;:::-;;;17117:78;;;17205:19;17237:6;17227:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17227:17:0;;17205:39;;17255:154;17262:10;;17255:154;;17289:11;17299:1;17289:11;;:::i;:::-;;-1:-1:-1;17358:10:0;17366:2;17358:5;:10;:::i;:::-;17345:24;;:2;:24;:::i;:::-;17332:39;;17315:6;17322;17315:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;17315:56:0;;;;;;;;-1:-1:-1;17386:11:0;17395:2;17386:11;;:::i;:::-;;;17255:154;;26044:315;26201:28;26211:4;26217:2;26221:7;26201:9;:28::i;:::-;26248:48;26271:4;26277:2;26281:7;26290:5;26248:22;:48::i;:::-;26240:111;;;;-1:-1:-1;;;26240:111:0;;;;;;;:::i;45766:1139::-;45856:11;;45824:13;;45874:8;45870:23;;-1:-1:-1;;45884:9:0;;;;;;;;;-1:-1:-1;45884:9:0;;;45766:1139;-1:-1:-1;45766:1139:0:o;45870:23::-;45929:18;45967:1;45956:7;:3;45962:1;45956:7;:::i;:::-;45955:13;;;;:::i;:::-;45950:19;;:1;:19;:::i;:::-;45929:40;-1:-1:-1;46011:19:0;46043:15;45929:40;46056:2;46043:15;:::i;:::-;46033:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46033:26:0;;46011:48;;46064:18;46085:5;;;;;;;;;;;;;;;;;46064:26;;46134:1;46127:5;46123:13;46167:2;46159:6;46155:15;46190:1;46174:533;46201:3;46198:1;46195:10;46174:533;;;46228:1;46255:12;;;;;46249:19;46334:4;46322:2;46318:14;;;;;46300:40;;46294:47;46411:2;46407:14;;;46403:25;;46389:40;;46383:47;46508:1;46504:13;;;46500:24;;46486:39;;46480:46;46596:16;;;;46582:31;;46576:38;46354:1;46350:11;;;46432:4;46379:58;;;46370:68;46447:11;;46476:57;;;46467:67;;;;46543:11;;46572:49;;46563:59;46635:3;46631:13;46648:22;;46702:1;46687:17;;;;46221:9;46174:533;;;46178:16;46727:1;46722:3;46718:11;46736:1;46731:56;;;;46794:1;46789:54;;;;46711:132;;46731:56;-1:-1:-1;;;;;46748:17:0;;46741:43;46731:56;;46789:54;-1:-1:-1;;;;;46806:17:0;;46799:41;46711:132;-1:-1:-1;;;46847:26:0;;;46854:6;45766:1139;-1:-1:-1;;;;45766:1139:0:o;27993:321::-;28123:18;28129:2;28133:7;28123:5;:18::i;:::-;28174:54;28205:1;28209:2;28213:7;28222:5;28174:22;:54::i;:::-;28152:154;;;;-1:-1:-1;;;28152:154:0;;;;;;;:::i;36410:521::-;-1:-1:-1;;;;;36600:18:0;;36596:163;;36627:40;36659:7;37750:10;:17;;37723:24;;;;:15;:24;;;;;:44;;;37774:24;;;;;;;;;;;;37650:156;36627:40;36596:163;;;36693:2;-1:-1:-1;;;;;36685:10:0;:4;-1:-1:-1;;;;;36685:10:0;;36681:78;;36704:47;36737:4;36743:7;36704:32;:47::i;:::-;-1:-1:-1;;;;;36769:16:0;;36765:159;;36794:45;36831:7;36794:36;:45::i;36765:159::-;36863:4;-1:-1:-1;;;;;36857:10:0;:2;-1:-1:-1;;;;;36857:10:0;;36853:71;;36876:40;36904:2;36908:7;36876:27;:40::i;31393:691::-;31548:4;-1:-1:-1;;;;;31569:13:0;;8555:20;8603:8;31565:516;;31605:72;;-1:-1:-1;;;31605:72:0;;-1:-1:-1;;;;;31605:36:0;;;;;:72;;16274:10;;31656:4;;31662:7;;31671:5;;31605:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31605:72:0;;;;;;;;-1:-1:-1;;31605:72:0;;;;;;;;;;;;:::i;:::-;;;31601:437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31827:13:0;;31823:204;;31858:60;;-1:-1:-1;;;31858:60:0;;;;;;;:::i;31823:204::-;31997:6;31991:13;31982:6;31978:2;31974:15;31967:38;31601:437;-1:-1:-1;;;;;;31720:51:0;-1:-1:-1;;;31720:51:0;;-1:-1:-1;31713:58:0;;31565:516;-1:-1:-1;32069:4:0;31393:691;;;;;;:::o;28650:382::-;-1:-1:-1;;;;;28730:16:0;;28722:61;;;;-1:-1:-1;;;28722:61:0;;11165:2:1;28722:61:0;;;11147:21:1;;;11184:18;;;11177:30;11243:34;11223:18;;;11216:62;11295:18;;28722:61:0;10963:356:1;28722:61:0;26737:4;26761:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26761:16:0;:30;28794:58;;;;-1:-1:-1;;;28794:58:0;;8390:2:1;28794:58:0;;;8372:21:1;8429:2;8409:18;;;8402:30;8468;8448:18;;;8441:58;8516:18;;28794:58:0;8188:352:1;28794:58:0;28865:45;28894:1;28898:2;28902:7;28865:20;:45::i;:::-;-1:-1:-1;;;;;28923:13:0;;;;;;:9;:13;;;;;:18;;28940:1;;28923:13;:18;;28940:1;;28923:18;:::i;:::-;;;;-1:-1:-1;;28952:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28952:21:0;-1:-1:-1;;;;;28952:21:0;;;;;;;;28991:33;;28952:16;;;28991:33;;28952:16;;28991:33;28650:382;;:::o;38437:940::-;38695:22;38745:1;38720:22;38737:4;38720:16;:22::i;:::-;:26;;;;:::i;:::-;38753:18;38774:26;;;:17;:26;;;;;;38695:51;;-1:-1:-1;38903:28:0;;;38899:304;;-1:-1:-1;;;;;38962:18:0;;38940:19;38962:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39009:30;;;;;;:44;;;39118:30;;:17;:30;;;;;:43;;;38899:304;-1:-1:-1;39295:26:0;;;;:17;:26;;;;;;;;39288:33;;;-1:-1:-1;;;;;39335:18:0;;;;;:12;:18;;;;;:34;;;;;;;39328:41;38437:940::o;39676:1111::-;39962:10;:17;39937:22;;39962:21;;39982:1;;39962:21;:::i;:::-;39994:18;40015:24;;;:15;:24;;;;;;40396:10;:26;;39937:46;;-1:-1:-1;40015:24:0;;39937:46;;40396:26;;;;;;:::i;:::-;;;;;;;;;40374:48;;40468:11;40443:10;40454;40443:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40548:28;;;:15;:28;;;;;;;:41;;;40728:24;;;;;40721:31;40763:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39747:1040;;;39676:1111;:::o;37236:209::-;37317:14;37334:20;37351:2;37334:16;:20::i;:::-;-1:-1:-1;;;;;37361:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37402:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37236:209:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:1138::-;1076:6;1084;1092;1100;1153:3;1141:9;1132:7;1128:23;1124:33;1121:53;;;1170:1;1167;1160:12;1121:53;1193:29;1212:9;1193:29;:::i;:::-;1183:39;;1241:38;1275:2;1264:9;1260:18;1241:38;:::i;:::-;1231:48;;1326:2;1315:9;1311:18;1298:32;1288:42;;1381:2;1370:9;1366:18;1353:32;1404:18;1445:2;1437:6;1434:14;1431:34;;;1461:1;1458;1451:12;1431:34;1499:6;1488:9;1484:22;1474:32;;1544:7;1537:4;1533:2;1529:13;1525:27;1515:55;;1566:1;1563;1556:12;1515:55;1602:2;1589:16;1624:2;1620;1617:10;1614:36;;;1630:18;;:::i;:::-;1705:2;1699:9;1673:2;1759:13;;-1:-1:-1;;1755:22:1;;;1779:2;1751:31;1747:40;1735:53;;;1803:18;;;1823:22;;;1800:46;1797:72;;;1849:18;;:::i;:::-;1889:10;1885:2;1878:22;1924:2;1916:6;1909:18;1964:7;1959:2;1954;1950;1946:11;1942:20;1939:33;1936:53;;;1985:1;1982;1975:12;1936:53;2041:2;2036;2032;2028:11;2023:2;2015:6;2011:15;1998:46;2086:1;2081:2;2076;2068:6;2064:15;2060:24;2053:35;2107:6;2097:16;;;;;;;981:1138;;;;;;;:::o;2124:347::-;2189:6;2197;2250:2;2238:9;2229:7;2225:23;2221:32;2218:52;;;2266:1;2263;2256:12;2218:52;2289:29;2308:9;2289:29;:::i;:::-;2279:39;;2368:2;2357:9;2353:18;2340:32;2415:5;2408:13;2401:21;2394:5;2391:32;2381:60;;2437:1;2434;2427:12;2381:60;2460:5;2450:15;;;2124:347;;;;;:::o;2476:254::-;2544:6;2552;2605:2;2593:9;2584:7;2580:23;2576:32;2573:52;;;2621:1;2618;2611:12;2573:52;2644:29;2663:9;2644:29;:::i;:::-;2634:39;2720:2;2705:18;;;;2692:32;;-1:-1:-1;;;2476:254:1:o;2735:245::-;2793:6;2846:2;2834:9;2825:7;2821:23;2817:32;2814:52;;;2862:1;2859;2852:12;2814:52;2901:9;2888:23;2920:30;2944:5;2920:30;:::i;2985:249::-;3054:6;3107:2;3095:9;3086:7;3082:23;3078:32;3075:52;;;3123:1;3120;3113:12;3075:52;3155:9;3149:16;3174:30;3198:5;3174:30;:::i;3239:180::-;3298:6;3351:2;3339:9;3330:7;3326:23;3322:32;3319:52;;;3367:1;3364;3357:12;3319:52;-1:-1:-1;3390:23:1;;3239:180;-1:-1:-1;3239:180:1:o;3424:257::-;3465:3;3503:5;3497:12;3530:6;3525:3;3518:19;3546:63;3602:6;3595:4;3590:3;3586:14;3579:4;3572:5;3568:16;3546:63;:::i;:::-;3663:2;3642:15;-1:-1:-1;;3638:29:1;3629:39;;;;3670:4;3625:50;;3424:257;-1:-1:-1;;3424:257:1:o;3686:664::-;3913:3;3951:6;3945:13;3967:53;4013:6;4008:3;4001:4;3993:6;3989:17;3967:53;:::i;:::-;4083:13;;4042:16;;;;4105:57;4083:13;4042:16;4139:4;4127:17;;4105:57;:::i;:::-;4229:13;;4184:20;;;4251:57;4229:13;4184:20;4285:4;4273:17;;4251:57;:::i;:::-;4324:20;;3686:664;-1:-1:-1;;;;;3686:664:1:o;4355:448::-;4617:31;4612:3;4605:44;4587:3;4678:6;4672:13;4694:62;4749:6;4744:2;4739:3;4735:12;4728:4;4720:6;4716:17;4694:62;:::i;:::-;4776:16;;;;4794:2;4772:25;;4355:448;-1:-1:-1;;4355:448:1:o;4808:1240::-;-1:-1:-1;;;5308:59:1;;5390:13;;5290:3;;5412:62;5390:13;5462:2;5453:12;;5446:4;5434:17;;5412:62;:::i;:::-;5538:66;5533:2;5493:16;;;5525:11;;;5518:87;5634:34;5629:2;5621:11;;5614:55;5698:66;5693:2;5685:11;;5678:87;5795:26;5789:3;5781:12;;5774:48;5847:13;;5869:64;5847:13;5918:3;5910:12;;5903:4;5891:17;;5869:64;:::i;:::-;-1:-1:-1;;;5993:3:1;5952:17;;;;5985:12;;;5978:36;6038:3;6030:12;;4808:1240;-1:-1:-1;;;;4808:1240:1:o;6448:488::-;-1:-1:-1;;;;;6717:15:1;;;6699:34;;6769:15;;6764:2;6749:18;;6742:43;6816:2;6801:18;;6794:34;;;6864:3;6859:2;6844:18;;6837:31;;;6642:4;;6885:45;;6910:19;;6902:6;6885:45;:::i;:::-;6877:53;6448:488;-1:-1:-1;;;;;;6448:488:1:o;7133:219::-;7282:2;7271:9;7264:21;7245:4;7302:44;7342:2;7331:9;7327:18;7319:6;7302:44;:::i;7769:414::-;7971:2;7953:21;;;8010:2;7990:18;;;7983:30;8049:34;8044:2;8029:18;;8022:62;-1:-1:-1;;;8115:2:1;8100:18;;8093:48;8173:3;8158:19;;7769:414::o;12908:413::-;13110:2;13092:21;;;13149:2;13129:18;;;13122:30;13188:34;13183:2;13168:18;;13161:62;-1:-1:-1;;;13254:2:1;13239:18;;13232:47;13311:3;13296:19;;12908:413::o;14281:128::-;14321:3;14352:1;14348:6;14345:1;14342:13;14339:39;;;14358:18;;:::i;:::-;-1:-1:-1;14394:9:1;;14281:128::o;14414:120::-;14454:1;14480;14470:35;;14485:18;;:::i;:::-;-1:-1:-1;14519:9:1;;14414:120::o;14539:168::-;14579:7;14645:1;14641;14637:6;14633:14;14630:1;14627:21;14622:1;14615:9;14608:17;14604:45;14601:71;;;14652:18;;:::i;:::-;-1:-1:-1;14692:9:1;;14539:168::o;14712:125::-;14752:4;14780:1;14777;14774:8;14771:34;;;14785:18;;:::i;:::-;-1:-1:-1;14822:9:1;;14712:125::o;14842:258::-;14914:1;14924:113;14938:6;14935:1;14932:13;14924:113;;;15014:11;;;15008:18;14995:11;;;14988:39;14960:2;14953:10;14924:113;;;15055:6;15052:1;15049:13;15046:48;;;-1:-1:-1;;15090:1:1;15072:16;;15065:27;14842:258::o;15105:380::-;15184:1;15180:12;;;;15227;;;15248:61;;15302:4;15294:6;15290:17;15280:27;;15248:61;15355:2;15347:6;15344:14;15324:18;15321:38;15318:161;;;15401:10;15396:3;15392:20;15389:1;15382:31;15436:4;15433:1;15426:15;15464:4;15461:1;15454:15;15318:161;;15105:380;;;:::o;15490:135::-;15529:3;-1:-1:-1;;15550:17:1;;15547:43;;;15570:18;;:::i;:::-;-1:-1:-1;15617:1:1;15606:13;;15490:135::o;15630:112::-;15662:1;15688;15678:35;;15693:18;;:::i;:::-;-1:-1:-1;15727:9:1;;15630:112::o;15747:127::-;15808:10;15803:3;15799:20;15796:1;15789:31;15839:4;15836:1;15829:15;15863:4;15860:1;15853:15;15879:127;15940:10;15935:3;15931:20;15928:1;15921:31;15971:4;15968:1;15961:15;15995:4;15992:1;15985:15;16011:127;16072:10;16067:3;16063:20;16060:1;16053:31;16103:4;16100:1;16093:15;16127:4;16124:1;16117:15;16143:127;16204:10;16199:3;16195:20;16192:1;16185:31;16235:4;16232:1;16225:15;16259:4;16256:1;16249:15;16275:127;16336:10;16331:3;16327:20;16324:1;16317:31;16367:4;16364:1;16357:15;16391:4;16388:1;16381:15;16407:131;-1:-1:-1;;;;;;16481:32:1;;16471:43;;16461:71;;16528:1;16525;16518:12;16461:71;16407:131;:::o
Swarm Source
ipfs://a40436c1dce53a00f12ea7374ddde635fdced3c241b091d0fbc9476771e22a7d
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.