Contract 0x73cC407fbAE89D69F20Cf15D51aA98171DC5703C 4

 
 
Txn Hash
Method
Block
From
To
Value
0xb6e65a4c22a1b96b20af019b06123f822b7779783cad8c320a03297084315b23Withdraw147118192022-05-04 15:47:10107 days 7 hrs ago0x84bd63b532565d71f169807e7721d25c85297e66 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.00145375 47.39540756
0xd7f938adc86d646e9b5833f87b891649eb3b1c937944669f4ddb687e3a117773Transfer147117872022-05-04 15:40:44107 days 8 hrs ago0x84bd63b532565d71f169807e7721d25c85297e66 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0.004 Ether0.00928901 54.85911338
0xadb13552b6359e18606c37b867834fbb13bce696f90627dbe97455f46f8c9147Withdraw147117442022-05-04 15:31:40107 days 8 hrs ago0x84bd63b532565d71f169807e7721d25c85297e66 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.00202925 66.15776297
0x4533e9105ec6e23670646d80a93d0d8eed1a74b04d25c30c79e0ae6b82e15286Withdraw147117352022-05-04 15:28:34107 days 8 hrs ago0x84bd63b532565d71f169807e7721d25c85297e66 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.00192163 62.64921089
0x08d2fd388ea9b6255f9f117731cde48a2f6aea8879f75a51766925c5e3ccc574Withdraw147117262022-05-04 15:25:38107 days 8 hrs ago0x84bd63b532565d71f169807e7721d25c85297e66 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.00157101 51.21808465
0xddd7007ce68a9af12bf5ce6dffbe81bb9fa7bac064d02b8d7e68130fd68b07eaClaim Ownership147116922022-05-04 15:18:19107 days 8 hrs ago0x84bd63b532565d71f169807e7721d25c85297e66 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.00168875 58.41838957
0xf50eb5e41fc3dbbc8399c1fe4b7472501565944bdf83ebfeb7cac8c67e1d260aTransfer128934152021-07-25 4:43:51390 days 19 hrs ago0x779b9c0b306187bbe3444b22f1c748b6305ca34a IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0.0021 Ether0.0018625711
0x8f7d313738f22c314a790df105373629bfeb102f2df3966e61c8977d6ebe955aTransfer127232592021-06-28 15:17:59417 days 8 hrs ago0x3e451f7d259e20b41c5b1f9922115e1b7c2a14fd IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0.00205338 Ether0.00356439.6
0xc6c062d67f2416e75260b394048b30e95a5431e5c1e24d1a38eeb3f8729d724aSafe Transfer Fr...124926422021-05-23 20:09:29453 days 3 hrs ago0xd5f7210b76f827e09c6c67f8bcbfcc3c72aa6df8 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.00411364138
0x2a5af8735b73e8677b5bbd2acc988de9485bcb91bbfe7ec7ef041bbc8dd34868Set Approval For...120591992021-03-17 23:35:20520 days 9 mins ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.00732695161.7
0x05098821b6f7a80db619172b0eb8a837a2917291427bde4406a18b68c120fd64Set Approval For...120591972021-03-17 23:35:00520 days 9 mins ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.00732695161.7
0xa53119d79e884653f44bf2e5e04a6c3f1aaad2e7462da285e12f589a536c0a3fTransfer120590562021-03-17 23:03:49520 days 40 mins ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0.25307 Ether0.02238375150
0x6bf7a80ec276fa2ed73eb943e8af39d5b6231eedbe84e401fa597302238b0d52Deposit ERC20120490752021-03-16 10:24:20521 days 13 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.01632667144.535
0x4bb1a3c9b6cb0533c7aa763cff05747759f52106b22fcb350132b90fb25a800fTransfer From115316622020-12-26 21:10:40601 days 2 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.0055520154
0x1e7b23906fcc7fc09d44e0a116c7b881a76777495b9d41dc6a9cbaa876d765eeAdd Token Data115316022020-12-26 20:57:31601 days 2 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.0116390358
0x293d51d5738a679e1aea83b66233f9c8d2b5addd1973f379ffc90f5d535d0599Transfer115312662020-12-26 19:38:42601 days 4 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0.0021 Ether0.006565944
0xede3dbb04193ab76994ece7b7e55ba7eaa101b316c921a62247da069dd2581eeTransfer From113583402020-11-30 6:04:06627 days 17 hrs ago0xd4c8a26c83411c78110cc54c810fe12d11f33704 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.0011129113.31
0xa60541dbe0398853f1c2eb8fdb92f52e8c5b303d3a50531329126c5429e31d50Safe Transfer Fr...113540822020-11-29 14:07:20628 days 9 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.00201318.899687
0xd7bb3599ae239867ab474d04cead7170cac31293900a27f4c0df62106a34ca31Add Token Data113540682020-11-29 14:04:46628 days 9 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.0031231717
0xc34f5e88598163b013e33f7c954e2b97d11a7573d4d714a4f4e3b5680b296453Deposit ERC20113540192020-11-29 13:52:02628 days 9 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.0016665313
0x6984c45da77c480e503e552d23c2d978b21dd58cdfcd9ccaa1035ef8563e80f0Transfer113539732020-11-29 13:39:57628 days 10 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0.02307 Ether0.0018056212.1
0xe7e59c0c8d496612dd959b22f54926173ffa28869b05a86bdf581da58188b3e9Transfer113348722020-11-26 15:36:35631 days 8 hrs agoENS Name ethdev.etherbase.eth IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0.001 Ether0.0004634722
0xc4569554fe954d32309b2d153f9ebd9634af4671c2db9986de25c4602a1be2a5Transfer From112610942020-11-15 7:38:24642 days 16 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.0013365913.00000145
0xb43583e3dd34288b544e103f5a6b90dad6926577a67367d34e921b00a592b2beTransfer112610842020-11-15 7:36:37642 days 16 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0.0307 Ether0.0025517417.1
0x77a2b94af8afe6843d4b891e064f579ce638f224884132631cdf0fbb0a9c3b1aTransfer From112610672020-11-15 7:33:26642 days 16 hrs ago0xa1952db7d21e45c49a768c7ca143167abda54660 IN  0x73cc407fbae89d69f20cf15d51aa98171dc5703c0 Ether0.001541515
[ Download CSV Export 
Latest 4 internal transactions
Parent Txn Hash Block From To Value
0xb6e65a4c22a1b96b20af019b06123f822b7779783cad8c320a03297084315b23147118192022-05-04 15:47:10107 days 7 hrs ago 0x73cc407fbae89d69f20cf15d51aa98171dc5703c0x84bd63b532565d71f169807e7721d25c85297e660.25 Ether
0xadb13552b6359e18606c37b867834fbb13bce696f90627dbe97455f46f8c9147147117442022-05-04 15:31:40107 days 8 hrs ago 0x73cc407fbae89d69f20cf15d51aa98171dc5703c0x84bd63b532565d71f169807e7721d25c85297e660.25 Ether
0x4533e9105ec6e23670646d80a93d0d8eed1a74b04d25c30c79e0ae6b82e15286147117352022-05-04 15:28:34107 days 8 hrs ago 0x73cc407fbae89d69f20cf15d51aa98171dc5703c0x84bd63b532565d71f169807e7721d25c85297e660.25 Ether
0x08d2fd388ea9b6255f9f117731cde48a2f6aea8879f75a51766925c5e3ccc574147117262022-05-04 15:25:38107 days 8 hrs ago 0x73cc407fbae89d69f20cf15d51aa98171dc5703c0x84bd63b532565d71f169807e7721d25c85297e660.25 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SecurityFundToken

Compiler Version
v0.4.26+commit.4563c3fc

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-01-01
*/

/**
 

*/

pragma solidity ^0.4.26;


/**
* WHAT IS SecurityFundToken?   A tokenjar that holds erc20 and or Data as enabled
 * SecurityToken is for general ethereum NFT token use; NFT Block Chain Token, URL link, Ethereum Interface,
 *                                      Data Rewrite possible, On Chain Data Storage, Transfer of Token, Erc20_Jar
 * 
 *      Pay to Recieve token     Individual Token Optimization   Security Useage
 * 
 * Contract for SFT tokens
 *                      How to Use:
 *                              Send Ether to Contract Address Min amount 0.002 ETH 
 *                              Automatically recieve 1 SET Token to payee address, Inventory Number as next Minted
 *                              Add Token Information with addTokenData function (with contract write)
 *                                      any Information / Data can be written to Chain
 *                              Transfer via SafeTransfers (with contract write)
 *                      Store Erc20 send and recieve the SecurityFundToken with Erc20s inside 
 *         
 *      Similar Token  0xc9c77B0c2EE79CEc54B3aF7039f8a7bC684e48bD or 0x9cb151054ab13fa715F170c731A9705236e0a537
**/
/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {


    /**
     * @dev Multiplies two numbers, throws on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }


        c = a * b;
        assert(c / a == b);
        return c;
    }


    /**
     * @dev Integer division of two numbers, truncating the quotient.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }


    /**
     * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }


    /**
     * @dev Adds two numbers, throws on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        assert(c >= a);
        return c;
    }
}




/**
 * Utility library of inline functions on addresses
 */
library AddressUtils {


    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     *  as the code is not actually created until after the constructor finishes.
     * @param addr address to check
     * @return whether the target address is a contract
     */
    function isContract(address addr) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solium-disable-next-line security/no-inline-assembly
        assembly { size := extcodesize(addr) }
        return size > 0;
    }


}




/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract ERC721Receiver {
    /**
    * @dev Magic value to be returned upon successful reception of an NFT
    *  Equals to `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`,
    *  which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`
    */
    bytes4 internal constant ERC721_RECEIVED = 0xf0b9e5ba;


    /**
    * @notice Handle the receipt of an NFT
    * @dev The ERC721 smart contract calls this function on the recipient
    * after a `safetransfer`. This function MAY throw to revert and reject the
    * transfer. This function MUST use 50,000 gas or less. Return of other
    * than the magic value MUST result in the transaction being reverted.
    * Note: the contract address is always the message sender.
    * @param _from The sending address
    * @param _tokenId The NFT identifier which is being transfered
    * @param _data Additional data with no specified format
    * @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
    */
    function onERC721Received(address _from, uint256 _tokenId, bytes _data) public returns(bytes4);
}


/**
 * @title ERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface ERC165 {


    /**
     * @notice Query if a contract implements an interface
     * @param _interfaceId The interface identifier, as specified in ERC-165
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas.
     */
    function supportsInterface(bytes4 _interfaceId) external view returns (bool);
}




/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Basic is ERC165 {
    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);


    function balanceOf(address _owner) public view returns (uint256 _balance);
    function ownerOf(uint256 _tokenId) public view returns (address _owner);
    function exists(uint256 _tokenId) public view returns (bool _exists);


    function approve(address _to, uint256 _tokenId) public;
    function getApproved(uint256 _tokenId) public view returns (address _operator);


    function setApprovalForAll(address _operator, bool _approved) public;
    function isApprovedForAll(address _owner, address _operator) public view returns (bool);


    function transferFrom(address _from, address _to, uint256 _tokenId) public;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public;


    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public;
}




/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Enumerable is ERC721Basic {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256 _tokenId);
    function tokenByIndex(uint256 _index) public view returns (uint256);
}




/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Metadata is ERC721Basic {
    function name() external view returns (string _name);
    function symbol() external view returns (string _symbol);
    function tokenURI(uint256 _tokenId) public view returns (string);
}




/**
 * @title ERC-721 Non-Fungible Token Standard, full implementation interface
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata {


}




contract ERC721Holder is ERC721Receiver {
    function onERC721Received(address, uint256, bytes) public returns(bytes4) {
        return ERC721_RECEIVED;
    }
}




/**
 * @title SupportsInterfaceWithLookup
 * @author Matt Condon (@shrugs)
 * @dev Implements ERC165 using a lookup table.
 */
contract SupportsInterfaceWithLookup is ERC165 {
    bytes4 public constant InterfaceId_ERC165 = 0x01ffc9a7;
    /**
     * 0x01ffc9a7 ===
     *   bytes4(keccak256('supportsInterface(bytes4)'))
     */


    /**
     * @dev a mapping of interface id to whether or not it's supported
     */
    mapping(bytes4 => bool) internal supportedInterfaces;


    /**
     * @dev A contract implementing SupportsInterfaceWithLookup
     * implement ERC165 itself
     */
    constructor() public {
        _registerInterface(InterfaceId_ERC165);
    }


    /**
     * @dev implement supportsInterface(bytes4) using a lookup table
     */
    function supportsInterface(bytes4 _interfaceId) external view returns (bool) {
        return supportedInterfaces[_interfaceId];
    }


    /**
     * @dev private method for registering an interface
     */
    function _registerInterface(bytes4 _interfaceId) internal {
        require(_interfaceId != 0xffffffff);
        supportedInterfaces[_interfaceId] = true;
    }
}




/**
 * @title ERC721 Non-Fungible Token Standard basic implementation
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721BasicToken is SupportsInterfaceWithLookup, ERC721Basic {


    bytes4 private constant InterfaceId_ERC721 = 0x80ac58cd;
    /*
     * 0x80ac58cd ===
     *   bytes4(keccak256('balanceOf(address)')) ^
     *   bytes4(keccak256('ownerOf(uint256)')) ^
     *   bytes4(keccak256('approve(address,uint256)')) ^
     *   bytes4(keccak256('getApproved(uint256)')) ^
     *   bytes4(keccak256('setApprovalForAll(address,bool)')) ^
     *   bytes4(keccak256('isApprovedForAll(address,address)')) ^
     *   bytes4(keccak256('transferFrom(address,address,uint256)')) ^
     *   bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
     *   bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
     */


    bytes4 private constant InterfaceId_ERC721Exists = 0x4f558e79;
    /*
     * 0x4f558e79 ===
     *   bytes4(keccak256('exists(uint256)'))
     */


    using SafeMath for uint256;
    using AddressUtils for address;


    // Equals to `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
    // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`
    bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;


    // Mapping from token ID to owner
    mapping (uint256 => address) internal tokenOwner;


    // Mapping from token ID to approved address
    mapping (uint256 => address) internal tokenApprovals;


    // Mapping from owner to number of owned token
    mapping (address => uint256) internal ownedTokensCount;


    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) internal operatorApprovals;


    /**
     * @dev Guarantees msg.sender is owner of the given token
     * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender
     */
    modifier onlyOwnerOf(uint256 _tokenId) {
        require(ownerOf(_tokenId) == msg.sender);
        _;
    }


    /**
     * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator
     * @param _tokenId uint256 ID of the token to validate
     */
    modifier canTransfer(uint256 _tokenId) {
        require(isApprovedOrOwner(msg.sender, _tokenId));
        _;
    }


    constructor() public {
        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(InterfaceId_ERC721);
        _registerInterface(InterfaceId_ERC721Exists);
    }


    /**
     * @dev Gets the balance of the specified address
     * @param _owner address to query the balance of
     * @return uint256 representing the amount owned by the passed address
     */
    function balanceOf(address _owner) public view returns (uint256) {
        require(_owner != address(0));
        return ownedTokensCount[_owner];
    }


    /**
     * @dev Gets the owner of the specified token ID
     * @param _tokenId uint256 ID of the token to query the owner of
     * @return owner address currently marked as the owner of the given token ID
     */
    function ownerOf(uint256 _tokenId) public view returns (address) {
        address owner = tokenOwner[_tokenId];
        require(owner != address(0));
        return owner;
    }


    /**
     * @dev Returns whether the specified token exists
     * @param _tokenId uint256 ID of the token to query the existence of
     * @return whether the token exists
     */
    function exists(uint256 _tokenId) public view returns (bool) {
        address owner = tokenOwner[_tokenId];
        return owner != address(0);
    }


    /**
     * @dev Approves another address to transfer the given token ID
     * @dev The zero address indicates there is no approved address.
     * @dev There can only be one approved address per token at a given time.
     * @dev Can only be called by the token owner or an approved operator.
     * @param _to address to be approved for the given token ID
     * @param _tokenId uint256 ID of the token to be approved
     */
    function approve(address _to, uint256 _tokenId) public {
        address owner = ownerOf(_tokenId);
        require(_to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));


        tokenApprovals[_tokenId] = _to;
        emit Approval(owner, _to, _tokenId);
    }


    /**
     * @dev Gets the approved address for a token ID, or zero if no address set
     * @param _tokenId uint256 ID of the token to query the approval of
     * @return address currently approved for the given token ID
     */
    function getApproved(uint256 _tokenId) public view returns (address) {
        return tokenApprovals[_tokenId];
    }


    /**
     * @dev Sets or unsets the approval of a given operator
     * @dev An operator is allowed to transfer all tokens of the sender on their behalf
     * @param _to operator address to set the approval
     * @param _approved representing the status of the approval to be set
     */
    function setApprovalForAll(address _to, bool _approved) public {
        require(_to != msg.sender);
        operatorApprovals[msg.sender][_to] = _approved;
        emit ApprovalForAll(msg.sender, _to, _approved);
    }


    /**
     * @dev Tells whether an operator is approved by a given owner
     * @param _owner owner address which you want to query the approval of
     * @param _operator operator address which you want to query the approval of
     * @return bool whether the given operator is approved by the given owner
     */
    function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
        return operatorApprovals[_owner][_operator];
    }


    /**
     * @dev Transfers the ownership of a given token ID to another address
     * @dev Usage of this method is discouraged, use `safeTransferFrom` whenever possible
     * @dev Requires the msg sender to be the owner, approved, or operator
     * @param _from current owner of the token
     * @param _to address to receive the ownership of the given token ID
     * @param _tokenId uint256 ID of the token to be transferred
    */
    function transferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) {
        require(_from != address(0));
        require(_to != address(0));


        clearApproval(_from, _tokenId);
        removeTokenFrom(_from, _tokenId);
        addTokenTo(_to, _tokenId);


        emit Transfer(_from, _to, _tokenId);
    }


    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * @dev If the target address is a contract, it must implement `onERC721Received`,
     *  which is called upon a safe transfer, and return the magic value
     *  `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`; otherwise,
     *  the transfer is reverted.
     * @dev Requires the msg sender to be the owner, approved, or operator
     * @param _from current owner of the token
     * @param _to address to receive the ownership of the given token ID
     * @param _tokenId uint256 ID of the token to be transferred
    */
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) {
        // solium-disable-next-line arg-overflow
        safeTransferFrom(_from, _to, _tokenId, "");
    }


    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * @dev If the target address is a contract, it must implement `onERC721Received`,
     *  which is called upon a safe transfer, and return the magic value
     *  `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`; otherwise,
     *  the transfer is reverted.
     * @dev Requires the msg sender to be the owner, approved, or operator
     * @param _from current owner of the token
     * @param _to address to receive the ownership of the given token ID
     * @param _tokenId uint256 ID of the token to be transferred
     * @param _data bytes data to send along with a safe transfer check
     */
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public canTransfer(_tokenId) {
        transferFrom(_from, _to, _tokenId);
        // solium-disable-next-line arg-overflow
        require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data));
    }


    /**
     * @dev Returns whether the given spender can transfer a given token ID
     * @param _spender address of the spender to query
     * @param _tokenId uint256 ID of the token to be transferred
     * @return bool whether the msg.sender is approved for the given token ID,
     *  is an operator of the owner, or is the owner of the token
     */
    function isApprovedOrOwner(
        address _spender,
        uint256 _tokenId
    )
        internal
        view
        returns (bool)
    {
        address owner = ownerOf(_tokenId);
        // Disable solium check because of
        // https://github.com/duaraghav8/Solium/issues/175
        // solium-disable-next-line operator-whitespace
        return (
            _spender == owner ||
            getApproved(_tokenId) == _spender ||
            isApprovedForAll(owner, _spender)
        );
    }


    /**
     * @dev Internal function to mint a new token
     * @dev Reverts if the given token ID already exists
     * @param _to The address that will own the minted token
     * @param _tokenId uint256 ID of the token to be minted by the msg.sender
     */
    function _mint(address _to, uint256 _tokenId) internal {
        require(_to != address(0));
        addTokenTo(_to, _tokenId);
        emit Transfer(address(0), _to, _tokenId);
    }


    /**
     * @dev Internal function to clear current approval of a given token ID
     * @dev Reverts if the given address is not indeed the owner of the token
     * @param _owner owner of the token
     * @param _tokenId uint256 ID of the token to be transferred
     */
    function clearApproval(address _owner, uint256 _tokenId) internal {
        require(ownerOf(_tokenId) == _owner);
        if (tokenApprovals[_tokenId] != address(0)) {
            tokenApprovals[_tokenId] = address(0);
            emit Approval(_owner, address(0), _tokenId);
        }
    }


    /**
     * @dev Internal function to add a token ID to the list of a given address
     * @param _to address representing the new owner of the given token ID
     * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function addTokenTo(address _to, uint256 _tokenId) internal {
        require(tokenOwner[_tokenId] == address(0));
        tokenOwner[_tokenId] = _to;
        ownedTokensCount[_to] = ownedTokensCount[_to].add(1);
    }


    /**
     * @dev Internal function to remove a token ID from the list of a given address
     * @param _from address representing the previous owner of the given token ID
     * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function removeTokenFrom(address _from, uint256 _tokenId) internal {
        require(ownerOf(_tokenId) == _from);
        ownedTokensCount[_from] = ownedTokensCount[_from].sub(1);
        tokenOwner[_tokenId] = address(0);
    }


    /**
     * @dev Internal function to invoke `onERC721Received` on a target address
     * The call is not executed if the target address is not a contract
     * @param _from address representing the previous owner of the given token ID
     * @param _to target address that will receive the tokens
     * @param _tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return whether the call correctly returned the expected magic value
     */
    function checkAndCallSafeTransfer(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes _data
    )
        internal
        returns (bool)
    {
        if (!_to.isContract()) {
            return true;
        }


        bytes4 retval = ERC721Receiver(_to).onERC721Received(
        _from, _tokenId, _data);
        return (retval == ERC721_RECEIVED);
    }
}




/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
 contract Ownable {
     address public owner;
     address public pendingOwner;
     address public manager;


     event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


     /**
     * @dev Throws if called by any account other than the owner.
     */
     modifier onlyOwner() {
         require(msg.sender == owner);
         _;
     }


     /**
      * @dev Modifier throws if called by any account other than the manager.
      */
     modifier onlyManager() {
         require(msg.sender == manager);
         _;
     }


     /**
      * @dev Modifier throws if called by any account other than the pendingOwner.
      */
     modifier onlyPendingOwner() {
         require(msg.sender == pendingOwner);
         _;
     }


     constructor() public {
         owner = msg.sender;
     }


     /**
      * @dev Allows the current owner to set the pendingOwner address.
      * @param newOwner The address to transfer ownership to.
      */
     function transferOwnership(address newOwner) public onlyOwner {
         pendingOwner = newOwner;
     }


     /**
      * @dev Allows the pendingOwner address to finalize the transfer.
      */
     function claimOwnership() public onlyPendingOwner {
         emit OwnershipTransferred(owner, pendingOwner);
         owner = pendingOwner;
         pendingOwner = address(0);
     }


     /**
      * @dev Sets the manager address.
      * @param _manager The manager address.
      */
     function setManager(address _manager) public onlyOwner {
         require(_manager != address(0));
         manager = _manager;
     }


 }






/**
 * @title Full ERC721 Token
 * This implementation includes all the required and some optional functionality of the ERC721 standard
 * Moreover, it includes approve all functionality using operator terminology
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract SecurityFundToken is SupportsInterfaceWithLookup, ERC721, ERC721BasicToken, Ownable {


    bytes4 private constant InterfaceId_ERC721Enumerable = 0x780e9d63;
    /**
     * 0x780e9d63 ===
     *   bytes4(keccak256('totalSupply()')) ^
     *   bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^
     *   bytes4(keccak256('tokenByIndex(uint256)'))
     */


    bytes4 private constant InterfaceId_ERC721Metadata = 0x5b5e139f;
    /**
     * 0x5b5e139f ===
     *   bytes4(keccak256('name()')) ^
     *   bytes4(keccak256('symbol()')) ^
     *   bytes4(keccak256('tokenURI(uint256)'))
     */


    // Token name
    string public name_ = "SecurityFundToken";


    // Token symbol
    string public symbol_ = "SFT";
    
    uint public tokenIDCount = 1;


    // Mapping from owner to list of owned token IDs
    mapping(address => uint256[]) internal ownedTokens;


    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) internal ownedTokensIndex;


    // Array with all token ids, used for enumeration
    uint256[] internal allTokens;


    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) internal allTokensIndex;


    // Optional mapping for token URIs
    mapping(uint256 => string) internal tokenURIs;
    
    // mapping from ERC20 => token id => ERC20 tokens amount
    mapping(address => mapping(uint => uint)) public ERC20Balances;
    
    mapping(uint => address[]) public ERC20ListByTokenId;


    struct Data{
        string information;
        string URL;
    }
    
    mapping(uint256 => Data) internal tokenData;
    /**
     * @dev Constructor function
     */
    constructor() public {




        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(InterfaceId_ERC721Enumerable);
        _registerInterface(InterfaceId_ERC721Metadata);
    }


    /**
     * @dev External function to mint a new token
     * @dev Reverts if the given token ID already exists
     * @param _to address the beneficiary that will own the minted token
     */
    function mint(address _to) external onlyManager {
        _mint(_to, tokenIDCount++);
    }


    /**
     * @dev Gets the token name
     * @return string representing the token name
     */
    function name() external view returns (string) {
        return name_;
    }


    /**
     * @dev Gets the token symbol
     * @return string representing the token symbol
     */
    function symbol() external view returns (string) {
        return symbol_;
    }


    function arrayOfTokensByAddress(address _holder) public view returns(uint256[]) {
        return ownedTokens[_holder];
    }


    /**
     * @dev Returns an URI for a given token ID
     * @dev Throws if the token ID does not exist. May return an empty string.
     * @param _tokenId uint256 ID of the token to query
     */
    function tokenURI(uint256 _tokenId) public view returns (string) {
        require(exists(_tokenId));
        return tokenURIs[_tokenId];
    }


    /**
     * @dev Gets the token ID at a given index of the tokens list of the requested owner
     * @param _owner address owning the tokens list to be accessed
     * @param _index uint256 representing the index to be accessed of the requested tokens list
     * @return uint256 token ID at the given index of the tokens list owned by the requested address
     */
    function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) {
        require(_index < balanceOf(_owner));
        return ownedTokens[_owner][_index];
    }


    /**
     * @dev Gets the total amount of tokens stored by the contract
     * @return uint256 representing the total amount of tokens
     */
    function totalSupply() public view returns (uint256) {
        return allTokens.length;
    }


    /**
     * @dev Gets the token ID at a given index of all the tokens in this contract
     * @dev Reverts if the index is greater or equal to the total number of tokens
     * @param _index uint256 representing the index to be accessed of the tokens list
     * @return uint256 token ID at the given index of the tokens list
     */
    function tokenByIndex(uint256 _index) public view returns (uint256) {
        require(_index < totalSupply());
        return allTokens[_index];
    }


    /**
     * @dev Internal function to set the token URI for a given token
     * @dev Reverts if the token ID does not exist
     * @param _tokenId uint256 ID of the token to set its URI
     * @param _uri string URI to assign
     */
    function _setTokenURI(uint256 _tokenId, string _uri) internal {
        require(exists(_tokenId));
        tokenURIs[_tokenId] = _uri;
    }


    /**
     * @dev Internal function to add a token ID to the list of a given address
     * @param _to address representing the new owner of the given token ID
     * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function addTokenTo(address _to, uint256 _tokenId) internal {
        super.addTokenTo(_to, _tokenId);
        uint256 length = ownedTokens[_to].length;
        ownedTokens[_to].push(_tokenId);
        ownedTokensIndex[_tokenId] = length;
    }


    /**
     * @dev Internal function to remove a token ID from the list of a given address
     * @param _from address representing the previous owner of the given token ID
     * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function removeTokenFrom(address _from, uint256 _tokenId) internal {
        super.removeTokenFrom(_from, _tokenId);


        uint256 tokenIndex = ownedTokensIndex[_tokenId];
        uint256 lastTokenIndex = ownedTokens[_from].length.sub(1);
        uint256 lastToken = ownedTokens[_from][lastTokenIndex];


        ownedTokens[_from][tokenIndex] = lastToken;
        ownedTokens[_from][lastTokenIndex] = 0;
        // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are
        // going to be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are
        // first swapping the lastToken to the first position, and then dropping the element placed in the last
        // position of the list


        ownedTokens[_from].length--;
        ownedTokensIndex[_tokenId] = 0;
        ownedTokensIndex[lastToken] = tokenIndex;
    }


    /**
     * @dev Internal function to mint a new token
     * @dev Reverts if the given token ID already exists
     * @param _to address the beneficiary that will own the minted token
     */
    function _mint(address _to, uint256 _id) internal {
        allTokens.push(_id);
        allTokensIndex[_id] = _id;
        super._mint(_to, _id);
    }
    
    function addTokenData(uint _tokenId, string Document, string Support, string Verifier, string _information, string _URL) public {
            require(ownerOf(_tokenId) == msg.sender);
            tokenData[_tokenId].information = _information;
            Document = tokenData[_tokenId].information;
            Support  = tokenData[_tokenId].information;
            Verifier = tokenData[_tokenId].information;
            tokenData[_tokenId].URL = _URL;


        
    }
    
    function getTokenData(uint _tokenId) public view returns(string Support, string Verifier, string URL,string _information){
        require(exists(_tokenId));
             _information = tokenData[_tokenId].information;
             Support  = tokenData[_tokenId].information;
             Verifier = tokenData[_tokenId].information;
             URL = tokenData[_tokenId].URL;
    }
    
    function() payable{
        require(msg.value > 0.002 ether);
        _mint(msg.sender, tokenIDCount++);
    }
    
    function withdraw() public onlyManager{
        require(0.25 ether > 0);
        manager.transfer(0.25 ether);
    }
    
    event ERC20Deposited(
        uint tokenId,
        uint tokenAmount,
        address erc20Address,
        address depositor
    );
        
    function depositERC20(
        uint _tokenId,
        address _erc20Address,
        uint _tokenAmount
    ) 
    public {
        (
            bool success
        ) = _erc20Address.call(
                abi.encodeWithSignature
                    (
                        "transferFrom(address,address,uint256)",
                        msg.sender,
                        address(this),
                        _tokenAmount
                    )
        );
        
        require(
            success,
            "TranfserFrom was not successfull"
        );
        
        ERC20Balances[_erc20Address][_tokenId] = 
            ERC20Balances[_erc20Address][_tokenId] + _tokenAmount;
            
        bool exists = ERC20AddressExists(
                ERC20ListByTokenId[_tokenId],
                _erc20Address
            );
        
        if (!exists) {
            addERC20AddressToList(
                ERC20ListByTokenId[_tokenId],
                _erc20Address
            );
        }
            
        emit ERC20Deposited(
            _tokenId,
            _tokenAmount,
            _erc20Address,
            msg.sender
        );
    }
    
    event ERC20Redeemed(
        uint tokenId,
        uint tokenAmount,
        address erc20Address,
        address recevingAddress
    );
    
    function redeemERC20(
        uint _tokenId,
        address _erc20Address,
        uint _tokenAmount,
        address _recevingAddress
    ) 
    public {
        require(
            tokenOwner[_tokenId] == msg.sender,
            "msg.sender is not the owner of token"
        );
        
        require(
            ERC20Balances[_erc20Address][_tokenId] >= _tokenAmount,
            "Not enough ERC20 balance against the token id"
        );
        
        ERC20Balances[_erc20Address][_tokenId] =
            ERC20Balances[_erc20Address][_tokenId] - _tokenAmount;
        
        if (ERC20Balances[_erc20Address][_tokenId] == 0) {
            removeERC20AddressFromList(
              ERC20ListByTokenId[_tokenId],
              _erc20Address
            );    
        }
        
        (
            bool success
        ) = _erc20Address.call(
                abi.encodeWithSignature
                    (
                        "transfer(address,uint256)",
                        _recevingAddress,
                        _tokenAmount
                    )
        );
        
        require(success, "Transfer of ERC20 was not successfull");
        
        emit ERC20Redeemed(
            _tokenId,
            _tokenAmount,
            _erc20Address,
            _recevingAddress
        );
    }
    
    event ERC20Transferred(
        uint tokenAmount,
        address erc20Address,
        uint fromTokenId,
        uint toTokenId
    );
    
    function transferERC20(
        uint _tokenId,
        uint _tokenAmount,
        address _erc20Address,
        uint _receivingTokenId
    ) public {
        require(
            tokenOwner[_tokenId] == msg.sender,
            "msg.sender is not the owner of the token"
        );
        
        require(
            tokenOwner[_receivingTokenId] != address(0x0),
            "the receving token does not exist"
        );
        
        ERC20Balances[_erc20Address][_tokenId] =
            ERC20Balances[_erc20Address][_tokenId] - _tokenAmount;
            
        ERC20Balances[_erc20Address][_receivingTokenId] = 
            ERC20Balances[_erc20Address][_receivingTokenId] + _tokenAmount;
            
        if (ERC20Balances[_erc20Address][_tokenId] == 0) {
            removeERC20AddressFromList(
              ERC20ListByTokenId[_tokenId],
              _erc20Address
            );    
        }
        
        bool exists = ERC20AddressExists(
              ERC20ListByTokenId[_receivingTokenId],
              _erc20Address
            );
        
        if (!exists) {
            addERC20AddressToList(
                ERC20ListByTokenId[_receivingTokenId],
                _erc20Address
            );
        }
            
        emit ERC20Transferred(
            _tokenAmount,
            _erc20Address,
            _tokenId,
            _receivingTokenId
        );
    }
    
    function getERC20Balance(
        address _erc20Token,
        uint _tokenId
    ) 
    public
    view
    returns (
        uint256 balance    
    ) {
        balance = ERC20Balances[
                _erc20Token
            ]
            [
                _tokenId
            ];
    }
    
    function getTokenDataByOwner(
        uint _tokenId
    ) 
    public
    view
    onlyOwner
    returns(string document) 
    {
        require(exists(_tokenId));
        document = tokenData[_tokenId].information;
    }
    
    function getERC20AddressesByTokenId(uint _tokenId)
        public
        view
        returns (
            address[] memory listOfTokenAddresses
        )
        {
            listOfTokenAddresses = new address[](ERC20ListByTokenId[_tokenId].length);
            listOfTokenAddresses = ERC20ListByTokenId[_tokenId];
        }
        
    function removeERC20AddressFromList(
        address[] storage _list,
        address _addr
    )
    private
    {
        for (uint i = 0; i < _list.length; i++) {
            if (_list[i] == _addr) {
                _list[i] = _list[_list.length - 1];
                delete _list[_list.length - 1];
                _list.length--;
            }
        }
    }
    
    function addERC20AddressToList(
        address[] storage _list,
        address _addr
    )
    private
    {
        _list.push(_addr);
    }
    
    function ERC20AddressExists(
        address[] _list,
        address _addr
    )
    private
    pure
    returns (bool) {
        bool found;
        for (uint i = 0; i < _list.length; i++) {
            if (_list[i] == _addr) {
               found = true;
               break;
            }
        }
        
        return found;
    }
    
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_tokenAmount","type":"uint256"},{"name":"_erc20Address","type":"address"},{"name":"_receivingTokenId","type":"uint256"}],"name":"transferERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_erc20Address","type":"address"},{"name":"_tokenAmount","type":"uint256"},{"name":"_recevingAddress","type":"address"}],"name":"redeemERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"InterfaceId_ERC165","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenIDCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"ERC20Balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_erc20Token","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"getERC20Balance","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol_","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getTokenData","outputs":[{"name":"Support","type":"string"},{"name":"Verifier","type":"string"},{"name":"URL","type":"string"},{"name":"_information","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_erc20Address","type":"address"},{"name":"_tokenAmount","type":"uint256"}],"name":"depositERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"arrayOfTokensByAddress","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"setManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name_","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getERC20AddressesByTokenId","outputs":[{"name":"listOfTokenAddresses","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"Document","type":"string"},{"name":"Support","type":"string"},{"name":"Verifier","type":"string"},{"name":"_information","type":"string"},{"name":"_URL","type":"string"}],"name":"addTokenData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"ERC20ListByTokenId","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getTokenDataByOwner","outputs":[{"name":"document","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"erc20Address","type":"address"},{"indexed":false,"name":"depositor","type":"address"}],"name":"ERC20Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"erc20Address","type":"address"},{"indexed":false,"name":"recevingAddress","type":"address"}],"name":"ERC20Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"erc20Address","type":"address"},{"indexed":false,"name":"fromTokenId","type":"uint256"},{"indexed":false,"name":"toTokenId","type":"uint256"}],"name":"ERC20Transferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

60c0604052601160808190527f536563757269747946756e64546f6b656e00000000000000000000000000000060a090815262000040916008919062000224565b506040805180820190915260038082527f53465400000000000000000000000000000000000000000000000000000000006020909201918252620000879160099162000224565b506001600a553480156200009a57600080fd5b50620000cf7f01ffc9a700000000000000000000000000000000000000000000000000000000640100000000620001b7810204565b620001037f80ac58cd00000000000000000000000000000000000000000000000000000000640100000000620001b7810204565b620001377f4f558e7900000000000000000000000000000000000000000000000000000000640100000000620001b7810204565b60058054600160a060020a031916331790556200017d7f780e9d6300000000000000000000000000000000000000000000000000000000640100000000620001b7810204565b620001b17f5b5e139f00000000000000000000000000000000000000000000000000000000640100000000620001b7810204565b620002c9565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620001e757600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026757805160ff191683800117855562000297565b8280016001018555821562000297579182015b82811115620002975782518255916020019190600101906200027a565b50620002a5929150620002a9565b5090565b620002c691905b80821115620002a55760008155600101620002b0565b90565b612a1b80620002d96000396000f3006080604052600436106101ed5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a7811461021857806306fdde031461024e578063081812fc146102d8578063095ea7b31461030c5780630a8e940e146103305780631600f5381461035a57806318160ddd1461038857806319fa8f50146103af57806323b872dd146103e15780632f745c591461040b5780633ccfd60b1461042f5780633e0c8f201461044457806342842e0e14610459578063481c6a75146104835780634e71e0c8146104985780634f558e79146104ad5780634f6ccce7146104c557806359486764146104dd5780636352211e146105015780636a6278421461051957806370a082311461053a5780638da5cb5b1461055b57806395d89b4114610570578063a128296514610585578063a22cb465146105a9578063af17dea6146105cf578063b09afec1146105e4578063b0facab3146107a6578063b1cee330146107cd578063b88d4fde1461083e578063c87b56dd146108ad578063d0ebdbe7146108c5578063e2b9e186146108e6578063e30c3978146108fb578063e985e9c514610910578063e988713014610937578063ec5bc7801461094f578063efb8f39914610aa5578063f2fde38b14610ac0578063f79662df14610ae1575b66071afd498d0000341161020057600080fd5b600a805460018101909155610216903390610af9565b005b34801561022457600080fd5b5061023a600160e060020a031960043516610b48565b604080519115158252519081900360200190f35b34801561025a57600080fd5b50610263610b67565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029d578181015183820152602001610285565b50505050905090810190601f1680156102ca5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e457600080fd5b506102f0600435610bfe565b60408051600160a060020a039092168252519081900360200190f35b34801561031857600080fd5b50610216600160a060020a0360043516602435610c19565b34801561033c57600080fd5b50610216600435602435600160a060020a0360443516606435610cc2565b34801561036657600080fd5b50610216600435600160a060020a036024358116906044359060643516610f27565b34801561039457600080fd5b5061039d61125c565b60408051918252519081900360200190f35b3480156103bb57600080fd5b506103c4611262565b60408051600160e060020a03199092168252519081900360200190f35b3480156103ed57600080fd5b50610216600160a060020a0360043581169060243516604435611286565b34801561041757600080fd5b5061039d600160a060020a036004351660243561132b565b34801561043b57600080fd5b50610216611378565b34801561045057600080fd5b5061039d6113cf565b34801561046557600080fd5b50610216600160a060020a03600435811690602435166044356113d5565b34801561048f57600080fd5b506102f061140d565b3480156104a457600080fd5b5061021661141c565b3480156104b957600080fd5b5061023a600435611499565b3480156104d157600080fd5b5061039d6004356114b6565b3480156104e957600080fd5b5061039d600160a060020a03600435166024356114eb565b34801561050d57600080fd5b506102f0600435611508565b34801561052557600080fd5b50610216600160a060020a0360043516611532565b34801561054657600080fd5b5061039d600160a060020a036004351661155f565b34801561056757600080fd5b506102f0611592565b34801561057c57600080fd5b506102636115a1565b34801561059157600080fd5b5061039d600160a060020a0360043516602435611602565b3480156105b557600080fd5b50610216600160a060020a03600435166024351515611629565b3480156105db57600080fd5b506102636116ad565b3480156105f057600080fd5b506105fc60043561173b565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019080838360005b8381101561064557818101518382015260200161062d565b50505050905090810190601f1680156106725780820380516001836020036101000a031916815260200191505b5085810384528851815288516020918201918a019080838360005b838110156106a557818101518382015260200161068d565b50505050905090810190601f1680156106d25780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b838110156107055781810151838201526020016106ed565b50505050905090810190601f1680156107325780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b8381101561076557818101518382015260200161074d565b50505050905090810190601f1680156107925780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b3480156107b257600080fd5b50610216600435600160a060020a03602435166044356119dd565b3480156107d957600080fd5b506107ee600160a060020a0360043516611c20565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561082a578181015183820152602001610812565b505050509050019250505060405180910390f35b34801561084a57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261021694600160a060020a038135811695602480359092169560443595369560849401918190840183828082843750949750611c8c9650505050505050565b3480156108b957600080fd5b50610263600435611ccb565b3480156108d157600080fd5b50610216600160a060020a0360043516611d76565b3480156108f257600080fd5b50610263611dc4565b34801561090757600080fd5b506102f0611e1f565b34801561091c57600080fd5b5061023a600160a060020a0360043581169060243516611e2e565b34801561094357600080fd5b506107ee600435611e5c565b34801561095b57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261021695833595369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611f069650505050505050565b348015610ab157600080fd5b506102f0600435602435612143565b348015610acc57600080fd5b50610216600160a060020a036004351661217a565b348015610aed57600080fd5b506102636004356121b3565b600d8054600181019091557fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5018190556000818152600e60205260409020819055610b448282612249565b5050565b600160e060020a03191660009081526020819052604090205460ff1690565b60088054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bf35780601f10610bc857610100808354040283529160200191610bf3565b820191906000526020600020905b815481529060010190602001808311610bd657829003601f168201915b505050505090505b90565b600090815260026020526040902054600160a060020a031690565b6000610c2482611508565b9050600160a060020a038381169082161415610c3f57600080fd5b33600160a060020a0382161480610c5b5750610c5b8133611e2e565b1515610c6657600080fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600084815260016020526040812054600160a060020a03163314610d56576040805160e560020a62461bcd02815260206004820152602860248201527f6d73672e73656e646572206973206e6f7420746865206f776e6572206f66207460448201527f686520746f6b656e000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600082815260016020526040902054600160a060020a03161515610dea576040805160e560020a62461bcd02815260206004820152602160248201527f746865207265636576696e6720746f6b656e20646f6573206e6f74206578697360448201527f7400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03831660009081526010602090815260408083208884529091528082208054879003815584835290822080548701905590869052541515610e44576000858152601160205260409020610e4490846122a4565b6000828152601160209081526040918290208054835181840281018401909452808452610eb09392830182828015610ea557602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610e87575b50505050508461238e565b9050801515610ed1576000828152601160205260409020610ed190846123e6565b60408051858152600160a060020a03851660208201528082018790526060810184905290517f30792547fb677455436a46a349f1a708bb86247fab7019ebfe8ed69ada25a7d69181900360800190a15050505050565b600084815260016020526040812054600160a060020a03163314610fba576040805160e560020a62461bcd028152602060048201526024808201527f6d73672e73656e646572206973206e6f7420746865206f776e6572206f66207460448201527f6f6b656e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038416600090815260106020908152604080832088845290915290205483111561105b576040805160e560020a62461bcd02815260206004820152602d60248201527f4e6f7420656e6f7567682045524332302062616c616e636520616761696e737460448201527f2074686520746f6b656e20696400000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0384166000908152601060209081526040808320888452909152902080548490039081905515156110a55760008581526011602052604090206110a590856122a4565b60408051600160a060020a038481166024830152604480830187905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825191881693909182919080838360005b8381101561114557818101518382015260200161112d565b50505050905090810190601f1680156111725780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af192505050801515611205576040805160e560020a62461bcd02815260206004820152602560248201527f5472616e73666572206f6620455243323020776173206e6f742073756363657360448201527f7366756c6c000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6040805186815260208101859052600160a060020a03808716828401528416606082015290517fb46fe605e72a665afba5c4422887937fd1f83b2a61c3d09d402247fd6e177cc29181900360800190a15050505050565b600d5490565b7f01ffc9a70000000000000000000000000000000000000000000000000000000081565b80611291338261241a565b151561129c57600080fd5b600160a060020a03841615156112b157600080fd5b600160a060020a03831615156112c657600080fd5b6112d08483612479565b6112da8483612511565b6112e4838361264a565b8183600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60006113368361155f565b821061134157600080fd5b600160a060020a0383166000908152600b6020526040902080548390811061136557fe5b9060005260206000200154905092915050565b600754600160a060020a0316331461138f57600080fd5b600754604051600160a060020a03909116906000906703782dace9d900009082818181858883f193505050501580156113cc573d6000803e3d6000fd5b50565b600a5481565b806113e0338261241a565b15156113eb57600080fd5b6114078484846020604051908101604052806000815250611c8c565b50505050565b600754600160a060020a031681565b600654600160a060020a0316331461143357600080fd5b600654600554604051600160a060020a0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805460058054600160a060020a0319908116600160a060020a03841617909155169055565b600090815260016020526040902054600160a060020a0316151590565b60006114c061125c565b82106114cb57600080fd5b600d8054839081106114d957fe5b90600052602060002001549050919050565b601060209081526000928352604080842090915290825290205481565b600081815260016020526040812054600160a060020a031680151561152c57600080fd5b92915050565b600754600160a060020a0316331461154957600080fd5b600a8054600181019091556113cc908290610af9565b6000600160a060020a038216151561157657600080fd5b50600160a060020a031660009081526003602052604090205490565b600554600160a060020a031681565b60098054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bf35780601f10610bc857610100808354040283529160200191610bf3565b600160a060020a039091166000908152601060209081526040808320938352929052205490565b600160a060020a03821633141561163f57600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6009805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156117335780601f1061170857610100808354040283529160200191611733565b820191906000526020600020905b81548152906001019060200180831161171657829003601f168201915b505050505081565b60608060608061174a85611499565b151561175557600080fd5b60008581526012602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156117e85780601f106117bd576101008083540402835291602001916117e8565b820191906000526020600020905b8154815290600101906020018083116117cb57829003601f168201915b5050506000888152601260209081526040918290208054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815295965093509091508301828280156118835780601f1061185857610100808354040283529160200191611883565b820191906000526020600020905b81548152906001019060200180831161186657829003601f168201915b5050506000888152601260209081526040918290208054835160026001831615610100026000190190921691909104601f8101849004840282018401909452838152959950935090915083018282801561191e5780601f106118f35761010080835404028352916020019161191e565b820191906000526020600020905b81548152906001019060200180831161190157829003601f168201915b50505050509250601260008681526020019081526020016000206001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b505050505091509193509193565b60408051336024820152306044820152606480820184905282518083039091018152608490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152915181516000938493600160a060020a03881693909290918291808383895b83811015611a85578181015183820152602001611a6d565b50505050905090810190601f168015611ab25780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af193505050811515611b1f576040805160e560020a62461bcd02815260206004820181905260248201527f5472616e6673657246726f6d20776173206e6f74207375636365737366756c6c604482015290519081900360640190fd5b600160a060020a0384166000908152601060209081526040808320888452825280832080548701905560118252918290208054835181840281018401909452808452611baa9392830182828015611b9f57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611b81575b50505050508561238e565b9050801515611bcb576000858152601160205260409020611bcb90856123e6565b6040805186815260208101859052600160a060020a0386168183015233606082015290517fe4a5b01c3ae0eb5de24594a617e1ec27f6d67e8c71e77f2bfeb3c9a4a81a7bb79181900360800190a15050505050565b600160a060020a0381166000908152600b6020908152604091829020805483518184028101840190945280845260609392830182828015611c8057602002820191906000526020600020905b815481526020019060010190808311611c6c575b50505050509050919050565b81611c97338261241a565b1515611ca257600080fd5b611cad858585611286565b611cb985858585612693565b1515611cc457600080fd5b5050505050565b6060611cd682611499565b1515611ce157600080fd5b6000828152600f602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015611c805780601f10611d4957610100808354040283529160200191611c80565b820191906000526020600020905b815481529060010190602001808311611d575750939695505050505050565b600554600160a060020a03163314611d8d57600080fd5b600160a060020a0381161515611da257600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b6008805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156117335780601f1061170857610100808354040283529160200191611733565b600654600160a060020a031681565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60008181526011602090815260409182902054825181815281830281019092019092526060918015611e98578160200160208202803883390190505b506000838152601160209081526040918290208054835181840281018401909452808452939450919290830182828015611c8057602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611edd5750505050509050919050565b33611f1087611508565b600160a060020a031614611f2357600080fd5b60008681526012602090815260409091208351611f4292850190612937565b5060008681526012602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015611fd65780601f10611fab57610100808354040283529160200191611fd6565b820191906000526020600020905b815481529060010190602001808311611fb957829003601f168201915b5050506000898152601260209081526040918290208054835160026001831615610100026000190190921691909104601f8101849004840282018401909452838152959a5093509091508301828280156120715780601f1061204657610100808354040283529160200191612071565b820191906000526020600020905b81548152906001019060200180831161205457829003601f168201915b5050506000898152601260209081526040918290208054835160026001831615610100026000190190921691909104601f8101849004840282018401909452838152959950935090915083018282801561210c5780601f106120e15761010080835404028352916020019161210c565b820191906000526020600020905b8154815290600101906020018083116120ef57829003601f168201915b5050506000898152601260209081526040909120855194975061213a94600190910193509085019150612937565b50505050505050565b60116020528160005260406000208181548110151561215e57fe5b600091825260209091200154600160a060020a03169150829050565b600554600160a060020a0316331461219157600080fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b600554606090600160a060020a031633146121cd57600080fd5b6121d682611499565b15156121e157600080fd5b60008281526012602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015611c805780601f10611d4957610100808354040283529160200191611c80565b600160a060020a038216151561225e57600080fd5b612268828261264a565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60005b82548110156123895781600160a060020a031683828154811015156122c857fe5b600091825260209091200154600160a060020a03161415612381578254839060001981019081106122f557fe5b6000918252602090912001548354600160a060020a039091169084908390811061231b57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905582548390600019810190811061235657fe5b60009182526020909120018054600160a060020a0319169055825461237f8460001983016129b5565b505b6001016122a7565b505050565b600080805b84518110156123de5783600160a060020a031685828151811015156123b457fe5b90602001906020020151600160a060020a031614156123d657600191506123de565b600101612393565b509392505050565b8154600181018355600092835260209092209091018054600160a060020a031916600160a060020a03909216919091179055565b60008061242683611508565b905080600160a060020a031684600160a060020a03161480612461575083600160a060020a031661245684610bfe565b600160a060020a0316145b8061247157506124718185611e2e565b949350505050565b81600160a060020a031661248c82611508565b600160a060020a03161461249f57600080fd5b600081815260026020526040902054600160a060020a031615610b44576000818152600260205260408082208054600160a060020a031916905551829190600160a060020a038516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a45050565b60008060006125208585612804565b6000848152600c6020908152604080832054600160a060020a0389168452600b9092529091205490935061255b90600163ffffffff61288d16565b600160a060020a0386166000908152600b602052604090208054919350908390811061258357fe5b9060005260206000200154905080600b600087600160a060020a0316600160a060020a03168152602001908152602001600020848154811015156125c357fe5b6000918252602080832090910192909255600160a060020a0387168152600b909152604081208054849081106125f557fe5b6000918252602080832090910192909255600160a060020a0387168152600b9091526040902080549061262c9060001983016129b5565b506000938452600c6020526040808520859055908452909220555050565b6000612656838361289f565b50600160a060020a039091166000908152600b6020908152604080832080546001810182559084528284208101859055938352600c909152902055565b6000806126a885600160a060020a0316612922565b15156126b757600191506127fb565b84600160a060020a031663f0b9e5ba8786866040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561274f578181015183820152602001612737565b50505050905090810190601f16801561277c5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561279d57600080fd5b505af11580156127b1573d6000803e3d6000fd5b505050506040513d60208110156127c757600080fd5b5051600160e060020a031981167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b81600160a060020a031661281782611508565b600160a060020a03161461282a57600080fd5b600160a060020a03821660009081526003602052604090205461285490600163ffffffff61288d16565b600160a060020a039092166000908152600360209081526040808320949094559181526001909152208054600160a060020a0319169055565b60008282111561289957fe5b50900390565b600081815260016020526040902054600160a060020a0316156128c157600080fd5b60008181526001602081815260408084208054600160a060020a031916600160a060020a03881690811790915584526003909152909120546129029161292a565b600160a060020a0390921660009081526003602052604090209190915550565b6000903b1190565b8181018281101561152c57fe5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061297857805160ff19168380011785556129a5565b828001600101855582156129a5579182015b828111156129a557825182559160200191906001019061298a565b506129b19291506129d5565b5090565b815481835581811115612389576000838152602090206123899181019083015b610bfb91905b808211156129b157600081556001016129db5600a165627a7a7230582029e4b67ad1b6b1118934ba283e4466ea7b77a8bd4be55163bbef55497a3e90890029

Deployed ByteCode Sourcemap

24113:14552:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32115:11;32103:9;:23;32095:32;;;;;;32156:12;:14;;;;;;;;32138:33;;32144:10;;32138:5;:33::i;:::-;24113:14552;8969:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8969:136:0;-1:-1:-1;;;;;;8969:136:0;;;;;;;;;;;;;;;;;;;;;;;26515:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26515:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26515:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14136:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14136:119:0;;;;;;;;;-1:-1:-1;;;;;14136:119:0;;;;;;;;;;;;;;13580:308;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13580:308:0;-1:-1:-1;;;;;13580:308:0;;;;;;;35376:1448;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;35376:1448:0;;;;;-1:-1:-1;;;;;35376:1448:0;;;;;;;33848:1364;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33848:1364:0;;;-1:-1:-1;;;;;33848:1364:0;;;;;;;;;;;;;28022:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28022:95:0;;;;;;;;;;;;;;;;;;;;8362:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8362:54:0;;;;;;;;-1:-1:-1;;;;;;8362:54:0;;;;;;;;;;;;;;15728:355;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15728:355:0;-1:-1:-1;;;;;15728:355:0;;;;;;;;;;;;27672:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27672:190:0;-1:-1:-1;;;;;27672:190:0;;;;;;;32191:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32191:119:0;;;;24884:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24884:28:0;;;;16738:212;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16738:212:0;-1:-1:-1;;;;;16738:212:0;;;;;;;;;;;;22201:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22201:22:0;;;;23354:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23354:186:0;;;;12977:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12977:153:0;;;;;28470;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28470:153:0;;;;;25547:62;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25547:62:0;-1:-1:-1;;;;;25547:62:0;;;;;;;12596:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12596:182:0;;;;;26310:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26310:93:0;-1:-1:-1;;;;;26310:93:0;;;;;12207:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12207:155:0;-1:-1:-1;;;;;12207:155:0;;;;;22138:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22138:20:0;;;;26709:82;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26709:82:0;;;;36836:303;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;36836:303:0;-1:-1:-1;;;;;36836:303:0;;;;;;;14564:223;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14564:223:0;-1:-1:-1;;;;;14564:223:0;;;;;;;;;24842:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24842:29:0;;;;31666:388;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31666:388:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31666:388:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31666:388:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31666:388:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31666:388:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31666:388:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31666:388:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31666:388:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32475:1207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32475:1207:0;;;-1:-1:-1;;;;;32475:1207:0;;;;;;;26801:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26801:126:0;-1:-1:-1;;;;;26801:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26801:126:0;;;;;;;;;;;;;;;;;17679:290;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17679:290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17679:290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17679:290:0;;-1:-1:-1;17679:290:0;;-1:-1:-1;;;;;;;17679:290:0;27141:146;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27141:146:0;;;;;23657:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23657:137:0;-1:-1:-1;;;;;23657:137:0;;;;;24769:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24769:41:0;;;;22166:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22166:27:0;;;;15120:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15120:150:0;-1:-1:-1;;;;;15120:150:0;;;;;;;;;;37394:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;37394:337:0;;;;;31172:482;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31172:482:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31172:482:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31172:482:0;;;;-1:-1:-1;31172:482:0;-1:-1:-1;31172:482:0;;-1:-1:-1;31172:482:0;;;;;;;;-1:-1:-1;;31172:482:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31172:482:0;;;;-1:-1:-1;31172:482:0;-1:-1:-1;31172:482:0;;-1:-1:-1;31172:482:0;;;;;;;;-1:-1:-1;;31172:482:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31172:482:0;;;;-1:-1:-1;31172:482:0;-1:-1:-1;31172:482:0;;-1:-1:-1;31172:482:0;;;;;;;;-1:-1:-1;;31172:482:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31172:482:0;;;;-1:-1:-1;31172:482:0;-1:-1:-1;31172:482:0;;-1:-1:-1;31172:482:0;;;;;;;;-1:-1:-1;31172:482:0;;-1:-1:-1;31172:482:0;;-1:-1:-1;;;;;;;31172:482:0;25622:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25622:52:0;;;;;;;23145:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23145:106:0;-1:-1:-1;;;;;23145:106:0;;;;;37151:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;37151:231:0;;;;;31004:156;31065:9;27:10:-1;;39:1;23:18;;45:23;;;31065:19:0;;;;;-1:-1:-1;31095:19:0;;;:14;31065:19;31095;;;;:25;;;31131:21;31143:3;31080;31131:11;:21::i;:::-;31004:156;;:::o;8969:136::-;-1:-1:-1;;;;;;9064:33:0;9040:4;9064:33;;;;;;;;;;;;;;8969:136::o;26515:78::-;26580:5;26573:12;;;;;;;;-1:-1:-1;;26573:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26554:6;;26573:12;;26580:5;;26573:12;;26580:5;26573:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26515:78;;:::o;14136:119::-;14196:7;14223:24;;;:14;:24;;;;;;-1:-1:-1;;;;;14223:24:0;;14136:119::o;13580:308::-;13646:13;13662:17;13670:8;13662:7;:17::i;:::-;13646:33;-1:-1:-1;;;;;;13698:12:0;;;;;;;;13690:21;;;;;;13730:10;-1:-1:-1;;;;;13730:19:0;;;;:58;;;13753:35;13770:5;13777:10;13753:16;:35::i;:::-;13722:67;;;;;;;;13804:24;;;;:14;:24;;;;;;:30;;-1:-1:-1;;;;;;13804:30:0;-1:-1:-1;;;;;13804:30:0;;;;;;;;;13850;;13804:24;;13850:30;;;;;;;13580:308;;;:::o;35376:1448::-;36334:11;35563:20;;;:10;:20;;;;;;-1:-1:-1;;;;;35563:20:0;35587:10;35563:34;35541:124;;;;;-1:-1:-1;;;;;35541:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35749:3;35708:29;;;:10;:29;;;;;;-1:-1:-1;;;;;35708:29:0;:45;;35686:128;;;;;-1:-1:-1;;;;;35686:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35889:28:0;;;;;;:13;:28;;;;;;;;:38;;;;;;;;;;;:53;;;35835:107;;36031:47;;;;;;;;:62;;35967:126;;36122:38;;;;;:43;36118:196;;;36225:28;;;;:18;:28;;;;;36182:116;;36270:13;36182:26;:116::i;:::-;36383:37;;;;:18;:37;;;;;;;;;36348:117;;;;;;;;;;;;;;;;;;;;;;36383:37;36348:117;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36348:117:0;;;;;;;;;;;;;;;;;;;;;36437:13;36348:18;:117::i;:::-;36334:131;;36491:6;36490:7;36486:164;;;36554:37;;;;:18;:37;;;;;36514:124;;36610:13;36514:21;:124::i;:::-;36679:137;;;;;;-1:-1:-1;;;;;36679:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35376:1448;;;;;:::o;33848:1364::-;34689:12;34041:20;;;:10;:20;;;;;;-1:-1:-1;;;;;34041:20:0;34065:10;34041:34;34019:120;;;;;-1:-1:-1;;;;;34019:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34182:28:0;;;;;;:13;:28;;;;;;;;:38;;;;;;;;;:54;-1:-1:-1;34182:54:0;34160:149;;;;;-1:-1:-1;;;;;34160:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34384:28:0;;;;;;:13;:28;;;;;;;;:38;;;;;;;;;;:53;;;34330:107;;;;34462:43;34458:196;;;34565:28;;;;:18;:28;;;;;34522:116;;34610:13;34522:26;:116::i;:::-;34752:204;;;-1:-1:-1;;;;;34752:204:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;34752:204:0;;;;;;;25:18:-1;;61:17;;34752:204:0;182:15:-1;34752:204:0;179:29:-1;160:49;;34715:252:0;;;;:18;;;;:252;;;;25:18:-1;34715:252:0;;25:18:-1;-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;34715:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34988:57:0;;;;;;;;-1:-1:-1;;;;;34988:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35071:133;;;;;;;;;;;;-1:-1:-1;;;;;35071:133:0;;;;;;;;;;;;;;;;;;;;;;;;33848:1364;;;;;:::o;28022:95::-;28093:9;:16;28022:95;:::o;8362:54::-;;;:::o;15728:355::-;15815:8;11713:39;11731:10;11743:8;11713:17;:39::i;:::-;11705:48;;;;;;;;-1:-1:-1;;;;;15844:19:0;;;;15836:28;;;;;;-1:-1:-1;;;;;15883:17:0;;;;15875:26;;;;;;15916:30;15930:5;15937:8;15916:13;:30::i;:::-;15957:32;15973:5;15980:8;15957:15;:32::i;:::-;16000:25;16011:3;16016:8;16000:10;:25::i;:::-;16066:8;16061:3;-1:-1:-1;;;;;16045:30:0;16054:5;-1:-1:-1;;;;;16045:30:0;;;;;;;;;;;15728:355;;;;:::o;27672:190::-;27754:7;27791:17;27801:6;27791:9;:17::i;:::-;27782:26;;27774:35;;;;;;-1:-1:-1;;;;;27827:19:0;;;;;;:11;:19;;;;;:27;;27847:6;;27827:27;;;;;;;;;;;;;;27820:34;;27672:190;;;;:::o;32191:119::-;22666:7;;-1:-1:-1;;;;;22666:7:0;22652:10;:21;22644:30;;;;;;32274:7;;:28;;-1:-1:-1;;;;;32274:7:0;;;;;;32291:10;;32274:7;:28;:7;:28;32291:10;32274:7;;:28;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32274:28:0;32191:119::o;24884:28::-;;;;:::o;16738:212::-;16829:8;11713:39;11731:10;11743:8;11713:17;:39::i;:::-;11705:48;;;;;;;;16900:42;16917:5;16924:3;16929:8;16900:42;;;;;;;;;;;;;:16;:42::i;:::-;16738:212;;;;:::o;22201:22::-;;;-1:-1:-1;;;;;22201:22:0;;:::o;23354:186::-;22873:12;;-1:-1:-1;;;;;22873:12:0;22859:10;:26;22851:35;;;;;;23449:12;;23442:5;;23421:41;;-1:-1:-1;;;;;23449:12:0;;;;23442:5;;;;23421:41;;23449:12;;23421:41;23482:12;;;23474:5;:20;;-1:-1:-1;;;;;;23474:20:0;;;-1:-1:-1;;;;;23482:12:0;;23474:20;;;;23506:25;;;23354:186::o;12977:153::-;13032:4;13065:20;;;:10;:20;;;;;;-1:-1:-1;;;;;13065:20:0;13103:19;;;12977:153::o;28470:::-;28529:7;28566:13;:11;:13::i;:::-;28557:22;;28549:31;;;;;;28598:9;:17;;28608:6;;28598:17;;;;;;;;;;;;;;28591:24;;28470:153;;;:::o;25547:62::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;12596:182::-;12652:7;12688:20;;;:10;:20;;;;;;-1:-1:-1;;;;;12688:20:0;12727:19;;;12719:28;;;;;;12765:5;12596:182;-1:-1:-1;;12596:182:0:o;26310:93::-;22666:7;;-1:-1:-1;;;;;22666:7:0;22652:10;:21;22644:30;;;;;;26380:12;:14;;;;;;;;26369:26;;26375:3;;26369:5;:26::i;12207:155::-;12263:7;-1:-1:-1;;;;;12291:20:0;;;;12283:29;;;;;;-1:-1:-1;;;;;;12330:24:0;;;;;:16;:24;;;;;;;12207:155::o;22138:20::-;;;-1:-1:-1;;;;;22138:20:0;;:::o;26709:82::-;26776:7;26769:14;;;;;;;;-1:-1:-1;;26769:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26750:6;;26769:14;;26776:7;;26769:14;;26776:7;26769:14;;;;;;;;;;;;;;;;;;;;;;;;36836:303;-1:-1:-1;;;;;37017:58:0;;;36969:15;37017:58;;;:13;:58;;;;;;;;:114;;;;;;;;;36836:303::o;14564:223::-;-1:-1:-1;;;;;14646:17:0;;14653:10;14646:17;;14638:26;;;;;;14693:10;14675:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;14675:34:0;;;;;;;;;;;;:46;;-1:-1:-1;;14675:46:0;;;;;;;;;;14737:42;;;;;;;14675:34;;14693:10;14737:42;;;;;;;;;;;14564:223;;:::o;24842:29::-;;;;;;;;;;;;;;;-1:-1:-1;;24842:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31666:388::-;31723:14;31739:15;31756:10;31767:19;31806:16;31813:8;31806:6;:16::i;:::-;31798:25;;;;;;;;31854:19;;;;:9;:19;;;;;;;;;31839:46;;;;;;-1:-1:-1;;31839:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31854:19;;31839:46;;31854:19;31839:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31912:19:0;;;;:9;:19;;;;;;;;;31901:42;;;;;;;;;;;-1:-1:-1;;31901:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;31839:46;;-1:-1:-1;31912:19:0;-1:-1:-1;31901:42:0;;-1:-1:-1;31901:42:0;;31912:19;31901:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31970:19:0;;;;:9;:19;;;;;;;;;31959:42;;;;;;;;;;;-1:-1:-1;;31959:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;31901;;-1:-1:-1;31970:19:0;-1:-1:-1;31959:42:0;;-1:-1:-1;31959:42:0;;31970:19;31959:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32023:9;:19;32033:8;32023:19;;;;;;;;;;;:23;;32017:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31666:388;;;;;:::o;32475:1207::-;32690:250;;;32828:10;32690:250;;;;32873:4;32690:250;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;32690:250:0;;;;;;;25:18:-1;;61:17;;32690:250:0;182:15:-1;32690:250:0;179:29:-1;160:49;;32653:298:0;;;;32627:12;;;;-1:-1:-1;;;;;32653:18:0;;;32690:250;;32653:298;;;;;;25:18:-1;32627:12:0;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32653:298:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32972:89:0;;;;;;;;-1:-1:-1;;;;;32972:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33137:28:0;;;;;;:13;:28;;;;;;;;:38;;;;;;;;;;:53;;33082:108;;33266:18;:28;;;;;;33229:112;;;;;;;;;;;;;;;;;;;;;;33266:28;33229:112;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33229:112:0;;;;;;;;;;;;;;;;;;;;;33313:13;33229:18;:112::i;:::-;33215:126;;33367:6;33366:7;33362:155;;;33430:28;;;;:18;:28;;;;;33390:115;;33477:13;33390:21;:115::i;:::-;33546:128;;;;;;;;;;;;-1:-1:-1;;;;;33546:128:0;;;;;;33653:10;33546:128;;;;;;;;;;;;;;;32475:1207;;;;;:::o;26801:126::-;-1:-1:-1;;;;;26899:20:0;;;;;;:11;:20;;;;;;;;;26892:27;;;;;;;;;;;;;;;;;26870:9;;26892:27;;;26899:20;26892:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26801:126;;;:::o;17679:290::-;17783:8;11713:39;11731:10;11743:8;11713:17;:39::i;:::-;11705:48;;;;;;;;17804:34;17817:5;17824:3;17829:8;17804:12;:34::i;:::-;17907:53;17932:5;17939:3;17944:8;17954:5;17907:24;:53::i;:::-;17899:62;;;;;;;;17679:290;;;;;:::o;27141:146::-;27198:6;27225:16;27232:8;27225:6;:16::i;:::-;27217:25;;;;;;;;27260:19;;;;:9;:19;;;;;;;;;27253:26;;;;;;-1:-1:-1;;27253:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27260:19;;27253:26;;27260:19;27253:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27253:26:0;;27141:146;-1:-1:-1;;;;;;27141:146:0:o;23657:137::-;22471:5;;-1:-1:-1;;;;;22471:5:0;22457:10;:19;22449:28;;;;;;-1:-1:-1;;;;;23732:22:0;;;;23724:31;;;;;;23767:7;:18;;-1:-1:-1;;;;;;23767:18:0;-1:-1:-1;;;;;23767:18:0;;;;;;;;;;23657:137::o;24769:41::-;;;;;;;;;;;;;;;-1:-1:-1;;24769:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22166:27;;;-1:-1:-1;;;;;22166:27:0;;:::o;15120:150::-;-1:-1:-1;;;;;15226:25:0;;;15202:4;15226:25;;;:17;:25;;;;;;;;:36;;;;;;;;;;;;;;;15120:150::o;37394:337::-;37617:28;;;;:18;:28;;;;;;;;;:35;37603:50;;;;;;;;;;;;;;;;37507:37;;37603:50;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;37603:50:0;-1:-1:-1;37691:28:0;;;;:18;:28;;;;;;;;;37668:51;;;;;;;;;;;;;;;;;37580:73;;-1:-1:-1;37668:51:0;;;;;37691:28;37668:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37668:51:0;;;;;;;;;;;;;;;;;;;;;;37394:337;;;:::o;31172:482::-;31344:10;31323:17;31331:8;31323:7;:17::i;:::-;-1:-1:-1;;;;;31323:31:0;;31315:40;;;;;;31370:19;;;;:9;:19;;;;;;;;:46;;;;;;;;:::i;:::-;-1:-1:-1;31442:19:0;;;;:9;:19;;;;;;;;;31431:42;;;;;;-1:-1:-1;;31431:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31442:19;;31431:42;;31442:19;31431:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31499:19:0;;;;:9;:19;;;;;;;;;31488:42;;;;;;;;;;;-1:-1:-1;;31488:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;31431;;-1:-1:-1;31499:19:0;-1:-1:-1;31488:42:0;;-1:-1:-1;31488:42:0;;31499:19;31488:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31556:19:0;;;;:9;:19;;;;;;;;;31545:42;;;;;;;;;;;-1:-1:-1;;31545:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;31488;;-1:-1:-1;31556:19:0;-1:-1:-1;31545:42:0;;-1:-1:-1;31545:42:0;;31556:19;31545:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31602:19:0;;;;:9;:19;;;;;;;;:30;;31545:42;;-1:-1:-1;31602:30:0;;:23;;;;;-1:-1:-1;31602:30:0;;;;-1:-1:-1;31602:30:0;:::i;:::-;;31172:482;;;;;;:::o;25622:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25622:52:0;;-1:-1:-1;25622:52:0;;-1:-1:-1;25622:52:0:o;23145:106::-;22471:5;;-1:-1:-1;;;;;22471:5:0;22457:10;:19;22449:28;;;;;;23219:12;:23;;-1:-1:-1;;;;;;23219:23:0;-1:-1:-1;;;;;23219:23:0;;;;;;;;;;23145:106::o;37151:231::-;22471:5;;37262:15;;-1:-1:-1;;;;;22471:5:0;22457:10;:19;22449:28;;;;;;37304:16;37311:8;37304:6;:16::i;:::-;37296:25;;;;;;;;37343:19;;;;:9;:19;;;;;;;;;37332:42;;;;;;-1:-1:-1;;37332:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37343:19;;37332:42;;37343:19;37332:42;;;;;;;;;;;;;;;;;;;;;;;;19144:187;-1:-1:-1;;;;;19218:17:0;;;;19210:26;;;;;;19247:25;19258:3;19263:8;19247:10;:25::i;:::-;19288:35;;19314:8;;-1:-1:-1;;;;;19288:35:0;;;19305:1;;19288:35;;19305:1;;19288:35;19144:187;;:::o;37747:377::-;37882:6;37877:240;37898:12;;37894:16;;37877:240;;;37948:5;-1:-1:-1;;;;;37936:17:0;:5;37942:1;37936:8;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37936:8:0;:17;37932:174;;;37991:12;;37985:5;;-1:-1:-1;;37991:16:0;;;37985:23;;;;;;;;;;;;;;;;37974:8;;-1:-1:-1;;;;;37985:23:0;;;;37974:5;;37980:1;;37974:8;;;;;;;;;;;;;;;:34;;-1:-1:-1;;;;;;37974:34:0;-1:-1:-1;;;;;37974:34:0;;;;;;;;;;38040:12;;;;-1:-1:-1;;38040:16:0;;;38034:23;;;;;;;;;;;;;;;38027:30;;-1:-1:-1;;;;;;38027:30:0;;;38076:14;;;:5;-1:-1:-1;;38076:14:0;;;:::i;:::-;;37932:174;37912:3;;37877:240;;;37747:377;;;:::o;38298:358::-;38420:4;;;38458:158;38479:5;:12;38475:1;:16;38458:158;;;38529:5;-1:-1:-1;;;;;38517:17:0;:5;38523:1;38517:8;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38517:17:0;;38513:92;;;38562:4;38554:12;;38584:5;;38513:92;38493:3;;38458:158;;;-1:-1:-1;38643:5:0;38298:358;-1:-1:-1;;;38298:358:0:o;38136:150::-;27:10:-1;;39:1;23:18;;45:23;;-1:-1;38261:17:0;;;;;;;;;;;;-1:-1:-1;;;;;;38261:17:0;-1:-1:-1;;;;;38261:17:0;;;;;;;;;38136:150::o;18343:523::-;18481:4;18503:13;18519:17;18527:8;18519:7;:17::i;:::-;18503:33;;18742:5;-1:-1:-1;;;;;18730:17:0;:8;-1:-1:-1;;;;;18730:17:0;;:67;;;;18789:8;-1:-1:-1;;;;;18764:33:0;:21;18776:8;18764:11;:21::i;:::-;-1:-1:-1;;;;;18764:33:0;;18730:67;:117;;;;18814:33;18831:5;18838:8;18814:16;:33::i;:::-;18708:150;18343:523;-1:-1:-1;;;;18343:523:0:o;19622:297::-;19728:6;-1:-1:-1;;;;;19707:27:0;:17;19715:8;19707:7;:17::i;:::-;-1:-1:-1;;;;;19707:27:0;;19699:36;;;;;;19786:1;19750:24;;;:14;:24;;;;;;-1:-1:-1;;;;;19750:24:0;:38;19746:166;;19840:1;19805:24;;;:14;:24;;;;;;:37;;-1:-1:-1;;;;;;19805:37:0;;;19862:38;19820:8;;19840:1;-1:-1:-1;;;;;19862:38:0;;;;;19840:1;;19862:38;19622:297;;:::o;29853:940::-;29984:18;30042:22;30110:17;29931:38;29953:5;29960:8;29931:21;:38::i;:::-;30005:26;;;;:16;:26;;;;;;;;;-1:-1:-1;;;;;30067:18:0;;;;:11;:18;;;;;;:25;30005:26;;-1:-1:-1;30067:32:0;;30097:1;30067:32;:29;:32;:::i;:::-;-1:-1:-1;;;;;30130:18:0;;;;;;:11;:18;;;;;:34;;30042:57;;-1:-1:-1;30130:18:0;30042:57;;30130:34;;;;;;;;;;;;;;30110:54;;30212:9;30179:11;:18;30191:5;-1:-1:-1;;;;;30179:18:0;-1:-1:-1;;;;;30179:18:0;;;;;;;;;;;;30198:10;30179:30;;;;;;;;;;;;;;;;;;;;;:42;;;;-1:-1:-1;;;;;30232:18:0;;;;:11;:18;;;;;;:34;;30251:14;;30232:34;;;;;;;;;;;;;;;;;:38;;;;-1:-1:-1;;;;;30666:18:0;;;;:11;:18;;;;;;:27;;;;;-1:-1:-1;;30666:27:0;;;:::i;:::-;-1:-1:-1;30733:1:0;30704:26;;;:16;:26;;;;;;:30;;;30745:27;;;;;;:40;-1:-1:-1;;29853:940:0:o;29304:249::-;29417:14;29375:31;29392:3;29397:8;29375:16;:31::i;:::-;-1:-1:-1;;;;;;29434:16:0;;;;;;;:11;:16;;;;;;;;:23;;39:1:-1;23:18;;45:23;;29468:31:0;;;;;;;;;;;29510:26;;;:16;:26;;;;;:35;29304:249::o;21496:408::-;21668:4;21765:13;21695:16;:3;-1:-1:-1;;;;;21695:14:0;;:16::i;:::-;21694:17;21690:61;;;21735:4;21728:11;;;;21690:61;21796:3;-1:-1:-1;;;;;21781:36:0;;21828:5;21835:8;21845:5;21781:70;;;;;;;;;;;;;-1:-1:-1;;;;;21781:70:0;-1:-1:-1;;;;;21781:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;21781:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21781:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21781:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21781:70:0;-1:-1:-1;;;;;;21870:25:0;;21880:15;21870:25;;-1:-1:-1;21781:70:0;-1:-1:-1;21496:408:0;;;;;;;;:::o;20725:232::-;20832:5;-1:-1:-1;;;;;20811:26:0;:17;20819:8;20811:7;:17::i;:::-;-1:-1:-1;;;;;20811:26:0;;20803:35;;;;;;-1:-1:-1;;;;;20875:23:0;;;;;;:16;:23;;;;;;:30;;20903:1;20875:30;:27;:30;:::i;:::-;-1:-1:-1;;;;;20849:23:0;;;;;;;:16;:23;;;;;;;;:56;;;;20916:20;;;:10;:20;;;;:33;;-1:-1:-1;;;;;;20916:33:0;;;20725:232::o;2367:123::-;2425:7;2452:6;;;;2445:14;;;;-1:-1:-1;2477:5:0;;;2367:123::o;20203:222::-;20314:1;20282:20;;;:10;:20;;;;;;-1:-1:-1;;;;;20282:20:0;:34;20274:43;;;;;;20328:20;;;;:10;:20;;;;;;;;:26;;-1:-1:-1;;;;;;20328:26:0;-1:-1:-1;;;;;20328:26:0;;;;;;;;20389:21;;:16;:21;;;;;;;:28;;:25;:28::i;:::-;-1:-1:-1;;;;;20365:21:0;;;;;;;:16;:21;;;;;:52;;;;-1:-1:-1;20203:222:0:o;3164:629::-;3221:4;3741:17;;3777:8;;3164:629::o;2569:141::-;2653:5;;;2676:6;;;;2669:14;;;24113:14552;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24113:14552:0;;;-1:-1:-1;24113:14552:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://29e4b67ad1b6b1118934ba283e4466ea7b77a8bd4be55163bbef55497a3e9089
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.