ETH Price: $2,526.32 (-0.56%)

Doomsday Garden (TREE)
 

Overview

TokenID

2880

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Doomsday Garden is a new dynamic NFT project where tokens must be mined, and which grow and accumulate ETH. Every Doomsday Garden NFT is a unique 1/1 Tree, which grows as more Trees are planted. As Trees grow, they accumulate ETH, which can be Harvested by the NFT's owner.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DoomsdayGarden

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : DoomsdayGarden.sol
// SPDX-License-Identifier: I live in the mountains
pragma solidity ^0.8.9;

import "./interfaces/IERC721TokenReceiver.sol";
import "./DoomsdayGardenMetadata.sol";

contract DoomsdayGarden {

    constructor(){
        supportsInterface[0x80ac58cd] = true; //ERC721
        supportsInterface[0x5b5e139f] = true; //ERC721Metadata
        supportsInterface[0x01ffc9a7] = true; //ERC165

        owner = msg.sender;

        _mint(1,msg.sender,bytes32(0));
    }


    uint constant BASE_COST = 0.000025 ether;
    uint constant BASE_DIFFICULTY = type(uint).max/uint(50000 * 300);
    uint constant DIFFICULTY_RAMP = uint(50000 * 0.1);
    uint constant CREATOR_FEE = 0.005 ether;

    bytes32[] tokens;
    uint public harvested;

    uint public ownerWithdrawn;
    address public owner;

    mapping( uint => uint) public supplyAtMint;

    event Plant(uint _tokenId, bytes32 _hash, address _planter, uint _newSupply, uint _blockNumber);
    event Harvest(uint _tokenId, bytes32 _hash, uint _growth, uint _supplyAtMint, uint _newSupply, uint _blockNumber);

    function plant(uint seed) public payable {
        uint tokenId = tokens.length + 1;
        uint supply = totalSupply();

        uint difficulty = BASE_DIFFICULTY - (DIFFICULTY_RAMP * supply);

        uint cost = BASE_COST * supply  + CREATOR_FEE;

        bytes32 hash = keccak256(abi.encodePacked(
                        msg.sender,
                        tokens[tokens.length - 1],
                        seed
                    ));

        require(uint(hash) < difficulty,"difficulty");
        require(msg.value == cost,"cost");

        supplyAtMint[tokenId] = supply;

        hash = keccak256(abi.encodePacked(hash,block.timestamp));

        _mint(tokenId,msg.sender,hash);

        emit Plant(tokenId, hash, msg.sender, totalSupply(), block.number);
    }

    function harvest(uint tokenId) public{
        require(msg.sender == ownerOf(tokenId),"ownerOf");

        uint growth = (tokens.length - tokenId);
        uint produce = growth * BASE_COST;


        harvested++;

        _burn(tokenId);

        payable(msg.sender).transfer(produce);

        emit Harvest(tokenId, tokens[tokenId - 1], growth, supplyAtMint[tokenId], totalSupply(), block.number);
    }

    function harvestMultiple(uint[] calldata tokenIds) public{
        require(tokenIds.length > 0,"tokenIds");
        for(uint i = 0; i < tokenIds.length; i++){
            harvest(tokenIds[i]);
        }
    }


    function hashOf(uint _tokenId) public view returns(bytes32){
        require(isValidToken(_tokenId),"invalid");
        return tokens[_tokenId - 1];
    }
    function getEthContained(uint _tokenId) public view returns(uint){
        require(isValidToken(_tokenId),"invalid");
        return (tokens.length - _tokenId) * BASE_COST;
    }
    function getLastHash() public view returns(bytes32){
        return tokens[tokens.length - 1];
    }
    function getMiningState() public view returns(bytes32 _hash, uint _supply, uint _harvested, uint blockNumber){
        return (tokens[tokens.length - 1], totalSupply(), harvested, block.number);
    }


    function treeData(uint _tokenId) public view returns(bytes32 _hash, uint _supplyAtMint, uint _planted){
        require(isValidToken(_tokenId),"invalid");

        return (tokens[_tokenId - 1],supplyAtMint[_tokenId],tokens.length);
    }

    //////===721 Standard
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    //////===721 Implementation
    mapping(address => uint256) public balanceOf;
    mapping (uint256 => address) internal allowance;
    mapping (address => mapping (address => bool)) public isApprovedForAll;

    mapping(uint256 => address) owners;  //Mapping of owners

    //    METADATA VARS
    string public name = "Doomsday Garden";
    string public symbol = "TREE";

    address private __metadata;


    function _mint(uint _tokenId,address _to, bytes32 _hash) private{
        owners[_tokenId] = msg.sender;
        balanceOf[_to]++;

        tokens.push(_hash);
        emit Transfer(address(0),_to,_tokenId);
    }
    function _burn(uint _tokenId) private{
        address _owner = owners[_tokenId];

        balanceOf[ _owner ]--;
        delete owners[_tokenId];

        emit Transfer(_owner,address(0),_tokenId);
    }

    function isValidToken(uint256 _tokenId) internal view returns(bool){
        return owners[_tokenId] != address(0);
    }
    function ownerOf(uint256 _tokenId) public view returns(address){
        require(isValidToken(_tokenId),"invalid");
        return owners[_tokenId];
    }

    function approve(address _approved, uint256 _tokenId)  external{
        address _owner = ownerOf(_tokenId);
        require( _owner == msg.sender                    //Require Sender Owns Token
            || isApprovedForAll[_owner][msg.sender]                //  or is approved for all.
        ,"permission");

        emit Approval(_owner, _approved, _tokenId);

        allowance[_tokenId] = _approved;
    }
    function getApproved(uint256 _tokenId) external view returns (address) {
        require(isValidToken(_tokenId),"invalid");
        return allowance[_tokenId];
    }

    function setApprovalForAll(address _operator, bool _approved) external {
        emit ApprovalForAll(msg.sender,_operator, _approved);
        isApprovedForAll[msg.sender][_operator] = _approved;
    }


    function transferFrom(address _from, address _to, uint256 _tokenId) public {

        //Check Transferable
        //There is a token validity check in ownerOf
        address _owner = ownerOf(_tokenId);

        require ( _owner == msg.sender             //Require sender owns token
            //Doing the two below manually instead of referring to the external methods saves gas
            || allowance[_tokenId] == msg.sender      //or is approved for this token
            || isApprovedForAll[_owner][msg.sender]          //or is approved for all
        ,"permission");

        require(_owner == _from,"owner");
        require(_to != address(0),"zero");

        emit Transfer(_from, _to, _tokenId);

        owners[_tokenId] =_to;

        balanceOf[_from]--;
        balanceOf[_to]++;

        //Reset approved if there is one
        if(allowance[_tokenId] != address(0)){
            delete allowance[_tokenId];
        }
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) public {
        transferFrom(_from, _to, _tokenId);

        //Get size of "_to" address, if 0 it's a wallet
        uint32 size;
        assembly {
            size := extcodesize(_to)
        }
        if(size > 0){
            IERC721TokenReceiver receiver = IERC721TokenReceiver(_to);
            require(receiver.onERC721Received(msg.sender,_from,_tokenId,data) == bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")),"receiver");
        }
    }
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external {
        safeTransferFrom(_from,_to,_tokenId,"");
    }


    function tokenURI(uint256 _tokenId) public view returns (string memory){
        require(isValidToken(_tokenId),'tokenId');

        return DoomsdayGardenMetadata(__metadata).tokenURI(
                _tokenId,
                tokens[_tokenId-1],
                supplyAtMint[_tokenId],
                tokens.length);
    }


    function totalSupply() public view returns (uint256){
        return tokens.length - harvested;
    }


    ///////===165 Implementation
    mapping (bytes4 => bool) public supportsInterface;
    ///==End 165


    //Admin
    function setOwner(address newOwner) public{
        require(msg.sender == owner,"owner");
        owner = newOwner;
    }

    function setMetadata(address _metadata) public{
        require(msg.sender == owner,"owner");
        __metadata = _metadata;
    }

    function ownerWithdraw() public{
        require(msg.sender == owner,"owner");

        uint toWithdraw = (tokens.length - ownerWithdrawn - 1) * CREATOR_FEE ;
        require(toWithdraw > 0,"withdrawn");

        ownerWithdrawn = tokens.length - 1;

        payable(msg.sender).transfer(toWithdraw);

    }
}

File 2 of 4 : IERC721TokenReceiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.
interface IERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev 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.
    ///  Note: the contract address is always the message sender.
    /// @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 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    ///  unless throwing
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4);
}

File 3 of 4 : DoomsdayGardenMetadata.sol
// SPDX-License-Identifier: Please may I have some salad
pragma solidity ^0.8.9;

import "./interfaces/IERC721.sol";

contract DoomsdayGardenMetadata {
    string __uriBase;
    string __uriSuffix;

    address garden;

    constructor(address _garden,string memory _uriBase, string memory _uriSuffix){
        garden = _garden;

        __uriBase   = _uriBase;
        __uriSuffix = _uriSuffix;
    }


    function tokenURI(uint _tokenId,bytes32 _hash, uint _supplyAtMint, uint _planted) public view returns (string memory){
        //Validity check
        IERC721(garden).ownerOf(_tokenId);

        _hash;_supplyAtMint;_planted;

        uint _i = _tokenId;
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len;
        while (_i != 0) {
            k = k-1;
            uint8 temp = (48 + uint8(_i - _i / 10 * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }

        return string(abi.encodePacked(__uriBase,bstr,__uriSuffix));
    }
}

File 4 of 4 : IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x80ac58cd.
interface IERC721 /* is ERC165 */ {
    /// @dev This emits when ownership of any NFT changes by any mechanism.
    ///  This event emits when NFTs are created (`from` == 0) and destroyed
    ///  (`to` == 0). Exception: during contract creation, any number of NFTs
    ///  may be created and assigned without emitting Transfer. At the time of
    ///  any transfer, the approved address for that NFT (if any) is reset to none.
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

    /// @dev This emits when the approved address for an NFT is changed or
    ///  reaffirmed. The zero address indicates there is no approved address.
    ///  When a Transfer event emits, this also indicates that the approved
    ///  address for that NFT (if any) is reset to none.
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);

    /// @dev This emits when an operator is enabled or disabled for an owner.
    ///  The operator can manage all NFTs of the owner.
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    /// @notice Count all NFTs assigned to an owner
    /// @dev NFTs assigned to the zero address are considered invalid, and this
    ///  function throws for queries about the zero address.
    /// @param _owner An address for whom to query the balance
    /// @return The number of NFTs owned by `_owner`, possibly zero
    function balanceOf(address _owner) external view returns (uint256);

    /// @notice Find the owner of an NFT
    /// @dev NFTs assigned to zero address are considered invalid, and queries
    ///  about them do throw.
    /// @param _tokenId The identifier for an NFT
    /// @return The address of the owner of the NFT
    function ownerOf(uint256 _tokenId) external view returns (address);

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT. When transfer is complete, this function
    ///  checks if `_to` is a smart contract (code size > 0). If so, it calls
    ///  `onERC721Received` on `_to` and throws if the return value is not
    ///  `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    /// @param data Additional data with no specified format, sent in call to `_to`
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external;

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev This works identically to the other function with an extra data parameter,
    ///  except this function just sets data to "".
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external;

    /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
    ///  TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
    ///  THEY MAY BE PERMANENTLY LOST
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT.
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    /// @notice Change or reaffirm the approved address for an NFT
    /// @dev The zero address indicates there is no approved address.
    ///  Throws unless `msg.sender` is the current NFT owner, or an authorized
    ///  operator of the current owner.
    /// @param _approved The new approved NFT controller
    /// @param _tokenId The NFT to approve
    function approve(address _approved, uint256 _tokenId) external;

    /// @notice Enable or disable approval for a third party ("operator") to manage
    ///  all of `msg.sender`'s assets
    /// @dev Emits the ApprovalForAll event. The contract MUST allow
    ///  multiple operators per owner.
    /// @param _operator Address to add to the set of authorized operators
    /// @param _approved True if the operator is approved, false to revoke approval
    function setApprovalForAll(address _operator, bool _approved) external;

    /// @notice Get the approved address for a single NFT
    /// @dev Throws if `_tokenId` is not a valid NFT.
    /// @param _tokenId The NFT to find the approved address for
    /// @return The approved address for this NFT, or the zero address if there is none
    function getApproved(uint256 _tokenId) external view returns (address);

    /// @notice Query if an address is an authorized operator for another address
    /// @param _owner The address that owns the NFTs
    /// @param _operator The address that acts on behalf of the owner
    /// @return True if `_operator` is an approved operator for `_owner`, false otherwise
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"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":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_growth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_supplyAtMint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_planter","type":"address"},{"indexed":false,"internalType":"uint256","name":"_newSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"Plant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getEthContained","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningState","outputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_harvested","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"harvestMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"hashOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ownerWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"plant","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_metadata","type":"address"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyAtMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"treeData","outputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"uint256","name":"_supplyAtMint","type":"uint256"},{"internalType":"uint256","name":"_planted","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526040518060400160405280600f81526020017f446f6f6d736461792047617264656e0000000000000000000000000000000000815250600990805190602001906200005192919062000335565b506040518060400160405280600481526020017f5452454500000000000000000000000000000000000000000000000000000000815250600a90805190602001906200009f92919062000335565b50348015620000ad57600080fd5b506001600c60006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001fc6001336000801b6200020260201b60201c565b620004d1565b336008600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190620002a6906200041e565b91905055506000819080600181540180825580915050600190039060005260206000200160009091909190915055828273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b82805462000343906200049b565b90600052602060002090601f016020900481019282620003675760008555620003b3565b82601f106200038257805160ff1916838001178555620003b3565b82800160010185558215620003b3579182015b82811115620003b257825182559160200191906001019062000395565b5b509050620003c29190620003c6565b5090565b5b80821115620003e1576000816000905550600101620003c7565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006200042b8262000414565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620004615762000460620003e5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b457607f821691505b60208210811415620004cb57620004ca6200046c565b5b50919050565b61323080620004e16000396000f3fe6080604052600436106101c15760003560e01c80636352211e116100f7578063b88d4fde11610095578063d8c3697311610064578063d8c369731461066c578063ddc632621461069a578063e985e9c5146106c3578063f3cb838514610700576101c1565b8063b88d4fde146105bf578063c20615ed146105e8578063c383e22b14610613578063c87b56dd1461062f576101c1565b80637e551b75116100d15780637e551b75146105035780638da5cb5b1461054057806395d89b411461056b578063a22cb46514610596576101c1565b80636352211e1461044c57806370a08231146104895780637daa11e3146104c6576101c1565b8063218e0f73116101645780633f60bb5d1161013e5780633f60bb5d146103b657806342842e0e146103e15780634311de8f1461040a5780634a91004614610421576101c1565b8063218e0f73146103275780632340c6391461035057806323b872dd1461038d576101c1565b8063081812fc116101a0578063081812fc1461026d578063095ea7b3146102aa57806313af4035146102d357806318160ddd146102fc576101c1565b8062615e72146101c657806301ffc9a71461020557806306fdde0314610242575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612051565b610729565b6040516101fc939291906120a6565b60405180910390f35b34801561021157600080fd5b5061022c60048036038101906102279190612135565b6107c8565b604051610239919061217d565b60405180910390f35b34801561024e57600080fd5b506102576107e8565b6040516102649190612231565b60405180910390f35b34801561027957600080fd5b50610294600480360381019061028f9190612051565b610876565b6040516102a19190612294565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc91906122db565b6108fb565b005b3480156102df57600080fd5b506102fa60048036038101906102f5919061231b565b610ab9565b005b34801561030857600080fd5b50610311610b8d565b60405161031e9190612348565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906123c8565b610ba7565b005b34801561035c57600080fd5b5061037760048036038101906103729190612051565b610c35565b6040516103849190612348565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190612415565b610c4d565b005b3480156103c257600080fd5b506103cb61109b565b6040516103d89190612348565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190612415565b6110a1565b005b34801561041657600080fd5b5061041f6110c1565b005b34801561042d57600080fd5b5061043661122b565b6040516104439190612468565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e9190612051565b611261565b6040516104809190612294565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061231b565b6112e6565b6040516104bd9190612348565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190612051565b6112fe565b6040516104fa9190612348565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190612051565b611371565b6040516105379190612468565b60405180910390f35b34801561054c57600080fd5b506105556113ed565b6040516105629190612294565b60405180910390f35b34801561057757600080fd5b50610580611413565b60405161058d9190612231565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906124af565b6114a1565b005b3480156105cb57600080fd5b506105e660048036038101906105e1919061261f565b61159e565b005b3480156105f457600080fd5b506105fd6116fc565b60405161060a9190612348565b60405180910390f35b61062d60048036038101906106289190612051565b611702565b005b34801561063b57600080fd5b5061065660048036038101906106519190612051565b611918565b6040516106639190612231565b60405180910390f35b34801561067857600080fd5b50610681611a61565b60405161069194939291906126a2565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190612051565b611ab1565b005b3480156106cf57600080fd5b506106ea60048036038101906106e591906126e7565b611c44565b6040516106f7919061217d565b60405180910390f35b34801561070c57600080fd5b506107276004803603810190610722919061231b565b611c73565b005b600080600061073784611d47565b610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d90612773565b60405180910390fd5b600060018561078591906127c2565b81548110610796576107956127f6565b5b906000526020600020015460046000868152602001908152602001600020546000805490509250925092509193909250565b600c6020528060005260406000206000915054906101000a900460ff1681565b600980546107f590612854565b80601f016020809104026020016040519081016040528092919081815260200182805461082190612854565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b505050505081565b600061088182611d47565b6108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612773565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090682611261565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806109c85750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906128d2565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b409061293e565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600154600080549050610ba291906127c2565b905090565b60008282905011610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be4906129aa565b60405180910390fd5b60005b82829050811015610c3057610c1d838383818110610c1157610c106127f6565b5b90506020020135611ab1565b8080610c28906129ca565b915050610bf0565b505050565b60046020528060005260406000206000915090505481565b6000610c5882611261565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610cf257503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610d835750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db9906128d2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e279061293e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790612a5f565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f9d90612a7f565b9190505550600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610ff2906129ca565b9190505550600073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611095576006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b60015481565b6110bc8383836040518060200160405280600081525061159e565b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111489061293e565b60405180910390fd5b60006611c37937e08000600160025460008054905061117091906127c2565b61117a91906127c2565b6111849190612aa9565b9050600081116111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090612b4f565b60405180910390fd5b60016000805490506111db91906127c2565b6002819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611227573d6000803e3d6000fd5b5050565b600080600160008054905061124091906127c2565b81548110611251576112506127f6565b5b9060005260206000200154905090565b600061126c82611d47565b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290612773565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60056020528060005260406000206000915090505481565b600061130982611d47565b611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f90612773565b60405180910390fd5b6516bcc41e90008260008054905061136091906127c2565b61136a9190612aa9565b9050919050565b600061137c82611d47565b6113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290612773565b60405180910390fd5b60006001836113ca91906127c2565b815481106113db576113da6127f6565b5b90600052602060002001549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a805461142090612854565b80601f016020809104026020016040519081016040528092919081815260200182805461144c90612854565b80156114995780601f1061146e57610100808354040283529160200191611499565b820191906000526020600020905b81548152906001019060200180831161147c57829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114fe919061217d565b60405180910390a380600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115a9848484610c4d565b6000833b905060008163ffffffff1611156116f55760008490507f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b81526004016116429493929190612bc4565b602060405180830381600087803b15801561165c57600080fd5b505af1158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190612c25565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90612c9e565b60405180910390fd5b505b5050505050565b60025481565b600060016000805490506117169190612cbe565b90506000611722610b8d565b90506000816113886117349190612aa9565b62e4e1c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117639190612d43565b61176d91906127c2565b905060006611c37937e08000836516bcc41e900061178b9190612aa9565b6117959190612cbe565b9050600033600060016000805490506117ae91906127c2565b815481106117bf576117be6127f6565b5b9060005260206000200154876040516020016117dd93929190612dfe565b604051602081830303815290604052805190602001209050828160001c1061183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190612e87565b60405180910390fd5b81341461187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390612ef3565b60405180910390fd5b83600460008781526020019081526020016000208190555080426040516020016118a7929190612f13565b6040516020818303038152906040528051906020012090506118ca853383611db3565b7ff5f58f382f1f118117f43fff04f628fa40f28606dae96f4201f4d7ef1b570bc18582336118f6610b8d565b43604051611908959493929190612f3f565b60405180910390a1505050505050565b606061192382611d47565b611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990612fde565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631600e3488360006001866119b091906127c2565b815481106119c1576119c06127f6565b5b906000526020600020015460046000878152602001908152602001600020546000805490506040518563ffffffff1660e01b8152600401611a059493929190612ffe565b60006040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a5a91906130e4565b9050919050565b60008060008060006001600080549050611a7b91906127c2565b81548110611a8c57611a8b6127f6565b5b9060005260206000200154611a9f610b8d565b60015443935093509350935090919293565b611aba81611261565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90613179565b60405180910390fd5b600081600080549050611b3a91906127c2565b905060006516bcc41e900082611b509190612aa9565b905060016000815480929190611b65906129ca565b9190505550611b7383611ee4565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611bb9573d6000803e3d6000fd5b507ffbbffffeabef452ab6027d4de83615fa3e483405824c5abdabab23133ac5878a836000600186611beb91906127c2565b81548110611bfc57611bfb6127f6565b5b9060005260206000200154846004600088815260200190815260200160002054611c24610b8d565b43604051611c3796959493929190613199565b60405180910390a1505050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa9061293e565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b336008600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611e55906129ca565b91905055506000819080600181540180825580915050600190039060005260206000200160009091909190915055828273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f6c90612a7f565b91905055506008600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61202e8161201b565b811461203957600080fd5b50565b60008135905061204b81612025565b92915050565b60006020828403121561206757612066612011565b5b60006120758482850161203c565b91505092915050565b6000819050919050565b6120918161207e565b82525050565b6120a08161201b565b82525050565b60006060820190506120bb6000830186612088565b6120c86020830185612097565b6120d56040830184612097565b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612112816120dd565b811461211d57600080fd5b50565b60008135905061212f81612109565b92915050565b60006020828403121561214b5761214a612011565b5b600061215984828501612120565b91505092915050565b60008115159050919050565b61217781612162565b82525050565b6000602082019050612192600083018461216e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121d25780820151818401526020810190506121b7565b838111156121e1576000848401525b50505050565b6000601f19601f8301169050919050565b600061220382612198565b61220d81856121a3565b935061221d8185602086016121b4565b612226816121e7565b840191505092915050565b6000602082019050818103600083015261224b81846121f8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061227e82612253565b9050919050565b61228e81612273565b82525050565b60006020820190506122a96000830184612285565b92915050565b6122b881612273565b81146122c357600080fd5b50565b6000813590506122d5816122af565b92915050565b600080604083850312156122f2576122f1612011565b5b6000612300858286016122c6565b92505060206123118582860161203c565b9150509250929050565b60006020828403121561233157612330612011565b5b600061233f848285016122c6565b91505092915050565b600060208201905061235d6000830184612097565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261238857612387612363565b5b8235905067ffffffffffffffff8111156123a5576123a4612368565b5b6020830191508360208202830111156123c1576123c061236d565b5b9250929050565b600080602083850312156123df576123de612011565b5b600083013567ffffffffffffffff8111156123fd576123fc612016565b5b61240985828601612372565b92509250509250929050565b60008060006060848603121561242e5761242d612011565b5b600061243c868287016122c6565b935050602061244d868287016122c6565b925050604061245e8682870161203c565b9150509250925092565b600060208201905061247d6000830184612088565b92915050565b61248c81612162565b811461249757600080fd5b50565b6000813590506124a981612483565b92915050565b600080604083850312156124c6576124c5612011565b5b60006124d4858286016122c6565b92505060206124e58582860161249a565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61252c826121e7565b810181811067ffffffffffffffff8211171561254b5761254a6124f4565b5b80604052505050565b600061255e612007565b905061256a8282612523565b919050565b600067ffffffffffffffff82111561258a576125896124f4565b5b612593826121e7565b9050602081019050919050565b82818337600083830152505050565b60006125c26125bd8461256f565b612554565b9050828152602081018484840111156125de576125dd6124ef565b5b6125e98482856125a0565b509392505050565b600082601f83011261260657612605612363565b5b81356126168482602086016125af565b91505092915050565b6000806000806080858703121561263957612638612011565b5b6000612647878288016122c6565b9450506020612658878288016122c6565b93505060406126698782880161203c565b925050606085013567ffffffffffffffff81111561268a57612689612016565b5b612696878288016125f1565b91505092959194509250565b60006080820190506126b76000830187612088565b6126c46020830186612097565b6126d16040830185612097565b6126de6060830184612097565b95945050505050565b600080604083850312156126fe576126fd612011565b5b600061270c858286016122c6565b925050602061271d858286016122c6565b9150509250929050565b7f696e76616c696400000000000000000000000000000000000000000000000000600082015250565b600061275d6007836121a3565b915061276882612727565b602082019050919050565b6000602082019050818103600083015261278c81612750565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127cd8261201b565b91506127d88361201b565b9250828210156127eb576127ea612793565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061286c57607f821691505b602082108114156128805761287f612825565b5b50919050565b7f7065726d697373696f6e00000000000000000000000000000000000000000000600082015250565b60006128bc600a836121a3565b91506128c782612886565b602082019050919050565b600060208201905081810360008301526128eb816128af565b9050919050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b60006129286005836121a3565b9150612933826128f2565b602082019050919050565b600060208201905081810360008301526129578161291b565b9050919050565b7f746f6b656e496473000000000000000000000000000000000000000000000000600082015250565b60006129946008836121a3565b915061299f8261295e565b602082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b60006129d58261201b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a0857612a07612793565b5b600182019050919050565b7f7a65726f00000000000000000000000000000000000000000000000000000000600082015250565b6000612a496004836121a3565b9150612a5482612a13565b602082019050919050565b60006020820190508181036000830152612a7881612a3c565b9050919050565b6000612a8a8261201b565b91506000821415612a9e57612a9d612793565b5b600182039050919050565b6000612ab48261201b565b9150612abf8361201b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612af857612af7612793565b5b828202905092915050565b7f77697468647261776e0000000000000000000000000000000000000000000000600082015250565b6000612b396009836121a3565b9150612b4482612b03565b602082019050919050565b60006020820190508181036000830152612b6881612b2c565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612b9682612b6f565b612ba08185612b7a565b9350612bb08185602086016121b4565b612bb9816121e7565b840191505092915050565b6000608082019050612bd96000830187612285565b612be66020830186612285565b612bf36040830185612097565b8181036060830152612c058184612b8b565b905095945050505050565b600081519050612c1f81612109565b92915050565b600060208284031215612c3b57612c3a612011565b5b6000612c4984828501612c10565b91505092915050565b7f7265636569766572000000000000000000000000000000000000000000000000600082015250565b6000612c886008836121a3565b9150612c9382612c52565b602082019050919050565b60006020820190508181036000830152612cb781612c7b565b9050919050565b6000612cc98261201b565b9150612cd48361201b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d0957612d08612793565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d4e8261201b565b9150612d598361201b565b925082612d6957612d68612d14565b5b828204905092915050565b60008160601b9050919050565b6000612d8c82612d74565b9050919050565b6000612d9e82612d81565b9050919050565b612db6612db182612273565b612d93565b82525050565b6000819050919050565b612dd7612dd28261207e565b612dbc565b82525050565b6000819050919050565b612df8612df38261201b565b612ddd565b82525050565b6000612e0a8286612da5565b601482019150612e1a8285612dc6565b602082019150612e2a8284612de7565b602082019150819050949350505050565b7f646966666963756c747900000000000000000000000000000000000000000000600082015250565b6000612e71600a836121a3565b9150612e7c82612e3b565b602082019050919050565b60006020820190508181036000830152612ea081612e64565b9050919050565b7f636f737400000000000000000000000000000000000000000000000000000000600082015250565b6000612edd6004836121a3565b9150612ee882612ea7565b602082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b6000612f1f8285612dc6565b602082019150612f2f8284612de7565b6020820191508190509392505050565b600060a082019050612f546000830188612097565b612f616020830187612088565b612f6e6040830186612285565b612f7b6060830185612097565b612f886080830184612097565b9695505050505050565b7f746f6b656e496400000000000000000000000000000000000000000000000000600082015250565b6000612fc86007836121a3565b9150612fd382612f92565b602082019050919050565b60006020820190508181036000830152612ff781612fbb565b9050919050565b60006080820190506130136000830187612097565b6130206020830186612088565b61302d6040830185612097565b61303a6060830184612097565b95945050505050565b600067ffffffffffffffff82111561305e5761305d6124f4565b5b613067826121e7565b9050602081019050919050565b600061308761308284613043565b612554565b9050828152602081018484840111156130a3576130a26124ef565b5b6130ae8482856121b4565b509392505050565b600082601f8301126130cb576130ca612363565b5b81516130db848260208601613074565b91505092915050565b6000602082840312156130fa576130f9612011565b5b600082015167ffffffffffffffff81111561311857613117612016565b5b613124848285016130b6565b91505092915050565b7f6f776e65724f6600000000000000000000000000000000000000000000000000600082015250565b60006131636007836121a3565b915061316e8261312d565b602082019050919050565b6000602082019050818103600083015261319281613156565b9050919050565b600060c0820190506131ae6000830189612097565b6131bb6020830188612088565b6131c86040830187612097565b6131d56060830186612097565b6131e26080830185612097565b6131ef60a0830184612097565b97965050505050505056fea26469706673582212206117c15a8beb9478e2013127b4e205d211a8f31c7e596e5d9533f43fe964ede564736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101c15760003560e01c80636352211e116100f7578063b88d4fde11610095578063d8c3697311610064578063d8c369731461066c578063ddc632621461069a578063e985e9c5146106c3578063f3cb838514610700576101c1565b8063b88d4fde146105bf578063c20615ed146105e8578063c383e22b14610613578063c87b56dd1461062f576101c1565b80637e551b75116100d15780637e551b75146105035780638da5cb5b1461054057806395d89b411461056b578063a22cb46514610596576101c1565b80636352211e1461044c57806370a08231146104895780637daa11e3146104c6576101c1565b8063218e0f73116101645780633f60bb5d1161013e5780633f60bb5d146103b657806342842e0e146103e15780634311de8f1461040a5780634a91004614610421576101c1565b8063218e0f73146103275780632340c6391461035057806323b872dd1461038d576101c1565b8063081812fc116101a0578063081812fc1461026d578063095ea7b3146102aa57806313af4035146102d357806318160ddd146102fc576101c1565b8062615e72146101c657806301ffc9a71461020557806306fdde0314610242575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612051565b610729565b6040516101fc939291906120a6565b60405180910390f35b34801561021157600080fd5b5061022c60048036038101906102279190612135565b6107c8565b604051610239919061217d565b60405180910390f35b34801561024e57600080fd5b506102576107e8565b6040516102649190612231565b60405180910390f35b34801561027957600080fd5b50610294600480360381019061028f9190612051565b610876565b6040516102a19190612294565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc91906122db565b6108fb565b005b3480156102df57600080fd5b506102fa60048036038101906102f5919061231b565b610ab9565b005b34801561030857600080fd5b50610311610b8d565b60405161031e9190612348565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906123c8565b610ba7565b005b34801561035c57600080fd5b5061037760048036038101906103729190612051565b610c35565b6040516103849190612348565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190612415565b610c4d565b005b3480156103c257600080fd5b506103cb61109b565b6040516103d89190612348565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190612415565b6110a1565b005b34801561041657600080fd5b5061041f6110c1565b005b34801561042d57600080fd5b5061043661122b565b6040516104439190612468565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e9190612051565b611261565b6040516104809190612294565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061231b565b6112e6565b6040516104bd9190612348565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190612051565b6112fe565b6040516104fa9190612348565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190612051565b611371565b6040516105379190612468565b60405180910390f35b34801561054c57600080fd5b506105556113ed565b6040516105629190612294565b60405180910390f35b34801561057757600080fd5b50610580611413565b60405161058d9190612231565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906124af565b6114a1565b005b3480156105cb57600080fd5b506105e660048036038101906105e1919061261f565b61159e565b005b3480156105f457600080fd5b506105fd6116fc565b60405161060a9190612348565b60405180910390f35b61062d60048036038101906106289190612051565b611702565b005b34801561063b57600080fd5b5061065660048036038101906106519190612051565b611918565b6040516106639190612231565b60405180910390f35b34801561067857600080fd5b50610681611a61565b60405161069194939291906126a2565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190612051565b611ab1565b005b3480156106cf57600080fd5b506106ea60048036038101906106e591906126e7565b611c44565b6040516106f7919061217d565b60405180910390f35b34801561070c57600080fd5b506107276004803603810190610722919061231b565b611c73565b005b600080600061073784611d47565b610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d90612773565b60405180910390fd5b600060018561078591906127c2565b81548110610796576107956127f6565b5b906000526020600020015460046000868152602001908152602001600020546000805490509250925092509193909250565b600c6020528060005260406000206000915054906101000a900460ff1681565b600980546107f590612854565b80601f016020809104026020016040519081016040528092919081815260200182805461082190612854565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b505050505081565b600061088182611d47565b6108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612773565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090682611261565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806109c85750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906128d2565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b409061293e565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600154600080549050610ba291906127c2565b905090565b60008282905011610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be4906129aa565b60405180910390fd5b60005b82829050811015610c3057610c1d838383818110610c1157610c106127f6565b5b90506020020135611ab1565b8080610c28906129ca565b915050610bf0565b505050565b60046020528060005260406000206000915090505481565b6000610c5882611261565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610cf257503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610d835750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db9906128d2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e279061293e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790612a5f565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f9d90612a7f565b9190505550600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610ff2906129ca565b9190505550600073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611095576006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b60015481565b6110bc8383836040518060200160405280600081525061159e565b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111489061293e565b60405180910390fd5b60006611c37937e08000600160025460008054905061117091906127c2565b61117a91906127c2565b6111849190612aa9565b9050600081116111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090612b4f565b60405180910390fd5b60016000805490506111db91906127c2565b6002819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611227573d6000803e3d6000fd5b5050565b600080600160008054905061124091906127c2565b81548110611251576112506127f6565b5b9060005260206000200154905090565b600061126c82611d47565b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290612773565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60056020528060005260406000206000915090505481565b600061130982611d47565b611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f90612773565b60405180910390fd5b6516bcc41e90008260008054905061136091906127c2565b61136a9190612aa9565b9050919050565b600061137c82611d47565b6113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290612773565b60405180910390fd5b60006001836113ca91906127c2565b815481106113db576113da6127f6565b5b90600052602060002001549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a805461142090612854565b80601f016020809104026020016040519081016040528092919081815260200182805461144c90612854565b80156114995780601f1061146e57610100808354040283529160200191611499565b820191906000526020600020905b81548152906001019060200180831161147c57829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114fe919061217d565b60405180910390a380600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115a9848484610c4d565b6000833b905060008163ffffffff1611156116f55760008490507f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b81526004016116429493929190612bc4565b602060405180830381600087803b15801561165c57600080fd5b505af1158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190612c25565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90612c9e565b60405180910390fd5b505b5050505050565b60025481565b600060016000805490506117169190612cbe565b90506000611722610b8d565b90506000816113886117349190612aa9565b62e4e1c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117639190612d43565b61176d91906127c2565b905060006611c37937e08000836516bcc41e900061178b9190612aa9565b6117959190612cbe565b9050600033600060016000805490506117ae91906127c2565b815481106117bf576117be6127f6565b5b9060005260206000200154876040516020016117dd93929190612dfe565b604051602081830303815290604052805190602001209050828160001c1061183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190612e87565b60405180910390fd5b81341461187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390612ef3565b60405180910390fd5b83600460008781526020019081526020016000208190555080426040516020016118a7929190612f13565b6040516020818303038152906040528051906020012090506118ca853383611db3565b7ff5f58f382f1f118117f43fff04f628fa40f28606dae96f4201f4d7ef1b570bc18582336118f6610b8d565b43604051611908959493929190612f3f565b60405180910390a1505050505050565b606061192382611d47565b611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990612fde565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631600e3488360006001866119b091906127c2565b815481106119c1576119c06127f6565b5b906000526020600020015460046000878152602001908152602001600020546000805490506040518563ffffffff1660e01b8152600401611a059493929190612ffe565b60006040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a5a91906130e4565b9050919050565b60008060008060006001600080549050611a7b91906127c2565b81548110611a8c57611a8b6127f6565b5b9060005260206000200154611a9f610b8d565b60015443935093509350935090919293565b611aba81611261565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90613179565b60405180910390fd5b600081600080549050611b3a91906127c2565b905060006516bcc41e900082611b509190612aa9565b905060016000815480929190611b65906129ca565b9190505550611b7383611ee4565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611bb9573d6000803e3d6000fd5b507ffbbffffeabef452ab6027d4de83615fa3e483405824c5abdabab23133ac5878a836000600186611beb91906127c2565b81548110611bfc57611bfb6127f6565b5b9060005260206000200154846004600088815260200190815260200160002054611c24610b8d565b43604051611c3796959493929190613199565b60405180910390a1505050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa9061293e565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b336008600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611e55906129ca565b91905055506000819080600181540180825580915050600190039060005260206000200160009091909190915055828273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f6c90612a7f565b91905055506008600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61202e8161201b565b811461203957600080fd5b50565b60008135905061204b81612025565b92915050565b60006020828403121561206757612066612011565b5b60006120758482850161203c565b91505092915050565b6000819050919050565b6120918161207e565b82525050565b6120a08161201b565b82525050565b60006060820190506120bb6000830186612088565b6120c86020830185612097565b6120d56040830184612097565b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612112816120dd565b811461211d57600080fd5b50565b60008135905061212f81612109565b92915050565b60006020828403121561214b5761214a612011565b5b600061215984828501612120565b91505092915050565b60008115159050919050565b61217781612162565b82525050565b6000602082019050612192600083018461216e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121d25780820151818401526020810190506121b7565b838111156121e1576000848401525b50505050565b6000601f19601f8301169050919050565b600061220382612198565b61220d81856121a3565b935061221d8185602086016121b4565b612226816121e7565b840191505092915050565b6000602082019050818103600083015261224b81846121f8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061227e82612253565b9050919050565b61228e81612273565b82525050565b60006020820190506122a96000830184612285565b92915050565b6122b881612273565b81146122c357600080fd5b50565b6000813590506122d5816122af565b92915050565b600080604083850312156122f2576122f1612011565b5b6000612300858286016122c6565b92505060206123118582860161203c565b9150509250929050565b60006020828403121561233157612330612011565b5b600061233f848285016122c6565b91505092915050565b600060208201905061235d6000830184612097565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261238857612387612363565b5b8235905067ffffffffffffffff8111156123a5576123a4612368565b5b6020830191508360208202830111156123c1576123c061236d565b5b9250929050565b600080602083850312156123df576123de612011565b5b600083013567ffffffffffffffff8111156123fd576123fc612016565b5b61240985828601612372565b92509250509250929050565b60008060006060848603121561242e5761242d612011565b5b600061243c868287016122c6565b935050602061244d868287016122c6565b925050604061245e8682870161203c565b9150509250925092565b600060208201905061247d6000830184612088565b92915050565b61248c81612162565b811461249757600080fd5b50565b6000813590506124a981612483565b92915050565b600080604083850312156124c6576124c5612011565b5b60006124d4858286016122c6565b92505060206124e58582860161249a565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61252c826121e7565b810181811067ffffffffffffffff8211171561254b5761254a6124f4565b5b80604052505050565b600061255e612007565b905061256a8282612523565b919050565b600067ffffffffffffffff82111561258a576125896124f4565b5b612593826121e7565b9050602081019050919050565b82818337600083830152505050565b60006125c26125bd8461256f565b612554565b9050828152602081018484840111156125de576125dd6124ef565b5b6125e98482856125a0565b509392505050565b600082601f83011261260657612605612363565b5b81356126168482602086016125af565b91505092915050565b6000806000806080858703121561263957612638612011565b5b6000612647878288016122c6565b9450506020612658878288016122c6565b93505060406126698782880161203c565b925050606085013567ffffffffffffffff81111561268a57612689612016565b5b612696878288016125f1565b91505092959194509250565b60006080820190506126b76000830187612088565b6126c46020830186612097565b6126d16040830185612097565b6126de6060830184612097565b95945050505050565b600080604083850312156126fe576126fd612011565b5b600061270c858286016122c6565b925050602061271d858286016122c6565b9150509250929050565b7f696e76616c696400000000000000000000000000000000000000000000000000600082015250565b600061275d6007836121a3565b915061276882612727565b602082019050919050565b6000602082019050818103600083015261278c81612750565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127cd8261201b565b91506127d88361201b565b9250828210156127eb576127ea612793565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061286c57607f821691505b602082108114156128805761287f612825565b5b50919050565b7f7065726d697373696f6e00000000000000000000000000000000000000000000600082015250565b60006128bc600a836121a3565b91506128c782612886565b602082019050919050565b600060208201905081810360008301526128eb816128af565b9050919050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b60006129286005836121a3565b9150612933826128f2565b602082019050919050565b600060208201905081810360008301526129578161291b565b9050919050565b7f746f6b656e496473000000000000000000000000000000000000000000000000600082015250565b60006129946008836121a3565b915061299f8261295e565b602082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b60006129d58261201b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a0857612a07612793565b5b600182019050919050565b7f7a65726f00000000000000000000000000000000000000000000000000000000600082015250565b6000612a496004836121a3565b9150612a5482612a13565b602082019050919050565b60006020820190508181036000830152612a7881612a3c565b9050919050565b6000612a8a8261201b565b91506000821415612a9e57612a9d612793565b5b600182039050919050565b6000612ab48261201b565b9150612abf8361201b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612af857612af7612793565b5b828202905092915050565b7f77697468647261776e0000000000000000000000000000000000000000000000600082015250565b6000612b396009836121a3565b9150612b4482612b03565b602082019050919050565b60006020820190508181036000830152612b6881612b2c565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612b9682612b6f565b612ba08185612b7a565b9350612bb08185602086016121b4565b612bb9816121e7565b840191505092915050565b6000608082019050612bd96000830187612285565b612be66020830186612285565b612bf36040830185612097565b8181036060830152612c058184612b8b565b905095945050505050565b600081519050612c1f81612109565b92915050565b600060208284031215612c3b57612c3a612011565b5b6000612c4984828501612c10565b91505092915050565b7f7265636569766572000000000000000000000000000000000000000000000000600082015250565b6000612c886008836121a3565b9150612c9382612c52565b602082019050919050565b60006020820190508181036000830152612cb781612c7b565b9050919050565b6000612cc98261201b565b9150612cd48361201b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d0957612d08612793565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d4e8261201b565b9150612d598361201b565b925082612d6957612d68612d14565b5b828204905092915050565b60008160601b9050919050565b6000612d8c82612d74565b9050919050565b6000612d9e82612d81565b9050919050565b612db6612db182612273565b612d93565b82525050565b6000819050919050565b612dd7612dd28261207e565b612dbc565b82525050565b6000819050919050565b612df8612df38261201b565b612ddd565b82525050565b6000612e0a8286612da5565b601482019150612e1a8285612dc6565b602082019150612e2a8284612de7565b602082019150819050949350505050565b7f646966666963756c747900000000000000000000000000000000000000000000600082015250565b6000612e71600a836121a3565b9150612e7c82612e3b565b602082019050919050565b60006020820190508181036000830152612ea081612e64565b9050919050565b7f636f737400000000000000000000000000000000000000000000000000000000600082015250565b6000612edd6004836121a3565b9150612ee882612ea7565b602082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b6000612f1f8285612dc6565b602082019150612f2f8284612de7565b6020820191508190509392505050565b600060a082019050612f546000830188612097565b612f616020830187612088565b612f6e6040830186612285565b612f7b6060830185612097565b612f886080830184612097565b9695505050505050565b7f746f6b656e496400000000000000000000000000000000000000000000000000600082015250565b6000612fc86007836121a3565b9150612fd382612f92565b602082019050919050565b60006020820190508181036000830152612ff781612fbb565b9050919050565b60006080820190506130136000830187612097565b6130206020830186612088565b61302d6040830185612097565b61303a6060830184612097565b95945050505050565b600067ffffffffffffffff82111561305e5761305d6124f4565b5b613067826121e7565b9050602081019050919050565b600061308761308284613043565b612554565b9050828152602081018484840111156130a3576130a26124ef565b5b6130ae8482856121b4565b509392505050565b600082601f8301126130cb576130ca612363565b5b81516130db848260208601613074565b91505092915050565b6000602082840312156130fa576130f9612011565b5b600082015167ffffffffffffffff81111561311857613117612016565b5b613124848285016130b6565b91505092915050565b7f6f776e65724f6600000000000000000000000000000000000000000000000000600082015250565b60006131636007836121a3565b915061316e8261312d565b602082019050919050565b6000602082019050818103600083015261319281613156565b9050919050565b600060c0820190506131ae6000830189612097565b6131bb6020830188612088565b6131c86040830187612097565b6131d56060830186612097565b6131e26080830185612097565b6131ef60a0830184612097565b97965050505050505056fea26469706673582212206117c15a8beb9478e2013127b4e205d211a8f31c7e596e5d9533f43fe964ede564736f6c63430008090033

Loading...
Loading
Loading...
Loading
[ 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.