Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 66 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Airdrop For Alph... | 14774476 | 1064 days ago | IN | 0 ETH | 0.00766708 | ||||
Public Sale Mint | 14705999 | 1075 days ago | IN | 0.08 ETH | 0.01441716 | ||||
Airdrop For Alph... | 14705905 | 1075 days ago | IN | 0 ETH | 0.01264809 | ||||
Public Sale Mint | 14705882 | 1075 days ago | IN | 0.08 ETH | 0.01289438 | ||||
Change Mint Stat... | 14705851 | 1075 days ago | IN | 0 ETH | 0.00222644 | ||||
Change Mint Stat... | 14615280 | 1089 days ago | IN | 0 ETH | 0.00161617 | ||||
Airdrop For Alph... | 14589973 | 1093 days ago | IN | 0 ETH | 0.00631938 | ||||
Airdrop For Alph... | 14583431 | 1094 days ago | IN | 0 ETH | 0.02021216 | ||||
Airdrop For Alph... | 14568423 | 1097 days ago | IN | 0 ETH | 0.00668561 | ||||
Airdrop For Alph... | 14552072 | 1099 days ago | IN | 0 ETH | 0.02179242 | ||||
Airdrop For Alph... | 14551004 | 1099 days ago | IN | 0 ETH | 0.00439303 | ||||
Airdrop For Alph... | 14541231 | 1101 days ago | IN | 0 ETH | 0.0125691 | ||||
Airdrop For Alph... | 14535143 | 1102 days ago | IN | 0 ETH | 0.00839953 | ||||
Airdrop For Alph... | 14531245 | 1102 days ago | IN | 0 ETH | 0.00767861 | ||||
Public Sale Mint | 14530036 | 1103 days ago | IN | 0.16 ETH | 0.02001881 | ||||
Airdrop For Alph... | 14525930 | 1103 days ago | IN | 0 ETH | 0.00966666 | ||||
Airdrop For Alph... | 14513194 | 1105 days ago | IN | 0 ETH | 0.0064721 | ||||
Airdrop For Alph... | 14499581 | 1107 days ago | IN | 0 ETH | 0.01404284 | ||||
Airdrop For Alph... | 14493610 | 1108 days ago | IN | 0 ETH | 0.00574126 | ||||
Airdrop For Alph... | 14493161 | 1108 days ago | IN | 0 ETH | 0.00733583 | ||||
Public Sale Mint | 14492824 | 1108 days ago | IN | 0.08 ETH | 0.00870339 | ||||
Airdrop For Alph... | 14492585 | 1108 days ago | IN | 0 ETH | 0.00599033 | ||||
Public Sale Mint | 14491571 | 1109 days ago | IN | 0.08 ETH | 0.00596461 | ||||
Airdrop For Alph... | 14491270 | 1109 days ago | IN | 0 ETH | 0.00795441 | ||||
Airdrop For Alph... | 14491260 | 1109 days ago | IN | 0 ETH | 0.01072228 |
Latest 18 internal transactions
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
- | 14705999 | 1075 days ago | 0.08 ETH | ||||
- | 14705882 | 1075 days ago | 0.08 ETH | ||||
- | 14530036 | 1103 days ago | 0.16 ETH | ||||
- | 14492824 | 1108 days ago | 0.08 ETH | ||||
- | 14491571 | 1109 days ago | 0.08 ETH | ||||
- | 14490264 | 1109 days ago | 0.08 ETH | ||||
- | 14489151 | 1109 days ago | 0.08 ETH | ||||
- | 14486110 | 1109 days ago | 0.08 ETH | ||||
- | 14484615 | 1110 days ago | 0.08 ETH | ||||
- | 14484229 | 1110 days ago | 0.08 ETH | ||||
- | 14484065 | 1110 days ago | 0.08 ETH | ||||
- | 14483437 | 1110 days ago | 0.08 ETH | ||||
- | 14483408 | 1110 days ago | 0.08 ETH | ||||
- | 14483346 | 1110 days ago | 0.08 ETH | ||||
- | 14483182 | 1110 days ago | 0.08 ETH | ||||
- | 14483163 | 1110 days ago | 0.08 ETH | ||||
- | 14482404 | 1110 days ago | 0.08 ETH | ||||
- | 14482319 | 1110 days ago | 0.08 ETH |
Loading...
Loading
Contract Name:
SupernerdsMetaDistributor
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; interface SuperNerdIF { function totalSupply() external view returns (uint256); function cap() external view returns (uint256); function mint(address _mintTo) external returns (bool); function mintReserve(address _mintTo) external returns (bool); } contract SupernerdsMetaDistributor is AccessControl { SuperNerdIF public superNerd; bool public _mintingPaused = false; uint256 public tokenPrice = uint256(8 * 10**16); // = 0.08 ETH address public SUPERNERD_ADMIN_WALLET; //WHITELIST_START_TIME uint256 public WHITELIST_START_TIME; //PERSALE START TIME uint256 public PRE_SALE_START_TIME; //PUBLICSALE START TIME uint256 public PUBLIC_SALE_START_TIME; //ALPHA HOLDERS START TIME uint256 public ALPHA_HOLDERS_START_TIME; //WHITE LIST END TIME uint256 public WHITELIST_END_TIME; //should be in seconds uint256 public preSaleMintLimit; uint256 public whiteListMintLimit; uint256 public publicSaleMintLimit; mapping(address => bool) public whiteListUsers; mapping(address => uint256) public preSaleMintsPerAddress; mapping(address => uint256) public whiteListMintsPerAddress; mapping(address => uint256) public publicMintsPerAddress; mapping(address => uint256) public alphaHoldersMint; bytes32 public constant MINT_SIGNATURE = keccak256("MINT_SIGNATURE"); constructor(SuperNerdIF _superNerd) { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); _setupRole(MINT_SIGNATURE, msg.sender); superNerd = _superNerd; } modifier onlyAdmin() { require( hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Caller is not a admin" ); _; } function changeSuperNerdAddress(SuperNerdIF _superNerd) public onlyAdmin { superNerd = _superNerd; } function setSuperNerdAminWallet(address _wallet) public onlyAdmin { require(_wallet != address(0), "address invalid"); SUPERNERD_ADMIN_WALLET = _wallet; } function setWhitelistSaleStartTime(uint256 _whitelistStartTime) public onlyAdmin { WHITELIST_START_TIME = _whitelistStartTime; } function setPreSaleStartTime(uint256 _preSaleStartTime) public onlyAdmin { PRE_SALE_START_TIME = _preSaleStartTime; } function setPublicSaleStartTime(uint256 _publicSaleStartTime) public onlyAdmin { PUBLIC_SALE_START_TIME = _publicSaleStartTime; } function setAlphaHolderStartTime(uint256 _alphaHoldersSaleStartTime) public onlyAdmin { ALPHA_HOLDERS_START_TIME = _alphaHoldersSaleStartTime; } function setPreSaleMintLimit(uint256 _preSaleMintLimit) public onlyAdmin { preSaleMintLimit = _preSaleMintLimit; } function setPublicSaleMintLimit(uint256 _publicSaleMintLimit) public onlyAdmin { publicSaleMintLimit = _publicSaleMintLimit; } function setWhiteListMintLimit(uint256 _whiteListMintLimit) public onlyAdmin { whiteListMintLimit = _whiteListMintLimit; } function setWhiteListEndTime(uint256 _whiteListEndTime) public onlyAdmin { WHITELIST_END_TIME = _whiteListEndTime; } function setTokenPrice(uint256 _newPrice) public onlyAdmin { tokenPrice = _newPrice; } function changeMintState(bool _state) public onlyAdmin { _mintingPaused = _state; } /// @dev function only available for whitelist users function whiteListMint(uint256 _num) public payable returns (bool) { address wallet = _msgSender(); require( block.timestamp >= WHITELIST_START_TIME && block.timestamp < WHITELIST_START_TIME + WHITELIST_END_TIME, "Time is not suitable for whiteList" ); require(whiteListUsers[wallet], "ONLY WHITELIST"); //WhiteList allowed require(_num > 0, "need to mint at least 1 NFT"); require( msg.value >= (tokenPrice * _num), "Insufficient amount provided" ); payable(SUPERNERD_ADMIN_WALLET).transfer(msg.value); uint256 ownerMintedCount = whiteListMintsPerAddress[wallet]; require( ownerMintedCount + _num <= whiteListMintLimit, "max NFT per address exceeded" ); for (uint256 i = 0; i < _num; i++) { superNerd.mint(wallet); } whiteListMintsPerAddress[wallet] += _num; //add the total mints per address in whitelist mapping return true; } function preSaleMint(uint256 _num) public payable returns (bool) { address wallet = _msgSender(); require( block.timestamp >= PRE_SALE_START_TIME && block.timestamp < PUBLIC_SALE_START_TIME, "Time is not suitable for presale" ); require(_num > 0, "need to mint at least 1 NFT"); require( msg.value >= (tokenPrice * _num), "Insufficient amount provided" ); payable(SUPERNERD_ADMIN_WALLET).transfer(msg.value); uint256 ownerMintedCount = preSaleMintsPerAddress[wallet]; require( ownerMintedCount + _num <= preSaleMintLimit, "max NFT per address exceeded" ); for (uint256 i = 0; i < _num; i++) { superNerd.mint(wallet); //, tokenId + i + 1 } preSaleMintsPerAddress[wallet] += _num; //log the total mints per address return true; } function publicSaleMint(uint256 _num) public payable returns (bool) { address wallet = _msgSender(); require( block.timestamp >= PUBLIC_SALE_START_TIME, "Time is not suitable for Public Sale" ); require(!_mintingPaused, "minting paused"); require(_num > 0, "need to mint at least 1 NFT"); require( msg.value >= (tokenPrice * _num), "Insufficient amount provided" ); payable(SUPERNERD_ADMIN_WALLET).transfer(msg.value); uint256 ownerMintedCount = publicMintsPerAddress[wallet]; require( ownerMintedCount + _num <= publicSaleMintLimit, "max NFT per address exceeded" ); for (uint256 i = 0; i < _num; i++) { superNerd.mint(wallet); //, tokenId + i + 1 } publicMintsPerAddress[wallet] += _num; //log the total mints per address return true; } function airdropForAlphaUsers( address wallet, uint256 _mintCount, uint256 _canMintTotal, uint256 _timestamp, bytes memory _signature ) public returns (bool) { require(wallet == msg.sender, "not alpha holder"); require(!_mintingPaused, "minting paused"); require( block.timestamp >= ALPHA_HOLDERS_START_TIME, "Time is not suitable for Alpha holders" ); address signerOwner = signatureWallet( wallet, _mintCount, _canMintTotal, _timestamp, _signature ); require( hasRole(MINT_SIGNATURE, signerOwner), "SUPERNERDNFT: Not authorized to mint" ); uint256 minted = alphaHoldersMint[wallet]; uint256 mintable = _canMintTotal - minted; require(mintable > 0, "already minted"); require(_mintCount <= mintable, "quantity exceeds available mints"); for (uint256 i = 0; i < _mintCount; i++) { superNerd.mintReserve(wallet); } alphaHoldersMint[wallet] += _mintCount; return true; } function signatureWallet( address wallet, uint256 _mintCount, uint256 _canMintTotal, uint256 _timestamp, bytes memory _signature ) public pure returns (address) { return ECDSA.recover( keccak256( abi.encode(wallet, _mintCount, _canMintTotal, _timestamp) ), _signature ); } function addToWhiteList(address[] calldata entries) public onlyAdmin { uint256 length = entries.length; for (uint256 i = 0; i < length; i++) { address entry = entries[i]; require(entry != address(0), "Cannot add zero address"); require(!whiteListUsers[entry], "Cannot add duplicate address"); whiteListUsers[entry] = true; } } function removeFromwhiteListUsers(address[] calldata entries) public onlyAdmin { uint256 length = entries.length; for (uint256 i = 0; i < length; i++) { address entry = entries[i]; require(entry != address(0), "Cannot remove zero address"); whiteListUsers[entry] = false; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControl.sol) pragma solidity ^0.8.0; import "./IAccessControl.sol"; import "../utils/Context.sol"; import "../utils/Strings.sol"; import "../utils/introspection/ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract SuperNerdIF","name":"_superNerd","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"ALPHA_HOLDERS_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_SIGNATURE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_SALE_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SALE_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPERNERD_ADMIN_WALLET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_END_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintingPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"_mintCount","type":"uint256"},{"internalType":"uint256","name":"_canMintTotal","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"airdropForAlphaUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"alphaHoldersMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"changeMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract SuperNerdIF","name":"_superNerd","type":"address"}],"name":"changeSuperNerdAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"preSaleMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSaleMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preSaleMintsPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicMintsPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"publicSaleMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"removeFromwhiteListUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_alphaHoldersSaleStartTime","type":"uint256"}],"name":"setAlphaHolderStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preSaleMintLimit","type":"uint256"}],"name":"setPreSaleMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preSaleStartTime","type":"uint256"}],"name":"setPreSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleMintLimit","type":"uint256"}],"name":"setPublicSaleMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleStartTime","type":"uint256"}],"name":"setPublicSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setSuperNerdAminWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListEndTime","type":"uint256"}],"name":"setWhiteListEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListMintLimit","type":"uint256"}],"name":"setWhiteListMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistStartTime","type":"uint256"}],"name":"setWhitelistSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"_mintCount","type":"uint256"},{"internalType":"uint256","name":"_canMintTotal","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"signatureWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"superNerd","outputs":[{"internalType":"contract SuperNerdIF","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"whiteListMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whiteListMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListMintsPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600160146101000a81548160ff02191690831515021790555067011c37937e0800006002553480156200003857600080fd5b50604051620046fa380380620046fa83398181016040528101906200005e9190620002e4565b620000736000801b33620000ed60201b60201c565b620000a57fab00b0eef9bc639da8d6e0e02fb8a48a36349b940440b16012c32e2ef58de88633620000ed60201b60201c565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000316565b620000ff82826200010360201b60201c565b5050565b620001158282620001f460201b60201c565b620001f057600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001956200025e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000298826200026b565b9050919050565b6000620002ac826200028b565b9050919050565b620002be816200029f565b8114620002ca57600080fd5b50565b600081519050620002de81620002b3565b92915050565b600060208284031215620002fd57620002fc62000266565b5b60006200030d84828501620002cd565b91505092915050565b6143d480620003266000396000f3fe6080604052600436106102675760003560e01c80636a61e5fc11610144578063a217fddf116100b6578063c4d8b2071161007a578063c4d8b2071461094d578063c5339d6914610978578063d547741f146109b5578063dcefac7f146109de578063e22bcf8414610a09578063f59003e914610a4657610267565b8063a217fddf14610863578063b040533b1461088e578063b06df763146108b7578063b3ab66b0146108f4578063b3c580871461092457610267565b80637ff9b596116101085780637ff9b5961461075557806380dbca8b146107805780638bf7859b146107a957806391d14854146107d457806397692e151461081157806398ce3a431461083a57610267565b80636a61e5fc1461067f5780636b5ecffc146106a85780636d5d40c6146106d3578063740d73f3146106fc5780637835c6351461072557610267565b80633e6a84fc116101dd5780634f1f8c20116101a15780634f1f8c201461055b57806350be4a9f1461059857806351847ed5146105d55780635381464c14610600578063553408ff1461062b578063578c21411461065457610267565b80633e6a84fc14610476578063421cbe9c1461049f57806346748d85146104ca5780634dc200e5146104f55780634dc598de1461051e57610267565b8063248a9ca31161022f578063248a9ca31461036a5780632a04f1b9146103a75780632e929f59146103d05780632f2ff15d146103f957806333e790bf1461042257806336568abe1461044d57610267565b806301ffc9a71461026c57806302e001ef146102a9578063161415bf146102d957806319c0841f146103045780631d56bbad14610341575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190612db6565b610a71565b6040516102a09190612dfe565b60405180910390f35b6102c360048036038101906102be9190612e4f565b610aeb565b6040516102d09190612dfe565b60405180910390f35b3480156102e557600080fd5b506102ee610ea1565b6040516102fb9190612e8b565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190612f04565b610ea7565b6040516103389190612e8b565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190612e4f565b610ebf565b005b34801561037657600080fd5b50610391600480360381019061038c9190612f67565b610f1c565b60405161039e9190612fa3565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190612fea565b610f3b565b005b3480156103dc57600080fd5b506103f760048036038101906103f29190612e4f565b610fab565b005b34801561040557600080fd5b50610420600480360381019061041b9190613017565b611008565b005b34801561042e57600080fd5b50610437611031565b6040516104449190612e8b565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f9190613017565b611037565b005b34801561048257600080fd5b5061049d600480360381019061049891906130bc565b6110ba565b005b3480156104ab57600080fd5b506104b461122e565b6040516104c19190612e8b565b60405180910390f35b3480156104d657600080fd5b506104df611234565b6040516104ec9190612fa3565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190612e4f565b611258565b005b34801561052a57600080fd5b5061054560048036038101906105409190612f04565b6112b5565b6040516105529190612e8b565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190612f04565b6112cd565b60405161058f9190612e8b565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba919061324a565b6112e5565b6040516105cc9190612dfe565b60405180910390f35b3480156105e157600080fd5b506105ea611671565b6040516105f79190612e8b565b60405180910390f35b34801561060c57600080fd5b50610615611677565b6040516106229190612e8b565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612e4f565b61167d565b005b34801561066057600080fd5b506106696116da565b60405161067691906132f0565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190612e4f565b611700565b005b3480156106b457600080fd5b506106bd61175d565b6040516106ca9190612dfe565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190612e4f565b611770565b005b34801561070857600080fd5b50610723600480360381019061071e91906130bc565b6117cd565b005b61073f600480360381019061073a9190612e4f565b6119ce565b60405161074c9190612dfe565b60405180910390f35b34801561076157600080fd5b5061076a611ceb565b6040516107779190612e8b565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190612e4f565b611cf1565b005b3480156107b557600080fd5b506107be611d4e565b6040516107cb9190612e8b565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f69190613017565b611d54565b6040516108089190612dfe565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190612e4f565b611dbe565b005b34801561084657600080fd5b50610861600480360381019061085c9190613349565b611e1b565b005b34801561086f57600080fd5b50610878611eb2565b6040516108859190612fa3565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b09190612e4f565b611eb9565b005b3480156108c357600080fd5b506108de60048036038101906108d9919061324a565b611f16565b6040516108eb91906132f0565b60405180910390f35b61090e60048036038101906109099190612e4f565b611f59565b60405161091b9190612dfe565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190612f04565b6122b9565b005b34801561095957600080fd5b506109626123c0565b60405161096f91906133d5565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a9190612f04565b6123e6565b6040516109ac9190612e8b565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190613017565b6123fe565b005b3480156109ea57600080fd5b506109f3612427565b604051610a009190612e8b565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190612f04565b61242d565b604051610a3d9190612dfe565b60405180910390f35b348015610a5257600080fd5b50610a5b61244d565b604051610a689190612e8b565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ae45750610ae382612453565b5b9050919050565b600080610af66124bd565b90506004544210158015610b185750600854600454610b15919061341f565b42105b610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906134f8565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90613564565b60405180910390fd5b60008311610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d906135d0565b60405180910390fd5b82600254610c3491906135f0565b341015610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d90613696565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610cde573d6000803e3d6000fd5b506000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600a548482610d32919061341f565b1115610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90613702565b60405180910390fd5b60005b84811015610e3f57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842846040518263ffffffff1660e01b8152600401610dd991906132f0565b602060405180830381600087803b158015610df357600080fd5b505af1158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b9190613737565b508080610e3790613764565b915050610d76565b5083600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e8f919061341f565b92505081905550600192505050919050565b60085481565b600f6020528060005260406000206000915090505481565b610ed36000801b610ece6124bd565b611d54565b610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f09906137f9565b60405180910390fd5b8060098190555050565b6000806000838152602001908152602001600020600101549050919050565b610f4f6000801b610f4a6124bd565b611d54565b610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906137f9565b60405180910390fd5b80600160146101000a81548160ff02191690831515021790555050565b610fbf6000801b610fba6124bd565b611d54565b610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff5906137f9565b60405180910390fd5b80600a8190555050565b61101182610f1c565b6110228161101d6124bd565b6124c5565b61102c8383612562565b505050565b60075481565b61103f6124bd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a39061388b565b60405180910390fd5b6110b68282612642565b5050565b6110ce6000801b6110c96124bd565b611d54565b61110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906137f9565b60405180910390fd5b600082829050905060005b81811015611228576000848483818110611135576111346138ab565b5b905060200201602081019061114a9190612f04565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b390613926565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061122090613764565b915050611118565b50505050565b600a5481565b7fab00b0eef9bc639da8d6e0e02fb8a48a36349b940440b16012c32e2ef58de88681565b61126c6000801b6112676124bd565b611d54565b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a2906137f9565b60405180910390fd5b8060078190555050565b600e6020528060005260406000206000915090505481565b600d6020528060005260406000206000915090505481565b60003373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613992565b60405180910390fd5b600160149054906101000a900460ff16156113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c906139fe565b60405180910390fd5b6007544210156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190613a90565b60405180910390fd5b60006113f98787878787611f16565b90506114257fab00b0eef9bc639da8d6e0e02fb8a48a36349b940440b16012c32e2ef58de88682611d54565b611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90613b22565b60405180910390fd5b6000601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081876114b69190613b42565b9050600081116114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613bc2565b60405180910390fd5b8088111561153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590613c2e565b60405180910390fd5b60005b8881101561160a57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a91ed8c68b6040518263ffffffff1660e01b81526004016115a491906132f0565b602060405180830381600087803b1580156115be57600080fd5b505af11580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f69190613737565b50808061160290613764565b915050611541565b5087601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461165a919061341f565b925050819055506001935050505095945050505050565b60045481565b60055481565b6116916000801b61168c6124bd565b611d54565b6116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c7906137f9565b60405180910390fd5b8060088190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117146000801b61170f6124bd565b611d54565b611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a906137f9565b60405180910390fd5b8060028190555050565b600160149054906101000a900460ff1681565b6117846000801b61177f6124bd565b611d54565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906137f9565b60405180910390fd5b8060068190555050565b6117e16000801b6117dc6124bd565b611d54565b611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906137f9565b60405180910390fd5b600082829050905060005b818110156119c8576000848483818110611848576118476138ab565b5b905060200201602081019061185d9190612f04565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690613c9a565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390613d06565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806119c090613764565b91505061182b565b50505050565b6000806119d96124bd565b905060055442101580156119ee575060065442105b611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2490613d72565b60405180910390fd5b60008311611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a67906135d0565b60405180910390fd5b82600254611a7e91906135f0565b341015611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790613696565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611b28573d6000803e3d6000fd5b506000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506009548482611b7c919061341f565b1115611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb490613702565b60405180910390fd5b60005b84811015611c8957600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842846040518263ffffffff1660e01b8152600401611c2391906132f0565b602060405180830381600087803b158015611c3d57600080fd5b505af1158015611c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c759190613737565b508080611c8190613764565b915050611bc0565b5083600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cd9919061341f565b92505081905550600192505050919050565b60025481565b611d056000801b611d006124bd565b611d54565b611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906137f9565b60405180910390fd5b80600b8190555050565b600b5481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dd26000801b611dcd6124bd565b611d54565b611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e08906137f9565b60405180910390fd5b8060048190555050565b611e2f6000801b611e2a6124bd565b611d54565b611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e65906137f9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000801b81565b611ecd6000801b611ec86124bd565b611d54565b611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f03906137f9565b60405180910390fd5b8060058190555050565b6000611f4e86868686604051602001611f329493929190613d92565b6040516020818303038152906040528051906020012083612723565b905095945050505050565b600080611f646124bd565b9050600654421015611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290613e49565b60405180910390fd5b600160149054906101000a900460ff1615611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff2906139fe565b60405180910390fd5b6000831161203e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612035906135d0565b60405180910390fd5b8260025461204c91906135f0565b34101561208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590613696565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156120f6573d6000803e3d6000fd5b506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b54848261214a919061341f565b111561218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290613702565b60405180910390fd5b60005b8481101561225757600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842846040518263ffffffff1660e01b81526004016121f191906132f0565b602060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122439190613737565b50808061224f90613764565b91505061218e565b5083600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a7919061341f565b92505081905550600192505050919050565b6122cd6000801b6122c86124bd565b611d54565b61230c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612303906137f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390613eb5565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915090505481565b61240782610f1c565b612418816124136124bd565b6124c5565b6124228383612642565b505050565b60065481565b600c6020528060005260406000206000915054906101000a900460ff1681565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6124cf8282611d54565b61255e576124f48173ffffffffffffffffffffffffffffffffffffffff16601461274a565b6125028360001c602061274a565b604051602001612513929190613fe7565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612555919061405a565b60405180910390fd5b5050565b61256c8282611d54565b61263e57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125e36124bd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61264c8282611d54565b1561271f57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506126c46124bd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008060006127328585612986565b9150915061273f81612a09565b819250505092915050565b60606000600283600261275d91906135f0565b612767919061341f565b67ffffffffffffffff8111156127805761277f61311f565b5b6040519080825280601f01601f1916602001820160405280156127b25781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106127ea576127e96138ab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061284e5761284d6138ab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261288e91906135f0565b612898919061341f565b90505b6001811115612938577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106128da576128d96138ab565b5b1a60f81b8282815181106128f1576128f06138ab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806129319061407c565b905061289b565b506000841461297c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612973906140f2565b60405180910390fd5b8091505092915050565b6000806041835114156129c85760008060006020860151925060408601519150606086015160001a90506129bc87828585612bde565b94509450505050612a02565b6040835114156129f95760008060208501519150604085015190506129ee868383612ceb565b935093505050612a02565b60006002915091505b9250929050565b60006004811115612a1d57612a1c614112565b5b816004811115612a3057612a2f614112565b5b1415612a3b57612bdb565b60016004811115612a4f57612a4e614112565b5b816004811115612a6257612a61614112565b5b1415612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a9061418d565b60405180910390fd5b60026004811115612ab757612ab6614112565b5b816004811115612aca57612ac9614112565b5b1415612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b02906141f9565b60405180910390fd5b60036004811115612b1f57612b1e614112565b5b816004811115612b3257612b31614112565b5b1415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a9061428b565b60405180910390fd5b600480811115612b8657612b85614112565b5b816004811115612b9957612b98614112565b5b1415612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd19061431d565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612c19576000600391509150612ce2565b601b8560ff1614158015612c315750601c8560ff1614155b15612c43576000600491509150612ce2565b600060018787878760405160008152602001604052604051612c689493929190614359565b6020604051602081039080840390855afa158015612c8a573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612cd957600060019250925050612ce2565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c612d2e919061341f565b9050612d3c87828885612bde565b935093505050935093915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d9381612d5e565b8114612d9e57600080fd5b50565b600081359050612db081612d8a565b92915050565b600060208284031215612dcc57612dcb612d54565b5b6000612dda84828501612da1565b91505092915050565b60008115159050919050565b612df881612de3565b82525050565b6000602082019050612e136000830184612def565b92915050565b6000819050919050565b612e2c81612e19565b8114612e3757600080fd5b50565b600081359050612e4981612e23565b92915050565b600060208284031215612e6557612e64612d54565b5b6000612e7384828501612e3a565b91505092915050565b612e8581612e19565b82525050565b6000602082019050612ea06000830184612e7c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ed182612ea6565b9050919050565b612ee181612ec6565b8114612eec57600080fd5b50565b600081359050612efe81612ed8565b92915050565b600060208284031215612f1a57612f19612d54565b5b6000612f2884828501612eef565b91505092915050565b6000819050919050565b612f4481612f31565b8114612f4f57600080fd5b50565b600081359050612f6181612f3b565b92915050565b600060208284031215612f7d57612f7c612d54565b5b6000612f8b84828501612f52565b91505092915050565b612f9d81612f31565b82525050565b6000602082019050612fb86000830184612f94565b92915050565b612fc781612de3565b8114612fd257600080fd5b50565b600081359050612fe481612fbe565b92915050565b60006020828403121561300057612fff612d54565b5b600061300e84828501612fd5565b91505092915050565b6000806040838503121561302e5761302d612d54565b5b600061303c85828601612f52565b925050602061304d85828601612eef565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261307c5761307b613057565b5b8235905067ffffffffffffffff8111156130995761309861305c565b5b6020830191508360208202830111156130b5576130b4613061565b5b9250929050565b600080602083850312156130d3576130d2612d54565b5b600083013567ffffffffffffffff8111156130f1576130f0612d59565b5b6130fd85828601613066565b92509250509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131578261310e565b810181811067ffffffffffffffff821117156131765761317561311f565b5b80604052505050565b6000613189612d4a565b9050613195828261314e565b919050565b600067ffffffffffffffff8211156131b5576131b461311f565b5b6131be8261310e565b9050602081019050919050565b82818337600083830152505050565b60006131ed6131e88461319a565b61317f565b90508281526020810184848401111561320957613208613109565b5b6132148482856131cb565b509392505050565b600082601f83011261323157613230613057565b5b81356132418482602086016131da565b91505092915050565b600080600080600060a0868803121561326657613265612d54565b5b600061327488828901612eef565b955050602061328588828901612e3a565b945050604061329688828901612e3a565b93505060606132a788828901612e3a565b925050608086013567ffffffffffffffff8111156132c8576132c7612d59565b5b6132d48882890161321c565b9150509295509295909350565b6132ea81612ec6565b82525050565b600060208201905061330560008301846132e1565b92915050565b600061331682612ec6565b9050919050565b6133268161330b565b811461333157600080fd5b50565b6000813590506133438161331d565b92915050565b60006020828403121561335f5761335e612d54565b5b600061336d84828501613334565b91505092915050565b6000819050919050565b600061339b61339661339184612ea6565b613376565b612ea6565b9050919050565b60006133ad82613380565b9050919050565b60006133bf826133a2565b9050919050565b6133cf816133b4565b82525050565b60006020820190506133ea60008301846133c6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061342a82612e19565b915061343583612e19565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561346a576134696133f0565b5b828201905092915050565b600082825260208201905092915050565b7f54696d65206973206e6f74207375697461626c6520666f722077686974654c6960008201527f7374000000000000000000000000000000000000000000000000000000000000602082015250565b60006134e2602283613475565b91506134ed82613486565b604082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b7f4f4e4c592057484954454c495354000000000000000000000000000000000000600082015250565b600061354e600e83613475565b915061355982613518565b602082019050919050565b6000602082019050818103600083015261357d81613541565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b60006135ba601b83613475565b91506135c582613584565b602082019050919050565b600060208201905081810360008301526135e9816135ad565b9050919050565b60006135fb82612e19565b915061360683612e19565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561363f5761363e6133f0565b5b828202905092915050565b7f496e73756666696369656e7420616d6f756e742070726f766964656400000000600082015250565b6000613680601c83613475565b915061368b8261364a565b602082019050919050565b600060208201905081810360008301526136af81613673565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b60006136ec601c83613475565b91506136f7826136b6565b602082019050919050565b6000602082019050818103600083015261371b816136df565b9050919050565b60008151905061373181612fbe565b92915050565b60006020828403121561374d5761374c612d54565b5b600061375b84828501613722565b91505092915050565b600061376f82612e19565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137a2576137a16133f0565b5b600182019050919050565b7f43616c6c6572206973206e6f7420612061646d696e0000000000000000000000600082015250565b60006137e3601583613475565b91506137ee826137ad565b602082019050919050565b60006020820190508181036000830152613812816137d6565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613875602f83613475565b915061388082613819565b604082019050919050565b600060208201905081810360008301526138a481613868565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f742072656d6f7665207a65726f2061646472657373000000000000600082015250565b6000613910601a83613475565b915061391b826138da565b602082019050919050565b6000602082019050818103600083015261393f81613903565b9050919050565b7f6e6f7420616c70686120686f6c64657200000000000000000000000000000000600082015250565b600061397c601083613475565b915061398782613946565b602082019050919050565b600060208201905081810360008301526139ab8161396f565b9050919050565b7f6d696e74696e6720706175736564000000000000000000000000000000000000600082015250565b60006139e8600e83613475565b91506139f3826139b2565b602082019050919050565b60006020820190508181036000830152613a17816139db565b9050919050565b7f54696d65206973206e6f74207375697461626c6520666f7220416c706861206860008201527f6f6c646572730000000000000000000000000000000000000000000000000000602082015250565b6000613a7a602683613475565b9150613a8582613a1e565b604082019050919050565b60006020820190508181036000830152613aa981613a6d565b9050919050565b7f53555045524e4552444e46543a204e6f7420617574686f72697a656420746f2060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613b0c602483613475565b9150613b1782613ab0565b604082019050919050565b60006020820190508181036000830152613b3b81613aff565b9050919050565b6000613b4d82612e19565b9150613b5883612e19565b925082821015613b6b57613b6a6133f0565b5b828203905092915050565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b6000613bac600e83613475565b9150613bb782613b76565b602082019050919050565b60006020820190508181036000830152613bdb81613b9f565b9050919050565b7f7175616e74697479206578636565647320617661696c61626c65206d696e7473600082015250565b6000613c18602083613475565b9150613c2382613be2565b602082019050919050565b60006020820190508181036000830152613c4781613c0b565b9050919050565b7f43616e6e6f7420616464207a65726f2061646472657373000000000000000000600082015250565b6000613c84601783613475565b9150613c8f82613c4e565b602082019050919050565b60006020820190508181036000830152613cb381613c77565b9050919050565b7f43616e6e6f7420616464206475706c6963617465206164647265737300000000600082015250565b6000613cf0601c83613475565b9150613cfb82613cba565b602082019050919050565b60006020820190508181036000830152613d1f81613ce3565b9050919050565b7f54696d65206973206e6f74207375697461626c6520666f722070726573616c65600082015250565b6000613d5c602083613475565b9150613d6782613d26565b602082019050919050565b60006020820190508181036000830152613d8b81613d4f565b9050919050565b6000608082019050613da760008301876132e1565b613db46020830186612e7c565b613dc16040830185612e7c565b613dce6060830184612e7c565b95945050505050565b7f54696d65206973206e6f74207375697461626c6520666f72205075626c69632060008201527f53616c6500000000000000000000000000000000000000000000000000000000602082015250565b6000613e33602483613475565b9150613e3e82613dd7565b604082019050919050565b60006020820190508181036000830152613e6281613e26565b9050919050565b7f6164647265737320696e76616c69640000000000000000000000000000000000600082015250565b6000613e9f600f83613475565b9150613eaa82613e69565b602082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000613f16601783613ed5565b9150613f2182613ee0565b601782019050919050565b600081519050919050565b60005b83811015613f55578082015181840152602081019050613f3a565b83811115613f64576000848401525b50505050565b6000613f7582613f2c565b613f7f8185613ed5565b9350613f8f818560208601613f37565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000613fd1601183613ed5565b9150613fdc82613f9b565b601182019050919050565b6000613ff282613f09565b9150613ffe8285613f6a565b915061400982613fc4565b91506140158284613f6a565b91508190509392505050565b600061402c82613f2c565b6140368185613475565b9350614046818560208601613f37565b61404f8161310e565b840191505092915050565b600060208201905081810360008301526140748184614021565b905092915050565b600061408782612e19565b9150600082141561409b5761409a6133f0565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006140dc602083613475565b91506140e7826140a6565b602082019050919050565b6000602082019050818103600083015261410b816140cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000614177601883613475565b915061418282614141565b602082019050919050565b600060208201905081810360008301526141a68161416a565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006141e3601f83613475565b91506141ee826141ad565b602082019050919050565b60006020820190508181036000830152614212816141d6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614275602283613475565b915061428082614219565b604082019050919050565b600060208201905081810360008301526142a481614268565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614307602283613475565b9150614312826142ab565b604082019050919050565b60006020820190508181036000830152614336816142fa565b9050919050565b600060ff82169050919050565b6143538161433d565b82525050565b600060808201905061436e6000830187612f94565b61437b602083018661434a565b6143886040830185612f94565b6143956060830184612f94565b9594505050505056fea26469706673582212203beffd00c8c8af014a014c28f04820d9e52a00e49edb2198c8833bc6af27028964736f6c634300080900330000000000000000000000000f8ae41bde78592d53941b0e2d7dc4702b626a95
Deployed Bytecode
0x6080604052600436106102675760003560e01c80636a61e5fc11610144578063a217fddf116100b6578063c4d8b2071161007a578063c4d8b2071461094d578063c5339d6914610978578063d547741f146109b5578063dcefac7f146109de578063e22bcf8414610a09578063f59003e914610a4657610267565b8063a217fddf14610863578063b040533b1461088e578063b06df763146108b7578063b3ab66b0146108f4578063b3c580871461092457610267565b80637ff9b596116101085780637ff9b5961461075557806380dbca8b146107805780638bf7859b146107a957806391d14854146107d457806397692e151461081157806398ce3a431461083a57610267565b80636a61e5fc1461067f5780636b5ecffc146106a85780636d5d40c6146106d3578063740d73f3146106fc5780637835c6351461072557610267565b80633e6a84fc116101dd5780634f1f8c20116101a15780634f1f8c201461055b57806350be4a9f1461059857806351847ed5146105d55780635381464c14610600578063553408ff1461062b578063578c21411461065457610267565b80633e6a84fc14610476578063421cbe9c1461049f57806346748d85146104ca5780634dc200e5146104f55780634dc598de1461051e57610267565b8063248a9ca31161022f578063248a9ca31461036a5780632a04f1b9146103a75780632e929f59146103d05780632f2ff15d146103f957806333e790bf1461042257806336568abe1461044d57610267565b806301ffc9a71461026c57806302e001ef146102a9578063161415bf146102d957806319c0841f146103045780631d56bbad14610341575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190612db6565b610a71565b6040516102a09190612dfe565b60405180910390f35b6102c360048036038101906102be9190612e4f565b610aeb565b6040516102d09190612dfe565b60405180910390f35b3480156102e557600080fd5b506102ee610ea1565b6040516102fb9190612e8b565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190612f04565b610ea7565b6040516103389190612e8b565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190612e4f565b610ebf565b005b34801561037657600080fd5b50610391600480360381019061038c9190612f67565b610f1c565b60405161039e9190612fa3565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190612fea565b610f3b565b005b3480156103dc57600080fd5b506103f760048036038101906103f29190612e4f565b610fab565b005b34801561040557600080fd5b50610420600480360381019061041b9190613017565b611008565b005b34801561042e57600080fd5b50610437611031565b6040516104449190612e8b565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f9190613017565b611037565b005b34801561048257600080fd5b5061049d600480360381019061049891906130bc565b6110ba565b005b3480156104ab57600080fd5b506104b461122e565b6040516104c19190612e8b565b60405180910390f35b3480156104d657600080fd5b506104df611234565b6040516104ec9190612fa3565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190612e4f565b611258565b005b34801561052a57600080fd5b5061054560048036038101906105409190612f04565b6112b5565b6040516105529190612e8b565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190612f04565b6112cd565b60405161058f9190612e8b565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba919061324a565b6112e5565b6040516105cc9190612dfe565b60405180910390f35b3480156105e157600080fd5b506105ea611671565b6040516105f79190612e8b565b60405180910390f35b34801561060c57600080fd5b50610615611677565b6040516106229190612e8b565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612e4f565b61167d565b005b34801561066057600080fd5b506106696116da565b60405161067691906132f0565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190612e4f565b611700565b005b3480156106b457600080fd5b506106bd61175d565b6040516106ca9190612dfe565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190612e4f565b611770565b005b34801561070857600080fd5b50610723600480360381019061071e91906130bc565b6117cd565b005b61073f600480360381019061073a9190612e4f565b6119ce565b60405161074c9190612dfe565b60405180910390f35b34801561076157600080fd5b5061076a611ceb565b6040516107779190612e8b565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190612e4f565b611cf1565b005b3480156107b557600080fd5b506107be611d4e565b6040516107cb9190612e8b565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f69190613017565b611d54565b6040516108089190612dfe565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190612e4f565b611dbe565b005b34801561084657600080fd5b50610861600480360381019061085c9190613349565b611e1b565b005b34801561086f57600080fd5b50610878611eb2565b6040516108859190612fa3565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b09190612e4f565b611eb9565b005b3480156108c357600080fd5b506108de60048036038101906108d9919061324a565b611f16565b6040516108eb91906132f0565b60405180910390f35b61090e60048036038101906109099190612e4f565b611f59565b60405161091b9190612dfe565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190612f04565b6122b9565b005b34801561095957600080fd5b506109626123c0565b60405161096f91906133d5565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a9190612f04565b6123e6565b6040516109ac9190612e8b565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190613017565b6123fe565b005b3480156109ea57600080fd5b506109f3612427565b604051610a009190612e8b565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190612f04565b61242d565b604051610a3d9190612dfe565b60405180910390f35b348015610a5257600080fd5b50610a5b61244d565b604051610a689190612e8b565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ae45750610ae382612453565b5b9050919050565b600080610af66124bd565b90506004544210158015610b185750600854600454610b15919061341f565b42105b610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906134f8565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90613564565b60405180910390fd5b60008311610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d906135d0565b60405180910390fd5b82600254610c3491906135f0565b341015610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d90613696565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610cde573d6000803e3d6000fd5b506000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600a548482610d32919061341f565b1115610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90613702565b60405180910390fd5b60005b84811015610e3f57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842846040518263ffffffff1660e01b8152600401610dd991906132f0565b602060405180830381600087803b158015610df357600080fd5b505af1158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b9190613737565b508080610e3790613764565b915050610d76565b5083600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e8f919061341f565b92505081905550600192505050919050565b60085481565b600f6020528060005260406000206000915090505481565b610ed36000801b610ece6124bd565b611d54565b610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f09906137f9565b60405180910390fd5b8060098190555050565b6000806000838152602001908152602001600020600101549050919050565b610f4f6000801b610f4a6124bd565b611d54565b610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906137f9565b60405180910390fd5b80600160146101000a81548160ff02191690831515021790555050565b610fbf6000801b610fba6124bd565b611d54565b610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff5906137f9565b60405180910390fd5b80600a8190555050565b61101182610f1c565b6110228161101d6124bd565b6124c5565b61102c8383612562565b505050565b60075481565b61103f6124bd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a39061388b565b60405180910390fd5b6110b68282612642565b5050565b6110ce6000801b6110c96124bd565b611d54565b61110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906137f9565b60405180910390fd5b600082829050905060005b81811015611228576000848483818110611135576111346138ab565b5b905060200201602081019061114a9190612f04565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b390613926565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061122090613764565b915050611118565b50505050565b600a5481565b7fab00b0eef9bc639da8d6e0e02fb8a48a36349b940440b16012c32e2ef58de88681565b61126c6000801b6112676124bd565b611d54565b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a2906137f9565b60405180910390fd5b8060078190555050565b600e6020528060005260406000206000915090505481565b600d6020528060005260406000206000915090505481565b60003373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613992565b60405180910390fd5b600160149054906101000a900460ff16156113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c906139fe565b60405180910390fd5b6007544210156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190613a90565b60405180910390fd5b60006113f98787878787611f16565b90506114257fab00b0eef9bc639da8d6e0e02fb8a48a36349b940440b16012c32e2ef58de88682611d54565b611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90613b22565b60405180910390fd5b6000601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081876114b69190613b42565b9050600081116114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613bc2565b60405180910390fd5b8088111561153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590613c2e565b60405180910390fd5b60005b8881101561160a57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a91ed8c68b6040518263ffffffff1660e01b81526004016115a491906132f0565b602060405180830381600087803b1580156115be57600080fd5b505af11580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f69190613737565b50808061160290613764565b915050611541565b5087601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461165a919061341f565b925050819055506001935050505095945050505050565b60045481565b60055481565b6116916000801b61168c6124bd565b611d54565b6116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c7906137f9565b60405180910390fd5b8060088190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117146000801b61170f6124bd565b611d54565b611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a906137f9565b60405180910390fd5b8060028190555050565b600160149054906101000a900460ff1681565b6117846000801b61177f6124bd565b611d54565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906137f9565b60405180910390fd5b8060068190555050565b6117e16000801b6117dc6124bd565b611d54565b611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906137f9565b60405180910390fd5b600082829050905060005b818110156119c8576000848483818110611848576118476138ab565b5b905060200201602081019061185d9190612f04565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690613c9a565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390613d06565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806119c090613764565b91505061182b565b50505050565b6000806119d96124bd565b905060055442101580156119ee575060065442105b611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2490613d72565b60405180910390fd5b60008311611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a67906135d0565b60405180910390fd5b82600254611a7e91906135f0565b341015611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790613696565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611b28573d6000803e3d6000fd5b506000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506009548482611b7c919061341f565b1115611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb490613702565b60405180910390fd5b60005b84811015611c8957600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842846040518263ffffffff1660e01b8152600401611c2391906132f0565b602060405180830381600087803b158015611c3d57600080fd5b505af1158015611c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c759190613737565b508080611c8190613764565b915050611bc0565b5083600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cd9919061341f565b92505081905550600192505050919050565b60025481565b611d056000801b611d006124bd565b611d54565b611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906137f9565b60405180910390fd5b80600b8190555050565b600b5481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dd26000801b611dcd6124bd565b611d54565b611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e08906137f9565b60405180910390fd5b8060048190555050565b611e2f6000801b611e2a6124bd565b611d54565b611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e65906137f9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000801b81565b611ecd6000801b611ec86124bd565b611d54565b611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f03906137f9565b60405180910390fd5b8060058190555050565b6000611f4e86868686604051602001611f329493929190613d92565b6040516020818303038152906040528051906020012083612723565b905095945050505050565b600080611f646124bd565b9050600654421015611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290613e49565b60405180910390fd5b600160149054906101000a900460ff1615611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff2906139fe565b60405180910390fd5b6000831161203e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612035906135d0565b60405180910390fd5b8260025461204c91906135f0565b34101561208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590613696565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156120f6573d6000803e3d6000fd5b506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b54848261214a919061341f565b111561218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290613702565b60405180910390fd5b60005b8481101561225757600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842846040518263ffffffff1660e01b81526004016121f191906132f0565b602060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122439190613737565b50808061224f90613764565b91505061218e565b5083600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a7919061341f565b92505081905550600192505050919050565b6122cd6000801b6122c86124bd565b611d54565b61230c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612303906137f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390613eb5565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915090505481565b61240782610f1c565b612418816124136124bd565b6124c5565b6124228383612642565b505050565b60065481565b600c6020528060005260406000206000915054906101000a900460ff1681565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6124cf8282611d54565b61255e576124f48173ffffffffffffffffffffffffffffffffffffffff16601461274a565b6125028360001c602061274a565b604051602001612513929190613fe7565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612555919061405a565b60405180910390fd5b5050565b61256c8282611d54565b61263e57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125e36124bd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61264c8282611d54565b1561271f57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506126c46124bd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008060006127328585612986565b9150915061273f81612a09565b819250505092915050565b60606000600283600261275d91906135f0565b612767919061341f565b67ffffffffffffffff8111156127805761277f61311f565b5b6040519080825280601f01601f1916602001820160405280156127b25781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106127ea576127e96138ab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061284e5761284d6138ab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261288e91906135f0565b612898919061341f565b90505b6001811115612938577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106128da576128d96138ab565b5b1a60f81b8282815181106128f1576128f06138ab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806129319061407c565b905061289b565b506000841461297c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612973906140f2565b60405180910390fd5b8091505092915050565b6000806041835114156129c85760008060006020860151925060408601519150606086015160001a90506129bc87828585612bde565b94509450505050612a02565b6040835114156129f95760008060208501519150604085015190506129ee868383612ceb565b935093505050612a02565b60006002915091505b9250929050565b60006004811115612a1d57612a1c614112565b5b816004811115612a3057612a2f614112565b5b1415612a3b57612bdb565b60016004811115612a4f57612a4e614112565b5b816004811115612a6257612a61614112565b5b1415612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a9061418d565b60405180910390fd5b60026004811115612ab757612ab6614112565b5b816004811115612aca57612ac9614112565b5b1415612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b02906141f9565b60405180910390fd5b60036004811115612b1f57612b1e614112565b5b816004811115612b3257612b31614112565b5b1415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a9061428b565b60405180910390fd5b600480811115612b8657612b85614112565b5b816004811115612b9957612b98614112565b5b1415612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd19061431d565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612c19576000600391509150612ce2565b601b8560ff1614158015612c315750601c8560ff1614155b15612c43576000600491509150612ce2565b600060018787878760405160008152602001604052604051612c689493929190614359565b6020604051602081039080840390855afa158015612c8a573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612cd957600060019250925050612ce2565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c612d2e919061341f565b9050612d3c87828885612bde565b935093505050935093915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d9381612d5e565b8114612d9e57600080fd5b50565b600081359050612db081612d8a565b92915050565b600060208284031215612dcc57612dcb612d54565b5b6000612dda84828501612da1565b91505092915050565b60008115159050919050565b612df881612de3565b82525050565b6000602082019050612e136000830184612def565b92915050565b6000819050919050565b612e2c81612e19565b8114612e3757600080fd5b50565b600081359050612e4981612e23565b92915050565b600060208284031215612e6557612e64612d54565b5b6000612e7384828501612e3a565b91505092915050565b612e8581612e19565b82525050565b6000602082019050612ea06000830184612e7c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ed182612ea6565b9050919050565b612ee181612ec6565b8114612eec57600080fd5b50565b600081359050612efe81612ed8565b92915050565b600060208284031215612f1a57612f19612d54565b5b6000612f2884828501612eef565b91505092915050565b6000819050919050565b612f4481612f31565b8114612f4f57600080fd5b50565b600081359050612f6181612f3b565b92915050565b600060208284031215612f7d57612f7c612d54565b5b6000612f8b84828501612f52565b91505092915050565b612f9d81612f31565b82525050565b6000602082019050612fb86000830184612f94565b92915050565b612fc781612de3565b8114612fd257600080fd5b50565b600081359050612fe481612fbe565b92915050565b60006020828403121561300057612fff612d54565b5b600061300e84828501612fd5565b91505092915050565b6000806040838503121561302e5761302d612d54565b5b600061303c85828601612f52565b925050602061304d85828601612eef565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261307c5761307b613057565b5b8235905067ffffffffffffffff8111156130995761309861305c565b5b6020830191508360208202830111156130b5576130b4613061565b5b9250929050565b600080602083850312156130d3576130d2612d54565b5b600083013567ffffffffffffffff8111156130f1576130f0612d59565b5b6130fd85828601613066565b92509250509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131578261310e565b810181811067ffffffffffffffff821117156131765761317561311f565b5b80604052505050565b6000613189612d4a565b9050613195828261314e565b919050565b600067ffffffffffffffff8211156131b5576131b461311f565b5b6131be8261310e565b9050602081019050919050565b82818337600083830152505050565b60006131ed6131e88461319a565b61317f565b90508281526020810184848401111561320957613208613109565b5b6132148482856131cb565b509392505050565b600082601f83011261323157613230613057565b5b81356132418482602086016131da565b91505092915050565b600080600080600060a0868803121561326657613265612d54565b5b600061327488828901612eef565b955050602061328588828901612e3a565b945050604061329688828901612e3a565b93505060606132a788828901612e3a565b925050608086013567ffffffffffffffff8111156132c8576132c7612d59565b5b6132d48882890161321c565b9150509295509295909350565b6132ea81612ec6565b82525050565b600060208201905061330560008301846132e1565b92915050565b600061331682612ec6565b9050919050565b6133268161330b565b811461333157600080fd5b50565b6000813590506133438161331d565b92915050565b60006020828403121561335f5761335e612d54565b5b600061336d84828501613334565b91505092915050565b6000819050919050565b600061339b61339661339184612ea6565b613376565b612ea6565b9050919050565b60006133ad82613380565b9050919050565b60006133bf826133a2565b9050919050565b6133cf816133b4565b82525050565b60006020820190506133ea60008301846133c6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061342a82612e19565b915061343583612e19565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561346a576134696133f0565b5b828201905092915050565b600082825260208201905092915050565b7f54696d65206973206e6f74207375697461626c6520666f722077686974654c6960008201527f7374000000000000000000000000000000000000000000000000000000000000602082015250565b60006134e2602283613475565b91506134ed82613486565b604082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b7f4f4e4c592057484954454c495354000000000000000000000000000000000000600082015250565b600061354e600e83613475565b915061355982613518565b602082019050919050565b6000602082019050818103600083015261357d81613541565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b60006135ba601b83613475565b91506135c582613584565b602082019050919050565b600060208201905081810360008301526135e9816135ad565b9050919050565b60006135fb82612e19565b915061360683612e19565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561363f5761363e6133f0565b5b828202905092915050565b7f496e73756666696369656e7420616d6f756e742070726f766964656400000000600082015250565b6000613680601c83613475565b915061368b8261364a565b602082019050919050565b600060208201905081810360008301526136af81613673565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b60006136ec601c83613475565b91506136f7826136b6565b602082019050919050565b6000602082019050818103600083015261371b816136df565b9050919050565b60008151905061373181612fbe565b92915050565b60006020828403121561374d5761374c612d54565b5b600061375b84828501613722565b91505092915050565b600061376f82612e19565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137a2576137a16133f0565b5b600182019050919050565b7f43616c6c6572206973206e6f7420612061646d696e0000000000000000000000600082015250565b60006137e3601583613475565b91506137ee826137ad565b602082019050919050565b60006020820190508181036000830152613812816137d6565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613875602f83613475565b915061388082613819565b604082019050919050565b600060208201905081810360008301526138a481613868565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f742072656d6f7665207a65726f2061646472657373000000000000600082015250565b6000613910601a83613475565b915061391b826138da565b602082019050919050565b6000602082019050818103600083015261393f81613903565b9050919050565b7f6e6f7420616c70686120686f6c64657200000000000000000000000000000000600082015250565b600061397c601083613475565b915061398782613946565b602082019050919050565b600060208201905081810360008301526139ab8161396f565b9050919050565b7f6d696e74696e6720706175736564000000000000000000000000000000000000600082015250565b60006139e8600e83613475565b91506139f3826139b2565b602082019050919050565b60006020820190508181036000830152613a17816139db565b9050919050565b7f54696d65206973206e6f74207375697461626c6520666f7220416c706861206860008201527f6f6c646572730000000000000000000000000000000000000000000000000000602082015250565b6000613a7a602683613475565b9150613a8582613a1e565b604082019050919050565b60006020820190508181036000830152613aa981613a6d565b9050919050565b7f53555045524e4552444e46543a204e6f7420617574686f72697a656420746f2060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613b0c602483613475565b9150613b1782613ab0565b604082019050919050565b60006020820190508181036000830152613b3b81613aff565b9050919050565b6000613b4d82612e19565b9150613b5883612e19565b925082821015613b6b57613b6a6133f0565b5b828203905092915050565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b6000613bac600e83613475565b9150613bb782613b76565b602082019050919050565b60006020820190508181036000830152613bdb81613b9f565b9050919050565b7f7175616e74697479206578636565647320617661696c61626c65206d696e7473600082015250565b6000613c18602083613475565b9150613c2382613be2565b602082019050919050565b60006020820190508181036000830152613c4781613c0b565b9050919050565b7f43616e6e6f7420616464207a65726f2061646472657373000000000000000000600082015250565b6000613c84601783613475565b9150613c8f82613c4e565b602082019050919050565b60006020820190508181036000830152613cb381613c77565b9050919050565b7f43616e6e6f7420616464206475706c6963617465206164647265737300000000600082015250565b6000613cf0601c83613475565b9150613cfb82613cba565b602082019050919050565b60006020820190508181036000830152613d1f81613ce3565b9050919050565b7f54696d65206973206e6f74207375697461626c6520666f722070726573616c65600082015250565b6000613d5c602083613475565b9150613d6782613d26565b602082019050919050565b60006020820190508181036000830152613d8b81613d4f565b9050919050565b6000608082019050613da760008301876132e1565b613db46020830186612e7c565b613dc16040830185612e7c565b613dce6060830184612e7c565b95945050505050565b7f54696d65206973206e6f74207375697461626c6520666f72205075626c69632060008201527f53616c6500000000000000000000000000000000000000000000000000000000602082015250565b6000613e33602483613475565b9150613e3e82613dd7565b604082019050919050565b60006020820190508181036000830152613e6281613e26565b9050919050565b7f6164647265737320696e76616c69640000000000000000000000000000000000600082015250565b6000613e9f600f83613475565b9150613eaa82613e69565b602082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000613f16601783613ed5565b9150613f2182613ee0565b601782019050919050565b600081519050919050565b60005b83811015613f55578082015181840152602081019050613f3a565b83811115613f64576000848401525b50505050565b6000613f7582613f2c565b613f7f8185613ed5565b9350613f8f818560208601613f37565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000613fd1601183613ed5565b9150613fdc82613f9b565b601182019050919050565b6000613ff282613f09565b9150613ffe8285613f6a565b915061400982613fc4565b91506140158284613f6a565b91508190509392505050565b600061402c82613f2c565b6140368185613475565b9350614046818560208601613f37565b61404f8161310e565b840191505092915050565b600060208201905081810360008301526140748184614021565b905092915050565b600061408782612e19565b9150600082141561409b5761409a6133f0565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006140dc602083613475565b91506140e7826140a6565b602082019050919050565b6000602082019050818103600083015261410b816140cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000614177601883613475565b915061418282614141565b602082019050919050565b600060208201905081810360008301526141a68161416a565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006141e3601f83613475565b91506141ee826141ad565b602082019050919050565b60006020820190508181036000830152614212816141d6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614275602283613475565b915061428082614219565b604082019050919050565b600060208201905081810360008301526142a481614268565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614307602283613475565b9150614312826142ab565b604082019050919050565b60006020820190508181036000830152614336816142fa565b9050919050565b600060ff82169050919050565b6143538161433d565b82525050565b600060808201905061436e6000830187612f94565b61437b602083018661434a565b6143886040830185612f94565b6143956060830184612f94565b9594505050505056fea26469706673582212203beffd00c8c8af014a014c28f04820d9e52a00e49edb2198c8833bc6af27028964736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000f8ae41bde78592d53941b0e2d7dc4702b626a95
-----Decoded View---------------
Arg [0] : _superNerd (address): 0x0f8AE41bde78592D53941b0E2D7DC4702b626a95
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000f8ae41bde78592d53941b0e2d7dc4702b626a95
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.