ETH Price: $2,512.64 (-0.19%)
Gas: 5.13 Gwei

Token

Concave (CNV)
 

Overview

Max Total Supply

1,205,233.519453502161664827 CNV

Holders

1,185 ( 0.084%)

Market

Price

$6.32 @ 0.002515 ETH (+3.54%)

Onchain Market Cap

$7,617,075.84

Circulating Supply Market Cap

$2,217,451.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 CNV

Value
$0.00
0xe07e423f95406744031513ffe8579f878460034a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Concave is a community-driven, product and investment organization that aims to bring value to investors through the development of innovative DeFi products and active treasury management.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ConcaveToken

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2022-04-01
*/

// SPDX-License-Identifier: WTFPL
pragma solidity >=0.8;

/**
     ██████╗ ██████╗ ███╗   ██╗ ██████╗ █████╗ ██╗   ██╗██████╗
    ██╔════╝██╔═══██╗████╗  ██║██╔════╝██╔══██╗██║   ██║╚════██╗
    ██║     ██║   ██║██╔██╗ ██║██║     ███████║██║   ██║ █████╔╝
    ██║     ██║   ██║██║╚██╗██║██║     ██╔══██║╚██╗ ██╔╝ ╚═══██╗
    ╚██████╗╚██████╔╝██║ ╚████║╚██████╗██║  ██║ ╚████╔╝ ██████╔╝
     ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝ ╚═════╝╚═╝  ╚═╝  ╚═══╝  ╚═════╝
    Concave
*/

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*///////////////////////////////////////////////////////////////
                                  EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*///////////////////////////////////////////////////////////////
                             METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*///////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*///////////////////////////////////////////////////////////////
                             EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    bytes32 public constant PERMIT_TYPEHASH =
        keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*///////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*///////////////////////////////////////////////////////////////
                              ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*///////////////////////////////////////////////////////////////
                              EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            bytes32 digest = keccak256(
                abi.encodePacked(
                    "\x19\x01",
                    DOMAIN_SEPARATOR(),
                    keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
                )
            );

            address recoveredAddress = ecrecover(digest, v, r, s);

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)



// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)



/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract ConcaveToken is Ownable, ERC20("Concave", "CNV", 18) {

    /* -------------------------------------------------------------------------- */
    /*                                   EVENTS                                   */
    /* -------------------------------------------------------------------------- */

    event MinterSet(address indexed caller, address indexed who, bool indexed canMint);


    mapping(address => bool) public isMinter;

    address[] public minters;

    /* -------------------------------------------------------------------------- */
    /*                              ACCESS CONTROLLED                             */
    /* -------------------------------------------------------------------------- */

    function mint(
        address account,
        uint256 amount
    ) external {

        require(isMinter[msg.sender], "!MINTER");

        _mint(account, amount);
    }

    function burn(
        address account,
        uint256 amount
    ) external {

        require(isMinter[msg.sender], "!MINTER");

        _burn(account, amount);
    }

    function setMinter(
        address who,
        bool canMint
    ) external onlyOwner {

        if (canMint == true && isMinter[who] == false ) minters.push(who);

        isMinter[who] = canMint;

        emit MinterSet(msg.sender, who, canMint);
    }

    function mintersLength() external view returns(uint256) {
        return minters.length;
    }
}


/**
    "someone spent a lot of computational power and time to bruteforce that contract address
    so basically to have that many leading zeros
    you can't just create a contract and get that, the odds are 1 in trillions to get something like that
    there's a way to guess which contract address you will get, using a script.. and you have to bruteforce for a very long time to get that many leading 0's
    fun fact, the more leading 0's a contract has, the cheaper gas will be for users to interact with the contract"
        - some solidity dev
    © 2022 WTFPL – Do What the Fuck You Want to Public License.
*/

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":true,"internalType":"bool","name":"canMint","type":"bool"}],"name":"MinterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"canMint","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040523480156200001157600080fd5b5060405180604001604052806007815260200166436f6e6361766560c81b8152506040518060400160405280600381526020016221a72b60e91b81525060126200006a62000064620000b860201b60201c565b620000bc565b82516200007f906001906020860190620001a8565b50815162000095906002906020850190620001a8565b5060ff81166080524660a052620000ab6200010c565b60c052506200032f915050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516200014091906200028b565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b828054620001b6906200024e565b90600052602060002090601f016020900481019282620001da576000855562000225565b82601f10620001f557805160ff191683800117855562000225565b8280016001018555821562000225579182015b828111156200022557825182559160200191906001019062000208565b506200023392915062000237565b5090565b5b8082111562000233576000815560010162000238565b600181811c908216806200026357607f821691505b602082108114156200028557634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002a857607f831692505b6020808410821415620002c957634e487b7160e01b86526022600452602486fd5b818015620002e05760018114620002f25762000321565b60ff1986168952848901965062000321565b60008a81526020902060005b86811015620003195781548b820152908501908301620002fe565b505084890196505b509498975050505050505050565b60805160a05160c0516110516200035f60003960006105830152600061054e015260006101de01526110516000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638623ec7b116100b8578063aa271e1a1161007c578063aa271e1a146102e1578063c37bbabc14610304578063cf456ae71461030c578063d505accf1461031f578063dd62ed3e14610332578063f2fde38b1461035d57600080fd5b80638623ec7b146102775780638da5cb5b146102a257806395d89b41146102b35780639dc29fac146102bb578063a9059cbb146102ce57600080fd5b8063313ce5671161010a578063313ce567146101d95780633644e5151461021257806340c10f191461021a57806370a082311461022f578063715018a61461024f5780637ecebe001461025757600080fd5b806306fdde0314610147578063095ea7b31461016557806318160ddd1461018857806323b872dd1461019f57806330adf81f146101b2575b600080fd5b61014f610370565b60405161015c9190610cb6565b60405180910390f35b610178610173366004610d27565b6103fe565b604051901515815260200161015c565b61019160035481565b60405190815260200161015c565b6101786101ad366004610d51565b61046a565b6101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102007f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161015c565b61019161054a565b61022d610228366004610d27565b6105a5565b005b61019161023d366004610d8d565b60046020526000908152604090205481565b61022d610601565b610191610265366004610d8d565b60066020526000908152604090205481565b61028a610285366004610daf565b610637565b6040516001600160a01b03909116815260200161015c565b6000546001600160a01b031661028a565b61014f610661565b61022d6102c9366004610d27565b61066e565b6101786102dc366004610d27565b6106c1565b6101786102ef366004610d8d565b60076020526000908152604090205460ff1681565b600854610191565b61022d61031a366004610dc8565b610727565b61022d61032d366004610e04565b610824565b610191610340366004610e77565b600560209081526000928352604080842090915290825290205481565b61022d61036b366004610d8d565b610a75565b6001805461037d90610eaa565b80601f01602080910402602001604051908101604052809291908181526020018280546103a990610eaa565b80156103f65780601f106103cb576101008083540402835291602001916103f6565b820191906000526020600020905b8154815290600101906020018083116103d957829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104599086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001981146104c6576104a18382610efb565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b6001600160a01b038516600090815260046020526040812080548592906104ee908490610efb565b90915550506001600160a01b0380851660008181526004602052604090819020805487019055519091871690600080516020610ffc833981519152906105379087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146105805761057b610b10565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b3360009081526007602052604090205460ff166105f35760405162461bcd60e51b815260206004820152600760248201526610a6a4a72a22a960c91b60448201526064015b60405180910390fd5b6105fd8282610baa565b5050565b6000546001600160a01b0316331461062b5760405162461bcd60e51b81526004016105ea90610f12565b6106356000610c04565b565b6008818154811061064757600080fd5b6000918252602090912001546001600160a01b0316905081565b6002805461037d90610eaa565b3360009081526007602052604090205460ff166106b75760405162461bcd60e51b815260206004820152600760248201526610a6a4a72a22a960c91b60448201526064016105ea565b6105fd8282610c54565b336000908152600460205260408120805483919083906106e2908490610efb565b90915550506001600160a01b03831660008181526004602052604090819020805485019055513390600080516020610ffc833981519152906104599086815260200190565b6000546001600160a01b031633146107515760405162461bcd60e51b81526004016105ea90610f12565b600181151514801561077c57506001600160a01b03821660009081526007602052604090205460ff16155b156107cd57600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0384161790555b6001600160a01b038216600081815260076020526040808220805460ff1916851515908117909155905190929133917f9e83b60577a847f7aec99ac60cc404d84b6fae0df5a54aaf535394add0fc7de79190a45050565b428410156108745760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016105ea565b600061087e61054a565b6001600160a01b0389811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938c166060840152608083018b905260a083019390935260c08083018a90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610997573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906109cd5750886001600160a01b0316816001600160a01b0316145b610a0a5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016105ea565b6001600160a01b0390811660009081526005602090815260408083208b8516808552908352928190208a905551898152919350918a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6000546001600160a01b03163314610a9f5760405162461bcd60e51b81526004016105ea90610f12565b6001600160a01b038116610b045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ea565b610b0d81610c04565b50565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051610b429190610f47565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060036000828254610bbc9190610fe3565b90915550506001600160a01b038216600081815260046020908152604080832080548601905551848152600080516020610ffc83398151915291015b60405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03821660009081526004602052604081208054839290610c7c908490610efb565b90915550506003805482900390556040518181526000906001600160a01b03841690600080516020610ffc83398151915290602001610bf8565b600060208083528351808285015260005b81811015610ce357858101830151858201604001528201610cc7565b81811115610cf5576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610d2257600080fd5b919050565b60008060408385031215610d3a57600080fd5b610d4383610d0b565b946020939093013593505050565b600080600060608486031215610d6657600080fd5b610d6f84610d0b565b9250610d7d60208501610d0b565b9150604084013590509250925092565b600060208284031215610d9f57600080fd5b610da882610d0b565b9392505050565b600060208284031215610dc157600080fd5b5035919050565b60008060408385031215610ddb57600080fd5b610de483610d0b565b915060208301358015158114610df957600080fd5b809150509250929050565b600080600080600080600060e0888a031215610e1f57600080fd5b610e2888610d0b565b9650610e3660208901610d0b565b95506040880135945060608801359350608088013560ff81168114610e5a57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610e8a57600080fd5b610e9383610d0b565b9150610ea160208401610d0b565b90509250929050565b600181811c90821680610ebe57607f821691505b60208210811415610edf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610f0d57610f0d610ee5565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600080835481600182811c915080831680610f6357607f831692505b6020808410821415610f8357634e487b7160e01b86526022600452602486fd5b818015610f975760018114610fa857610fd5565b60ff19861689528489019650610fd5565b60008a81526020902060005b86811015610fcd5781548b820152908501908301610fb4565b505084890196505b509498975050505050505050565b60008219821115610ff657610ff6610ee5565b50019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e2adcf16cd8ba83f47acae59f12c4db79fe3fbdd38691bee3d4edc0bd009739b64736f6c634300080b0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638623ec7b116100b8578063aa271e1a1161007c578063aa271e1a146102e1578063c37bbabc14610304578063cf456ae71461030c578063d505accf1461031f578063dd62ed3e14610332578063f2fde38b1461035d57600080fd5b80638623ec7b146102775780638da5cb5b146102a257806395d89b41146102b35780639dc29fac146102bb578063a9059cbb146102ce57600080fd5b8063313ce5671161010a578063313ce567146101d95780633644e5151461021257806340c10f191461021a57806370a082311461022f578063715018a61461024f5780637ecebe001461025757600080fd5b806306fdde0314610147578063095ea7b31461016557806318160ddd1461018857806323b872dd1461019f57806330adf81f146101b2575b600080fd5b61014f610370565b60405161015c9190610cb6565b60405180910390f35b610178610173366004610d27565b6103fe565b604051901515815260200161015c565b61019160035481565b60405190815260200161015c565b6101786101ad366004610d51565b61046a565b6101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102007f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff909116815260200161015c565b61019161054a565b61022d610228366004610d27565b6105a5565b005b61019161023d366004610d8d565b60046020526000908152604090205481565b61022d610601565b610191610265366004610d8d565b60066020526000908152604090205481565b61028a610285366004610daf565b610637565b6040516001600160a01b03909116815260200161015c565b6000546001600160a01b031661028a565b61014f610661565b61022d6102c9366004610d27565b61066e565b6101786102dc366004610d27565b6106c1565b6101786102ef366004610d8d565b60076020526000908152604090205460ff1681565b600854610191565b61022d61031a366004610dc8565b610727565b61022d61032d366004610e04565b610824565b610191610340366004610e77565b600560209081526000928352604080842090915290825290205481565b61022d61036b366004610d8d565b610a75565b6001805461037d90610eaa565b80601f01602080910402602001604051908101604052809291908181526020018280546103a990610eaa565b80156103f65780601f106103cb576101008083540402835291602001916103f6565b820191906000526020600020905b8154815290600101906020018083116103d957829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104599086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001981146104c6576104a18382610efb565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b6001600160a01b038516600090815260046020526040812080548592906104ee908490610efb565b90915550506001600160a01b0380851660008181526004602052604090819020805487019055519091871690600080516020610ffc833981519152906105379087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000146146105805761057b610b10565b905090565b507fb3871005bf5dd12374191ec6483d5de5ac1162465efc8c4fc529a83dc2739bbd90565b3360009081526007602052604090205460ff166105f35760405162461bcd60e51b815260206004820152600760248201526610a6a4a72a22a960c91b60448201526064015b60405180910390fd5b6105fd8282610baa565b5050565b6000546001600160a01b0316331461062b5760405162461bcd60e51b81526004016105ea90610f12565b6106356000610c04565b565b6008818154811061064757600080fd5b6000918252602090912001546001600160a01b0316905081565b6002805461037d90610eaa565b3360009081526007602052604090205460ff166106b75760405162461bcd60e51b815260206004820152600760248201526610a6a4a72a22a960c91b60448201526064016105ea565b6105fd8282610c54565b336000908152600460205260408120805483919083906106e2908490610efb565b90915550506001600160a01b03831660008181526004602052604090819020805485019055513390600080516020610ffc833981519152906104599086815260200190565b6000546001600160a01b031633146107515760405162461bcd60e51b81526004016105ea90610f12565b600181151514801561077c57506001600160a01b03821660009081526007602052604090205460ff16155b156107cd57600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0384161790555b6001600160a01b038216600081815260076020526040808220805460ff1916851515908117909155905190929133917f9e83b60577a847f7aec99ac60cc404d84b6fae0df5a54aaf535394add0fc7de79190a45050565b428410156108745760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016105ea565b600061087e61054a565b6001600160a01b0389811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938c166060840152608083018b905260a083019390935260c08083018a90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610997573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906109cd5750886001600160a01b0316816001600160a01b0316145b610a0a5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016105ea565b6001600160a01b0390811660009081526005602090815260408083208b8516808552908352928190208a905551898152919350918a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6000546001600160a01b03163314610a9f5760405162461bcd60e51b81526004016105ea90610f12565b6001600160a01b038116610b045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ea565b610b0d81610c04565b50565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051610b429190610f47565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060036000828254610bbc9190610fe3565b90915550506001600160a01b038216600081815260046020908152604080832080548601905551848152600080516020610ffc83398151915291015b60405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03821660009081526004602052604081208054839290610c7c908490610efb565b90915550506003805482900390556040518181526000906001600160a01b03841690600080516020610ffc83398151915290602001610bf8565b600060208083528351808285015260005b81811015610ce357858101830151858201604001528201610cc7565b81811115610cf5576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610d2257600080fd5b919050565b60008060408385031215610d3a57600080fd5b610d4383610d0b565b946020939093013593505050565b600080600060608486031215610d6657600080fd5b610d6f84610d0b565b9250610d7d60208501610d0b565b9150604084013590509250925092565b600060208284031215610d9f57600080fd5b610da882610d0b565b9392505050565b600060208284031215610dc157600080fd5b5035919050565b60008060408385031215610ddb57600080fd5b610de483610d0b565b915060208301358015158114610df957600080fd5b809150509250929050565b600080600080600080600060e0888a031215610e1f57600080fd5b610e2888610d0b565b9650610e3660208901610d0b565b95506040880135945060608801359350608088013560ff81168114610e5a57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610e8a57600080fd5b610e9383610d0b565b9150610ea160208401610d0b565b90509250929050565b600181811c90821680610ebe57607f821691505b60208210811415610edf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610f0d57610f0d610ee5565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600080835481600182811c915080831680610f6357607f831692505b6020808410821415610f8357634e487b7160e01b86526022600452602486fd5b818015610f975760018114610fa857610fd5565b60ff19861689528489019650610fd5565b60008a81526020902060005b86811015610fcd5781548b820152908501908301610fb4565b505084890196505b509498975050505050505050565b60008219821115610ff657610ff6610ee5565b50019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e2adcf16cd8ba83f47acae59f12c4db79fe3fbdd38691bee3d4edc0bd009739b64736f6c634300080b0033

Deployed Bytecode Sourcemap

10928:1508:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2042:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3678:217;;;;;;:::i;:::-;;:::i;:::-;;;1218:14:1;;1211:22;1193:41;;1181:2;1166:18;3678:217:0;1053:187:1;2326:26:0;;;;;;;;;1391:25:1;;;1379:2;1364:18;2326:26:0;1245:177:1;4296:612:0;;;;;;:::i;:::-;;:::i;2677:146::-;;2728:95;2677:146;;2098:31;;;;;;;;2114:4:1;2102:17;;;2084:36;;2072:2;2057:18;2098:31:0;1942:184:1;6136:179:0;;;:::i;11694:177::-;;;;;;:::i;:::-;;:::i;:::-;;2361:44;;;;;;:::i;:::-;;;;;;;;;;;;;;10111:103;;;:::i;2944:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;11401:24;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2671:32:1;;;2653:51;;2641:2;2626:18;11401:24:0;2507:203:1;9460:87:0;9506:7;9533:6;-1:-1:-1;;;;;9533:6:0;9460:87;;2069:20;;;:::i;11879:177::-;;;;;;:::i;:::-;;:::i;3903:385::-;;;;;;:::i;:::-;;:::i;11352:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12337:96;12411:7;:14;12337:96;;12064:265;;;;;;:::i;:::-;;:::i;5105:1023::-;;;;;;:::i;:::-;;:::i;2414:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10369:201;;;;;;:::i;:::-;;:::i;2042:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3678:217::-;3779:10;3752:4;3769:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;3769:30:0;;;;;;;;;;:39;;;3826:37;3752:4;;3769:30;;3826:37;;;;3802:6;1391:25:1;;1379:2;1364:18;;1245:177;3826:37:0;;;;;;;;-1:-1:-1;3883:4:0;3678:217;;;;:::o;4296:612::-;-1:-1:-1;;;;;4453:15:0;;4418:4;4453:15;;;:9;:15;;;;;;;;4469:10;4453:27;;;;;;;;-1:-1:-1;;4533:28:0;;4529:80;;4593:16;4603:6;4593:7;:16;:::i;:::-;-1:-1:-1;;;;;4563:15:0;;;;;;:9;:15;;;;;;;;4579:10;4563:27;;;;;;;:46;4529:80;-1:-1:-1;;;;;4622:15:0;;;;;;:9;:15;;;;;:25;;4641:6;;4622:15;:25;;4641:6;;4622:25;:::i;:::-;;;;-1:-1:-1;;;;;;;4798:13:0;;;;;;;:9;:13;;;;;;;:23;;;;;;4850:26;4798:13;;4850:26;;;-1:-1:-1;;;;;;;;;;;4850:26:0;;;4815:6;1391:25:1;;1379:2;1364:18;;1245:177;4850:26:0;;;;;;;;-1:-1:-1;4896:4:0;;4296:612;-1:-1:-1;;;;4296:612:0:o;6136:179::-;6193:7;6237:16;6220:13;:33;:87;;6283:24;:22;:24::i;:::-;6213:94;;6136:179;:::o;6220:87::-;-1:-1:-1;6256:24:0;;6136:179::o;11694:177::-;11805:10;11796:20;;;;:8;:20;;;;;;;;11788:40;;;;-1:-1:-1;;;11788:40:0;;4879:2:1;11788:40:0;;;4861:21:1;4918:1;4898:18;;;4891:29;-1:-1:-1;;;4936:18:1;;;4929:37;4983:18;;11788:40:0;;;;;;;;;11841:22;11847:7;11856:6;11841:5;:22::i;:::-;11694:177;;:::o;10111:103::-;9506:7;9533:6;-1:-1:-1;;;;;9533:6:0;8407:10;9680:23;9672:68;;;;-1:-1:-1;;;9672:68:0;;;;;;;:::i;:::-;10176:30:::1;10203:1;10176:18;:30::i;:::-;10111:103::o:0;11401:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11401:24:0;;-1:-1:-1;11401:24:0;:::o;2069:20::-;;;;;;;:::i;11879:177::-;11990:10;11981:20;;;;:8;:20;;;;;;;;11973:40;;;;-1:-1:-1;;;11973:40:0;;4879:2:1;11973:40:0;;;4861:21:1;4918:1;4898:18;;;4891:29;-1:-1:-1;;;4936:18:1;;;4929:37;4983:18;;11973:40:0;4677:330:1;11973:40:0;12026:22;12032:7;12041:6;12026:5;:22::i;3903:385::-;4000:10;3973:4;3990:21;;;:9;:21;;;;;:31;;4015:6;;3990:21;3973:4;;3990:31;;4015:6;;3990:31;:::i;:::-;;;;-1:-1:-1;;;;;;;4172:13:0;;;;;;:9;:13;;;;;;;:23;;;;;;4224:32;4233:10;;-1:-1:-1;;;;;;;;;;;4224:32:0;;;4189:6;1391:25:1;;1379:2;1364:18;;1245:177;12064:265:0;9506:7;9533:6;-1:-1:-1;;;;;9533:6:0;8407:10;9680:23;9672:68;;;;-1:-1:-1;;;9672:68:0;;;;;;;:::i;:::-;12182:4:::1;12171:15:::0;::::1;;;:41:::0;::::1;;;-1:-1:-1::0;;;;;;12190:13:0;::::1;;::::0;;;:8:::1;:13;::::0;;;;;::::1;;:22;12171:41;12167:65;;;12215:7;:17:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;12215:17:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;12215:17:0::1;-1:-1:-1::0;;;;;12215:17:0;::::1;;::::0;;12167:65:::1;-1:-1:-1::0;;;;;12245:13:0;::::1;;::::0;;;:8:::1;:13;::::0;;;;;:23;;-1:-1:-1;;12245:23:0::1;::::0;::::1;;::::0;;::::1;::::0;;;12286:35;;12245:23;;:13;12296:10:::1;::::0;12286:35:::1;::::0;12245:13;12286:35:::1;12064:265:::0;;:::o;5105:1023::-;5333:15;5321:8;:27;;5313:63;;;;-1:-1:-1;;;5313:63:0;;5575:2:1;5313:63:0;;;5557:21:1;5614:2;5594:18;;;5587:30;5653:25;5633:18;;;5626:53;5696:18;;5313:63:0;5373:347:1;5313:63:0;5546:14;5663:18;:16;:18::i;:::-;-1:-1:-1;;;;;5765:13:0;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;5714:77;;2728:95;5714:77;;;6012:25:1;6091:18;;;6084:43;;;;6163:15;;;6143:18;;;6136:43;6195:18;;;6188:34;;;6238:19;;;6231:35;;;;6282:19;;;;6275:35;;;5714:77:0;;;;;;;;;;5984:19:1;;;5714:77:0;;;5704:88;;;;;;;;-1:-1:-1;;;5591:220:0;;;6579:27:1;6622:11;;;6615:27;;;;6658:12;;;6651:28;;;;6695:12;;5591:220:0;;;-1:-1:-1;;5591:220:0;;;;;;;;;5563:263;;5591:220;5563:263;;;;5843:24;5870:26;;;;;;;;;6945:25:1;;;7018:4;7006:17;;6986:18;;;6979:45;;;;7040:18;;;7033:34;;;7083:18;;;7076:34;;;5563:263:0;;-1:-1:-1;5843:24:0;5870:26;;6917:19:1;;5870:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5870:26:0;;-1:-1:-1;;5870:26:0;;;-1:-1:-1;;;;;;;5921:30:0;;;;;;:59;;;5975:5;-1:-1:-1;;;;;5955:25:0;:16;-1:-1:-1;;;;;5955:25:0;;5921:59;5913:86;;;;-1:-1:-1;;;5913:86:0;;7323:2:1;5913:86:0;;;7305:21:1;7362:2;7342:18;;;7335:30;-1:-1:-1;;;7381:18:1;;;7374:44;7435:18;;5913:86:0;7121:338:1;5913:86:0;-1:-1:-1;;;;;6016:27:0;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;6089:31;1391:25:1;;;6016:36:0;;-1:-1:-1;6089:31:0;;;;;;1364:18:1;6089:31:0;;;;;;;5105:1023;;;;;;;:::o;10369:201::-;9506:7;9533:6;-1:-1:-1;;;;;9533:6:0;8407:10;9680:23;9672:68;;;;-1:-1:-1;;;9672:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10458:22:0;::::1;10450:73;;;::::0;-1:-1:-1;;;10450:73:0;;7666:2:1;10450:73:0::1;::::0;::::1;7648:21:1::0;7705:2;7685:18;;;7678:30;7744:34;7724:18;;;7717:62;-1:-1:-1;;;7795:18:1;;;7788:36;7841:19;;10450:73:0::1;7464:402:1::0;10450:73:0::1;10534:28;10553:8;10534:18;:28::i;:::-;10369:201:::0;:::o;6323:457::-;6388:7;6489:95;6623:4;6607:22;;;;;;:::i;:::-;;;;;;;;;;6456:301;;;9368:25:1;;;;9409:18;;9402:34;;;;6652:14:0;9452:18:1;;;9445:34;6689:13:0;9495:18:1;;;9488:34;6733:4:0;9538:19:1;;;9531:61;9340:19;;6456:301:0;;;;;;;;;;;;6428:344;;;;;;6408:364;;6323:457;:::o;6980:335::-;7066:6;7051:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;7223:13:0;;;;;;:9;:13;;;;;;;;:23;;;;;;7275:32;1391:25:1;;;-1:-1:-1;;;;;;;;;;;7275:32:0;1364:18:1;7275:32:0;;;;;;;;6980:335;;:::o;10730:191::-;10804:16;10823:6;;-1:-1:-1;;;;;10840:17:0;;;-1:-1:-1;;;;;;10840:17:0;;;;;;10873:40;;10823:6;;;;;;;10873:40;;10804:16;10873:40;10793:128;10730:191;:::o;7323:338::-;-1:-1:-1;;;;;7396:15:0;;;;;;:9;:15;;;;;:25;;7415:6;;7396:15;:25;;7415:6;;7396:25;:::i;:::-;;;;-1:-1:-1;;7569:11:0;:21;;;;;;;7619:34;;1391:25:1;;;-1:-1:-1;;;;;;;7619:34:0;;;-1:-1:-1;;;;;;;;;;;7619:34:0;1379:2:1;1364:18;7619:34:0;1245:177:1;14:597;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:173::-;684:20;;-1:-1:-1;;;;;733:31:1;;723:42;;713:70;;779:1;776;769:12;713:70;616:173;;;:::o;794:254::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;1038:2;1023:18;;;;1010:32;;-1:-1:-1;;;794:254:1:o;1427:328::-;1504:6;1512;1520;1573:2;1561:9;1552:7;1548:23;1544:32;1541:52;;;1589:1;1586;1579:12;1541:52;1612:29;1631:9;1612:29;:::i;:::-;1602:39;;1660:38;1694:2;1683:9;1679:18;1660:38;:::i;:::-;1650:48;;1745:2;1734:9;1730:18;1717:32;1707:42;;1427:328;;;;;:::o;2131:186::-;2190:6;2243:2;2231:9;2222:7;2218:23;2214:32;2211:52;;;2259:1;2256;2249:12;2211:52;2282:29;2301:9;2282:29;:::i;:::-;2272:39;2131:186;-1:-1:-1;;;2131:186:1:o;2322:180::-;2381:6;2434:2;2422:9;2413:7;2409:23;2405:32;2402:52;;;2450:1;2447;2440:12;2402:52;-1:-1:-1;2473:23:1;;2322:180;-1:-1:-1;2322:180:1:o;2715:347::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;;2959:2;2948:9;2944:18;2931:32;3006:5;2999:13;2992:21;2985:5;2982:32;2972:60;;3028:1;3025;3018:12;2972:60;3051:5;3041:15;;;2715:347;;;;;:::o;3067:693::-;3178:6;3186;3194;3202;3210;3218;3226;3279:3;3267:9;3258:7;3254:23;3250:33;3247:53;;;3296:1;3293;3286:12;3247:53;3319:29;3338:9;3319:29;:::i;:::-;3309:39;;3367:38;3401:2;3390:9;3386:18;3367:38;:::i;:::-;3357:48;;3452:2;3441:9;3437:18;3424:32;3414:42;;3503:2;3492:9;3488:18;3475:32;3465:42;;3557:3;3546:9;3542:19;3529:33;3602:4;3595:5;3591:16;3584:5;3581:27;3571:55;;3622:1;3619;3612:12;3571:55;3067:693;;;;-1:-1:-1;3067:693:1;;;;3645:5;3697:3;3682:19;;3669:33;;-1:-1:-1;3749:3:1;3734:19;;;3721:33;;3067:693;-1:-1:-1;;3067:693:1:o;3765:260::-;3833:6;3841;3894:2;3882:9;3873:7;3869:23;3865:32;3862:52;;;3910:1;3907;3900:12;3862:52;3933:29;3952:9;3933:29;:::i;:::-;3923:39;;3981:38;4015:2;4004:9;4000:18;3981:38;:::i;:::-;3971:48;;3765:260;;;;;:::o;4030:380::-;4109:1;4105:12;;;;4152;;;4173:61;;4227:4;4219:6;4215:17;4205:27;;4173:61;4280:2;4272:6;4269:14;4249:18;4246:38;4243:161;;;4326:10;4321:3;4317:20;4314:1;4307:31;4361:4;4358:1;4351:15;4389:4;4386:1;4379:15;4243:161;;4030:380;;;:::o;4415:127::-;4476:10;4471:3;4467:20;4464:1;4457:31;4507:4;4504:1;4497:15;4531:4;4528:1;4521:15;4547:125;4587:4;4615:1;4612;4609:8;4606:34;;;4620:18;;:::i;:::-;-1:-1:-1;4657:9:1;;4547:125::o;5012:356::-;5214:2;5196:21;;;5233:18;;;5226:30;5292:34;5287:2;5272:18;;5265:62;5359:2;5344:18;;5012:356::o;8000:1104::-;8130:3;8159:1;8192:6;8186:13;8222:3;8244:1;8272:9;8268:2;8264:18;8254:28;;8332:2;8321:9;8317:18;8354;8344:61;;8398:4;8390:6;8386:17;8376:27;;8344:61;8424:2;8472;8464:6;8461:14;8441:18;8438:38;8435:165;;;-1:-1:-1;;;8499:33:1;;8555:4;8552:1;8545:15;8585:4;8506:3;8573:17;8435:165;8616:18;8643:104;;;;8761:1;8756:323;;;;8609:470;;8643:104;-1:-1:-1;;8676:24:1;;8664:37;;8721:16;;;;-1:-1:-1;8643:104:1;;8756:323;7947:1;7940:14;;;7984:4;7971:18;;8854:1;8868:165;8882:6;8879:1;8876:13;8868:165;;;8960:14;;8947:11;;;8940:35;9003:16;;;;8897:10;;8868:165;;;8872:3;;9062:6;9057:3;9053:16;9046:23;;8609:470;-1:-1:-1;9095:3:1;;8000:1104;-1:-1:-1;;;;;;;;8000:1104:1:o;9603:128::-;9643:3;9674:1;9670:6;9667:1;9664:13;9661:39;;;9680:18;;:::i;:::-;-1:-1:-1;9716:9:1;;9603:128::o

Swarm Source

ipfs://e2adcf16cd8ba83f47acae59f12c4db79fe3fbdd38691bee3d4edc0bd009739b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.