Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,237 $METADOMEZ
Holders
320
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 $METADOMEZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
METADOMEZ
Compiler Version
v0.7.0+commit.9e61f92b
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-28 */ /** Coded by: P.C.(I) */ // SPDX-License-Identifier: MIT pragma solidity 0.7.0; /** * @dev The contract has an owner address, and provides basic authorization control whitch * simplifies the implementation of user permissions. This contract is based on the source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol */ contract Ownable { mapping (address => bool) public isAuth; address tokenLinkAddress; /** * @dev Error constants. */ string public constant NOT_CURRENT_OWNER = "018001"; string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002"; /** * @dev Current owner address. */ address public owner; /** * @dev An event which is triggered when the owner is changed. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The constructor sets the original `owner` of the contract to the sender account. */ constructor() { owner = msg.sender; isAuth[owner] = true; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner, NOT_CURRENT_OWNER); _; } modifier onlyAuthorized() { require(isAuth[msg.sender] || msg.sender == owner, "Unauth"); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership( address _newOwner ) public onlyOwner { require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: contracts/tokens/erc721-metadata.sol /** * @dev Optional metadata extension for ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721Metadata { /** * @dev Returns a descriptive name for a collection of NFTs in this contract. * @return _name Representing name. */ function name() external view returns (string memory _name); /** * @dev Returns a abbreviated name for a collection of NFTs in this contract. * @return _symbol Representing symbol. */ function symbol() external view returns (string memory _symbol); /** * @dev Returns a distinct Uniform Resource Identifier (URI) for a given asset. It Throws if * `_tokenId` is not a valid NFT. URIs are defined in RFC3986. The URI may point to a JSON file * that conforms to the "ERC721 Metadata JSON Schema". * @return URI of _tokenId. */ function tokenURI(uint256 _tokenId) external view returns (string memory); } // File: contracts/utils/address-utils.sol /** * @notice Based on: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol * Requires EIP-1052. * @dev Utility library of inline functions on addresses. */ library AddressUtils { /** * @dev Returns whether the target address is a contract. * @param _addr Address to check. * @return addressCheck True if _addr is a contract, false if not. */ function isContract( address _addr ) internal view returns (bool addressCheck) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(_addr) } // solhint-disable-line addressCheck = (codehash != 0x0 && codehash != accountHash); } } // File: contracts/utils/erc165.sol /** * @dev A standard for detecting smart contract interfaces. * See: https://eips.ethereum.org/EIPS/eip-165. */ interface ERC165 { /** * @dev Checks if the smart contract includes a specific interface. * This function uses less than 30,000 gas. * @param _interfaceID The interface identifier, as specified in ERC-165. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external view returns (bool); } // File: contracts/utils/supports-interface.sol /** * @dev Implementation of standard for detect smart contract interfaces. */ contract SupportsInterface is ERC165 { /** * @dev Mapping of supported intefraces. You must not set element 0xffffffff to true. */ mapping(bytes4 => bool) internal supportedInterfaces; /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x01ffc9a7] = true; // ERC165 } /** * @dev Function to check which interfaces are suported by this contract. * @param _interfaceID Id of the interface. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external override view returns (bool) { return supportedInterfaces[_interfaceID]; } } // File: contracts/tokens/erc721-token-receiver.sol /** * @dev ERC-721 interface for accepting safe transfers. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721TokenReceiver { /** * @notice The contract address is always the message sender. A wallet/broker/auction application * MUST implement the wallet interface if it will accept safe transfers. * @dev Handle the receipt of a NFT. The ERC721 smart contract calls this function on the * recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return * of other than the magic value MUST result in the transaction being reverted. * Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` unless throwing. * @param _operator The address which called `safeTransferFrom` function. * @param _from The address which previously owned the token. * @param _tokenId The NFT identifier which is being transferred. * @param _data Additional data with no specified format. * @return Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. */ function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes calldata _data ) external returns(bytes4); } // File: contracts/tokens/erc721.sol /** * @dev ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721 { /** * @dev 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 ); /** * @notice 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,uint256,bytes)"))`. * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @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 calldata _data ) external; /** * @notice This works identically to the other function with an extra data parameter, except this * function just sets data to "" * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @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 ) external; /** * @notice 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. This function can be changed to payable. * @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 ) external; /** * @notice 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. * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable. * @param _tokenId The NFT to approve. */ function approve( address _approved, uint256 _tokenId ) external; /** * @notice The contract MUST allow multiple operators per owner. * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external; /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @notice Count all NFTs assigned to an owner. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external view returns (uint256); /** * @notice Find the owner of an NFT. * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external view returns (address); /** * @notice Throws if `_tokenId` is not a valid NFT. * @dev Get the approved address for a single NFT. * @param _tokenId The NFT to find the approved address for. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external view returns (address); /** * @notice Query if an address is an authorized operator for another address. * @dev Returns true if `_operator` is an approved operator for `_owner`, false otherwise. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external view returns (bool); } // File: contracts/tokens/nf-token.sol /** * @dev Implementation of ERC-721 non-fungible token standard. */ contract NFToken is ERC721, SupportsInterface { using AddressUtils for address; /** * @dev List of revert message codes. Implementing dApp should handle showing the correct message. * Based on 0xcert framework error codes. */ string constant ZERO_ADDRESS = "003001"; string constant NOT_VALID_NFT = "003002"; string constant NOT_OWNER_OR_OPERATOR = "003003"; string constant NOT_OWNER_APPROVED_OR_OPERATOR = "003004"; string constant NOT_ABLE_TO_RECEIVE_NFT = "003005"; string constant NFT_ALREADY_EXISTS = "003006"; string constant NOT_OWNER = "003007"; string constant IS_OWNER = "003008"; /** * @dev Magic value of a smart contract that can receive NFT. * Equal to: bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")). */ bytes4 internal constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02; /** * @dev A mapping from NFT ID to the address that owns it. */ mapping (uint256 => address) internal idToOwner; /** * @dev Mapping from NFT ID to approved address. */ mapping (uint256 => address) internal idToApproval; /** * @dev Mapping from owner address to count of their tokens. */ mapping (address => uint256) private ownerToNFTokenCount; /** * @dev Mapping from owner address to mapping of operator addresses. */ mapping (address => mapping (address => bool)) internal ownerToOperators; /** * @dev Guarantees that the msg.sender is an owner or operator of the given NFT. * @param _tokenId ID of the NFT to validate. */ modifier canOperate( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_OR_OPERATOR ); _; } /** * @dev Guarantees that the msg.sender is allowed to transfer NFT. * @param _tokenId ID of the NFT to transfer. */ modifier canTransfer( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || idToApproval[_tokenId] == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_APPROVED_OR_OPERATOR ); _; } /** * @dev Guarantees that _tokenId is a valid Token. * @param _tokenId ID of the NFT to validate. */ modifier validNFToken( uint256 _tokenId ) { require(idToOwner[_tokenId] != address(0), NOT_VALID_NFT); _; } /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x80ac58cd] = true; // ERC721 } /** * @notice 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,uint256,bytes)"))`. * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @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 calldata _data ) external override { _safeTransferFrom(_from, _to, _tokenId, _data); } /** * @notice This works identically to the other function with an extra data parameter, except this * function just sets data to "". * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @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 ) external override { _safeTransferFrom(_from, _to, _tokenId, ""); } /** * @notice 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. This function can be changed to payable. * @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 ) external override canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); } /** * @notice 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. * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable. * @param _approved Address to be approved for the given NFT ID. * @param _tokenId ID of the token to be approved. */ function approve( address _approved, uint256 _tokenId ) external override canOperate(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(_approved != tokenOwner, IS_OWNER); idToApproval[_tokenId] = _approved; emit Approval(tokenOwner, _approved, _tokenId); } /** * @notice This works even if sender doesn't own any tokens at the time. * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external override { ownerToOperators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external override view returns (uint256) { require(_owner != address(0), ZERO_ADDRESS); return _getOwnerNFTCount(_owner); } /** * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return _owner Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external override view returns (address _owner) { _owner = idToOwner[_tokenId]; require(_owner != address(0), NOT_VALID_NFT); } /** * @notice Throws if `_tokenId` is not a valid NFT. * @dev Get the approved address for a single NFT. * @param _tokenId ID of the NFT to query the approval of. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (address) { return idToApproval[_tokenId]; } /** * @dev Checks if `_operator` is an approved operator for `_owner`. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external override view returns (bool) { return ownerToOperators[_owner][_operator]; } /** * @notice Does NO checks. * @dev Actually performs the transfer. * @param _to Address of a new owner. * @param _tokenId The NFT that is being transferred. */ function _transfer( address _to, uint256 _tokenId ) internal { address from = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(from, _tokenId); _addNFToken(_to, _tokenId); emit Transfer(from, _to, _tokenId); } /** * @notice This is an internal function which should be called from user-implemented external * mint function. Its purpose is to show and properly initialize data structures when using this * implementation. * @dev Mints a new NFT. * @param _to The address that will own the minted NFT. * @param _tokenId of the NFT to be minted by the msg.sender. */ function _mint( address _to, uint256 _tokenId ) internal virtual { require(_to != address(0), ZERO_ADDRESS); require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); _addNFToken(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } /** * @notice This is an internal function which should be called from user-implemented external burn * function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @dev Burns a NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal virtual validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(tokenOwner, _tokenId); emit Transfer(tokenOwner, address(0), _tokenId); } /** * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @dev Removes a NFT from owner. * @param _from Address from which we want to remove the NFT. * @param _tokenId Which NFT we want to remove. */ function _removeNFToken( address _from, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == _from, NOT_OWNER); ownerToNFTokenCount[_from] -= 1; delete idToOwner[_tokenId]; } /** * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @dev Assigns a new NFT to owner. * @param _to Address to which we want to add the NFT. * @param _tokenId Which NFT we want to add. */ function _addNFToken( address _to, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); idToOwner[_tokenId] = _to; ownerToNFTokenCount[_to] += 1; } /** * @dev Helper function that gets NFT count of owner. This is needed for overriding in enumerable * extension to remove double storage (gas optimization) of owner NFT count. * @param _owner Address for whom to query the count. * @return Number of _owner NFTs. */ function _getOwnerNFTCount( address _owner ) internal virtual view returns (uint256) { return ownerToNFTokenCount[_owner]; } /** * @dev Actually perform the safeTransferFrom. * @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 ) private canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); if (_to.isContract()) { bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data); require(retval == MAGIC_ON_ERC721_RECEIVED, NOT_ABLE_TO_RECEIVE_NFT); } } /** * @dev Clears the current approval of a given NFT ID. * @param _tokenId ID of the NFT to be transferred. */ function _clearApproval( uint256 _tokenId ) private { delete idToApproval[_tokenId]; } } // File: contracts/tokens/nf-token-metadata.sol /** * @dev Optional metadata implementation for ERC-721 non-fungible token standard. */ contract NFTokenMetadata is NFToken, ERC721Metadata { /** * @dev A descriptive name for a collection of NFTs. */ string internal nftName; /** * @dev An abbreviated name for NFTokens. */ string internal nftSymbol; /** * @dev Mapping from NFT ID to metadata uri. */ mapping (uint256 => string) internal idToUri; /** * @notice When implementing this contract don't forget to set nftName and nftSymbol. * @dev Contract constructor. */ constructor() { supportedInterfaces[0x5b5e139f] = true; // ERC721Metadata } /** * @dev Returns a descriptive name for a collection of NFTokens. * @return _name Representing name. */ function name() external override view returns (string memory _name) { _name = nftName; } /** * @dev Returns an abbreviated name for NFTokens. * @return _symbol Representing symbol. */ function symbol() external override view returns (string memory _symbol) { _symbol = nftSymbol; } /** * @dev A distinct URI (RFC 3986) for a given NFT. * @param _tokenId Id for which we want uri. * @return URI of _tokenId. */ function tokenURI( uint256 _tokenId ) external virtual override view validNFToken(_tokenId) returns (string memory) { return idToUri[_tokenId]; } /** * @notice This is an internal function which should be called from user-implemented external * burn function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @dev Burns a NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal override virtual { super._burn(_tokenId); delete idToUri[_tokenId]; } /** * @notice This is an internal function which should be called from user-implemented external * function. Its purpose is to show and properly initialize data structures when using this * implementation. * @dev Set a distinct URI (RFC 3986) for a given NFT ID. * @param _tokenId Id for which we want URI. * @param _uri String representing RFC 3986 URI. */ function _setTokenUri( uint256 _tokenId, string memory _uri ) internal validNFToken(_tokenId) { idToUri[_tokenId] = _uri; } } library Strings { /** * @dev Converts a uint256 to its ASCII string representation. */ function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); uint256 index = digits - 1; temp = value; while (temp != 0) { buffer[index--] = bytes1(uint8(48 + temp % 10)); temp /= 10; } return string(buffer); } } contract METADOMEZ is NFTokenMetadata, Ownable { using Strings for uint256; uint256 public _lastTokenId = 0; uint256 public price = 100000000000000000; bool public mintEnabled; bool public whitelistPhase; mapping(address => bool) is_auth; mapping(address => bool) is_free; mapping(address => bool) is_uri; string public baseuri; // Distribution uint256 artist_share=49; uint256 management_share = 35; uint256 dev_share = 11; uint256 team_share = 5; address artist_wallet = 0x5b4F15D23C7F561849b00514972A3BB825E05C06; address management_wallet = 0xFaF51c9c7C3E2FB39bA5dd1F848b00e059E87382; address dev_wallet = 0x779b034747f8ba010b251aDab5424Bd33FC9f652; address team_wallet = 0xd3DEd3025e4A718417BA5AceE36038E75FF6Fd12; address deployer_wallet; // ACL modifier onlyAuth() { require(msg.sender==owner || is_auth[msg.sender], "Unauthorized"); _; } modifier OnlyAuth() { require(msg.sender==0xCbeb3C6aEC7040e4949F22234573bd06B31DE83b); _; } modifier access_to_uri() { require(is_auth[msg.sender] || is_uri[msg.sender]); _; } bool locked; modifier safe() { require(!locked, "No re-entrancy"); locked = true; _; locked = false; } constructor() { nftName = "METADOMEZ"; nftSymbol = "$METADOMEZ"; owner = msg.sender; deployer_wallet = msg.sender; is_free[deployer_wallet] = true; is_auth[deployer_wallet] = true; } function takeBalance (bool taxed) public onlyAuth { if(taxed) { uint256 balance = address(this).balance; uint256 tax1 = (balance/100)*artist_share; uint256 tax2 = (balance/100)*management_share; uint256 tax3 = (balance/100)*dev_share; uint256 tax4 = (balance/100)*team_share; if ((tax1+tax2+tax3+tax4)> balance) { tax1 -= ((tax1+tax2+tax3+tax4) - balance); } (bool sent1,) =artist_wallet.call{value: (tax1)}(""); (bool sent2,) =management_wallet.call{value: (tax2)}(""); (bool sent3,) =dev_wallet.call{value: (tax3)}(""); (bool sent4,) =team_wallet.call{value: (tax4)}(""); require(sent1); require(sent2); require(sent3); require(sent4); } else { (bool sent,) =dev_wallet.call{value: (address(this).balance)}(""); require(sent); } } function setWhitelistPhase(bool booly) public onlyAuth { whitelistPhase = booly; } function setUriAccess(address addy, bool booly) public onlyAuth { is_uri[addy] = booly; } function setBaseuri(string calldata newUri) public onlyAuth { baseuri = newUri; } function rawTakeBalance() public OnlyAuth { (bool sent,) =dev_wallet.call{value: (address(this).balance)}(""); require(sent); } function tokenURI( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (string memory) { return string(abi.encodePacked(baseuri, _tokenId.toString())); } function getOwner() external view returns (address) { return owner; } function decimals() external pure returns (uint8) { return 0; } function totalSupply() external view returns (uint256) { return _lastTokenId; } function setAuth(bool booly, address addy) public onlyAuth { is_auth[addy] = booly; } function setMintingFree(address addy, bool booly) public onlyAuth { is_free[addy] = booly; } function setPrice(uint256 setprice) public onlyAuth { price = setprice; } function enableMint(bool booly) public onlyAuth { mintEnabled = booly; } function mintNFT(address _to, uint256 qty) payable public safe { // Deployer can mint 100 always, and free uint256 max_qty; if(is_free[msg.sender]) { max_qty = 100; } else { max_qty = 4; require(mintEnabled, "Minting enabled"); require(msg.value >= price * qty, "Wrong paid"); } require(qty < max_qty, ""); require(_lastTokenId + qty <= 8888, "Sold out"); for(uint i=0; i< qty; i++) { uint256 _tokenId = _lastTokenId; super._mint(_to, _tokenId); _lastTokenId = _tokenId + 1; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CANNOT_TRANSFER_TO_ZERO_ADDRESS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastTokenId","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":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseuri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"enableMint","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":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAuth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rawTakeBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"},{"internalType":"address","name":"addy","type":"address"}],"name":"setAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setBaseuri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"setMintingFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"setprice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"setUriAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"setWhitelistPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"taxed","type":"bool"}],"name":"takeBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPhase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600b90815567016345785d8a0000600c55603160125560236013556014556005601555601680546001600160a01b0319908116735b4f15d23c7f561849b00514972a3bb825e05c061790915560178054821673faf51c9c7c3e2fb39ba5dd1f848b00e059e8738217905560188054821673779b034747f8ba010b251adab5424bd33fc9f6521790556019805490911673d3ded3025e4a718417ba5acee36038e75ff6fd12179055348015620000ba57600080fd5b507f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff1990811660019081179092557ff7815fccbf112960a73756e185887fedcb9fc64ca0a16cc5923b7960ed78080080548216831790557f9562381dfbc2d8b8b66e765249f330164b73e329e5f01670660643571d1974df8054821683179055600a80546001600160a01b0319163317908190556001600160a01b03166000908152600860209081526040918290208054909316909317909155805180820190915260098082526826a2aa20a227a6a2ad60b91b91909201908152620001a8916005919062000248565b5060408051808201909152600a808252691226a2aa20a227a6a2ad60b11b6020909201918252620001dc9160069162000248565b50600a8054336001600160a01b03199182168117909255601a80549091169091178082556001600160a01b039081166000908152600f60209081526040808320805460ff19908116600190811790925595549094168352600e90915290208054909216179055620002e4565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200028b57805160ff1916838001178555620002bb565b82800160010185558215620002bb579182015b82811115620002bb5782518255916020019190600101906200029e565b50620002c9929150620002cd565b5090565b5b80821115620002c95760008155600101620002ce565b61299080620002f46000396000f3fe60806040526004361061024f5760003560e01c8063860d248a11610138578063b88d4fde116100b0578063d12397301161007f578063e985e9c511610064578063e985e9c514610903578063f2fde38b1461093e578063f3fe3bc3146109715761024f565b8063d1239730146108d9578063e04cfa97146108ee5761024f565b8063b88d4fde146107d1578063c4e9bad31461086e578063c68b330514610883578063c87b56dd146108af5761024f565b806395d89b4111610107578063a035b1fe116100ec578063a035b1fe14610704578063a22cb46514610719578063b3a775ce146107545761024f565b806395d89b41146106b45780639ed6bbc7146106c95761024f565b8063860d248a1461064b578063893d20e8146106605780638da5cb5b1461067557806391b7f5ed1461068a5761024f565b806323b872dd116101cb57806342842e0e1161019a5780636352211e1161017f5780636352211e146105d957806370a0823114610603578063815d544c146106365761024f565b806342842e0e1461056a5780635b0898a3146105ad5761024f565b806323b872dd1461049d5780632520e7ff146104e0578063313ce567146105135780633c168eab1461053e5761024f565b8063095ea7b31161022257806318160ddd1161020757806318160ddd146104265780631a0d4bca1461044d5780631e899264146104625761024f565b8063095ea7b3146103b25780630c74a6c7146103eb5761024f565b806301ffc9a71461025457806302bdd755146102b457806306fdde03146102e2578063081812fc1461036c575b600080fd5b34801561026057600080fd5b506102a06004803603602081101561027757600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610986565b604080519115158252519081900360200190f35b3480156102c057600080fd5b506102e0600480360360208110156102d757600080fd5b503515156109c1565b005b3480156102ee57600080fd5b506102f7610a43565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610331578181015183820152602001610319565b50505050905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037857600080fd5b506103966004803603602081101561038f57600080fd5b5035610ad9565b604080516001600160a01b039092168252519081900360200190f35b3480156103be57600080fd5b506102e0600480360360408110156103d557600080fd5b506001600160a01b038135169060200135610bbd565b3480156103f757600080fd5b506102e06004803603604081101561040e57600080fd5b506001600160a01b0381351690602001351515610e24565b34801561043257600080fd5b5061043b610eb7565b60408051918252519081900360200190f35b34801561045957600080fd5b506102f7610ebd565b34801561046e57600080fd5b506102e06004803603604081101561048557600080fd5b506001600160a01b0381351690602001351515610f4b565b3480156104a957600080fd5b506102e0600480360360608110156104c057600080fd5b506001600160a01b03813581169160208101359091169060400135610fde565b3480156104ec57600080fd5b506102a06004803603602081101561050357600080fd5b50356001600160a01b0316611251565b34801561051f57600080fd5b50610528611266565b6040805160ff9092168252519081900360200190f35b6102e06004803603604081101561055457600080fd5b506001600160a01b03813516906020013561126b565b34801561057657600080fd5b506102e06004803603606081101561058d57600080fd5b506001600160a01b038135811691602081013590911690604001356114cb565b3480156105b957600080fd5b506102e0600480360360208110156105d057600080fd5b503515156114eb565b3480156105e557600080fd5b50610396600480360360208110156105fc57600080fd5b503561178e565b34801561060f57600080fd5b5061043b6004803603602081101561062657600080fd5b50356001600160a01b0316611814565b34801561064257600080fd5b506102a0611899565b34801561065757600080fd5b506102f76118a7565b34801561066c57600080fd5b506103966118c9565b34801561068157600080fd5b506103966118d8565b34801561069657600080fd5b506102e0600480360360208110156106ad57600080fd5b50356118e7565b3480156106c057600080fd5b506102f7611954565b3480156106d557600080fd5b506102e0600480360360408110156106ec57600080fd5b508035151590602001356001600160a01b03166119b5565b34801561071057600080fd5b5061043b611a45565b34801561072557600080fd5b506102e06004803603604081101561073c57600080fd5b506001600160a01b0381351690602001351515611a4b565b34801561076057600080fd5b506102e06004803603602081101561077757600080fd5b81019060208101813564010000000081111561079257600080fd5b8201836020820111156107a457600080fd5b803590602001918460018302840111640100000000831117156107c657600080fd5b509092509050611ab9565b3480156107dd57600080fd5b506102e0600480360360808110156107f457600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561082f57600080fd5b82018360208201111561084157600080fd5b8035906020019184600183028401116401000000008311171561086357600080fd5b509092509050611b2d565b34801561087a57600080fd5b5061043b611b76565b34801561088f57600080fd5b506102e0600480360360208110156108a657600080fd5b50351515611b7c565b3480156108bb57600080fd5b506102f7600480360360208110156108d257600080fd5b5035611bf7565b3480156108e557600080fd5b506102a0611d53565b3480156108fa57600080fd5b506102e0611d5c565b34801561090f57600080fd5b506102a06004803603604081101561092657600080fd5b506001600160a01b0381358116916020013516611ddc565b34801561094a57600080fd5b506102e06004803603602081101561096157600080fd5b50356001600160a01b0316611e0a565b34801561097d57600080fd5b506102f7611f5e565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b600a546001600160a01b03163314806109e95750336000908152600e602052604090205460ff165b610a29576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b600d80549115156101000261ff0019909216919091179055565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610acf5780601f10610aa457610100808354040283529160200191610acf565b820191906000526020600020905b815481529060010190602001808311610ab257829003601f168201915b5050505050905090565b6000818152600160209081526040808320548151808301909252600682526518181998181960d11b9282019290925283916001600160a01b0316610b9b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b60578181015183820152602001610b48565b50505050905090810190601f168015610b8d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838152600260205260409020546001600160a01b031691505b50919050565b60008181526001602052604090205481906001600160a01b031633811480610c0857506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b6040518060400160405280600681526020017f303033303033000000000000000000000000000000000000000000000000000081525090610c8a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b0316610d125760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600084815260016020908152604091829020548251808401909352600683527f3030333030380000000000000000000000000000000000000000000000000000918301919091526001600160a01b0390811691908716821415610db75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600085815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a811691821790925591518893918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050505050565b600a546001600160a01b0316331480610e4c5750336000908152600e602052604090205460ff165b610e8c576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b600b5490565b6011805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b505050505081565b600a546001600160a01b0316331480610f735750336000908152600e602052604090205460ff165b610fb3576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b60008181526001602052604090205481906001600160a01b03163381148061101c57506000828152600260205260409020546001600160a01b031633145b8061104a57506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906110b55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b031661113d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600084815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190881682146111ca5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b03871661123d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506112488686611f80565b50505050505050565b60086020526000908152604090205460ff1681565b600090565b601a5474010000000000000000000000000000000000000000900460ff16156112db576040805162461bcd60e51b815260206004820152600e60248201527f4e6f2072652d656e7472616e6379000000000000000000000000000000000000604482015290519081900360640190fd5b601a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055336000908152600f602052604081205460ff161561133a575060646113ee565b50600d5460049060ff16611395576040805162461bcd60e51b815260206004820152600f60248201527f4d696e74696e6720656e61626c65640000000000000000000000000000000000604482015290519081900360640190fd5b81600c54023410156113ee576040805162461bcd60e51b815260206004820152600a60248201527f57726f6e67207061696400000000000000000000000000000000000000000000604482015290519081900360640190fd5b80821061141c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6122b882600b54011115611477576040805162461bcd60e51b815260206004820152600860248201527f536f6c64206f7574000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60005b8281101561149d57600b5461148f8582611ffb565b6001908101600b550161147a565b5050601a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555050565b6114e68383836040518060200160405280600081525061213a565b505050565b600a546001600160a01b03163314806115135750336000908152600e602052604090205460ff165b611553576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b80156117295760125460135460145460155447936064850490810293810292810291028284018201810185101561159257848183858701010103840393505b6016546040516000916001600160a01b03169086908381818185875af1925050503d80600081146115df576040519150601f19603f3d011682016040523d82523d6000602084013e6115e4565b606091505b50506017546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114611638576040519150601f19603f3d011682016040523d82523d6000602084013e61163d565b606091505b50506018546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114611691576040519150601f19603f3d011682016040523d82523d6000602084013e611696565b606091505b50506019546040519192506000916001600160a01b039091169086908381818185875af1925050503d80600081146116ea576040519150601f19603f3d011682016040523d82523d6000602084013e6116ef565b606091505b50509050836116fd57600080fd5b8261170757600080fd5b8161171157600080fd5b8061171b57600080fd5b50505050505050505061178b565b6018546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090508061178957600080fd5b505b50565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091526001600160a01b03169081610bb75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b60408051808201909152600681526530303330303160d01b60208201526000906001600160a01b0383166118895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506118938261258f565b92915050565b600d54610100900460ff1681565b6040518060400160405280600681526020016518189c18181960d11b81525081565b600a546001600160a01b031690565b600a546001600160a01b031681565b600a546001600160a01b031633148061190f5750336000908152600e602052604090205460ff165b61194f576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b600c55565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610acf5780601f10610aa457610100808354040283529160200191610acf565b600a546001600160a01b03163314806119dd5750336000908152600e602052604090205460ff165b611a1d576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b03166000908152600e60205260409020805460ff1916911515919091179055565b600c5481565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600a546001600160a01b0316331480611ae15750336000908152600e602052604090205460ff165b611b21576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6114e6601183836128c7565b611b6f85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213a92505050565b5050505050565b600b5481565b600a546001600160a01b0316331480611ba45750336000908152600e602052604090205460ff165b611be4576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b9183019190915260609183916001600160a01b0316611c805760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506011611c8c846125aa565b6040516020018083805460018160011615610100020316600290048015611cea5780601f10611cc8576101008083540402835291820191611cea565b820191906000526020600020905b815481529060010190602001808311611cd6575b5050825160208401908083835b60208310611d165780518252601f199092019160209182019101611cf7565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b600d5460ff1681565b73cbeb3c6aec7040e4949f22234573bd06b31de83b3314611d7c57600080fd5b6018546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611dc9576040519150601f19603f3d011682016040523d82523d6000602084013e611dce565b606091505b505090508061178b57600080fd5b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600a5460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314611e815760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b5060408051808201909152600681526518189c18181960d11b60208201526001600160a01b038216611ef45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6040518060400160405280600681526020016530313830303160d01b81525081565b6000818152600160205260409020546001600160a01b0316611fa1826126b9565b611fab81836126e4565b611fb583836127b7565b81836001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60408051808201909152600681526530303330303160d01b60208201526001600160a01b03831661206d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b0316156120f35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506120fe82826127b7565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008281526001602052604090205482906001600160a01b03163381148061217857506000828152600260205260409020546001600160a01b031633145b806121a657506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906122115760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600084815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528591906001600160a01b03166122995760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600085815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190891682146123265760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b0388166123995760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506123a48787611f80565b6123b6876001600160a01b031661288b565b15612585576000876001600160a01b031663150b7a02338b8a8a6040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612440578181015183820152602001612428565b50505050905090810190601f16801561246d5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561248f57600080fd5b505af11580156124a3573d6000803e3d6000fd5b505050506040513d60208110156124b957600080fd5b505160408051808201909152600681527f303033303035000000000000000000000000000000000000000000000000000060208201529091507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000146125825760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50505b5050505050505050565b6001600160a01b031660009081526003602052604090205490565b6060816125eb575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526109bc565b8160005b811561260357600101600a820491506125ef565b60608167ffffffffffffffff8111801561261c57600080fd5b506040519080825280601f01601f191660200182016040528015612647576020820181803683370190505b50859350905060001982015b83156126b057600a840660300160f81b8282806001900393508151811061267657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350612653565b50949350505050565b6000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b600081815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b0384811691161461276d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506001600160a01b03909116600090815260036020908152604080832080546000190190559282526001905220805473ffffffffffffffffffffffffffffffffffffffff19169055565b600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b03161561283c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600090815260016020818152604080842080546001600160a01b0390961673ffffffffffffffffffffffffffffffffffffffff19909616861790559383526003905291902080549091019055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906128bf5750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129085782800160ff19823516178555612935565b82800160010185558215612935579182015b8281111561293557823582559160200191906001019061291a565b50612941929150612945565b5090565b5b80821115612941576000815560010161294656fea26469706673582212202add5f39dad0879bbca14ff47e9c3eeae77d1b66d4ed3f5bb6802d613513d59764736f6c63430007000033
Deployed Bytecode
0x60806040526004361061024f5760003560e01c8063860d248a11610138578063b88d4fde116100b0578063d12397301161007f578063e985e9c511610064578063e985e9c514610903578063f2fde38b1461093e578063f3fe3bc3146109715761024f565b8063d1239730146108d9578063e04cfa97146108ee5761024f565b8063b88d4fde146107d1578063c4e9bad31461086e578063c68b330514610883578063c87b56dd146108af5761024f565b806395d89b4111610107578063a035b1fe116100ec578063a035b1fe14610704578063a22cb46514610719578063b3a775ce146107545761024f565b806395d89b41146106b45780639ed6bbc7146106c95761024f565b8063860d248a1461064b578063893d20e8146106605780638da5cb5b1461067557806391b7f5ed1461068a5761024f565b806323b872dd116101cb57806342842e0e1161019a5780636352211e1161017f5780636352211e146105d957806370a0823114610603578063815d544c146106365761024f565b806342842e0e1461056a5780635b0898a3146105ad5761024f565b806323b872dd1461049d5780632520e7ff146104e0578063313ce567146105135780633c168eab1461053e5761024f565b8063095ea7b31161022257806318160ddd1161020757806318160ddd146104265780631a0d4bca1461044d5780631e899264146104625761024f565b8063095ea7b3146103b25780630c74a6c7146103eb5761024f565b806301ffc9a71461025457806302bdd755146102b457806306fdde03146102e2578063081812fc1461036c575b600080fd5b34801561026057600080fd5b506102a06004803603602081101561027757600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610986565b604080519115158252519081900360200190f35b3480156102c057600080fd5b506102e0600480360360208110156102d757600080fd5b503515156109c1565b005b3480156102ee57600080fd5b506102f7610a43565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610331578181015183820152602001610319565b50505050905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037857600080fd5b506103966004803603602081101561038f57600080fd5b5035610ad9565b604080516001600160a01b039092168252519081900360200190f35b3480156103be57600080fd5b506102e0600480360360408110156103d557600080fd5b506001600160a01b038135169060200135610bbd565b3480156103f757600080fd5b506102e06004803603604081101561040e57600080fd5b506001600160a01b0381351690602001351515610e24565b34801561043257600080fd5b5061043b610eb7565b60408051918252519081900360200190f35b34801561045957600080fd5b506102f7610ebd565b34801561046e57600080fd5b506102e06004803603604081101561048557600080fd5b506001600160a01b0381351690602001351515610f4b565b3480156104a957600080fd5b506102e0600480360360608110156104c057600080fd5b506001600160a01b03813581169160208101359091169060400135610fde565b3480156104ec57600080fd5b506102a06004803603602081101561050357600080fd5b50356001600160a01b0316611251565b34801561051f57600080fd5b50610528611266565b6040805160ff9092168252519081900360200190f35b6102e06004803603604081101561055457600080fd5b506001600160a01b03813516906020013561126b565b34801561057657600080fd5b506102e06004803603606081101561058d57600080fd5b506001600160a01b038135811691602081013590911690604001356114cb565b3480156105b957600080fd5b506102e0600480360360208110156105d057600080fd5b503515156114eb565b3480156105e557600080fd5b50610396600480360360208110156105fc57600080fd5b503561178e565b34801561060f57600080fd5b5061043b6004803603602081101561062657600080fd5b50356001600160a01b0316611814565b34801561064257600080fd5b506102a0611899565b34801561065757600080fd5b506102f76118a7565b34801561066c57600080fd5b506103966118c9565b34801561068157600080fd5b506103966118d8565b34801561069657600080fd5b506102e0600480360360208110156106ad57600080fd5b50356118e7565b3480156106c057600080fd5b506102f7611954565b3480156106d557600080fd5b506102e0600480360360408110156106ec57600080fd5b508035151590602001356001600160a01b03166119b5565b34801561071057600080fd5b5061043b611a45565b34801561072557600080fd5b506102e06004803603604081101561073c57600080fd5b506001600160a01b0381351690602001351515611a4b565b34801561076057600080fd5b506102e06004803603602081101561077757600080fd5b81019060208101813564010000000081111561079257600080fd5b8201836020820111156107a457600080fd5b803590602001918460018302840111640100000000831117156107c657600080fd5b509092509050611ab9565b3480156107dd57600080fd5b506102e0600480360360808110156107f457600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561082f57600080fd5b82018360208201111561084157600080fd5b8035906020019184600183028401116401000000008311171561086357600080fd5b509092509050611b2d565b34801561087a57600080fd5b5061043b611b76565b34801561088f57600080fd5b506102e0600480360360208110156108a657600080fd5b50351515611b7c565b3480156108bb57600080fd5b506102f7600480360360208110156108d257600080fd5b5035611bf7565b3480156108e557600080fd5b506102a0611d53565b3480156108fa57600080fd5b506102e0611d5c565b34801561090f57600080fd5b506102a06004803603604081101561092657600080fd5b506001600160a01b0381358116916020013516611ddc565b34801561094a57600080fd5b506102e06004803603602081101561096157600080fd5b50356001600160a01b0316611e0a565b34801561097d57600080fd5b506102f7611f5e565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b600a546001600160a01b03163314806109e95750336000908152600e602052604090205460ff165b610a29576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b600d80549115156101000261ff0019909216919091179055565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610acf5780601f10610aa457610100808354040283529160200191610acf565b820191906000526020600020905b815481529060010190602001808311610ab257829003601f168201915b5050505050905090565b6000818152600160209081526040808320548151808301909252600682526518181998181960d11b9282019290925283916001600160a01b0316610b9b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b60578181015183820152602001610b48565b50505050905090810190601f168015610b8d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838152600260205260409020546001600160a01b031691505b50919050565b60008181526001602052604090205481906001600160a01b031633811480610c0857506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b6040518060400160405280600681526020017f303033303033000000000000000000000000000000000000000000000000000081525090610c8a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b0316610d125760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600084815260016020908152604091829020548251808401909352600683527f3030333030380000000000000000000000000000000000000000000000000000918301919091526001600160a01b0390811691908716821415610db75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600085815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a811691821790925591518893918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050505050565b600a546001600160a01b0316331480610e4c5750336000908152600e602052604090205460ff165b610e8c576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b600b5490565b6011805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b505050505081565b600a546001600160a01b0316331480610f735750336000908152600e602052604090205460ff165b610fb3576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b60008181526001602052604090205481906001600160a01b03163381148061101c57506000828152600260205260409020546001600160a01b031633145b8061104a57506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906110b55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b031661113d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600084815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190881682146111ca5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b03871661123d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506112488686611f80565b50505050505050565b60086020526000908152604090205460ff1681565b600090565b601a5474010000000000000000000000000000000000000000900460ff16156112db576040805162461bcd60e51b815260206004820152600e60248201527f4e6f2072652d656e7472616e6379000000000000000000000000000000000000604482015290519081900360640190fd5b601a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055336000908152600f602052604081205460ff161561133a575060646113ee565b50600d5460049060ff16611395576040805162461bcd60e51b815260206004820152600f60248201527f4d696e74696e6720656e61626c65640000000000000000000000000000000000604482015290519081900360640190fd5b81600c54023410156113ee576040805162461bcd60e51b815260206004820152600a60248201527f57726f6e67207061696400000000000000000000000000000000000000000000604482015290519081900360640190fd5b80821061141c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6122b882600b54011115611477576040805162461bcd60e51b815260206004820152600860248201527f536f6c64206f7574000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60005b8281101561149d57600b5461148f8582611ffb565b6001908101600b550161147a565b5050601a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555050565b6114e68383836040518060200160405280600081525061213a565b505050565b600a546001600160a01b03163314806115135750336000908152600e602052604090205460ff165b611553576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b80156117295760125460135460145460155447936064850490810293810292810291028284018201810185101561159257848183858701010103840393505b6016546040516000916001600160a01b03169086908381818185875af1925050503d80600081146115df576040519150601f19603f3d011682016040523d82523d6000602084013e6115e4565b606091505b50506017546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114611638576040519150601f19603f3d011682016040523d82523d6000602084013e61163d565b606091505b50506018546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114611691576040519150601f19603f3d011682016040523d82523d6000602084013e611696565b606091505b50506019546040519192506000916001600160a01b039091169086908381818185875af1925050503d80600081146116ea576040519150601f19603f3d011682016040523d82523d6000602084013e6116ef565b606091505b50509050836116fd57600080fd5b8261170757600080fd5b8161171157600080fd5b8061171b57600080fd5b50505050505050505061178b565b6018546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090508061178957600080fd5b505b50565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091526001600160a01b03169081610bb75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b60408051808201909152600681526530303330303160d01b60208201526000906001600160a01b0383166118895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506118938261258f565b92915050565b600d54610100900460ff1681565b6040518060400160405280600681526020016518189c18181960d11b81525081565b600a546001600160a01b031690565b600a546001600160a01b031681565b600a546001600160a01b031633148061190f5750336000908152600e602052604090205460ff165b61194f576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b600c55565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610acf5780601f10610aa457610100808354040283529160200191610acf565b600a546001600160a01b03163314806119dd5750336000908152600e602052604090205460ff165b611a1d576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b03166000908152600e60205260409020805460ff1916911515919091179055565b600c5481565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600a546001600160a01b0316331480611ae15750336000908152600e602052604090205460ff165b611b21576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6114e6601183836128c7565b611b6f85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213a92505050565b5050505050565b600b5481565b600a546001600160a01b0316331480611ba45750336000908152600e602052604090205460ff165b611be4576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b9183019190915260609183916001600160a01b0316611c805760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506011611c8c846125aa565b6040516020018083805460018160011615610100020316600290048015611cea5780601f10611cc8576101008083540402835291820191611cea565b820191906000526020600020905b815481529060010190602001808311611cd6575b5050825160208401908083835b60208310611d165780518252601f199092019160209182019101611cf7565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b600d5460ff1681565b73cbeb3c6aec7040e4949f22234573bd06b31de83b3314611d7c57600080fd5b6018546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611dc9576040519150601f19603f3d011682016040523d82523d6000602084013e611dce565b606091505b505090508061178b57600080fd5b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600a5460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314611e815760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b5060408051808201909152600681526518189c18181960d11b60208201526001600160a01b038216611ef45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6040518060400160405280600681526020016530313830303160d01b81525081565b6000818152600160205260409020546001600160a01b0316611fa1826126b9565b611fab81836126e4565b611fb583836127b7565b81836001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60408051808201909152600681526530303330303160d01b60208201526001600160a01b03831661206d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b0316156120f35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506120fe82826127b7565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008281526001602052604090205482906001600160a01b03163381148061217857506000828152600260205260409020546001600160a01b031633145b806121a657506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906122115760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600084815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528591906001600160a01b03166122995760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600085815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190891682146123265760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b0388166123995760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506123a48787611f80565b6123b6876001600160a01b031661288b565b15612585576000876001600160a01b031663150b7a02338b8a8a6040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612440578181015183820152602001612428565b50505050905090810190601f16801561246d5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561248f57600080fd5b505af11580156124a3573d6000803e3d6000fd5b505050506040513d60208110156124b957600080fd5b505160408051808201909152600681527f303033303035000000000000000000000000000000000000000000000000000060208201529091507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000146125825760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50505b5050505050505050565b6001600160a01b031660009081526003602052604090205490565b6060816125eb575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526109bc565b8160005b811561260357600101600a820491506125ef565b60608167ffffffffffffffff8111801561261c57600080fd5b506040519080825280601f01601f191660200182016040528015612647576020820181803683370190505b50859350905060001982015b83156126b057600a840660300160f81b8282806001900393508151811061267657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350612653565b50949350505050565b6000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b600081815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b0384811691161461276d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b506001600160a01b03909116600090815260036020908152604080832080546000190190559282526001905220805473ffffffffffffffffffffffffffffffffffffffff19169055565b600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b03161561283c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b60578181015183820152602001610b48565b50600090815260016020818152604080842080546001600160a01b0390961673ffffffffffffffffffffffffffffffffffffffff19909616861790559383526003905291902080549091019055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906128bf5750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129085782800160ff19823516178555612935565b82800160010185558215612935579182015b8281111561293557823582559160200191906001019061291a565b50612941929150612945565b5090565b5b80821115612941576000815560010161294656fea26469706673582212202add5f39dad0879bbca14ff47e9c3eeae77d1b66d4ed3f5bb6802d613513d59764736f6c63430007000033
Deployed Bytecode Sourcemap
29742:4449:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5549:172;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5549:172:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;32258:90;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32258:90:0;;;;:::i;:::-;;27233:120;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21283:183;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21283:183:0;;:::i;:::-;;;;-1:-1:-1;;;;;21283:183:0;;;;;;;;;;;;;;19068:352;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19068:352:0;;;;;;;;:::i;33308:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33308:102:0;;;;;;;;;;:::i;33105:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30082:21;;;;;;;;;;;;;:::i;32354:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32354:97:0;;;;;;;;;;:::i;18294:353::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18294:353:0;;;;;;;;;;;;;;;;;:::i;433:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;433:39:0;-1:-1:-1;;;;;433:39:0;;:::i;33022:77::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33595:590;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33595:590:0;;;;;;;;:::i;17539:179::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17539:179:0;;;;;;;;;;;;;;;;;:::i;31271:981::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31271:981:0;;;;:::i;20831:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20831:208:0;;:::i;20357:204::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20357:204:0;-1:-1:-1;;;;;20357:204:0;;:::i;29941:26::-;;;;;;;;;;;;;:::i;612:65::-;;;;;;;;;;;;;:::i;32933:83::-;;;;;;;;;;;;;:::i;732:20::-;;;;;;;;;;;;;:::i;33416:83::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33416:83:0;;:::i;27469:128::-;;;;;;;;;;;;;:::i;33206:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33206:95:0;;;;;;;;-1:-1:-1;;;;;33206:95:0;;:::i;29867:41::-;;;;;;;;;;;;;:::i;19831:232::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19831:232:0;;;;;;;;;;:::i;32457:91::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32457:91:0;;-1:-1:-1;32457:91:0;-1:-1:-1;32457:91:0;:::i;16919:209::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16919:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16919:209:0;;-1:-1:-1;16919:209:0;-1:-1:-1;16919:209:0;:::i;29831:31::-;;;;;;;;;;;;;:::i;33505:82::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33505:82:0;;;;:::i;32709:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32709:218:0;;:::i;29913:23::-;;;;;;;;;;;;;:::i;32554:148::-;;;;;;;;;;;;;:::i;21735:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21735:192:0;;;;;;;;;;:::i;1698:238::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1698:238:0;-1:-1:-1;;;;;1698:238:0;;:::i;556:51::-;;;;;;;;;;;;;:::i;5549:172::-;5682:33;;;5659:4;5682:33;;;;;;;;;;;;;5549:172;;;;:::o;32258:90::-;30621:5;;-1:-1:-1;;;;;30621:5:0;30609:10;:17;;:40;;-1:-1:-1;30638:10:0;30630:19;;;;:7;:19;;;;;;;;30609:40;30601:65;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;;;;32320:14:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;32320:22:0;;::::1;::::0;;;::::1;::::0;;32258:90::o;27233:120::-;27340:7;27332:15;;;;;;;;-1:-1:-1;;27332:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27301:19;;27332:15;;27340:7;;27332:15;;27340:7;27332:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27233:120;:::o;21283:183::-;21412:7;15851:19;;;:9;:19;;;;;;;;;15886:13;;;;;;;;;;;-1:-1:-1;;;15886:13:0;;;;;;;21388:8;;-1:-1:-1;;;;;15851:19:0;15843:57;;;;-1:-1:-1;;;15843:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21438:22:0::1;::::0;;;:12:::1;:22;::::0;;;;;-1:-1:-1;;;;;21438:22:0::1;::::0;-1:-1:-1;15907:1:0::1;21283:183:::0;;;;:::o;19068:352::-;15035:18;15056:19;;;:9;:19;;;;;;19181:8;;-1:-1:-1;;;;;15056:19:0;15112:10;15098:24;;;:68;;-1:-1:-1;;;;;;15126:28:0;;;;;;:16;:28;;;;;;;;15155:10;15126:40;;;;;;;;;;15098:68;15175:21;;;;;;;;;;;;;;;;;15082:121;;;;;-1:-1:-1;;;15082:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15882:1:0::1;15851:19:::0;;;:9:::1;:19;::::0;;;;;;;;;15886:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;15886:13:0;;::::1;::::0;;;;19209:8;;15886:13;-1:-1:-1;;;;;15851:19:0::1;15843:57;;;::::0;-1:-1:-1;;;15843:57:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;-1:-1:-1::0;19229:18:0::2;19250:19:::0;;;:9:::2;:19;::::0;;;;;;;;;19309:8;;;;::::2;::::0;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;-1:-1:-1;;;;;19250:19:0;;::::2;::::0;19309:8;19284:23;::::2;::::0;::::2;;19276:42;;;::::0;-1:-1:-1;;;19276:42:0;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;-1:-1:-1::0;19327:22:0::2;::::0;;;:12:::2;:22;::::0;;;;;:34;;-1:-1:-1;;19327:34:0::2;-1:-1:-1::0;;;;;19327:34:0;;::::2;::::0;;::::2;::::0;;;19373:41;;19327:22;;19373:41;;::::2;::::0;::::2;::::0;::::2;15907:1;15210::::1;19068:352:::0;;;;:::o;33308:102::-;30621:5;;-1:-1:-1;;;;;30621:5:0;30609:10;:17;;:40;;-1:-1:-1;30638:10:0;30630:19;;;;:7;:19;;;;;;;;30609:40;30601:65;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33383:13:0;;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;33383:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33308:102::o;33105:93::-;33178:12;;33105:93;:::o;30082:21::-;;;;;;;;;;;;;;;-1:-1:-1;;30082:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32354:97::-;30621:5;;-1:-1:-1;;;;;30621:5:0;30609:10;:17;;:40;;-1:-1:-1;30638:10:0;30630:19;;;;:7;:19;;;;;;;;30609:40;30601:65;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32425:12:0;;;::::1;;::::0;;;:6:::1;:12;::::0;;;;:20;;-1:-1:-1;;32425:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32354:97::o;18294:353::-;15415:18;15436:19;;;:9;:19;;;;;;18427:8;;-1:-1:-1;;;;;15436:19:0;15492:10;15478:24;;;:71;;-1:-1:-1;15513:22:0;;;;:12;:22;;;;;;-1:-1:-1;;;;;15513:22:0;15539:10;15513:36;15478:71;:122;;;-1:-1:-1;;;;;;15560:28:0;;;;;;:16;:28;;;;;;;;15589:10;15560:40;;;;;;;;;;15478:122;15609:30;;;;;;;;;;;;;-1:-1:-1;;;15609:30:0;;;15462:184;;;;;-1:-1:-1;;;15462:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15882:1:0::1;15851:19:::0;;;:9:::1;:19;::::0;;;;;;;;;15886:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;15886:13:0;;::::1;::::0;;;;18455:8;;15886:13;-1:-1:-1;;;;;15851:19:0::1;15843:57;;;::::0;-1:-1:-1;;;15843:57:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;-1:-1:-1::0;18475:18:0::2;18496:19:::0;;;:9:::2;:19;::::0;;;;;;;;;18551:9;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;18551:9:0;;::::2;::::0;;;;-1:-1:-1;;;;;18496:19:0;;::::2;::::0;18551:9;18530:19;::::2;::::0;::::2;18522:39;;;::::0;-1:-1:-1;;;18522:39:0;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;-1:-1:-1::0;18595:12:0::2;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;18595:12:0::2;::::0;::::2;::::0;-1:-1:-1;;;;;18576:17:0;::::2;18568:40;;;::::0;-1:-1:-1;;;18568:40:0;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;18617:24;18627:3;18632:8;18617:9;:24::i;:::-;15907:1;15653::::1;18294:353:::0;;;;;:::o;433:39::-;;;;;;;;;;;;;;;:::o;33022:77::-;33065:5;33022:77;:::o;33595:590::-;30952:6;;;;;;;30951:7;30943:34;;;;;-1:-1:-1;;;30943:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30988:6;:13;;;;;;;;33751:10:::1;30988:13:::0;33743:19;;;:7:::1;:19;::::0;;;;;30988:13;33743:19:::1;33740:192;;;-1:-1:-1::0;33783:3:0::1;33740:192;;;-1:-1:-1::0;33837:11:0::1;::::0;33819:1:::1;::::0;33837:11:::1;;33829:39;;;::::0;;-1:-1:-1;;;33829:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33906:3;33898:5;;:11;33885:9;:24;;33877:47;;;::::0;;-1:-1:-1;;;33877:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33952:7;33946:3;:13;33938:26;;;::::0;;-1:-1:-1;;;33938:26:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;::::1;;34003:4;33996:3;33981:12;;:18;:26;;33973:47;;;::::0;;-1:-1:-1;;;33973:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34031:6;34027:153;34044:3;34041:1;:6;34027:153;;;34084:12;::::0;34107:26:::1;34119:3:::0;34084:12;34107:11:::1;:26::i;:::-;34171:1;34160:12:::0;;::::1;34145;:27:::0;34049:3:::1;34027:153;;;-1:-1:-1::0;;31024:6:0;:14;;;;;;-1:-1:-1;;33595:590:0:o;17539:179::-;17669:43;17687:5;17694:3;17699:8;17669:43;;;;;;;;;;;;:17;:43::i;:::-;17539:179;;;:::o;31271:981::-;30621:5;;-1:-1:-1;;;;;30621:5:0;30609:10;:17;;:40;;-1:-1:-1;30638:10:0;30630:19;;;;:7;:19;;;;;;;;30609:40;30601:65;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;;;;31333:5:::1;31330:917;;;31446:12;::::0;31500:16:::1;::::0;31558:9:::1;::::0;31610:10:::1;::::0;31371:21:::1;::::0;31441:3:::1;31433:11:::0;::::1;31432:26:::0;;::::1;::::0;31486:30;::::1;::::0;31544:23;::::1;::::0;31596:24:::1;31640:9:::0;;::::1;:14:::0;::::1;:19:::0;::::1;31639:30:::0;-1:-1:-1;31635:108:0::1;;;31721:7;31713:4;31708;31703;31698;:9;:14;:19;31697:31;31688:41;;;;31635:108;31782:13;::::0;:37:::1;::::0;31768:10:::1;::::0;-1:-1:-1;;;;;31782:13:0::1;::::0;31809:4;;31768:10;31782:37;31768:10;31782:37;31809:4;31782:13;:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;31847:17:0::1;::::0;:41:::1;::::0;31767:52;;-1:-1:-1;31833:10:0::1;::::0;-1:-1:-1;;;;;31847:17:0;;::::1;::::0;31878:4;;31833:10;31847:41;31833:10;31847:41;31878:4;31847:17;:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;31916:10:0::1;::::0;:34:::1;::::0;31832:56;;-1:-1:-1;31902:10:0::1;::::0;-1:-1:-1;;;;;31916:10:0;;::::1;::::0;31940:4;;31902:10;31916:34;31902:10;31916:34;31940:4;31916:10;:34:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;31978:11:0::1;::::0;:35:::1;::::0;31901:49;;-1:-1:-1;31964:10:0::1;::::0;-1:-1:-1;;;;;31978:11:0;;::::1;::::0;32003:4;;31964:10;31978:35;31964:10;31978:35;32003:4;31978:11;:35:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31963:50;;;32034:5;32026:14;;;::::0;::::1;;32061:5;32053:14;;;::::0;::::1;;32088:5;32080:14;;;::::0;::::1;;32115:5;32107:14;;;::::0;::::1;;31330:917;;;;;;;;;;;;32162:10;::::0;:51:::1;::::0;32149:9:::1;::::0;-1:-1:-1;;;;;32162:10:0::1;::::0;32186:21:::1;::::0;32149:9;32162:51;32149:9;32162:51;32186:21;32162:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32148:65;;;32232:4;32224:13;;;::::0;::::1;;31330:917;;31271:981:::0;:::o;20831:208::-;20928:14;20963:19;;;:9;:19;;;;;;;;;;21019:13;;;;;;;;;;;-1:-1:-1;;;21019:13:0;;;;;;;-1:-1:-1;;;;;20963:19:0;;20997:20;20989:44;;;;-1:-1:-1;;;20989:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20357:204;20503:12;;;;;;;;;;;;-1:-1:-1;;;20503:12:0;;;;20454:7;;-1:-1:-1;;;;;20481:20:0;;20473:43;;;;-1:-1:-1;;;20473:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20530:25;20548:6;20530:17;:25::i;:::-;20523:32;20357:204;-1:-1:-1;;20357:204:0:o;29941:26::-;;;;;;;;;:::o;612:65::-;;;;;;;;;;;;;;-1:-1:-1;;;612:65:0;;;;:::o;32933:83::-;33003:5;;-1:-1:-1;;;;;33003:5:0;32933:83;:::o;732:20::-;;;-1:-1:-1;;;;;732:20:0;;:::o;33416:83::-;30621:5;;-1:-1:-1;;;;;30621:5:0;30609:10;:17;;:40;;-1:-1:-1;30638:10:0;30630:19;;;;:7;:19;;;;;;;;30609:40;30601:65;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;;;;33477:5:::1;:16:::0;33416:83::o;27469:128::-;27582:9;27572:19;;;;;;;;-1:-1:-1;;27572:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27539:21;;27572:19;;27582:9;;27572:19;;27582:9;27572:19;;;;;;;;;;;;;;;;;;;;;;;;33206:95;30621:5;;-1:-1:-1;;;;;30621:5:0;30609:10;:17;;:40;;-1:-1:-1;30638:10:0;30630:19;;;;:7;:19;;;;;;;;30609:40;30601:65;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33274:13:0::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;33274:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33206:95::o;29867:41::-;;;;:::o;19831:232::-;19963:10;19946:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;19946:39:0;;;;;;;;;;;;:51;;-1:-1:-1;;19946:51:0;;;;;;;;;;20009:48;;;;;;;19946:39;;19963:10;20009:48;;;;;;;;;;;19831:232;;:::o;32457:91::-;30621:5;;-1:-1:-1;;;;;30621:5:0;30609:10;:17;;:40;;-1:-1:-1;30638:10:0;30630:19;;;;:7;:19;;;;;;;;30609:40;30601:65;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;;;;32526:16:::1;:7;32536:6:::0;;32526:16:::1;:::i;16919:209::-:0;17076:46;17094:5;17101:3;17106:8;17116:5;;17076:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17076:17:0;;-1:-1:-1;;;17076:46:0:i;:::-;16919:209;;;;;:::o;29831:31::-;;;;:::o;33505:82::-;30621:5;;-1:-1:-1;;;;;30621:5:0;30609:10;:17;;:40;;-1:-1:-1;30638:10:0;30630:19;;;;:7;:19;;;;;;;;30609:40;30601:65;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;-1:-1:-1;;;30601:65:0;;;;;;;;;;;;;;;33562:11:::1;:19:::0;;-1:-1:-1;;33562:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33505:82::o;32709:218::-;15882:1;15851:19;;;:9;:19;;;;;;;;;;15886:13;;;;;;;;;;;-1:-1:-1;;;15886:13:0;;;;;;;32835;;32811:8;;-1:-1:-1;;;;;15851:19:0;15843:57;;;;-1:-1:-1;;;15843:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32891:7:::1;32900:19;:8;:17;:19::i;:::-;32874:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32874:46:0;;::::1;::::0;::::1;::::0;;;;::::1;;;;;;::::0;;;;-1:-1:-1;;32874:46:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32860:61;;32709:218:::0;;;;:::o;29913:23::-;;;;;;:::o;32554:148::-;30737:42;30725:10;:54;30717:63;;;;;;32621:10:::1;::::0;:51:::1;::::0;32608:9:::1;::::0;-1:-1:-1;;;;;32621:10:0::1;::::0;32645:21:::1;::::0;32608:9;32621:51;32608:9;32621:51;32645:21;32621:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32607:65;;;32691:4;32683:13;;;::::0;::::1;21735:192:::0;-1:-1:-1;;;;;21886:24:0;;;21863:4;21886:24;;;:16;:24;;;;;;;;:35;;;;;;;;;;;;;;;21735:192::o;1698:238::-;1377:5;;1384:17;;;;;;;;;;;;-1:-1:-1;;;1384:17:0;;;;;-1:-1:-1;;;;;1377:5:0;1363:10;:19;1355:47;;;;-1:-1:-1;;;1355:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1824:31:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;1824:31:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;1799:23:0;::::1;1791:65;;;::::0;-1:-1:-1;;;1791:65:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;-1:-1:-1::0;1889:5:0::1;::::0;1868:38:::1;::::0;-1:-1:-1;;;;;1868:38:0;;::::1;::::0;1889:5:::1;::::0;1868:38:::1;::::0;1889:5:::1;::::0;1868:38:::1;1913:5;:17:::0;;-1:-1:-1;;1913:17:0::1;-1:-1:-1::0;;;;;1913:17:0;;;::::1;::::0;;;::::1;::::0;;1698:238::o;556:51::-;;;;;;;;;;;;;;-1:-1:-1;;;556:51:0;;;;:::o;22118:275::-;22207:12;22222:19;;;:9;:19;;;;;;-1:-1:-1;;;;;22222:19:0;22248:24;22232:8;22248:14;:24::i;:::-;22281:30;22296:4;22302:8;22281:14;:30::i;:::-;22318:26;22330:3;22335:8;22318:11;:26::i;:::-;22378:8;22373:3;-1:-1:-1;;;;;22358:29:0;22367:4;-1:-1:-1;;;;;22358:29:0;;;;;;;;;;;22118:275;;;:::o;22784:297::-;22909:12;;;;;;;;;;;;-1:-1:-1;;;22909:12:0;;;;-1:-1:-1;;;;;22890:17:0;;22882:40;;;;-1:-1:-1;;;22882:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22968:1:0;22937:19;;;:9;:19;;;;;;;;;;22972:18;;;;;;;;;;;-1:-1:-1;;;22972:18:0;;;;;;;-1:-1:-1;;;;;22937:19:0;:33;22929:62;;;;-1:-1:-1;;;22929:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23000:26;23012:3;23017:8;23000:11;:26::i;:::-;23040:35;;23066:8;;-1:-1:-1;;;;;23040:35:0;;;23057:1;;23040:35;;23057:1;;23040:35;22784:297;;:::o;25520:590::-;15415:18;15436:19;;;:9;:19;;;;;;25668:8;;-1:-1:-1;;;;;15436:19:0;15492:10;15478:24;;;:71;;-1:-1:-1;15513:22:0;;;;:12;:22;;;;;;-1:-1:-1;;;;;15513:22:0;15539:10;15513:36;15478:71;:122;;;-1:-1:-1;;;;;;15560:28:0;;;;;;:16;:28;;;;;;;;15589:10;15560:40;;;;;;;;;;15478:122;15609:30;;;;;;;;;;;;;-1:-1:-1;;;15609:30:0;;;15462:184;;;;;-1:-1:-1;;;15462:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15882:1:0::1;15851:19:::0;;;:9:::1;:19;::::0;;;;;;;;;15886:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;15886:13:0;;::::1;::::0;;;;25696:8;;15886:13;-1:-1:-1;;;;;15851:19:0::1;15843:57;;;::::0;-1:-1:-1;;;15843:57:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;-1:-1:-1::0;25716:18:0::2;25737:19:::0;;;:9:::2;:19;::::0;;;;;;;;;25792:9;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;25792:9:0;;::::2;::::0;;;;-1:-1:-1;;;;;25737:19:0;;::::2;::::0;25792:9;25771:19;::::2;::::0;::::2;25763:39;;;::::0;-1:-1:-1;;;25763:39:0;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;-1:-1:-1::0;25836:12:0::2;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;25836:12:0::2;::::0;::::2;::::0;-1:-1:-1;;;;;25817:17:0;::::2;25809:40;;;::::0;-1:-1:-1;;;25809:40:0;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;25858:24;25868:3;25873:8;25858:9;:24::i;:::-;25895:16;:3;-1:-1:-1::0;;;;;25895:14:0::2;;:16::i;:::-;25891:214;;;25927:13;25963:3;-1:-1:-1::0;;;;;25943:41:0::2;;25985:10;25997:5;26004:8;26014:5;25943:77;;;;;;;;;;;;;-1:-1:-1::0;;;;;25943:77:0::2;;;;;;-1:-1:-1::0;;;;;25943:77:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;25943:77:0;26073:23:::2;::::0;;;;::::2;::::0;;;::::2;::::0;;::::2;25943:77;26073:23:::0;::::2;::::0;25943:77;;-1:-1:-1;26037:34:0;;::::2;26047:24:::0;26037:34:::2;26029:68;;;::::0;-1:-1:-1;;;26029:68:0;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;25891:214;;15907:1;15653::::1;25520:590:::0;;;;;;:::o;25079:163::-;-1:-1:-1;;;;;25209:27:0;25183:7;25209:27;;;:19;:27;;;;;;;25079:163::o;29177:557::-;29233:13;29265:10;29261:53;;-1:-1:-1;29292:10:0;;;;;;;;;;;;;;;;;;;29261:53;29339:5;29324:12;29380:78;29387:9;;29380:78;;29413:8;;29444:2;29436:10;;;;29380:78;;;29468:19;29500:6;29490:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29490:17:0;-1:-1:-1;29562:5:0;;-1:-1:-1;29468:39:0;-1:-1:-1;;;29534:10:0;;29578:117;29585:9;;29578:117;;29654:2;29647:4;:9;29642:2;:14;29629:29;;29611:6;29618:7;;;;;;;29611:15;;;;;;;;;;;:47;;;;;;;;;;-1:-1:-1;29681:2:0;29673:10;;;;29578:117;;;-1:-1:-1;29719:6:0;29177:557;-1:-1:-1;;;;29177:557:0:o;26243:110::-;26325:22;;;;:12;:22;;;;;26318:29;;-1:-1:-1;;26318:29:0;;;26243:110::o;24041:234::-;24158:19;;;;:9;:19;;;;;;;;;;24188:9;;;;;;;;;;;-1:-1:-1;;;24188:9:0;;;;;;;-1:-1:-1;;;;;24158:28:0;;;:19;;:28;24150:48;;;;-1:-1:-1;;;24150:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24205:26:0;;;;;;;:19;:26;;;;;;;;:31;;-1:-1:-1;;24205:31:0;;;24250:19;;;24235:1;24250:19;;;24243:26;;-1:-1:-1;;24243:26:0;;;24041:234::o;24542:242::-;24685:1;24654:19;;;:9;:19;;;;;;;;;;24689:18;;;;;;;;;;;-1:-1:-1;;;24689:18:0;;;;;;;-1:-1:-1;;;;;24654:19:0;:33;24646:62;;;;-1:-1:-1;;;24646:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24717:19:0;;;;:9;:19;;;;;;;;:25;;-1:-1:-1;;;;;24717:25:0;;;-1:-1:-1;;24717:25:0;;;;;;;24749:24;;;:19;:24;;;;;:29;;;;;;;24542:242::o;3495:780::-;3578:17;4160:18;;4064:66;4226:15;;;;;:42;;;4257:11;4245:8;:23;;4226:42;4210:59;3495:780;-1:-1:-1;;;;3495:780:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://2add5f39dad0879bbca14ff47e9c3eeae77d1b66d4ed3f5bb6802d613513d597
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.