Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,036 SHIBAKU
Holders
397
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 SHIBAKULoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
VoterID
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.9; import "IERC721Receiver.sol"; import "IVoterID.sol"; // ERC 721 contract VoterID is IVoterID { mapping (uint => address) public owners; mapping (address => uint) public balances; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) public operatorApprovals; mapping (uint => address) public tokenApprovals; // owner -> array of tokens owned... ownershipMap[owner][index] = tokenNumber mapping (address => mapping (uint => uint)) public ownershipMap; // array of all tokens in existence #enumeration mapping (uint => uint) public allTokens; // tokenId -> uri ... typically ipfs://... mapping (uint => string) public uriMap; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant ERC721_RECEIVED = 0x150b7a02; /* * bytes4(keccak256('balanceOf(address)')) == 0x70a08231 * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3 * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde * * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^ * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd */ bytes4 private constant INTERFACE_ID_ERC721 = 0x80ac58cd; /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant INTERFACE_ID_ERC165 = 0x01ffc9a7; bytes4 private constant INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; bytes4 private constant INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; string _name; string _symbol; uint public numIdentities = 0; // owner is a special name in the OpenZeppelin standard that opensea annoyingly expects for their management page address public _owner_; // minter has the sole, permanent authority to mint identities, in practice this will be a contract address public _minter; event OwnerUpdated(address oldOwner, address newOwner); event IdentityCreated(address indexed owner, uint indexed token); /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed owner, address indexed operator, bool approved); modifier ownerOnly() { require (msg.sender == _owner_, 'Identity: Only owner may call this'); _; } constructor(address ooner, address minter, string memory nomen, string memory symbowl) { _owner_ = ooner; // we set it here with no resetting allowed so we cannot commit to NFTs and then reset _minter = minter; _name = nomen; _symbol = symbowl; } // this function creates an identity for free. Only minter can call it. function createIdentityFor(address thisOwner, uint thisToken, string memory uri) public override { require(msg.sender == _minter, 'Only minter may create identity'); require(owners[thisToken] == address(0), 'Token already exists'); // for getTokenByIndex below, 0 based index so we do it before incrementing numIdentities allTokens[numIdentities] = thisToken; // increment the number of identities numIdentities = numIdentities + 1; // set owner of new token owners[thisToken] = thisOwner; // append token to tokens owned ownershipMap[thisOwner][balances[thisOwner]] = thisToken; // increment balances for owner balances[thisOwner] = balances[thisOwner] + 1; uriMap[thisToken] = uri; emit Transfer(address(0), thisOwner, thisToken); emit IdentityCreated(thisOwner, thisToken); } /// ================= SETTERS ======================================= // change the owner key function setOwner(address newOwner) external ownerOnly { address oldOwner = _owner_; _owner_ = newOwner; emit OwnerUpdated(oldOwner, newOwner); } // manually set the token URI function setTokenURI(uint token, string memory uri) external ownerOnly { uriMap[token] = uri; } /// ================= ERC 721 FUNCTIONS ============================================= /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _address An address for whom to query the balance /// @return The number of NFTs owned by `owner`, possibly zero function balanceOf(address _address) external view returns (uint256) { return balances[_address]; } /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 tokenId) external view returns (address) { address ooner = owners[tokenId]; require(ooner != address(0), 'No such token'); return ooner; } /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `from` is /// not the current owner. Throws if `to` is the zero address. Throws if /// `tokenId` is not a valid NFT. /// @param from The current owner of the NFT /// @param to The new owner /// @param tokenId The NFT to transfer function transferFrom(address from, address to, uint256 tokenId) public { require(isApproved(msg.sender, tokenId), 'Identity: Unapproved transfer'); transfer(from, to, tokenId); } /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `from` is /// not the current owner. Throws if `to` is the zero address. Throws if /// `tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param from The current owner of the NFT /// @param to The new owner /// @param tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `to` function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public { transferFrom(from, to, tokenId); require(checkOnERC721Received(from, to, tokenId, data), "Identity: transfer to non ERC721Receiver implementer"); } /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "". /// @param from The current owner of the NFT /// @param to The new owner /// @param tokenId The NFT to transfer function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ''); } /// @notice Change or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param approved The new approved NFT controller /// @param tokenId The NFT to approve function approve(address approved, uint256 tokenId) public { address holder = owners[tokenId]; require(isApproved(msg.sender, tokenId), 'Identity: Not authorized to approve'); require(holder != approved, 'Identity: Approving self not allowed'); tokenApprovals[tokenId] = approved; emit Approval(holder, approved, tokenId); } /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param operator Address to add to the set of authorized operators /// @param approved True if the operator is approved, false to revoke approval function setApprovalForAll(address operator, bool approved) external { operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// @notice Get the approved address for a single NFT /// @dev Throws if `tokenId` is not a valid NFT. /// @param tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 tokenId) external view returns (address) { address holder = owners[tokenId]; require(holder != address(0), 'Identity: Invalid tokenId'); return tokenApprovals[tokenId]; } /// @notice Query if an address is an authorized operator for another address /// @param _address The address that owns the NFTs /// @param operator The address that acts on behalf of the owner /// @return True if `operator` is an approved operator for `owner`, false otherwise function isApprovedForAll(address _address, address operator) public view returns (bool) { return operatorApprovals[_address][operator]; } /// ================ UTILS ========================= function isApproved(address operator, uint tokenId) public view returns (bool) { address holder = owners[tokenId]; return ( operator == holder || operatorApprovals[holder][operator] || tokenApprovals[tokenId] == operator ); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function transfer(address from, address to, uint256 tokenId) internal { require(owners[tokenId] == from, "Identity: Transfer of token that is not own"); require(to != address(0), "Identity: transfer to the zero address"); // Clear approvals from the previous owner approve(address(0), tokenId); owners[tokenId] = to; // decrement from balances n -> n-1 balances[from] = balances[from] - 1; // balances[from] now points to the tip of the "array", set it to 0 ownershipMap[from][balances[from]] = 0; // balances[to] points past the tip of the array, set it to the token ownershipMap[to][balances[to]] = tokenId; // increment balances[to] to point past the end of the array n-1 -> n balances[to] = balances[to] + 1; emit Transfer(from, to, tokenId); } function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for non-contract addresses uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private returns (bool) { if (!isContract(to)) { return true; } IERC721Receiver target = IERC721Receiver(to); bytes4 retval = target.onERC721Received(from, to, tokenId, data); return ERC721_RECEIVED == retval; } /** * @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 pure returns (bool) { return ( interfaceId == INTERFACE_ID_ERC721 || interfaceId == INTERFACE_ID_ERC165 || interfaceId == INTERFACE_ID_ERC721_ENUMERABLE || interfaceId == INTERFACE_ID_ERC721_METADATA ); } /// ================= ERC721Metadata FUNCTIONS ============================================= /// @notice A descriptive name for a collection of NFTs in this contract function name() external view returns (string memory) { return _name; } /// @notice An abbreviated name for NFTs in this contract function symbol() external view returns (string memory) { return _symbol; } /// @notice A distinct Uniform Resource Identifier (URI) for a given asset. /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC /// 3986. The URI may point to a JSON file that conforms to the "ERC721 /// Metadata JSON Schema". function tokenURI(uint256 _tokenId) external view returns (string memory) { return uriMap[_tokenId]; } function owner() public view override returns (address) { return _owner_; } /// ================= ERC721Enumerable FUNCTIONS ============================================= /// @notice Count NFTs tracked by this contract /// @return A count of valid NFTs tracked by this contract, where each one of /// them has an assigned and queryable owner not equal to the zero address function totalSupply() external view override returns (uint256) { return numIdentities; } /// @notice Enumerate valid NFTs /// @dev Throws if `_index` >= `totalSupply()`. /// @param _index A counter less than `totalSupply()` /// @return The token identifier for the `_index`th NFT, /// (sort order not specified) function tokenByIndex(uint256 _index) external view returns (uint256) { require(_index < numIdentities, 'Invalid token index'); return allTokens[_index]; } /// @notice Enumerate NFTs assigned to an owner /// @dev Throws if `_index` >= `balanceOf(_owner_)` or if /// `_owner_` is the zero address, representing invalid NFTs. /// @param _address An address where we are interested in NFTs owned by them /// @param _index A counter less than `balanceOf(_owner_)` /// @return The token identifier for the `_index`th NFT assigned to `_owner_`, /// (sort order not specified) function tokenOfOwnerByIndex(address _address, uint256 _index) external view returns (uint256) { require(_index < balances[_address], 'Index out of range'); require(_address != address(0), 'Cannot query zero address'); return ownershipMap[_address][_index]; } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.9; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.9; /** * @dev Required interface of an ERC721 compliant contract. */ interface IVoterID { /** Minting function */ function createIdentityFor(address newId, uint tokenId, string memory uri) external; /** Who's in charge around here */ function owner() external view returns (address); /** How many of these things exist? */ function totalSupply() external view returns (uint); }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 200 }, "libraries": { "VoterID.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"ooner","type":"address"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"string","name":"nomen","type":"string"},{"internalType":"string","name":"symbowl","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"token","type":"uint256"}],"name":"IdentityCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"approved","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"thisOwner","type":"address"},{"internalType":"uint256","name":"thisToken","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"createIdentityFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numIdentities","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"operatorApprovals","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownershipMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenApprovals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uriMap","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260006009553480156200001657600080fd5b5060405162001a6738038062001a6783398101604081905262000039916200022f565b600a80546001600160a01b038087166001600160a01b031992831617909255600b80549286169290911691909117905581516200007e9060079060208501906200009f565b508051620000949060089060208401906200009f565b5050505050620002fc565b828054620000ad90620002bf565b90600052602060002090601f016020900481019282620000d157600085556200011c565b82601f10620000ec57805160ff19168380011785556200011c565b828001600101855582156200011c579182015b828111156200011c578251825591602001919060010190620000ff565b506200012a9291506200012e565b5090565b5b808211156200012a57600081556001016200012f565b80516001600160a01b03811681146200015d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018a57600080fd5b81516001600160401b0380821115620001a757620001a762000162565b604051601f8301601f19908116603f01168101908282118183101715620001d257620001d262000162565b81604052838152602092508683858801011115620001ef57600080fd5b600091505b83821015620002135785820183015181830184015290820190620001f4565b83821115620002255760008385830101525b9695505050505050565b600080600080608085870312156200024657600080fd5b620002518562000145565b9350620002616020860162000145565b60408601519093506001600160401b03808211156200027f57600080fd5b6200028d8883890162000178565b93506060870151915080821115620002a457600080fd5b50620002b38782880162000178565b91505092959194509250565b600181811c90821680620002d457607f821691505b60208210811415620002f657634e487b7160e01b600052602260045260246000fd5b50919050565b61175b806200030c6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80634c41a6891161010f57806395d89b41116100a2578063c5e3f16311610071578063c5e3f1631461047b578063c87b56dd146104a6578063dd2eb9f3146104b9578063e985e9c5146104cc57600080fd5b806395d89b4114610424578063a22cb4651461042c578063acdeb5b91461043f578063b88d4fde1461046857600080fd5b8063634282af116100de578063634282af146103b75780636352211e146103d757806370a08231146103ea5780638da5cb5b1461041357600080fd5b80634c41a6891461036b5780634f6ccce71461037e57806353005fb314610391578063578ec33f146103a457600080fd5b8063162094c41161018757806327e235e31161015657806327e235e3146103125780632a16cca4146103325780632f745c591461034557806342842e0e1461035857600080fd5b8063162094c4146102d157806318160ddd146102e457806319bb8b2b146102f657806323b872dd146102ff57600080fd5b8063081812fc116101c3578063081812fc14610268578063095ea7b31461027b5780630d95e0541461029057806313af4035146102be57600080fd5b806301ffc9a7146101ea578063025e7c271461021257806306fdde0314610253575b600080fd5b6101fd6101f836600461129a565b610508565b60405190151581526020015b60405180910390f35b61023b6102203660046112be565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610209565b61025b610575565b6040516102099190611324565b61023b6102763660046112be565b610607565b61028e610289366004611353565b61068e565b005b6101fd61029e36600461137d565b600260209081526000928352604080842090915290825290205460ff1681565b61028e6102cc3660046113b0565b6107d2565b61028e6102df366004611477565b61085d565b6009545b604051908152602001610209565b6102e860095481565b61028e61030d3660046114be565b6108ab565b6102e86103203660046113b0565b60016020526000908152604090205481565b6101fd610340366004611353565b61090c565b6102e8610353366004611353565b610987565b61028e6103663660046114be565b610a62565b600a5461023b906001600160a01b031681565b6102e861038c3660046112be565b610a7d565b61028e61039f3660046114fa565b610ad9565b600b5461023b906001600160a01b031681565b6102e86103c53660046112be565b60056020526000908152604090205481565b61023b6103e53660046112be565b610cb9565b6102e86103f83660046113b0565b6001600160a01b031660009081526001602052604090205490565b600a546001600160a01b031661023b565b61025b610d0e565b61028e61043a366004611551565b610d1d565b61023b61044d3660046112be565b6003602052600090815260409020546001600160a01b031681565b61028e61047636600461158d565b610d89565b6102e8610489366004611353565b600460209081526000928352604080842090915290825290205481565b61025b6104b43660046112be565b610e0f565b61025b6104c73660046112be565b610eb1565b6101fd6104da36600461137d565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061053957506001600160e01b031982166301ffc9a760e01b145b8061055457506001600160e01b0319821663780e9d6360e01b145b8061056f57506001600160e01b03198216635b5e139f60e01b145b92915050565b60606007805461058490611609565b80601f01602080910402602001604051908101604052809291908181526020018280546105b090611609565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b5050505050905090565b6000818152602081905260408120546001600160a01b0316806106715760405162461bcd60e51b815260206004820152601960248201527f4964656e746974793a20496e76616c696420746f6b656e49640000000000000060448201526064015b60405180910390fd5b50506000908152600360205260409020546001600160a01b031690565b6000818152602081905260409020546001600160a01b03166106b0338361090c565b6107085760405162461bcd60e51b815260206004820152602360248201527f4964656e746974793a204e6f7420617574686f72697a656420746f20617070726044820152626f766560e81b6064820152608401610668565b826001600160a01b0316816001600160a01b031614156107765760405162461bcd60e51b8152602060048201526024808201527f4964656e746974793a20417070726f76696e672073656c66206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610668565b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600a546001600160a01b031633146107fc5760405162461bcd60e51b815260040161066890611644565b600a80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76910160405180910390a15050565b600a546001600160a01b031633146108875760405162461bcd60e51b815260040161066890611644565b600082815260066020908152604090912082516108a6928401906111e8565b505050565b6108b5338261090c565b6109015760405162461bcd60e51b815260206004820152601d60248201527f4964656e746974793a20556e617070726f766564207472616e736665720000006044820152606401610668565b6108a6838383610f4b565b6000818152602081905260408120546001600160a01b0390811690841681148061095b57506001600160a01b0380821660009081526002602090815260408083209388168352929052205460ff165b8061097f57506000838152600360205260409020546001600160a01b038581169116145b949350505050565b6001600160a01b03821660009081526001602052604081205482106109e35760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b6044820152606401610668565b6001600160a01b038316610a395760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207175657279207a65726f2061646472657373000000000000006044820152606401610668565b506001600160a01b03919091166000908152600460209081526040808320938352929052205490565b6108a683838360405180602001604052806000815250610d89565b60006009548210610ac65760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840e8ded6cadc40d2dcc8caf606b1b6044820152606401610668565b5060009081526005602052604090205490565b600b546001600160a01b03163314610b335760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c79206d696e746572206d617920637265617465206964656e74697479006044820152606401610668565b6000828152602081905260409020546001600160a01b031615610b8f5760405162461bcd60e51b8152602060048201526014602482015273546f6b656e20616c72656164792065786973747360601b6044820152606401610668565b60098054600090815260056020526040902083905554610bb090600161169c565b60095560008281526020818152604080832080546001600160a01b0319166001600160a01b038816908117909155808452600483528184206001808552838620805487529185529285208790559352908190529054610c0e9161169c565b6001600160a01b038416600090815260016020908152604080832093909355848252600681529190208251610c45928401906111e8565b5060405182906001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a460405182906001600160a01b038516907fe8d47b56e8cdfa95f871b19d4f50a857217c44a95502b0811a350fec1500dd6790600090a3505050565b6000818152602081905260408120546001600160a01b03168061056f5760405162461bcd60e51b815260206004820152600d60248201526c27379039bab1b4103a37b5b2b760991b6044820152606401610668565b60606008805461058490611609565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d948484846108ab565b610da084848484611130565b610e095760405162461bcd60e51b815260206004820152603460248201527f4964656e746974793a207472616e7366657220746f206e6f6e204552433732316044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610668565b50505050565b6000818152600660205260409020805460609190610e2c90611609565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5890611609565b8015610ea55780601f10610e7a57610100808354040283529160200191610ea5565b820191906000526020600020905b815481529060010190602001808311610e8857829003601f168201915b50505050509050919050565b60066020526000908152604090208054610eca90611609565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef690611609565b8015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b505050505081565b6000818152602081905260409020546001600160a01b03848116911614610fc85760405162461bcd60e51b815260206004820152602b60248201527f4964656e746974793a205472616e73666572206f6620746f6b656e207468617460448201526a1034b9903737ba1037bbb760a91b6064820152608401610668565b6001600160a01b03821661102d5760405162461bcd60e51b815260206004820152602660248201527f4964656e746974793a207472616e7366657220746f20746865207a65726f206160448201526564647265737360d01b6064820152608401610668565b61103860008261068e565b60008181526020818152604080832080546001600160a01b0319166001600160a01b0387811691909117909155861683526001918290529091205461107d91906116b4565b6001600160a01b0380851660009081526001602081815260408084208690556004808352818520968552958252808420849055938716808452948152838320828252848420805485529082529383208690559390915291829052546110e19161169c565b6001600160a01b03808416600081815260016020526040808220949094559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000833b6111405750600161097f565b604051630a85bd0160e11b815284906000906001600160a01b0383169063150b7a0290611177908a9086908a908a906004016116cb565b602060405180830381600087803b15801561119157600080fd5b505af11580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c99190611708565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b8280546111f490611609565b90600052602060002090601f016020900481019282611216576000855561125c565b82601f1061122f57805160ff191683800117855561125c565b8280016001018555821561125c579182015b8281111561125c578251825591602001919060010190611241565b5061126892915061126c565b5090565b5b80821115611268576000815560010161126d565b6001600160e01b03198116811461129757600080fd5b50565b6000602082840312156112ac57600080fd5b81356112b781611281565b9392505050565b6000602082840312156112d057600080fd5b5035919050565b6000815180845260005b818110156112fd576020818501810151868301820152016112e1565b8181111561130f576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006112b760208301846112d7565b80356001600160a01b038116811461134e57600080fd5b919050565b6000806040838503121561136657600080fd5b61136f83611337565b946020939093013593505050565b6000806040838503121561139057600080fd5b61139983611337565b91506113a760208401611337565b90509250929050565b6000602082840312156113c257600080fd5b6112b782611337565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156113fc576113fc6113cb565b604051601f8501601f19908116603f01168101908282118183101715611424576114246113cb565b8160405280935085815286868601111561143d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261146857600080fd5b6112b7838335602085016113e1565b6000806040838503121561148a57600080fd5b82359150602083013567ffffffffffffffff8111156114a857600080fd5b6114b485828601611457565b9150509250929050565b6000806000606084860312156114d357600080fd5b6114dc84611337565b92506114ea60208501611337565b9150604084013590509250925092565b60008060006060848603121561150f57600080fd5b61151884611337565b925060208401359150604084013567ffffffffffffffff81111561153b57600080fd5b61154786828701611457565b9150509250925092565b6000806040838503121561156457600080fd5b61156d83611337565b91506020830135801515811461158257600080fd5b809150509250929050565b600080600080608085870312156115a357600080fd5b6115ac85611337565b93506115ba60208601611337565b925060408501359150606085013567ffffffffffffffff8111156115dd57600080fd5b8501601f810187136115ee57600080fd5b6115fd878235602084016113e1565b91505092959194509250565b600181811c9082168061161d57607f821691505b6020821081141561163e57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4964656e746974793a204f6e6c79206f776e6572206d61792063616c6c207468604082015261697360f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156116af576116af611686565b500190565b6000828210156116c6576116c6611686565b500390565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906116fe908301846112d7565b9695505050505050565b60006020828403121561171a57600080fd5b81516112b78161128156fea26469706673582212207e33680f5db2ca1bee3917755964af4eb1f8f02f3cd14564e0e5be0c6f72151764736f6c63430008090033000000000000000000000000288fe43139741f91a8cbb6f4add83811c794851b000000000000000000000000a6fffd38a523d95b744ddc82a2a3c5e1cd77d8ee000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000753686962616b7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000753484942414b5500000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80634c41a6891161010f57806395d89b41116100a2578063c5e3f16311610071578063c5e3f1631461047b578063c87b56dd146104a6578063dd2eb9f3146104b9578063e985e9c5146104cc57600080fd5b806395d89b4114610424578063a22cb4651461042c578063acdeb5b91461043f578063b88d4fde1461046857600080fd5b8063634282af116100de578063634282af146103b75780636352211e146103d757806370a08231146103ea5780638da5cb5b1461041357600080fd5b80634c41a6891461036b5780634f6ccce71461037e57806353005fb314610391578063578ec33f146103a457600080fd5b8063162094c41161018757806327e235e31161015657806327e235e3146103125780632a16cca4146103325780632f745c591461034557806342842e0e1461035857600080fd5b8063162094c4146102d157806318160ddd146102e457806319bb8b2b146102f657806323b872dd146102ff57600080fd5b8063081812fc116101c3578063081812fc14610268578063095ea7b31461027b5780630d95e0541461029057806313af4035146102be57600080fd5b806301ffc9a7146101ea578063025e7c271461021257806306fdde0314610253575b600080fd5b6101fd6101f836600461129a565b610508565b60405190151581526020015b60405180910390f35b61023b6102203660046112be565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610209565b61025b610575565b6040516102099190611324565b61023b6102763660046112be565b610607565b61028e610289366004611353565b61068e565b005b6101fd61029e36600461137d565b600260209081526000928352604080842090915290825290205460ff1681565b61028e6102cc3660046113b0565b6107d2565b61028e6102df366004611477565b61085d565b6009545b604051908152602001610209565b6102e860095481565b61028e61030d3660046114be565b6108ab565b6102e86103203660046113b0565b60016020526000908152604090205481565b6101fd610340366004611353565b61090c565b6102e8610353366004611353565b610987565b61028e6103663660046114be565b610a62565b600a5461023b906001600160a01b031681565b6102e861038c3660046112be565b610a7d565b61028e61039f3660046114fa565b610ad9565b600b5461023b906001600160a01b031681565b6102e86103c53660046112be565b60056020526000908152604090205481565b61023b6103e53660046112be565b610cb9565b6102e86103f83660046113b0565b6001600160a01b031660009081526001602052604090205490565b600a546001600160a01b031661023b565b61025b610d0e565b61028e61043a366004611551565b610d1d565b61023b61044d3660046112be565b6003602052600090815260409020546001600160a01b031681565b61028e61047636600461158d565b610d89565b6102e8610489366004611353565b600460209081526000928352604080842090915290825290205481565b61025b6104b43660046112be565b610e0f565b61025b6104c73660046112be565b610eb1565b6101fd6104da36600461137d565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061053957506001600160e01b031982166301ffc9a760e01b145b8061055457506001600160e01b0319821663780e9d6360e01b145b8061056f57506001600160e01b03198216635b5e139f60e01b145b92915050565b60606007805461058490611609565b80601f01602080910402602001604051908101604052809291908181526020018280546105b090611609565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b5050505050905090565b6000818152602081905260408120546001600160a01b0316806106715760405162461bcd60e51b815260206004820152601960248201527f4964656e746974793a20496e76616c696420746f6b656e49640000000000000060448201526064015b60405180910390fd5b50506000908152600360205260409020546001600160a01b031690565b6000818152602081905260409020546001600160a01b03166106b0338361090c565b6107085760405162461bcd60e51b815260206004820152602360248201527f4964656e746974793a204e6f7420617574686f72697a656420746f20617070726044820152626f766560e81b6064820152608401610668565b826001600160a01b0316816001600160a01b031614156107765760405162461bcd60e51b8152602060048201526024808201527f4964656e746974793a20417070726f76696e672073656c66206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610668565b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600a546001600160a01b031633146107fc5760405162461bcd60e51b815260040161066890611644565b600a80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76910160405180910390a15050565b600a546001600160a01b031633146108875760405162461bcd60e51b815260040161066890611644565b600082815260066020908152604090912082516108a6928401906111e8565b505050565b6108b5338261090c565b6109015760405162461bcd60e51b815260206004820152601d60248201527f4964656e746974793a20556e617070726f766564207472616e736665720000006044820152606401610668565b6108a6838383610f4b565b6000818152602081905260408120546001600160a01b0390811690841681148061095b57506001600160a01b0380821660009081526002602090815260408083209388168352929052205460ff165b8061097f57506000838152600360205260409020546001600160a01b038581169116145b949350505050565b6001600160a01b03821660009081526001602052604081205482106109e35760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b6044820152606401610668565b6001600160a01b038316610a395760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207175657279207a65726f2061646472657373000000000000006044820152606401610668565b506001600160a01b03919091166000908152600460209081526040808320938352929052205490565b6108a683838360405180602001604052806000815250610d89565b60006009548210610ac65760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840e8ded6cadc40d2dcc8caf606b1b6044820152606401610668565b5060009081526005602052604090205490565b600b546001600160a01b03163314610b335760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c79206d696e746572206d617920637265617465206964656e74697479006044820152606401610668565b6000828152602081905260409020546001600160a01b031615610b8f5760405162461bcd60e51b8152602060048201526014602482015273546f6b656e20616c72656164792065786973747360601b6044820152606401610668565b60098054600090815260056020526040902083905554610bb090600161169c565b60095560008281526020818152604080832080546001600160a01b0319166001600160a01b038816908117909155808452600483528184206001808552838620805487529185529285208790559352908190529054610c0e9161169c565b6001600160a01b038416600090815260016020908152604080832093909355848252600681529190208251610c45928401906111e8565b5060405182906001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a460405182906001600160a01b038516907fe8d47b56e8cdfa95f871b19d4f50a857217c44a95502b0811a350fec1500dd6790600090a3505050565b6000818152602081905260408120546001600160a01b03168061056f5760405162461bcd60e51b815260206004820152600d60248201526c27379039bab1b4103a37b5b2b760991b6044820152606401610668565b60606008805461058490611609565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d948484846108ab565b610da084848484611130565b610e095760405162461bcd60e51b815260206004820152603460248201527f4964656e746974793a207472616e7366657220746f206e6f6e204552433732316044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610668565b50505050565b6000818152600660205260409020805460609190610e2c90611609565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5890611609565b8015610ea55780601f10610e7a57610100808354040283529160200191610ea5565b820191906000526020600020905b815481529060010190602001808311610e8857829003601f168201915b50505050509050919050565b60066020526000908152604090208054610eca90611609565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef690611609565b8015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b505050505081565b6000818152602081905260409020546001600160a01b03848116911614610fc85760405162461bcd60e51b815260206004820152602b60248201527f4964656e746974793a205472616e73666572206f6620746f6b656e207468617460448201526a1034b9903737ba1037bbb760a91b6064820152608401610668565b6001600160a01b03821661102d5760405162461bcd60e51b815260206004820152602660248201527f4964656e746974793a207472616e7366657220746f20746865207a65726f206160448201526564647265737360d01b6064820152608401610668565b61103860008261068e565b60008181526020818152604080832080546001600160a01b0319166001600160a01b0387811691909117909155861683526001918290529091205461107d91906116b4565b6001600160a01b0380851660009081526001602081815260408084208690556004808352818520968552958252808420849055938716808452948152838320828252848420805485529082529383208690559390915291829052546110e19161169c565b6001600160a01b03808416600081815260016020526040808220949094559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000833b6111405750600161097f565b604051630a85bd0160e11b815284906000906001600160a01b0383169063150b7a0290611177908a9086908a908a906004016116cb565b602060405180830381600087803b15801561119157600080fd5b505af11580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c99190611708565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b8280546111f490611609565b90600052602060002090601f016020900481019282611216576000855561125c565b82601f1061122f57805160ff191683800117855561125c565b8280016001018555821561125c579182015b8281111561125c578251825591602001919060010190611241565b5061126892915061126c565b5090565b5b80821115611268576000815560010161126d565b6001600160e01b03198116811461129757600080fd5b50565b6000602082840312156112ac57600080fd5b81356112b781611281565b9392505050565b6000602082840312156112d057600080fd5b5035919050565b6000815180845260005b818110156112fd576020818501810151868301820152016112e1565b8181111561130f576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006112b760208301846112d7565b80356001600160a01b038116811461134e57600080fd5b919050565b6000806040838503121561136657600080fd5b61136f83611337565b946020939093013593505050565b6000806040838503121561139057600080fd5b61139983611337565b91506113a760208401611337565b90509250929050565b6000602082840312156113c257600080fd5b6112b782611337565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156113fc576113fc6113cb565b604051601f8501601f19908116603f01168101908282118183101715611424576114246113cb565b8160405280935085815286868601111561143d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261146857600080fd5b6112b7838335602085016113e1565b6000806040838503121561148a57600080fd5b82359150602083013567ffffffffffffffff8111156114a857600080fd5b6114b485828601611457565b9150509250929050565b6000806000606084860312156114d357600080fd5b6114dc84611337565b92506114ea60208501611337565b9150604084013590509250925092565b60008060006060848603121561150f57600080fd5b61151884611337565b925060208401359150604084013567ffffffffffffffff81111561153b57600080fd5b61154786828701611457565b9150509250925092565b6000806040838503121561156457600080fd5b61156d83611337565b91506020830135801515811461158257600080fd5b809150509250929050565b600080600080608085870312156115a357600080fd5b6115ac85611337565b93506115ba60208601611337565b925060408501359150606085013567ffffffffffffffff8111156115dd57600080fd5b8501601f810187136115ee57600080fd5b6115fd878235602084016113e1565b91505092959194509250565b600181811c9082168061161d57607f821691505b6020821081141561163e57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4964656e746974793a204f6e6c79206f776e6572206d61792063616c6c207468604082015261697360f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156116af576116af611686565b500190565b6000828210156116c6576116c6611686565b500390565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906116fe908301846112d7565b9695505050505050565b60006020828403121561171a57600080fd5b81516112b78161128156fea26469706673582212207e33680f5db2ca1bee3917755964af4eb1f8f02f3cd14564e0e5be0c6f72151764736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000288fe43139741f91a8cbb6f4add83811c794851b000000000000000000000000a6fffd38a523d95b744ddc82a2a3c5e1cd77d8ee000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000753686962616b7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000753484942414b5500000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : ooner (address): 0x288fE43139741F91a8Cbb6F4adD83811c794851b
Arg [1] : minter (address): 0xa6FFfD38a523d95b744DdC82A2A3C5e1cd77D8Ee
Arg [2] : nomen (string): Shibaku
Arg [3] : symbowl (string): SHIBAKU
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000288fe43139741f91a8cbb6f4add83811c794851b
Arg [1] : 000000000000000000000000a6fffd38a523d95b744ddc82a2a3c5e1cd77d8ee
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 53686962616b7500000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 53484942414b5500000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.