ETH Price: $3,458.21 (+1.16%)

Contract

0x8E597410719b9C570E13fBC0e7725cce3BD331A0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...129359682021-07-31 22:39:141241 days ago1627771154IN
0x8E597410...e3BD331A0
0 ETH0.0014732432
Transfer From127974562021-07-10 4:16:371263 days ago1625890597IN
0x8E597410...e3BD331A0
0 ETH0.0006495115
Set Approval For...127974152021-07-10 4:05:331263 days ago1625889933IN
0x8E597410...e3BD331A0
0 ETH0.0007366216
Transfer From127973842021-07-10 3:57:421263 days ago1625889462IN
0x8E597410...e3BD331A0
0 ETH0.0009060115
Set Approval For...121357252021-03-29 18:20:381366 days ago1617042038IN
0x8E597410...e3BD331A0
0 ETH0.00916753204.9114041
Mint121253842021-03-28 4:17:331367 days ago1616905053IN
0x8E597410...e3BD331A0
0 ETH0.005846100
Mint121253832021-03-28 4:17:101367 days ago1616905030IN
0x8E597410...e3BD331A0
0 ETH0.005846100
Mint121253832021-03-28 4:17:101367 days ago1616905030IN
0x8E597410...e3BD331A0
0 ETH0.007346100
Mint121253792021-03-28 4:15:541367 days ago1616904954IN
0x8E597410...e3BD331A0
0 ETH0.0065820189.6
Mint121253752021-03-28 4:14:561367 days ago1616904896IN
0x8E597410...e3BD331A0
0 ETH0.007346100
Mint121253712021-03-28 4:13:421367 days ago1616904822IN
0x8E597410...e3BD331A0
0 ETH0.005846100
Mint121253672021-03-28 4:13:041367 days ago1616904784IN
0x8E597410...e3BD331A0
0 ETH0.005846100
Mint121253612021-03-28 4:12:011367 days ago1616904721IN
0x8E597410...e3BD331A0
0 ETH0.005846100
Mint121253582021-03-28 4:10:331367 days ago1616904633IN
0x8E597410...e3BD331A0
0 ETH0.007346100
Mint121253522021-03-28 4:09:201367 days ago1616904560IN
0x8E597410...e3BD331A0
0 ETH0.005846100
Mint121253372021-03-28 4:06:271367 days ago1616904387IN
0x8E597410...e3BD331A0
0 ETH0.007346100
Mint121253332021-03-28 4:04:511367 days ago1616904291IN
0x8E597410...e3BD331A0
0 ETH0.007346100
Mint121253312021-03-28 4:04:071367 days ago1616904247IN
0x8E597410...e3BD331A0
0 ETH0.007346100
Mint121253292021-03-28 4:03:491367 days ago1616904229IN
0x8E597410...e3BD331A0
0 ETH0.007346100
Mint121253222021-03-28 4:01:321367 days ago1616904092IN
0x8E597410...e3BD331A0
0 ETH0.00786022107
Mint121253102021-03-28 3:57:191367 days ago1616903839IN
0x8E597410...e3BD331A0
0 ETH0.0052603290
Mint121252702021-03-28 3:48:461367 days ago1616903326IN
0x8E597410...e3BD331A0
0 ETH0.0088448100
Base121252582021-03-28 3:47:131367 days ago1616903233IN
0x8E597410...e3BD331A0
0 ETH0.0084828100
Permit121252542021-03-28 3:46:231367 days ago1616903183IN
0x8E597410...e3BD331A0
0 ETH0.0043657100
Permit121252492021-03-28 3:45:291367 days ago1616903129IN
0x8E597410...e3BD331A0
0 ETH0.0039280590
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BlobDefinition

Compiler Version
v0.5.10+commit.5a6ea5b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: BlobDefinition.sol
pragma solidity 0.5.10;

import './LibAddress.sol';
import './LibInteger.sol';

/**
 * @title BlobDefinition 
 * @dev HBD token contract adhering to ERC721 standard
 */
contract BlobDefinition
{
    using LibAddress for address;
    using LibInteger for uint;

    event Transfer(address indexed from, address indexed to, uint indexed id);
    event Approval(address indexed owner, address indexed approved, uint indexed id);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev The admin of the contract
     */
    address payable private _admin;

    /**
     * @dev The total minted tokens
     */
    uint private _supply;

    /**
     * @dev The base url of token info page
     */
    string private _base_uri;

    /**
     * @dev Permitted addresses to carry out special functions
     */
    mapping (address => bool) private _permissions;

    /**
     * @dev Number of tokens held by an address
     */
    mapping (address => uint) private _token_balances;

    /**
     * @dev Owners of each token
     */
    mapping (uint => address) private _token_owners;

    /**
     * @dev Approved third party addresses for each token
     */
    mapping (uint => address) private _token_approvals;

    /**
     * @dev Approved third party addresses to manage all tokens belonging to some address
     */
    mapping (address => mapping (address => bool)) private _token_operators;

    /**
     * @dev Interfaces supported by this contract
     */
    mapping(bytes4 => bool) private _supported_interfaces;

    /**
     * @dev The name of token
     */
    string private constant _name = "Hash Blob Definition";

    /**
     * @dev The symbol of token
     */
    string private constant _symbol = "HBD";

    /**
     * Interface id for ERC165
     */
    bytes4 private constant _interface_165 = 0x01ffc9a7;

    /**
     * Interface id for ERC721
     */
    bytes4 private constant _interface_721 = 0x80ac58cd;

    /**
     * Maximum number of tokens to be minted
     */
    uint private constant _max_supply = 16384;

    /**
     * @dev Initialise the contract
     */
    constructor () public
    {
        //The contract creator becomes the admin
        _admin = msg.sender;

        //Register supported interfaces
        _supported_interfaces[_interface_165] = true;
        _supported_interfaces[_interface_721] = true;
    }

    /**
     * @dev Allow access only for the admin of contract
     */
    modifier onlyAdmin()
    {
        require(msg.sender == _admin);
        _;
    }

    /**
     * @dev Allow access only for the permitted addresses
     */
    modifier onlyPermitted()
    {
        require(_permissions[msg.sender]);
        _;
    }

    /**
     * @dev Give or revoke permission of accounts
     * @param account The address to change permission
     * @param permission True if the permission should be granted, false if it should be revoked
     */
    function permit(address account, bool permission) public onlyAdmin
    {
        _permissions[account] = permission;
    }

    /**
     * @dev Withdraw from the balance of this contract
     * @param amount The amount to be withdrawn, if zero is provided the whole balance will be withdrawn
     */
    function clean(uint amount) public onlyAdmin
    {
        if (amount == 0){
            _admin.transfer(address(this).balance);
        } else {
            _admin.transfer(amount);
        }
    }

    /**
     * @dev Set the base uri
     * @param uri The base uri
     */
    function base(string memory uri) public onlyAdmin
    {
        _base_uri = uri;
    }

    /**
     * @dev Move token from one account to another
     * @param from The token sender address
     * @param to The recipient address
     * @param id The token id to transfer
     */
    function transferFrom(address from, address to, uint id) public
    {
        //The token must exist
        require(_isExist(id));

        //Caller must be approved or the owner of token
        require(_isApprovedOrOwner(msg.sender, id));

        //Do the transfer
        _send(from, to, id, "");
    }

    /**
     * @dev Safely move token from one account to another
     * @param from The token sender address
     * @param to The recipient address
     * @param id The token id to transfer
     */
    function safeTransferFrom(address from, address to, uint id) public
    {
        //The token must exist
        require(_isExist(id));

        //Caller must be approved or the owner of token
        require(_isApprovedOrOwner(msg.sender, id));

        //Do the transfer
        _send(from, to, id, "");
    }

    /**
     * @dev Safely move token from one account to another
     * @param from The token sender address
     * @param to The recipient address
     * @param id The token id to transfer
     * @param data Additional extra data
     */
    function safeTransferFrom(address from, address to, uint id, bytes memory data) public
    {
        //The token must exist
        require(_isExist(id));

        //Caller must be approved or the owner of token
        require(_isApprovedOrOwner(msg.sender, id));

        //Do the transfer
        _send(from, to, id, data);
    }

    /**
     * @dev Allow a third party to transfer caller's token
     * @param to The address to allow
     * @param id The token id to allow transfer
     */
    function approve(address to, uint id) public
    {
        //The token must exist
        require(_isExist(id));

        //No need to approve the owner
        address owner = ownerOf(id);
        require(to != owner);

        //Caller must be the owner of token or an approved operator
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));
        
        //Grant approval
        _token_approvals[id] = to;

        //Emit events
        emit Approval(owner, to, id);
    }

    /**
     * @dev Grant or revoke approval for a third party to transfer all of caller's tokens
     * @param to The address to grant or revoke
     * @param approved Grant or revoke approval
     */
    function setApprovalForAll(address to, bool approved) public
    {
        //Cannot set own settings
        require(to != msg.sender);

        //Grant or revoke approval
        _token_operators[msg.sender][to] = approved;

        //Emit events
        emit ApprovalForAll(msg.sender, to, approved);
    }

    /**
     * @dev Mint tokens
     * @param to The owner of token
     */
    function mint(address to) public onlyPermitted returns (uint)
    {
        //No point of minting to zero address
        require(!to.isOriginAddress());

        //Must not exceed the maximum available tokens to be minted
        require(_supply < _max_supply);

        //Mint the token
        uint id = _supply.add(1);
        _token_owners[id] = to;
        _token_balances[to] = _token_balances[to].add(1);

        //Increment supply
        _supply = id;

        //Emit events
        emit Transfer(address(0), to, id);

        return id;
    }

    /**
     * @dev Enable tokens
     * @param to The owner of token
     * @param id The token id to enable
     */
    function enable(address to, uint id) public onlyPermitted
    {
        //Must be a valid id
        require(id > 0);

        //No point of minting to zero address
        require(!to.isOriginAddress());

        //Token does not already exists
        require(!_isExist(id));

        //Enable the token
        _token_owners[id] = to;
        _token_balances[to] = _token_balances[to].add(1);

        //Emit events
        emit Transfer(address(0), to, id);
    }

    /**
     * @dev Burn tokens
     * @param owner The owner of token
     * @param id The token id to burn
     */
    function disable(address owner, uint id) public onlyPermitted
    {
        //Token must exist
        require(_isExist(id));

        //Token must be owned by sent in address
        require(ownerOf(id) == owner);

        //Disable the token
        _token_approvals[id] = address(0);
        _token_balances[owner] = _token_balances[owner].sub(1);
        _token_owners[id] = address(0);

        //Emit events
        emit Transfer(owner, address(0), id);
    }

    /**
     * @dev Safely move token from one account to another
     * @param from The token sender address
     * @param to The recipient address
     * @param id The token id to transfer
     */
    function move(address from, address to, uint id) public onlyPermitted
    {
        //The token must exist
        require(_isExist(id));

        //Do the transfer
        _send(from, to, id, "");
    }

    /**
     * @dev Get the approved address for a token
     * @param id The token id
     * @return address The approved address
     */
    function getApproved(uint id) public view returns (address)
    {
        return _token_approvals[id];
    }

    /**
     * @dev Check whether the provided operator is approved to manage owner's tokens
     * @param owner The token owner address
     * @param operator The operator address to check against
     * @return bool True if the operator is approved, otherwise false
     */
    function isApprovedForAll(address owner, address operator) public view returns (bool)
    {
        return _token_operators[owner][operator];
    }

    /**
     * @dev Get number of tokens belonging to an account
     * @param account The address of account to check
     * @return uint The tokens balance
     */
    function balanceOf(address account) public view returns (uint)
    {
        return _token_balances[account];
    }

    /**
     * @dev Get the owner of a token
     * @param id The id of token
     * @return address The owner of token
     */
    function ownerOf(uint id) public view returns (address)
    {
        return _token_owners[id];
    }

    /**
     * @dev Get the url of token info page
     * @param id The id of token
     * @return string The url of token info page
     */
    function tokenURI(uint id) public view returns (string memory)
    {
        if(_isExist(id)) {
            return string(abi.encodePacked(_base_uri, id.toString()));
        } else {
            return "";
        }
    }

    /**
     * @dev Get the url of contract info page
     * @return string The url of contract info page
     */
    function contractURI() public view returns (string memory)
    {
        return _base_uri;
    }

    /**
     * @dev Check whether the given interface is supported by this contract
     * @param id The interface id to check
     * @return True if the interface is supported
     */
    function supportsInterface(bytes4 id) external view returns (bool) {
        return _supported_interfaces[id];
    }

    /**
     * @dev Get the total number of tokens in existance
     * @return uint Number of tokens
     */
    function totalSupply() public view returns (uint)
    {
        return _supply;
    }

    /**
     * @dev Get the maximum number of tokens minted
     * @return uint Maximum number of tokens
     */
    function maxSupply() public pure returns (uint)
    {
        return _max_supply;
    }

    /**
     * @dev Get name of token
     * @return string The name
     */
    function name() public pure returns (string memory)
    {
        return _name;
    }

    /**
     * @dev Get symbol of token
     * @return string The symbol
     */
    function symbol() public pure returns (string memory)
    {
        return _symbol;
    }

    /**
     * @dev Check whether the provided address is permitted
     * @param account The address to check
     * @return bool True if the address is permitted, otherwise false
     */
    function isPermitted(address account) public view returns (bool)
    {
        return _permissions[account];
    }

    /**
     * @dev Check whether the token exists
     * @param id The id of token
     * @return bool True if the token exists, otherwise false
     */
    function _isExist(uint id) private view returns (bool)
    {
        return ownerOf(id) != address(0);
    }

    /**
     * @dev Check whether the provided address is the owner of token or a approved address
     * @param spender The address to check
     * @param id The id of token
     * @return bool True if the provided address is the owner of token or a approved address, otherwise false
     */
    function _isApprovedOrOwner(address spender, uint id) private view returns (bool)
    {
        address owner = ownerOf(id);
        return (spender == owner || getApproved(id) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Transfer tokens from one account to another
     * @param from The token owner
     * @param to The token receiver
     * @param id The token id to transfer
     * @param data Additional data to add to the transaction
     */
    function _send(address from, address to, uint id, bytes memory data) private
    {
        //The token must be owned by the provided address
        require(ownerOf(id) == from);

        //No point of transferring to zero address
        require(!to.isOriginAddress());

        //Do nothing with the data
        delete data;

        //Clear approvals
        _token_approvals[id] = address(0);

        //Reduce the balance from owner
        _token_balances[from] = _token_balances[from].sub(1);

        //Increase the balance of receiver
        _token_balances[to] = _token_balances[to].add(1);

        //Set the new owner
        _token_owners[id] = to;

        //Emit events
        emit Transfer(from, to, id);
    }
}

File 2 of 3: LibAddress.sol
pragma solidity 0.5.10;

/**
 * @title LibAddress 
 * @dev Address related utility functions
 */
library LibAddress
{
    /**
     * @dev Check whether the given address is zero address
     * @param account The address to check against
     * @return bool True if the given address is zero address
     */
    function isOriginAddress(address account) internal pure returns (bool)
    {
        return (account == address(0));
    }
}

File 3 of 3: LibInteger.sol
pragma solidity 0.5.10;

/**
 * @title LibInteger 
 * @dev Integer related utility functions
 */
library LibInteger
{    
    /**
     * @dev Safely multiply, revert on overflow
     * @param a The first number
     * @param b The second number
     * @return uint The answer
    */
    function mul(uint a, uint b) internal pure returns (uint)
    {
        if (a == 0) {
            return 0;
        }

        uint c = a * b;
        require(c / a == b);

        return c;
    }

    /**
     * @dev Safely divide, revert if divisor is zero
     * @param a The first number
     * @param b The second number
     * @return uint The answer
    */
    function div(uint a, uint b) internal pure returns (uint)
    {
        require(b > 0, "");
        uint c = a / b;

        return c;
    }

    /**
     * @dev Safely substract, revert if answer is negative
     * @param a The first number
     * @param b The second number
     * @return uint The answer
    */
    function sub(uint a, uint b) internal pure returns (uint)
    {
        require(b <= a, "");
        uint c = a - b;

        return c;
    }

    /**
     * @dev Safely add, revert if overflow
     * @param a The first number
     * @param b The second number
     * @return uint The answer
    */
    function add(uint a, uint b) internal pure returns (uint)
    {
        uint c = a + b;
        require(c >= a, "");

        return c;
    }

    /**
     * @dev Convert number to string
     * @param value The number to convert
     * @return string The string representation
    */
    function toString(uint value) internal pure returns (string memory)
    {
        if (value == 0) {
            return "0";
        }

        uint temp = value;
        uint digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }

        bytes memory buffer = new bytes(digits);
        uint index = digits - 1;
        
        temp = value;
        while (temp != 0) {
            buffer[index--] = byte(uint8(48 + temp % 10));
            temp /= 10;
        }
        
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"id","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":"pure","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"uri","type":"string"}],"name":"base","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPermitted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"clean","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"mint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"move","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"contractURI","outputs":[{"name":"","type":"string"}],"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":false,"inputs":[{"name":"account","type":"address"},{"name":"permission","type":"bool"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"enable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"id","type":"uint256"}],"name":"disable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"id","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"}]

608060405234801561001057600080fd5b50600080546001600160a01b0319163317815560086020527f9c1077d48c1ee2b23ae7e47ca8a0ebdbffc921a368b14a8244a53034b67dcd47805460ff1990811660019081179092557f80ac58cd000000000000000000000000000000000000000000000000000000009092527fb64e51f96476f71a82a586ff6df0320abb1ea1ca8eef8a1f644f514b4d62b5128054909216179055611228806100b56000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063d5abeb011161007c578063d5abeb011461056d578063e8a3d48514610575578063e985e9c51461057d578063f186c67f146105ab578063fe102e88146105d9578063fe9f841e1461060557610158565b806370a08231146103f857806395d89b411461041e578063a22cb46514610426578063b88d4fde14610454578063bb35783b1461051a578063c87b56dd1461055057610158565b80632a18d71d116101155780632a18d71d146102cc5780633fd8cc4e1461037257806342842e0e146102965780636352211e14610398578063674ef0fa146103b55780636a627842146103d257610158565b806301ffc9a71461015d57806306fdde0314610198578063081812fc14610215578063095ea7b31461024e57806318160ddd1461027c57806323b872dd14610296575b600080fd5b6101846004803603602081101561017357600080fd5b50356001600160e01b031916610631565b604080519115158252519081900360200190f35b6101a0610654565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101da5781810151838201526020016101c2565b50505050905090810190601f1680156102075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102326004803603602081101561022b57600080fd5b5035610683565b604080516001600160a01b039092168252519081900360200190f35b61027a6004803603604081101561026457600080fd5b506001600160a01b03813516906020013561069e565b005b61028461075d565b60408051918252519081900360200190f35b61027a600480360360608110156102ac57600080fd5b506001600160a01b03813581169160208101359091169060400135610763565b61027a600480360360208110156102e257600080fd5b8101906020810181356401000000008111156102fd57600080fd5b82018360208201111561030f57600080fd5b8035906020019184600183028401116401000000008311171561033157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506107a8945050505050565b6101846004803603602081101561038857600080fd5b50356001600160a01b03166107d6565b610232600480360360208110156103ae57600080fd5b50356107f4565b61027a600480360360208110156103cb57600080fd5b503561080f565b610284600480360360208110156103e857600080fd5b50356001600160a01b03166108a8565b6102846004803603602081101561040e57600080fd5b50356001600160a01b031661098c565b6101a06109a7565b61027a6004803603604081101561043c57600080fd5b506001600160a01b03813516906020013515156109c4565b61027a6004803603608081101561046a57600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156104a557600080fd5b8201836020820111156104b757600080fd5b803590602001918460018302840111640100000000831117156104d957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a48945050505050565b61027a6004803603606081101561053057600080fd5b506001600160a01b03813581169160208101359091169060400135610a7f565b6101a06004803603602081101561056657600080fd5b5035610aa4565b610284610b9a565b6101a0610ba0565b6101846004803603604081101561059357600080fd5b506001600160a01b0381358116916020013516610c33565b61027a600480360360408110156105c157600080fd5b506001600160a01b0381351690602001351515610c61565b61027a600480360360408110156105ef57600080fd5b506001600160a01b038135169060200135610ca3565b61027a6004803603604081101561061b57600080fd5b506001600160a01b038135169060200135610d76565b6001600160e01b0319811660009081526008602052604090205460ff165b919050565b6040805180820190915260148152732430b9b410213637b1102232b334b734ba34b7b760611b60208201525b90565b6000908152600660205260409020546001600160a01b031690565b6106a781610e62565b6106b057600080fd5b60006106bb826107f4565b9050806001600160a01b0316836001600160a01b031614156106dc57600080fd5b336001600160a01b03821614806106f857506106f88133610c33565b61070157600080fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60015490565b61076c81610e62565b61077557600080fd5b61077f3382610e7f565b61078857600080fd5b6107a383838360405180602001604052806000815250610ede565b505050565b6000546001600160a01b031633146107bf57600080fd5b80516107d290600290602084019061113b565b5050565b6001600160a01b031660009081526003602052604090205460ff1690565b6000908152600560205260409020546001600160a01b031690565b6000546001600160a01b0316331461082657600080fd5b8061086c57600080546040516001600160a01b0390911691303180156108fc02929091818181858888f19350505050158015610866573d6000803e3d6000fd5b506108a5565b600080546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156107d2573d6000803e3d6000fd5b50565b3360009081526003602052604081205460ff166108c457600080fd5b6108d6826001600160a01b0316610ff8565b156108e057600080fd5b614000600154106108f057600080fd5b60006109076001805461100590919063ffffffff16565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0389169081179091558352600490915290205490915061094c906001611005565b6001600160a01b03841660008181526004602052604080822093909355600184905591518392906000805160206111d4833981519152908290a492915050565b6001600160a01b031660009081526004602052604090205490565b60408051808201909152600381526212109160ea1b602082015290565b6001600160a01b0382163314156109da57600080fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610a5182610e62565b610a5a57600080fd5b610a643383610e7f565b610a6d57600080fd5b610a7984848484610ede565b50505050565b3360009081526003602052604090205460ff16610a9b57600080fd5b61077f81610e62565b6060610aaf82610e62565b15610b85576002610abf83611040565b6040516020018083805460018160011615610100020316600290048015610b1d5780601f10610afb576101008083540402835291820191610b1d565b820191906000526020600020905b815481529060010190602001808311610b09575b5050825160208401908083835b60208310610b495780518252601f199092019160209182019101610b2a565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905061064f565b5060408051602081019091526000815261064f565b61400090565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b5050505050905090565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6000546001600160a01b03163314610c7857600080fd5b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b3360009081526003602052604090205460ff16610cbf57600080fd5b60008111610ccc57600080fd5b610cde826001600160a01b0316610ff8565b15610ce857600080fd5b610cf181610e62565b15610cfb57600080fd5b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03871690811790915583526004909152902054610d3d906001611005565b6001600160a01b0383166000818152600460205260408082209390935591518392906000805160206111d4833981519152908290a45050565b3360009081526003602052604090205460ff16610d9257600080fd5b610d9b81610e62565b610da457600080fd5b816001600160a01b0316610db7826107f4565b6001600160a01b031614610dca57600080fd5b600081815260066020908152604080832080546001600160a01b03191690556001600160a01b03851683526004909152902054610e0e90600163ffffffff61110416565b6001600160a01b0383166000818152600460209081526040808320949094558482526005905282812080546001600160a01b03191690559151839291906000805160206111d4833981519152908390a45050565b600080610e6e836107f4565b6001600160a01b0316141592915050565b600080610e8b836107f4565b9050806001600160a01b0316846001600160a01b03161480610ec65750836001600160a01b0316610ebb84610683565b6001600160a01b0316145b80610ed65750610ed68185610c33565b949350505050565b836001600160a01b0316610ef1836107f4565b6001600160a01b031614610f0457600080fd5b610f16836001600160a01b0316610ff8565b15610f2057600080fd5b50600081815260066020908152604080832080546001600160a01b03191690556001600160a01b03861683526004909152902054606090610f6890600163ffffffff61110416565b6001600160a01b038086166000908152600460205260408082209390935590851681522054610f9e90600163ffffffff61100516565b6001600160a01b038085166000818152600460209081526040808320959095558682526005905283812080546001600160a01b031916831790559251859391928816916000805160206111d483398151915291a450505050565b6001600160a01b03161590565b600082820183811015611039576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b9392505050565b60608161106557506040805180820190915260018152600360fc1b602082015261064f565b8160005b811561107d57600101600a82049150611069565b6060816040519080825280601f01601f1916602001820160405280156110aa576020820181803883390190505b50859350905060001982015b83156110fb57600a840660300160f81b828280600190039350815181106110d957fe5b60200101906001600160f81b031916908160001a905350600a840493506110b6565b50949350505050565b600082821115611135576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061117c57805160ff19168380011785556111a9565b828001600101855582156111a9579182015b828111156111a957825182559160200191906001019061118e565b506111b59291506111b9565b5090565b61068091905b808211156111b557600081556001016111bf56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a7230582046bfacd158a3cc57e80d012440f28a7dbe70e97a8aef448caeb68a2f90740c3864736f6c634300050a0032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063d5abeb011161007c578063d5abeb011461056d578063e8a3d48514610575578063e985e9c51461057d578063f186c67f146105ab578063fe102e88146105d9578063fe9f841e1461060557610158565b806370a08231146103f857806395d89b411461041e578063a22cb46514610426578063b88d4fde14610454578063bb35783b1461051a578063c87b56dd1461055057610158565b80632a18d71d116101155780632a18d71d146102cc5780633fd8cc4e1461037257806342842e0e146102965780636352211e14610398578063674ef0fa146103b55780636a627842146103d257610158565b806301ffc9a71461015d57806306fdde0314610198578063081812fc14610215578063095ea7b31461024e57806318160ddd1461027c57806323b872dd14610296575b600080fd5b6101846004803603602081101561017357600080fd5b50356001600160e01b031916610631565b604080519115158252519081900360200190f35b6101a0610654565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101da5781810151838201526020016101c2565b50505050905090810190601f1680156102075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102326004803603602081101561022b57600080fd5b5035610683565b604080516001600160a01b039092168252519081900360200190f35b61027a6004803603604081101561026457600080fd5b506001600160a01b03813516906020013561069e565b005b61028461075d565b60408051918252519081900360200190f35b61027a600480360360608110156102ac57600080fd5b506001600160a01b03813581169160208101359091169060400135610763565b61027a600480360360208110156102e257600080fd5b8101906020810181356401000000008111156102fd57600080fd5b82018360208201111561030f57600080fd5b8035906020019184600183028401116401000000008311171561033157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506107a8945050505050565b6101846004803603602081101561038857600080fd5b50356001600160a01b03166107d6565b610232600480360360208110156103ae57600080fd5b50356107f4565b61027a600480360360208110156103cb57600080fd5b503561080f565b610284600480360360208110156103e857600080fd5b50356001600160a01b03166108a8565b6102846004803603602081101561040e57600080fd5b50356001600160a01b031661098c565b6101a06109a7565b61027a6004803603604081101561043c57600080fd5b506001600160a01b03813516906020013515156109c4565b61027a6004803603608081101561046a57600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156104a557600080fd5b8201836020820111156104b757600080fd5b803590602001918460018302840111640100000000831117156104d957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a48945050505050565b61027a6004803603606081101561053057600080fd5b506001600160a01b03813581169160208101359091169060400135610a7f565b6101a06004803603602081101561056657600080fd5b5035610aa4565b610284610b9a565b6101a0610ba0565b6101846004803603604081101561059357600080fd5b506001600160a01b0381358116916020013516610c33565b61027a600480360360408110156105c157600080fd5b506001600160a01b0381351690602001351515610c61565b61027a600480360360408110156105ef57600080fd5b506001600160a01b038135169060200135610ca3565b61027a6004803603604081101561061b57600080fd5b506001600160a01b038135169060200135610d76565b6001600160e01b0319811660009081526008602052604090205460ff165b919050565b6040805180820190915260148152732430b9b410213637b1102232b334b734ba34b7b760611b60208201525b90565b6000908152600660205260409020546001600160a01b031690565b6106a781610e62565b6106b057600080fd5b60006106bb826107f4565b9050806001600160a01b0316836001600160a01b031614156106dc57600080fd5b336001600160a01b03821614806106f857506106f88133610c33565b61070157600080fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60015490565b61076c81610e62565b61077557600080fd5b61077f3382610e7f565b61078857600080fd5b6107a383838360405180602001604052806000815250610ede565b505050565b6000546001600160a01b031633146107bf57600080fd5b80516107d290600290602084019061113b565b5050565b6001600160a01b031660009081526003602052604090205460ff1690565b6000908152600560205260409020546001600160a01b031690565b6000546001600160a01b0316331461082657600080fd5b8061086c57600080546040516001600160a01b0390911691303180156108fc02929091818181858888f19350505050158015610866573d6000803e3d6000fd5b506108a5565b600080546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156107d2573d6000803e3d6000fd5b50565b3360009081526003602052604081205460ff166108c457600080fd5b6108d6826001600160a01b0316610ff8565b156108e057600080fd5b614000600154106108f057600080fd5b60006109076001805461100590919063ffffffff16565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b0389169081179091558352600490915290205490915061094c906001611005565b6001600160a01b03841660008181526004602052604080822093909355600184905591518392906000805160206111d4833981519152908290a492915050565b6001600160a01b031660009081526004602052604090205490565b60408051808201909152600381526212109160ea1b602082015290565b6001600160a01b0382163314156109da57600080fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610a5182610e62565b610a5a57600080fd5b610a643383610e7f565b610a6d57600080fd5b610a7984848484610ede565b50505050565b3360009081526003602052604090205460ff16610a9b57600080fd5b61077f81610e62565b6060610aaf82610e62565b15610b85576002610abf83611040565b6040516020018083805460018160011615610100020316600290048015610b1d5780601f10610afb576101008083540402835291820191610b1d565b820191906000526020600020905b815481529060010190602001808311610b09575b5050825160208401908083835b60208310610b495780518252601f199092019160209182019101610b2a565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905061064f565b5060408051602081019091526000815261064f565b61400090565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b5050505050905090565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6000546001600160a01b03163314610c7857600080fd5b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b3360009081526003602052604090205460ff16610cbf57600080fd5b60008111610ccc57600080fd5b610cde826001600160a01b0316610ff8565b15610ce857600080fd5b610cf181610e62565b15610cfb57600080fd5b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03871690811790915583526004909152902054610d3d906001611005565b6001600160a01b0383166000818152600460205260408082209390935591518392906000805160206111d4833981519152908290a45050565b3360009081526003602052604090205460ff16610d9257600080fd5b610d9b81610e62565b610da457600080fd5b816001600160a01b0316610db7826107f4565b6001600160a01b031614610dca57600080fd5b600081815260066020908152604080832080546001600160a01b03191690556001600160a01b03851683526004909152902054610e0e90600163ffffffff61110416565b6001600160a01b0383166000818152600460209081526040808320949094558482526005905282812080546001600160a01b03191690559151839291906000805160206111d4833981519152908390a45050565b600080610e6e836107f4565b6001600160a01b0316141592915050565b600080610e8b836107f4565b9050806001600160a01b0316846001600160a01b03161480610ec65750836001600160a01b0316610ebb84610683565b6001600160a01b0316145b80610ed65750610ed68185610c33565b949350505050565b836001600160a01b0316610ef1836107f4565b6001600160a01b031614610f0457600080fd5b610f16836001600160a01b0316610ff8565b15610f2057600080fd5b50600081815260066020908152604080832080546001600160a01b03191690556001600160a01b03861683526004909152902054606090610f6890600163ffffffff61110416565b6001600160a01b038086166000908152600460205260408082209390935590851681522054610f9e90600163ffffffff61100516565b6001600160a01b038085166000818152600460209081526040808320959095558682526005905283812080546001600160a01b031916831790559251859391928816916000805160206111d483398151915291a450505050565b6001600160a01b03161590565b600082820183811015611039576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b9392505050565b60608161106557506040805180820190915260018152600360fc1b602082015261064f565b8160005b811561107d57600101600a82049150611069565b6060816040519080825280601f01601f1916602001820160405280156110aa576020820181803883390190505b50859350905060001982015b83156110fb57600a840660300160f81b828280600190039350815181106110d957fe5b60200101906001600160f81b031916908160001a905350600a840493506110b6565b50949350505050565b600082821115611135576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061117c57805160ff19168380011785556111a9565b828001600101855582156111a9579182015b828111156111a957825182559160200191906001019061118e565b506111b59291506111b9565b5090565b61068091905b808211156111b557600081556001016111bf56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a7230582046bfacd158a3cc57e80d012440f28a7dbe70e97a8aef448caeb68a2f90740c3864736f6c634300050a0032

Deployed Bytecode Sourcemap

169:13407:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;169:13407:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10620:116;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10620:116:0;-1:-1:-1;;;;;;10620:116:0;;:::i;:::-;;;;;;;;;;;;;;;;;;11225:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;11225:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8785:108;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8785:108:0;;:::i;:::-;;;;-1:-1:-1;;;;;8785:108:0;;;;;;;;;;;;;;5400:501;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5400:501:0;;;;;;;;:::i;:::-;;10851:85;;;:::i;:::-;;;;;;;;;;;;;;;;3832:307;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3832:307:0;;;;;;;;;;;;;;;;;:::i;3548:86::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3548:86:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;3548:86:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3548:86:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3548:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3548:86:0;;-1:-1:-1;3548:86:0;;-1:-1:-1;;;;;3548:86:0:i;11681:114::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11681:114:0;-1:-1:-1;;;;;11681:114:0;;:::i;9743:101::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9743:101:0;;:::i;3268:198::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3268:198:0;;:::i;6499:554::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6499:554:0;-1:-1:-1;;;;;6499:554:0;;:::i;9494:115::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9494:115:0;-1:-1:-1;;;;;9494:115:0;;:::i;11397:89::-;;;:::i;6109:308::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6109:308:0;;;;;;;;;;:::i;4901:332::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;4901:332:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;4901:332:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4901:332:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4901:332:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4901:332:0;;-1:-1:-1;4901:332:0;;-1:-1:-1;;;;;4901:332:0:i;8437:203::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8437:203:0;;;;;;;;;;;;;;;;;:::i;9991:222::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9991:222:0;;:::i;11055:87::-;;;:::i;10333:96::-;;;:::i;9175:147::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9175:147:0;;;;;;;;;;:::i;2964:122::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2964:122:0;;;;;;;;;;:::i;7177:467::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7177:467:0;;;;;;;;:::i;7767:465::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7767:465:0;;;;;;;;:::i;10620:116::-;-1:-1:-1;;;;;;10704:25:0;;10681:4;10704:25;;;:21;:25;;;;;;;;10620:116;;;;:::o;11225:85::-;11298:5;;;;;;;;;;;;-1:-1:-1;;;11298:5:0;;;;11225:85;;:::o;8785:108::-;8836:7;8866:20;;;:16;:20;;;;;;-1:-1:-1;;;;;8866:20:0;;8785:108::o;5400:501::-;5498:12;5507:2;5498:8;:12::i;:::-;5490:21;;;;;;5561:13;5577:11;5585:2;5577:7;:11::i;:::-;5561:27;;5612:5;-1:-1:-1;;;;;5606:11:0;:2;-1:-1:-1;;;;;5606:11:0;;;5598:20;;;;;;5705:10;-1:-1:-1;;;;;5705:19:0;;;;:58;;;5728:35;5745:5;5752:10;5728:16;:35::i;:::-;5697:67;;;;;;5808:20;;;;:16;:20;;;;;;:25;;-1:-1:-1;;;;;;5808:25:0;-1:-1:-1;;;;;5808:25:0;;;;;;;;;5871:23;;5808:20;;5871:23;;;;;;;5400:501;;;:::o;10851:85::-;10922:7;;10851:85;:::o;3832:307::-;3949:12;3958:2;3949:8;:12::i;:::-;3941:21;;;;;;4037:34;4056:10;4068:2;4037:18;:34::i;:::-;4029:43;;;;;;4109:23;4115:4;4121:2;4125;4109:23;;;;;;;;;;;;:5;:23::i;:::-;3832:307;;;:::o;3548:86::-;2545:6;;-1:-1:-1;;;;;2545:6:0;2531:10;:20;2523:29;;;;;;3612:15;;;;:9;;:15;;;;;:::i;:::-;;3548:86;:::o;11681:114::-;-1:-1:-1;;;;;11767:21:0;11740:4;11767:21;;;:12;:21;;;;;;;;;11681:114::o;9743:101::-;9790:7;9820:17;;;:13;:17;;;;;;-1:-1:-1;;;;;9820:17:0;;9743:101::o;3268:198::-;2545:6;;-1:-1:-1;;;;;2545:6:0;2531:10;:20;2523:29;;;;;;3331:11;3327:133;;3357:6;;;:38;;-1:-1:-1;;;;;3357:6:0;;;;3381:4;3373:21;3357:38;;;;;3373:21;;3357:38;:6;:38;3373:21;3357:6;:38;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3357:38:0;3327:133;;;3426:6;;;:23;;-1:-1:-1;;;;;3426:6:0;;;;:23;;;;;3442:6;;3426:23;:6;:23;3442:6;3426;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;3327:133:0;3268:198;:::o;6499:554::-;2710:10;6555:4;2697:24;;;:12;:24;;;;;;;;2689:33;;;;;;6630:20;:2;-1:-1:-1;;;;;6630:18:0;;:20::i;:::-;6629:21;6621:30;;;;;;2086:5;6738:7;;:21;6730:30;;;;;;6796:7;6806:14;6818:1;6806:7;;:11;;:14;;;;:::i;:::-;6830:17;;;;:13;:17;;;;;;;;:22;;-1:-1:-1;;;;;;6830:22:0;-1:-1:-1;;;;;6830:22:0;;;;;;;;6884:19;;:15;:19;;;;;;6830:17;;-1:-1:-1;6884:26:0;;-1:-1:-1;6884:23:0;:26::i;:::-;-1:-1:-1;;;;;6862:19:0;;;;;;:15;:19;;;;;;:48;;;;6948:7;:12;;;6998:28;;6958:2;;6862:19;-1:-1:-1;;;;;;;;;;;6998:28:0;6862:19;;6998:28;7044:2;6499:554;-1:-1:-1;;6499:554:0:o;9494:115::-;-1:-1:-1;;;;;9578:24:0;9551:4;9578:24;;;:15;:24;;;;;;;9494:115::o;11397:89::-;11472:7;;;;;;;;;;;;-1:-1:-1;;;11472:7:0;;;;11397:89;:::o;6109:308::-;-1:-1:-1;;;;;6226:16:0;;6232:10;6226:16;;6218:25;;;;;;6306:10;6289:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;6289:32:0;;;;;;;;;;;;:43;;-1:-1:-1;;6289:43:0;;;;;;;;;;6370:40;;;;;;;6289:32;;6306:10;6370:40;;;;;;;;;;;6109:308;;:::o;4901:332::-;5041:12;5050:2;5041:8;:12::i;:::-;5033:21;;;;;;5129:34;5148:10;5160:2;5129:18;:34::i;:::-;5121:43;;;;;;5201:25;5207:4;5213:2;5217;5221:4;5201:5;:25::i;:::-;4901:332;;;;:::o;8437:203::-;2710:10;2697:24;;;;:12;:24;;;;;;;;2689:33;;;;;;8560:12;8569:2;8560:8;:12::i;9991:222::-;10039:13;10071:12;10080:2;10071:8;:12::i;:::-;10068:139;;;10130:9;10141:13;:2;:11;:13::i;:::-;10113:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10113:42:0;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10113:42:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10113:42:0;;;10099:57;;;;10068:139;-1:-1:-1;10187:9:0;;;;;;;;;-1:-1:-1;10187:9:0;;;;11055:87;2086:5;11055:87;:::o;10333:96::-;10413:9;10406:16;;;;;;;-1:-1:-1;;10406:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10377:13;;10406:16;;10413:9;;10406:16;;10413:9;10406:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10333:96;:::o;9175:147::-;-1:-1:-1;;;;;9282:23:0;;;9255:4;9282:23;;;:16;:23;;;;;;;;:33;;;;;;;;;;;;;;;9175:147::o;2964:122::-;2545:6;;-1:-1:-1;;;;;2545:6:0;2531:10;:20;2523:29;;;;;;-1:-1:-1;;;;;3045:21:0;;;;;;;;:12;:21;;;;;:34;;-1:-1:-1;;3045:34:0;;;;;;;;;;2964:122::o;7177:467::-;2710:10;2697:24;;;;:12;:24;;;;;;;;2689:33;;;;;;7291:1;7286:2;:6;7278:15;;;;;;7359:20;:2;-1:-1:-1;;;;;7359:18:0;;:20::i;:::-;7358:21;7350:30;;;;;;7440:12;7449:2;7440:8;:12::i;:::-;7439:13;7431:22;;;;;;7491:17;;;;:13;:17;;;;;;;;:22;;-1:-1:-1;;;;;;7491:22:0;-1:-1:-1;;;;;7491:22:0;;;;;;;;7545:19;;:15;:19;;;;;;:26;;-1:-1:-1;7545:23:0;:26::i;:::-;-1:-1:-1;;;;;7523:19:0;;;;;;:15;:19;;;;;;:48;;;;7609:28;;7634:2;;7523:19;-1:-1:-1;;;;;;;;;;;7609:28:0;7523:19;;7609:28;7177:467;;:::o;7767:465::-;2710:10;2697:24;;;;:12;:24;;;;;;;;2689:33;;;;;;7878:12;7887:2;7878:8;:12::i;:::-;7870:21;;;;;;7974:5;-1:-1:-1;;;;;7959:20:0;:11;7967:2;7959:7;:11::i;:::-;-1:-1:-1;;;;;7959:20:0;;7951:29;;;;;;8050:1;8019:20;;;:16;:20;;;;;;;;:33;;-1:-1:-1;;;;;;8019:33:0;;;-1:-1:-1;;;;;8087:22:0;;;;:15;:22;;;;;;:29;;8019:33;8087:29;:26;:29;:::i;:::-;-1:-1:-1;;;;;8062:22:0;;;;;;:15;:22;;;;;;;;:54;;;;8126:17;;;:13;:17;;;;;:30;;-1:-1:-1;;;;;;8126:30:0;;;8194:31;;8140:2;;8062:22;;-1:-1:-1;;;;;;;;;;;8194:31:0;8062:22;;8194:31;7767:465;;:::o;11955:108::-;12004:4;;12031:11;12039:2;12031:7;:11::i;:::-;-1:-1:-1;;;;;12031:25:0;;;;11955:108;-1:-1:-1;;11955:108:0:o;12362:231::-;12438:4;12458:13;12474:11;12482:2;12474:7;:11::i;:::-;12458:27;;12514:5;-1:-1:-1;;;;;12503:16:0;:7;-1:-1:-1;;;;;12503:16:0;;:46;;;;12542:7;-1:-1:-1;;;;;12523:26:0;:15;12535:2;12523:11;:15::i;:::-;-1:-1:-1;;;;;12523:26:0;;12503:46;:82;;;;12553:32;12570:5;12577:7;12553:16;:32::i;:::-;12495:91;12362:231;-1:-1:-1;;;;12362:231:0:o;12845:729::-;13017:4;-1:-1:-1;;;;;13002:19:0;:11;13010:2;13002:7;:11::i;:::-;-1:-1:-1;;;;;13002:19:0;;12994:28;;;;;;13093:20;:2;-1:-1:-1;;;;;13093:18:0;;:20::i;:::-;13092:21;13084:30;;;;;;-1:-1:-1;13239:1:0;13208:20;;;:16;:20;;;;;;;;:33;;-1:-1:-1;;;;;;13208:33:0;;;-1:-1:-1;;;;;13316:21:0;;;;:15;:21;;;;;;13160:11;;13316:28;;13208:33;13316:28;:25;:28;:::i;:::-;-1:-1:-1;;;;;13292:21:0;;;;;;;:15;:21;;;;;;:52;;;;13420:19;;;;;;;:26;;13444:1;13420:26;:23;:26;:::i;:::-;-1:-1:-1;;;;;13398:19:0;;;;;;;:15;:19;;;;;;;;:48;;;;13485:17;;;:13;:17;;;;;:22;;-1:-1:-1;;;;;;13485:22:0;;;;;13545;;13499:2;;13398:19;;13545:22;;;-1:-1:-1;;;;;;;;;;;13545:22:0;;12845:729;;;;:::o;311:122:1:-;-1:-1:-1;;;;;404:21:1;;;311:122::o;1276:141:2:-;1328:4;1357:5;;;1380:6;;;;1372:19;;;;;-1:-1:-1;;;1372:19:2;;;;;;;;;;;;;;;;;;;;;;;1409:1;1276:141;-1:-1:-1;;;1276:141:2:o;1565:547::-;1618:13;1651:10;1647:51;;-1:-1:-1;1677:10:2;;;;;;;;;;;;-1:-1:-1;;;1677:10:2;;;;;;1647:51;1720:5;1708:9;1756:75;1763:9;;1756:75;;1788:8;;1818:2;1810:10;;;;1756:75;;;1841:19;1873:6;1863:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;1863:17:2;87:34:-1;135:17;;-1:-1;1863:17:2;-1:-1:-1;1939:5:2;;-1:-1:-1;1841:39:2;-1:-1:-1;;;1903:10:2;;1954:112;1961:9;;1954:112;;2027:2;2020:4;:9;2015:2;:14;2004:27;;1986:6;1993:7;;;;;;;1986:15;;;;;;;;;;;:45;-1:-1:-1;;;;;1986:45:2;;;;;;;;-1:-1:-1;2053:2:2;2045:10;;;;1954:112;;;-1:-1:-1;2098:6:2;1565:547;-1:-1:-1;;;;1565:547:2:o;973:141::-;1025:4;1058:1;1053;:6;;1045:19;;;;;-1:-1:-1;;;1045:19:2;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1083:5:2;;;973:141::o;169:13407:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;169:13407:0;;;-1:-1:-1;169:13407:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://46bfacd158a3cc57e80d012440f28a7dbe70e97a8aef448caeb68a2f90740c38

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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