ETH Price: $2,429.60 (-1.27%)
 

Overview

Max Total Supply

5,000,000,000 DOSE

Holders

2,925 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (+1.64%)

Onchain Market Cap

$929,100.00

Circulating Supply Market Cap

$602,029.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Hoo.com 9
Balance
8,979.518904826828972766 DOSE

Value
$1.67 ( ~0.000687354764983457 Eth) [0.0002%]
0xeed85ddd6828b8c714141d34a12d0c07f7553182
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

DOSE is a token of purchase, utility and action for OliveX gamified fitness ecosystem. Players receives DOSE for completing workout based gameplay in KARA Smart Fitness, 22 Pushups and Dustland Runner. It can be used to unlock items, purchase NFTs and participate in special game modes.

Market

Volume (24H):$1,017,650.00
Market Capitalization:$602,029.00
Circulating Supply:3,239,765,513.00 DOSE
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DOSE

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, Audited
File 1 of 13 : DOSE.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

import "@animoca/ethereum-contracts-assets/contracts/token/ERC20/ERC20.sol";

/**
 * @title DOSE
 */
contract DOSE is ERC20 {
    constructor(
        address[] memory recipients,
        uint256[] memory values,
        string memory tokenURI_
    ) ERC20("DOSE", "DOSE", 18, tokenURI_) {
        _batchMint(recipients, values);
    }
}

File 2 of 13 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

import {ManagedIdentity} from "@animoca/ethereum-contracts-core-1.1.1/contracts/metatx/ManagedIdentity.sol";
import {IERC165} from "@animoca/ethereum-contracts-core-1.1.1/contracts/introspection/IERC165.sol";
import {AddressIsContract} from "@animoca/ethereum-contracts-core-1.1.1/contracts/utils/types/AddressIsContract.sol";
import {IERC20} from "./IERC20.sol";
import {IERC20Detailed} from "./IERC20Detailed.sol";
import {IERC20Allowance} from "./IERC20Allowance.sol";
import {IERC20SafeTransfers} from "./IERC20SafeTransfers.sol";
import {IERC20BatchTransfers} from "./IERC20BatchTransfers.sol";
import {IERC20Metadata} from "./IERC20Metadata.sol";
import {IERC20Permit} from "./IERC20Permit.sol";
import {IERC20Receiver} from "./IERC20Receiver.sol";

/**
 * @title ERC20 Fungible Token Contract.
 */
abstract contract ERC20 is
    ManagedIdentity,
    IERC165,
    IERC20,
    IERC20Detailed,
    IERC20Metadata,
    IERC20Allowance,
    IERC20BatchTransfers,
    IERC20SafeTransfers,
    IERC20Permit
{
    using AddressIsContract for address;

    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)")
    bytes32 internal constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    uint256 public immutable deploymentChainId;

    // solhint-disable-next-line var-name-mixedcase
    bytes32 internal immutable _DOMAIN_SEPARATOR;

    mapping(address => uint256) public override nonces;

    string internal _name;
    string internal _symbol;
    uint8 internal immutable _decimals;
    string internal _tokenURI;

    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;
    uint256 internal _totalSupply;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        string memory tokenURI_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
        _tokenURI = tokenURI_;

        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        deploymentChainId = chainId;
        _DOMAIN_SEPARATOR = _calculateDomainSeparator(chainId, bytes(name_));
    }

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() public view override returns (bytes32) {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        // recompute the domain separator in case of fork and chainid update
        return chainId == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId, bytes(_name));
    }

    function _calculateDomainSeparator(uint256 chainId, bytes memory name_) private view returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(name_),
                    keccak256("1"),
                    chainId,
                    address(this)
                )
            );
    }

    /////////////////////////////////////////// ERC165 ///////////////////////////////////////

    /// @dev See {IERC165-supportsInterface}.
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return
            interfaceId == type(IERC165).interfaceId ||
            interfaceId == type(IERC20).interfaceId ||
            interfaceId == type(IERC20Detailed).interfaceId ||
            interfaceId == type(IERC20Metadata).interfaceId ||
            interfaceId == type(IERC20Allowance).interfaceId ||
            interfaceId == type(IERC20BatchTransfers).interfaceId ||
            interfaceId == type(IERC20SafeTransfers).interfaceId ||
            interfaceId == type(IERC20Permit).interfaceId;
    }

    /////////////////////////////////////////// ERC20Detailed ///////////////////////////////////////

    /// @dev See {IERC20Detailed-name}.
    function name() external view override returns (string memory) {
        return _name;
    }

    /// @dev See {IERC20Detailed-symbol}.
    function symbol() external view override returns (string memory) {
        return _symbol;
    }

    /// @dev See {IERC20Detailed-decimals}.
    function decimals() external view override returns (uint8) {
        return _decimals;
    }

    /////////////////////////////////////////// ERC20Metadata ///////////////////////////////////////

    /// @dev See {IERC20Metadata-tokenURI}.
    function tokenURI() external view override returns (string memory) {
        return _tokenURI;
    }

    /////////////////////////////////////////// ERC20 ///////////////////////////////////////

    /// @dev See {IERC20-totalSupply}.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    /// @dev See {IERC20-balanceOf}.
    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    /// @dev See {IERC20-allowance}.
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /// @dev See {IERC20-approve}.
    function approve(address spender, uint256 value) external virtual override returns (bool) {
        _approve(_msgSender(), spender, value);
        return true;
    }

    /////////////////////////////////////////// ERC20 Allowance ///////////////////////////////////////

    /// @dev See {IERC20Allowance-increaseAllowance}.
    function increaseAllowance(address spender, uint256 addedValue) external virtual override returns (bool) {
        require(spender != address(0), "ERC20: zero address spender");
        address owner = _msgSender();
        uint256 allowance_ = _allowances[owner][spender];
        if (addedValue != 0) {
            uint256 newAllowance = allowance_ + addedValue;
            require(newAllowance > allowance_, "ERC20: allowance overflow");
            _allowances[owner][spender] = newAllowance;
            allowance_ = newAllowance;
        }
        emit Approval(owner, spender, allowance_);

        return true;
    }

    /// @dev See {IERC20Allowance-decreaseAllowance}.
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual override returns (bool) {
        require(spender != address(0), "ERC20: zero address spender");
        _decreaseAllowance(_msgSender(), spender, subtractedValue);
        return true;
    }

    /// @dev See {IERC20-transfer}.
    function transfer(address to, uint256 value) external virtual override returns (bool) {
        _transfer(_msgSender(), to, value);
        return true;
    }

    /// @dev See {IERC20-transferFrom}.
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external virtual override returns (bool) {
        _transferFrom(_msgSender(), from, to, value);
        return true;
    }

    /////////////////////////////////////////// ERC20MultiTransfer ///////////////////////////////////////

    /// @dev See {IERC20MultiTransfer-multiTransfer(address[],uint256[])}.
    function batchTransfer(address[] calldata recipients, uint256[] calldata values) external virtual override returns (bool) {
        uint256 length = recipients.length;
        require(length == values.length, "ERC20: inconsistent arrays");
        address sender = _msgSender();
        uint256 balance = _balances[sender];

        uint256 totalValue;
        uint256 selfTransferTotalValue;
        for (uint256 i; i != length; ++i) {
            address to = recipients[i];
            require(to != address(0), "ERC20: to zero address");

            uint256 value = values[i];
            if (value != 0) {
                uint256 newTotalValue = totalValue + value;
                require(newTotalValue > totalValue, "ERC20: values overflow");
                totalValue = newTotalValue;
                if (sender != to) {
                    _balances[to] += value;
                } else {
                    require(value <= balance, "ERC20: insufficient balance");
                    selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true
                }
            }
            emit Transfer(sender, to, value);
        }

        if (totalValue != 0 && totalValue != selfTransferTotalValue) {
            uint256 newBalance = balance - totalValue;
            require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers
            _balances[sender] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance
        }
        return true;
    }

    /// @dev See {IERC20MultiTransfer-multiTransferFrom(address,address[],uint256[])}.
    function batchTransferFrom(
        address from,
        address[] calldata recipients,
        uint256[] calldata values
    ) external virtual override returns (bool) {
        uint256 length = recipients.length;
        require(length == values.length, "ERC20: inconsistent arrays");

        uint256 balance = _balances[from];

        uint256 totalValue;
        uint256 selfTransferTotalValue;
        for (uint256 i; i != length; ++i) {
            address to = recipients[i];
            require(to != address(0), "ERC20: to zero address");

            uint256 value = values[i];

            if (value != 0) {
                uint256 newTotalValue = totalValue + value;
                require(newTotalValue > totalValue, "ERC20: values overflow");
                totalValue = newTotalValue;
                if (from != to) {
                    _balances[to] += value;
                } else {
                    require(value <= balance, "ERC20: insufficient balance");
                    selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true
                }
            }

            emit Transfer(from, to, value);
        }

        if (totalValue != 0 && totalValue != selfTransferTotalValue) {
            uint256 newBalance = balance - totalValue;
            require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers
            _balances[from] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance
        }

        address sender = _msgSender();
        if (from != sender) {
            _decreaseAllowance(from, sender, totalValue);
        }

        return true;
    }

    /////////////////////////////////////////// ERC20SafeTransfers ///////////////////////////////////////

    /// @dev See {IERC20Safe-safeTransfer(address,uint256,bytes)}.
    function safeTransfer(
        address to,
        uint256 amount,
        bytes calldata data
    ) external virtual override returns (bool) {
        address sender = _msgSender();
        _transfer(sender, to, amount);
        if (to.isContract()) {
            require(IERC20Receiver(to).onERC20Received(sender, sender, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused");
        }
        return true;
    }

    /// @dev See {IERC20Safe-safeTransferFrom(address,address,uint256,bytes)}.
    function safeTransferFrom(
        address from,
        address to,
        uint256 amount,
        bytes calldata data
    ) external virtual override returns (bool) {
        address sender = _msgSender();
        _transferFrom(sender, from, to, amount);
        if (to.isContract()) {
            require(IERC20Receiver(to).onERC20Received(sender, from, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused");
        }
        return true;
    }

    /////////////////////////////////////////// ERC20Permit ///////////////////////////////////////

    /// @dev See {IERC2612-permit(address,address,uint256,uint256,uint8,bytes32,bytes32)}.
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override {
        require(owner != address(0), "ERC20: zero address owner");
        require(block.timestamp <= deadline, "ERC20: expired permit");
        bytes32 hashStruct = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline));
        bytes32 hash = keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), hashStruct));
        address signer = ecrecover(hash, v, r, s);
        require(signer == owner, "ERC20: invalid permit");
        _approve(owner, spender, value);
    }

    /////////////////////////////////////////// Internal Functions ///////////////////////////////////////

    function _approve(
        address owner,
        address spender,
        uint256 value
    ) internal {
        require(spender != address(0), "ERC20: zero address spender");
        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _decreaseAllowance(
        address owner,
        address spender,
        uint256 subtractedValue
    ) internal {
        uint256 allowance_ = _allowances[owner][spender];

        if (allowance_ != type(uint256).max && subtractedValue != 0) {
            // save gas when allowance is maximal by not reducing it (see https://github.com/ethereum/EIPs/issues/717)
            uint256 newAllowance = allowance_ - subtractedValue;
            require(newAllowance < allowance_, "ERC20: insufficient allowance");
            _allowances[owner][spender] = newAllowance;
            allowance_ = newAllowance;
        }
        emit Approval(owner, spender, allowance_);
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual {
        require(to != address(0), "ERC20: to zero address");

        if (value != 0) {
            uint256 balance = _balances[from];
            uint256 newBalance = balance - value;
            require(newBalance < balance, "ERC20: insufficient balance");
            if (from != to) {
                _balances[from] = newBalance;
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _transferFrom(
        address sender,
        address from,
        address to,
        uint256 value
    ) internal {
        _transfer(from, to, value);
        if (from != sender) {
            _decreaseAllowance(from, sender, value);
        }
    }

    function _mint(address to, uint256 value) internal virtual {
        require(to != address(0), "ERC20: zero address");
        uint256 supply = _totalSupply;
        if (value != 0) {
            uint256 newSupply = supply + value;
            require(newSupply > supply, "ERC20: supply overflow");
            _totalSupply = newSupply;
            _balances[to] += value; // balance cannot overflow if supply does not
        }
        emit Transfer(address(0), to, value);
    }

    function _batchMint(address[] memory recipients, uint256[] memory values) internal virtual {
        uint256 length = recipients.length;
        require(length == values.length, "ERC20: inconsistent arrays");

        uint256 totalValue;
        for (uint256 i; i != length; ++i) {
            address to = recipients[i];
            require(to != address(0), "ERC20: zero address");

            uint256 value = values[i];
            if (value != 0) {
                uint256 newTotalValue = totalValue + value;
                require(newTotalValue > totalValue, "ERC20: values overflow");
                totalValue = newTotalValue;
                _balances[to] += value; // balance cannot overflow if supply does not
            }
            emit Transfer(address(0), to, value);
        }

        if (totalValue != 0) {
            uint256 supply = _totalSupply;
            uint256 newSupply = supply + totalValue;
            require(newSupply > supply, "ERC20: supply overflow");
            _totalSupply = newSupply;
        }
    }

    function _burn(address from, uint256 value) internal virtual {
        if (value != 0) {
            uint256 balance = _balances[from];
            uint256 newBalance = balance - value;
            require(newBalance < balance, "ERC20: insufficient balance");
            _balances[from] = newBalance;
            _totalSupply -= value; // will not underflow if balance does not
        }
        emit Transfer(from, address(0), value);
    }

    function _burnFrom(address from, uint256 value) internal virtual {
        _burn(from, value);
        address sender = _msgSender();
        if (from != sender) {
            _decreaseAllowance(from, sender, value);
        }
    }

    function _batchBurnFrom(address[] memory owners, uint256[] memory values) internal virtual {
        uint256 length = owners.length;
        require(length == values.length, "ERC20: inconsistent arrays");

        address sender = _msgSender();

        uint256 totalValue;
        for (uint256 i; i != length; ++i) {
            address from = owners[i];
            uint256 value = values[i];
            if (value != 0) {
                uint256 balance = _balances[from];
                uint256 newBalance = balance - value;
                require(newBalance < balance, "ERC20: insufficient balance");
                _balances[from] = newBalance;
                totalValue += value; // totalValue cannot overflow if the individual balances do not underflow
            }
            emit Transfer(from, address(0), value);

            if (from != sender) {
                _decreaseAllowance(from, sender, value);
            }
        }

        if (totalValue != 0) {
            _totalSupply -= totalValue; // _totalSupply cannot underfow as balances do not underflow
        }
    }
}

File 3 of 13 : ManagedIdentity.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/*
 * 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.
 */
abstract contract ManagedIdentity {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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

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

pragma solidity >=0.7.6 <0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 5 of 13 : AddressIsContract.sol
// SPDX-License-Identifier: MIT

// Partially derived from OpenZeppelin:
// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/406c83649bd6169fc1b578e08506d78f0873b276/contracts/utils/Address.sol

pragma solidity >=0.7.6 <0.8.0;

/**
 * @dev Upgrades the address type to check if it is a contract.
 */
library AddressIsContract {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}

File 6 of 13 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, basic interface
 * @dev See https://eips.ethereum.org/EIPS/eip-20
 * Note: The ERC-165 identifier for this interface is 0x36372b07.
 */
interface IERC20 {
    /**
     * @dev Emitted when tokens are transferred, including zero value transfers.
     * @param _from The account where the transferred tokens are withdrawn from.
     * @param _to The account where the transferred tokens are deposited to.
     * @param _value The amount of tokens being transferred.
     */
    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    /**
     * @dev Emitted when a successful call to {IERC20-approve(address,uint256)} is made.
     * @param _owner The account granting an allowance to `_spender`.
     * @param _spender The account being granted an allowance from `_owner`.
     * @param _value The allowance amount being granted.
     */
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    /**
     * @notice Returns the total token supply.
     * @return The total token supply.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Returns the account balance of another account with address `owner`.
     * @param owner The account whose balance will be returned.
     * @return The account balance of another account with address `owner`.
     */
    function balanceOf(address owner) external view returns (uint256);

    /**
     * Transfers `value` amount of tokens to address `to`.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if the sender does not have enough balance.
     * @dev Emits an {IERC20-Transfer} event.
     * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event.
     * @param to The receiver account.
     * @param value The amount of tokens to transfer.
     * @return True if the transfer succeeds, false otherwise.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @notice Transfers `value` amount of tokens from address `from` to address `to` via the approval mechanism.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if the sender is not `from` and has not been approved by `from` for at least `value`.
     * @dev Reverts if `from` does not have at least `value` of balance.
     * @dev Emits an {IERC20-Transfer} event.
     * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event.
     * @param from The emitter account.
     * @param to The receiver account.
     * @param value The amount of tokens to transfer.
     * @return True if the transfer succeeds, false otherwise.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    /**
     * Sets `value` as the allowance from the caller to `spender`.
     *  IMPORTANT: Beware that changing an allowance with this method brings the risk
     *  that someone may use both the old and the new allowance by unfortunate
     *  transaction ordering. One possible solution to mitigate this race
     *  condition is to first reduce the spender's allowance to 0 and set the
     *  desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @dev Reverts if `spender` is the zero address.
     * @dev Emits the {IERC20-Approval} event.
     * @param spender The account being granted the allowance by the message caller.
     * @param value The allowance amount to grant.
     * @return True if the approval succeeds, false otherwise.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * Returns the amount which `spender` is allowed to spend on behalf of `owner`.
     * @param owner The account that has granted an allowance to `spender`.
     * @param spender The account that was granted an allowance by `owner`.
     * @return The amount which `spender` is allowed to spend on behalf of `owner`.
     */
    function allowance(address owner, address spender) external view returns (uint256);
}

File 7 of 13 : IERC20Detailed.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, optional extension: Detailed
 * See https://eips.ethereum.org/EIPS/eip-20
 * Note: the ERC-165 identifier for this interface is 0xa219a025.
 */
interface IERC20Detailed {
    /**
     * Returns the name of the token. E.g. "My Token".
     * @return The name of the token.
     */
    function name() external view returns (string memory);

    /**
     * Returns the symbol of the token. E.g. "HIX".
     * @return The symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * Returns the number of decimals used to display the balances.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei.
     *
     * NOTE: This information is only used for _display_ purposes: it does  not impact the arithmetic of the contract.
     * @return The number of decimals used to display the balances.
     */
    function decimals() external view returns (uint8);
}

File 8 of 13 : IERC20Allowance.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, optional extension: Allowance
 * See https://eips.ethereum.org/EIPS/eip-20
 * Note: the ERC-165 identifier for this interface is 0xd5b86388.
 */
interface IERC20Allowance {
    /**
     * Increases the allowance granted by the sender to `spender` by `value`.
     *  This is an alternative to {approve} that can be used as a mitigation for
     *  problems described in {IERC20-approve}.
     * @dev Reverts if `spender` is the zero address.
     * @dev Reverts if `spender`'s allowance overflows.
     * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`.
     * @param spender The account whose allowance is being increased by the message caller.
     * @param value The allowance amount increase.
     * @return True if the allowance increase succeeds, false otherwise.
     */
    function increaseAllowance(address spender, uint256 value) external returns (bool);

    /**
     * Decreases the allowance granted by the sender to `spender` by `value`.
     *  This is an alternative to {approve} that can be used as a mitigation for
     *  problems described in {IERC20-approve}.
     * @dev Reverts if `spender` is the zero address.
     * @dev Reverts if `spender` has an allowance with the message caller for less than `value`.
     * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`.
     * @param spender The account whose allowance is being decreased by the message caller.
     * @param value The allowance amount decrease.
     * @return True if the allowance decrease succeeds, false otherwise.
     */
    function decreaseAllowance(address spender, uint256 value) external returns (bool);
}

File 9 of 13 : IERC20SafeTransfers.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, optional extension: Safe Transfers
 * Note: the ERC-165 identifier for this interface is 0x53f41a97.
 */
interface IERC20SafeTransfers {
    /**
     * Transfers tokens from the caller to `to`. If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if `value` is greater than the sender's balance.
     * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`.
     * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value.
     * @dev Emits an {IERC20-Transfer} event.
     * @param to The address for the tokens to be transferred to.
     * @param amount The amount of tokens to be transferred.
     * @param data Optional additional data with no specified format, to be passed to the receiver contract.
     * @return true.
     */
    function safeTransfer(
        address to,
        uint256 amount,
        bytes calldata data
    ) external returns (bool);

    /**
     * Transfers tokens from `from` to another address, using the allowance mechanism.
     *  If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if `value` is greater than `from`'s balance.
     * @dev Reverts if the sender does not have at least `value` allowance by `from`.
     * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`.
     * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value.
     * @dev Emits an {IERC20-Transfer} event.
     * @param from The address which owns the tokens to be transferred.
     * @param to The address for the tokens to be transferred to.
     * @param amount The amount of tokens to be transferred.
     * @param data Optional additional data with no specified format, to be passed to the receiver contract.
     * @return true.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 amount,
        bytes calldata data
    ) external returns (bool);
}

File 10 of 13 : IERC20BatchTransfers.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, optional extension: Multi Transfers
 * Note: the ERC-165 identifier for this interface is 0xd5b86388.
 */
interface IERC20BatchTransfers {
    /**
     * Moves multiple `amounts` tokens from the caller's account to each of `recipients`.
     * @dev Reverts if `recipients` and `amounts` have different lengths.
     * @dev Reverts if one of `recipients` is the zero address.
     * @dev Reverts if the caller has an insufficient balance.
     * @dev Emits an {IERC20-Transfer} event for each individual transfer.
     * @param recipients the list of recipients to transfer the tokens to.
     * @param amounts the amounts of tokens to transfer to each of `recipients`.
     * @return a boolean value indicating whether the operation succeeded.
     */
    function batchTransfer(address[] calldata recipients, uint256[] calldata amounts) external returns (bool);

    /**
     * Moves multiple `amounts` tokens from an account to each of `recipients`, using the approval mechanism.
     * @dev Reverts if `recipients` and `amounts` have different lengths.
     * @dev Reverts if one of `recipients` is the zero address.
     * @dev Reverts if `from` has an insufficient balance.
     * @dev Reverts if the sender does not have at least the sum of all `amounts` as allowance by `from`.
     * @dev Emits an {IERC20-Transfer} event for each individual transfer.
     * @dev Emits an {IERC20-Approval} event.
     * @param from The address which owns the tokens to be transferred.
     * @param recipients the list of recipients to transfer the tokens to.
     * @param amounts the amounts of tokens to transfer to each of `recipients`.
     * @return a boolean value indicating whether the operation succeeded.
     */
    function batchTransferFrom(
        address from,
        address[] calldata recipients,
        uint256[] calldata amounts
    ) external returns (bool);
}

File 11 of 13 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, ERC1046 optional extension: Metadata
 * See https://eips.ethereum.org/EIPS/eip-1046
 * Note: the ERC-165 identifier for this interface is 0x3c130d90.
 */
interface IERC20Metadata {
    /**
     * Returns a distinct Uniform Resource Identifier (URI) for the token metadata.
     * @return a distinct Uniform Resource Identifier (URI) for the token metadata.
     */
    function tokenURI() external view returns (string memory);
}

File 12 of 13 : IERC20Permit.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, ERC2612 optional extension: permit – 712-signed approvals
 * @dev Interface for allowing ERC20 approvals to be made via ECDSA `secp256k1` signatures.
 * See https://eips.ethereum.org/EIPS/eip-2612
 * Note: the ERC-165 identifier for this interface is 0x9d8ff7da.
 */
interface IERC20Permit {
    /**
     * Sets `value` as the allowance of `spender` over the tokens of `owner`, given `owner` account's signed permit.
     * @dev WARNING: The standard ERC-20 race condition for approvals applies to `permit()` as well: https://swcregistry.io/docs/SWC-114
     * @dev Reverts if `owner` is the zero address.
     * @dev Reverts if the current blocktime is > `deadline`.
     * @dev Reverts if `r`, `s`, and `v` is not a valid `secp256k1` signature from `owner`.
     * @dev Emits an {IERC20-Approval} event.
     * @param owner The token owner granting the allowance to `spender`.
     * @param spender The token spender being granted the allowance by `owner`.
     * @param value The token amount of the allowance.
     * @param deadline The deadline from which the permit signature is no longer valid.
     * @param v Permit signature v parameter
     * @param r Permit signature r parameter.
     * @param s Permis signature s parameter.
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * Returns the current permit nonce of `owner`.
     * @param owner the address to check the nonce of.
     * @return the current permit nonce of `owner`.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * Returns the EIP-712 encoded hash struct of the domain-specific information for permits.
     *
     * @dev A common ERC-20 permit implementation choice for the `DOMAIN_SEPARATOR` is:
     *
     *  keccak256(
     *      abi.encode(
     *          keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
     *          keccak256(bytes(name)),
     *          keccak256(bytes(version)),
     *          chainId,
     *          address(this)))
     *
     *  where
     *   - `name` (string) is the ERC-20 token name.
     *   - `version` (string) refers to the ERC-20 token contract version.
     *   - `chainId` (uint256) is the chain ID to which the ERC-20 token contract is deployed to.
     *   - `verifyingContract` (address) is the ERC-20 token contract address.
     *
     * @return the EIP-712 encoded hash struct of the domain-specific information for permits.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

File 13 of 13 : IERC20Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, Receiver
 * See https://eips.ethereum.org/EIPS/eip-20
 * Note: the ERC-165 identifier for this interface is 0x4fc35859.
 */
interface IERC20Receiver {
    /**
     * Handles the receipt of ERC20 tokens.
     * @param sender The initiator of the transfer.
     * @param from The address which transferred the tokens.
     * @param value The amount of tokens transferred.
     * @param data Optional additional data with no specified format.
     * @return bytes4 `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))`
     */
    function onERC20Received(
        address sender,
        address from,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 2000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string","name":"tokenURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","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":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[{"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransfer","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"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60e06040523480156200001157600080fd5b506040516200244838038062002448833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82518660208202830111640100000000821117156200008c57600080fd5b82525081516020918201928201910280838360005b83811015620000bb578181015183820152602001620000a1565b5050505090500160405260200180516040519392919084640100000000821115620000e557600080fd5b908301906020820185811115620000fb57600080fd5b82518660208202830111640100000000821117156200011957600080fd5b82525081516020918201928201910280838360005b83811015620001485781810151838201526020016200012e565b50505050905001604052602001805160405193929190846401000000008211156200017257600080fd5b9083019060208201858111156200018857600080fd5b8251640100000000811182820188101715620001a357600080fd5b82525081516020918201929091019080838360005b83811015620001d2578181015183820152602001620001b8565b50505050905090810190601f168015620002005780820380516001836020036101000a031916815260200191505b5060408181018152600480835263444f534560e01b602080850182815284518086019095529284528301528251929550909350601292508591620002479160019162000595565b5082516200025d90600290602086019062000595565b507fff0000000000000000000000000000000000000000000000000000000000000060f883901b1660c05280516200029d90600390602084019062000595565b50466080819052620002b08186620002d0565b60a05250620002c79350869250859150506200035a565b50505062000641565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b815181518114620003b2576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6000805b82811462000527576000858281518110620003cd57fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141562000440576040805162461bcd60e51b815260206004820152601360248201527f45524332303a207a65726f206164647265737300000000000000000000000000604482015290519081900360640190fd5b60008583815181106200044f57fe5b6020026020010151905080600014620004db57838101848111620004ba576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260046020526040902080548301905593505b6040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050600101620003b6565b5080156200058f576006548181018181116200058a576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20737570706c79206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b600655505b50505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620005cd576000855562000618565b82601f10620005e857805160ff191683800117855562000618565b8280016001018555821562000618579182015b8281111562000618578251825591602001919060010190620005fb565b50620006269291506200062a565b5090565b5b808211156200062657600081556001016200062b565b60805160a05160c05160f81c611dd26200067660003980610962525080610a4c52508061098952806115355250611dd26000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a9059cbb1161008c578063d505accf11610066578063d505accf146105e2578063dd62ed3e14610635578063eb7955491461066357610177565b8063a9059cbb1461051e578063b88d4fde1461054a578063cd0d0096146105da57610177565b806388d695b2116100bd57806388d695b21461042857806395d89b41146104ea578063a457c2d7146104f257610177565b806370a08231146103dc5780637ecebe001461040257610177565b8063313ce5671161012f578063395093511161011457806339509351146102d65780633c130d90146103025780634885b2541461030a57610177565b8063313ce567146102b05780633644e515146102ce57610177565b8063095ea7b311610160578063095ea7b31461023457806318160ddd1461026057806323b872dd1461027a57610177565b806301ffc9a71461017c57806306fdde03146101b7575b600080fd5b6101a36004803603602081101561019257600080fd5b50356001600160e01b0319166106e8565b604080519115158252519081900360200190f35b6101bf610889565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f95781810151838201526020016101e1565b50505050905090810190601f1680156102265780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a36004803603604081101561024a57600080fd5b506001600160a01b03813516906020013561091e565b61026861093b565b60408051918252519081900360200190f35b6101a36004803603606081101561029057600080fd5b506001600160a01b03813581169160208101359091169060400135610941565b6102b8610960565b6040805160ff9092168252519081900360200190f35b610268610984565b6101a3600480360360408110156102ec57600080fd5b506001600160a01b038135169060200135610a72565b6101bf610be0565b6101a36004803603606081101561032057600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561034b57600080fd5b82018360208201111561035d57600080fd5b8035906020019184602083028401116401000000008311171561037f57600080fd5b91939092909160208101903564010000000081111561039d57600080fd5b8201836020820111156103af57600080fd5b803590602001918460208302840111640100000000831117156103d157600080fd5b509092509050610c41565b610268600480360360208110156103f257600080fd5b50356001600160a01b0316610f75565b6102686004803603602081101561041857600080fd5b50356001600160a01b0316610f90565b6101a36004803603604081101561043e57600080fd5b81019060208101813564010000000081111561045957600080fd5b82018360208201111561046b57600080fd5b8035906020019184602083028401116401000000008311171561048d57600080fd5b9193909290916020810190356401000000008111156104ab57600080fd5b8201836020820111156104bd57600080fd5b803590602001918460208302840111640100000000831117156104df57600080fd5b509092509050610fa2565b6101bf6112b1565b6101a36004803603604081101561050857600080fd5b506001600160a01b03813516906020013561130f565b6101a36004803603604081101561053457600080fd5b506001600160a01b03813516906020013561137e565b6101a36004803603608081101561056057600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561059b57600080fd5b8201836020820111156105ad57600080fd5b803590602001918460018302840111640100000000831117156105cf57600080fd5b509092509050611392565b610268611533565b610633600480360360e08110156105f857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611557565b005b6102686004803603604081101561064b57600080fd5b506001600160a01b03813581169160200135166117d6565b6101a36004803603606081101561067957600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156106a957600080fd5b8201836020820111156106bb57600080fd5b803590602001918460018302840111640100000000831117156106dd57600080fd5b509092509050611801565b60006001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000148061074b57506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b8061077f57506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b806107b357506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b806107e757506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b8061081b57506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b8061084f57506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b8061088357506001600160e01b031982167f9d8ff7da00000000000000000000000000000000000000000000000000000000145b92915050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156109145780601f106108e957610100808354040283529160200191610914565b820191906000526020600020905b8154815290600101906020018083116108f757829003601f168201915b5050505050905090565b600061093261092b6119a0565b84846119a4565b50600192915050565b60065490565b600061095661094e6119a0565b858585611a61565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000467f00000000000000000000000000000000000000000000000000000000000000008114610a4a5760018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152610a4593859391929091830182828015610a3b5780601f10610a1057610100808354040283529160200191610a3b565b820191906000526020600020905b815481529060010190602001808311610a1e57829003601f168201915b5050505050611a96565b610a6c565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b60006001600160a01b038316610acf576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610ad96119a0565b6001600160a01b038082166000908152600560209081526040808320938916835292905220549091508315610b8a57808401818111610b5f576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600560209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109145780601f106108e957610100808354040283529160200191610914565b600083828114610c98576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600460205260408120549080805b848114610eaa5760008a8a83818110610cca57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415610d44576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b6000898984818110610d5257fe5b90506020020135905080600014610e5557848101858111610dba576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b031614610df9576001600160a01b0383166000908152600460205260409020805483019055610e53565b86821115610e4e576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050600101610cb5565b508115801590610eba5750808214155b15610f3457818303838110610f16576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260046020526040902090820190555b6000610f3e6119a0565b9050806001600160a01b03168b6001600160a01b031614610f6457610f648b8285611b20565b5060019a9950505050505050505050565b6001600160a01b031660009081526004602052604090205490565b60006020819052908152604090205481565b600083828114610ff9576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006110036119a0565b6001600160a01b03811660009081526004602052604081205491925080805b8581146112175760008b8b8381811061103757fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b031614156110b1576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a848181106110bf57fe5b905060200201359050806000146111c257848101858111611127576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b031614611166576001600160a01b03831660009081526004602052604090208054830190556111c0565b868211156111bb576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050600101611022565b5081158015906112275750808214155b156112a157818303838110611283576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260046020526040902090820190555b5060019998505050505050505050565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156109145780601f106108e957610100808354040283529160200191610914565b60006001600160a01b03831661136c576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6109326113776119a0565b8484611b20565b600061093261138b6119a0565b8484611c2f565b60008061139d6119a0565b90506113ab81888888611a61565b6113bd866001600160a01b0316611d96565b15611526577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d60208110156114c857600080fd5b50516001600160e01b03191614611526576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0387166115b2576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611607576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526020818152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e09093019093528151919092012090611699610984565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561174d573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b0316146117bf576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b6117ca8a8a8a6119a4565b50505050505050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b60008061180c6119a0565b9050611819818787611c2f565b61182b866001600160a01b0316611d96565b15611994577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561190c57600080fd5b505af1158015611920573d6000803e3d6000fd5b505050506040513d602081101561193657600080fd5b50516001600160e01b03191614611994576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b3390565b6001600160a01b0382166119ff576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b611a6c838383611c2f565b836001600160a01b0316836001600160a01b031614611a9057611a90838583611b20565b50505050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b038084166000908152600560209081526040808320938616835292905220546000198114801590611b5757508115155b15611bde57818103818110611bb3576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260056020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b6001600160a01b038216611c8a576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015611d46576001600160a01b038316600090815260046020526040902054818103818110611d00576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614611d43576001600160a01b038086166000908152600460205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b15159056fea2646970667358221220cb81fecfe41671ec5e4c19edfe1a4b8b62f7735abbb613e3cc1e62a06857f8e564736f6c634300070600330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000059ce2e351e36f276bfced3f63653249207edcb4000000000000000000000000da05ba1469c4fb2565f694afe0eae7487d4961d1000000000000000000000000b8a6b7532f6bccf4a7fb5afe4b7bff4f077c7a5e0000000000000000000000002ac2d05c9bcf284871eaab8e9bc9bea742c6fd900000000000000000000000002eadbd0ceba80683e3c2100165e16716bf50b73500000000000000000000000066481835d1111f597c2ad6c61ff94eb216ecd3fb000000000000000000000000100cbdf398f29bdd067c75e82a4248696178082d0000000000000000000000003c25267f130a2e5c27fb2eb2e1f2c094a015613d000000000000000000000000449cee63728e85fca560590026ed4cd88f7bf76f00000000000000000000000059bbf14b028f5b5bd58f5fc8888224a3c0d817230000000000000000000000000b305078dbbcd8615ce92c790f1c6f4ed9dd0cba000000000000000000000000f692e7b7e16bb755b9a72510fc9cb7285b6e7ac80000000000000000000000008c4341c904fe91e02c7575a70027702b506a2a4e000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000024306c4097859c43c000000000000000000000000000000000000000000000000084595161401484a0000000000000000000000000000000000000000000000006ed79a8e3f4462460000000000000000000000000000000000000000000000019d971e4fe8401e740000000000000000000000000000000000000000000000006ed79a8e3f4462460000000000000000000000000000000000000000000000019d971e4fe8401e740000000000000000000000000000000000000000000000019d971e4fe8401e740000000000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000000000000000000000e0fe3d8bb9bc7b10000000000000000000000000000000000000000000000001363156bbee3016d70000000000000000000000000000000000000000000000001f04ef12cb04cf15800000000000000000000000000000000000000000000001172c67a9232b47c1800000000000000000000000000000000000000000000000000000000000000000001e68747470733a2f2f6170692e646f7365746f6b656e2e636f6d2f6a736f6e0000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a9059cbb1161008c578063d505accf11610066578063d505accf146105e2578063dd62ed3e14610635578063eb7955491461066357610177565b8063a9059cbb1461051e578063b88d4fde1461054a578063cd0d0096146105da57610177565b806388d695b2116100bd57806388d695b21461042857806395d89b41146104ea578063a457c2d7146104f257610177565b806370a08231146103dc5780637ecebe001461040257610177565b8063313ce5671161012f578063395093511161011457806339509351146102d65780633c130d90146103025780634885b2541461030a57610177565b8063313ce567146102b05780633644e515146102ce57610177565b8063095ea7b311610160578063095ea7b31461023457806318160ddd1461026057806323b872dd1461027a57610177565b806301ffc9a71461017c57806306fdde03146101b7575b600080fd5b6101a36004803603602081101561019257600080fd5b50356001600160e01b0319166106e8565b604080519115158252519081900360200190f35b6101bf610889565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f95781810151838201526020016101e1565b50505050905090810190601f1680156102265780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a36004803603604081101561024a57600080fd5b506001600160a01b03813516906020013561091e565b61026861093b565b60408051918252519081900360200190f35b6101a36004803603606081101561029057600080fd5b506001600160a01b03813581169160208101359091169060400135610941565b6102b8610960565b6040805160ff9092168252519081900360200190f35b610268610984565b6101a3600480360360408110156102ec57600080fd5b506001600160a01b038135169060200135610a72565b6101bf610be0565b6101a36004803603606081101561032057600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561034b57600080fd5b82018360208201111561035d57600080fd5b8035906020019184602083028401116401000000008311171561037f57600080fd5b91939092909160208101903564010000000081111561039d57600080fd5b8201836020820111156103af57600080fd5b803590602001918460208302840111640100000000831117156103d157600080fd5b509092509050610c41565b610268600480360360208110156103f257600080fd5b50356001600160a01b0316610f75565b6102686004803603602081101561041857600080fd5b50356001600160a01b0316610f90565b6101a36004803603604081101561043e57600080fd5b81019060208101813564010000000081111561045957600080fd5b82018360208201111561046b57600080fd5b8035906020019184602083028401116401000000008311171561048d57600080fd5b9193909290916020810190356401000000008111156104ab57600080fd5b8201836020820111156104bd57600080fd5b803590602001918460208302840111640100000000831117156104df57600080fd5b509092509050610fa2565b6101bf6112b1565b6101a36004803603604081101561050857600080fd5b506001600160a01b03813516906020013561130f565b6101a36004803603604081101561053457600080fd5b506001600160a01b03813516906020013561137e565b6101a36004803603608081101561056057600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561059b57600080fd5b8201836020820111156105ad57600080fd5b803590602001918460018302840111640100000000831117156105cf57600080fd5b509092509050611392565b610268611533565b610633600480360360e08110156105f857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611557565b005b6102686004803603604081101561064b57600080fd5b506001600160a01b03813581169160200135166117d6565b6101a36004803603606081101561067957600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156106a957600080fd5b8201836020820111156106bb57600080fd5b803590602001918460018302840111640100000000831117156106dd57600080fd5b509092509050611801565b60006001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000148061074b57506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b8061077f57506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b806107b357506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b806107e757506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b8061081b57506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b8061084f57506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b8061088357506001600160e01b031982167f9d8ff7da00000000000000000000000000000000000000000000000000000000145b92915050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156109145780601f106108e957610100808354040283529160200191610914565b820191906000526020600020905b8154815290600101906020018083116108f757829003601f168201915b5050505050905090565b600061093261092b6119a0565b84846119a4565b50600192915050565b60065490565b600061095661094e6119a0565b858585611a61565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000001290565b6000467f00000000000000000000000000000000000000000000000000000000000000018114610a4a5760018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152610a4593859391929091830182828015610a3b5780601f10610a1057610100808354040283529160200191610a3b565b820191906000526020600020905b815481529060010190602001808311610a1e57829003601f168201915b5050505050611a96565b610a6c565b7f3bc6379b4ec5664202a945e06bf4983438bcaf0d223bc8b9d1d79ed7aa06f6015b91505090565b60006001600160a01b038316610acf576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610ad96119a0565b6001600160a01b038082166000908152600560209081526040808320938916835292905220549091508315610b8a57808401818111610b5f576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600560209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109145780601f106108e957610100808354040283529160200191610914565b600083828114610c98576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600460205260408120549080805b848114610eaa5760008a8a83818110610cca57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415610d44576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b6000898984818110610d5257fe5b90506020020135905080600014610e5557848101858111610dba576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b031614610df9576001600160a01b0383166000908152600460205260409020805483019055610e53565b86821115610e4e576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050600101610cb5565b508115801590610eba5750808214155b15610f3457818303838110610f16576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260046020526040902090820190555b6000610f3e6119a0565b9050806001600160a01b03168b6001600160a01b031614610f6457610f648b8285611b20565b5060019a9950505050505050505050565b6001600160a01b031660009081526004602052604090205490565b60006020819052908152604090205481565b600083828114610ff9576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006110036119a0565b6001600160a01b03811660009081526004602052604081205491925080805b8581146112175760008b8b8381811061103757fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b031614156110b1576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a848181106110bf57fe5b905060200201359050806000146111c257848101858111611127576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b031614611166576001600160a01b03831660009081526004602052604090208054830190556111c0565b868211156111bb576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050600101611022565b5081158015906112275750808214155b156112a157818303838110611283576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260046020526040902090820190555b5060019998505050505050505050565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156109145780601f106108e957610100808354040283529160200191610914565b60006001600160a01b03831661136c576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6109326113776119a0565b8484611b20565b600061093261138b6119a0565b8484611c2f565b60008061139d6119a0565b90506113ab81888888611a61565b6113bd866001600160a01b0316611d96565b15611526577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d60208110156114c857600080fd5b50516001600160e01b03191614611526576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000181565b6001600160a01b0387166115b2576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611607576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526020818152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e09093019093528151919092012090611699610984565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561174d573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b0316146117bf576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b6117ca8a8a8a6119a4565b50505050505050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b60008061180c6119a0565b9050611819818787611c2f565b61182b866001600160a01b0316611d96565b15611994577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561190c57600080fd5b505af1158015611920573d6000803e3d6000fd5b505050506040513d602081101561193657600080fd5b50516001600160e01b03191614611994576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b3390565b6001600160a01b0382166119ff576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b611a6c838383611c2f565b836001600160a01b0316836001600160a01b031614611a9057611a90838583611b20565b50505050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b038084166000908152600560209081526040808320938616835292905220546000198114801590611b5757508115155b15611bde57818103818110611bb3576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260056020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b6001600160a01b038216611c8a576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015611d46576001600160a01b038316600090815260046020526040902054818103818110611d00576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614611d43576001600160a01b038086166000908152600460205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b15159056fea2646970667358221220cb81fecfe41671ec5e4c19edfe1a4b8b62f7735abbb613e3cc1e62a06857f8e564736f6c63430007060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000059ce2e351e36f276bfced3f63653249207edcb4000000000000000000000000da05ba1469c4fb2565f694afe0eae7487d4961d1000000000000000000000000b8a6b7532f6bccf4a7fb5afe4b7bff4f077c7a5e0000000000000000000000002ac2d05c9bcf284871eaab8e9bc9bea742c6fd900000000000000000000000002eadbd0ceba80683e3c2100165e16716bf50b73500000000000000000000000066481835d1111f597c2ad6c61ff94eb216ecd3fb000000000000000000000000100cbdf398f29bdd067c75e82a4248696178082d0000000000000000000000003c25267f130a2e5c27fb2eb2e1f2c094a015613d000000000000000000000000449cee63728e85fca560590026ed4cd88f7bf76f00000000000000000000000059bbf14b028f5b5bd58f5fc8888224a3c0d817230000000000000000000000000b305078dbbcd8615ce92c790f1c6f4ed9dd0cba000000000000000000000000f692e7b7e16bb755b9a72510fc9cb7285b6e7ac80000000000000000000000008c4341c904fe91e02c7575a70027702b506a2a4e000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000024306c4097859c43c000000000000000000000000000000000000000000000000084595161401484a0000000000000000000000000000000000000000000000006ed79a8e3f4462460000000000000000000000000000000000000000000000019d971e4fe8401e740000000000000000000000000000000000000000000000006ed79a8e3f4462460000000000000000000000000000000000000000000000019d971e4fe8401e740000000000000000000000000000000000000000000000019d971e4fe8401e740000000000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000000000000000000000e0fe3d8bb9bc7b10000000000000000000000000000000000000000000000001363156bbee3016d70000000000000000000000000000000000000000000000001f04ef12cb04cf15800000000000000000000000000000000000000000000001172c67a9232b47c1800000000000000000000000000000000000000000000000000000000000000000001e68747470733a2f2f6170692e646f7365746f6b656e2e636f6d2f6a736f6e0000

-----Decoded View---------------
Arg [0] : recipients (address[]): 0x059CE2E351e36F276bfCEd3f63653249207edCB4,0xda05Ba1469c4fB2565F694afe0EAe7487d4961D1,0xB8a6b7532F6Bccf4a7FB5afE4B7BFf4F077c7A5e,0x2aC2D05C9BCF284871eaaB8E9bc9bEA742C6Fd90,0x2EaDbD0cebA80683E3C2100165E16716bF50B735,0x66481835D1111F597c2Ad6c61FF94eB216EcD3FB,0x100Cbdf398f29bDD067C75E82a4248696178082d,0x3C25267F130a2e5C27fb2eb2e1f2c094A015613D,0x449CeE63728E85FCA560590026eD4cD88F7Bf76f,0x59bbF14b028f5b5Bd58f5Fc8888224a3C0D81723,0x0b305078dBbCD8615CE92c790f1C6f4eD9dd0Cba,0xF692e7B7E16BB755b9a72510fc9CB7285B6E7ac8,0x8c4341c904Fe91e02C7575A70027702b506A2A4E
Arg [1] : values (uint256[]): 700000000000000000000000000,10000000000000000000000000,134000000000000000000000000,500000000000000000000000000,134000000000000000000000000,500000000000000000000000000,500000000000000000000000000,1000000000000000000000000000,500000000000000000000000000,272000000000000000000000000,375000000000000000000000000,37500000000000000000000000,337500000000000000000000000
Arg [2] : tokenURI_ (string): https://api.dosetoken.com/json

-----Encoded View---------------
33 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [2] : 00000000000000000000000000000000000000000000000000000000000003e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 000000000000000000000000059ce2e351e36f276bfced3f63653249207edcb4
Arg [5] : 000000000000000000000000da05ba1469c4fb2565f694afe0eae7487d4961d1
Arg [6] : 000000000000000000000000b8a6b7532f6bccf4a7fb5afe4b7bff4f077c7a5e
Arg [7] : 0000000000000000000000002ac2d05c9bcf284871eaab8e9bc9bea742c6fd90
Arg [8] : 0000000000000000000000002eadbd0ceba80683e3c2100165e16716bf50b735
Arg [9] : 00000000000000000000000066481835d1111f597c2ad6c61ff94eb216ecd3fb
Arg [10] : 000000000000000000000000100cbdf398f29bdd067c75e82a4248696178082d
Arg [11] : 0000000000000000000000003c25267f130a2e5c27fb2eb2e1f2c094a015613d
Arg [12] : 000000000000000000000000449cee63728e85fca560590026ed4cd88f7bf76f
Arg [13] : 00000000000000000000000059bbf14b028f5b5bd58f5fc8888224a3c0d81723
Arg [14] : 0000000000000000000000000b305078dbbcd8615ce92c790f1c6f4ed9dd0cba
Arg [15] : 000000000000000000000000f692e7b7e16bb755b9a72510fc9cb7285b6e7ac8
Arg [16] : 0000000000000000000000008c4341c904fe91e02c7575a70027702b506a2a4e
Arg [17] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [18] : 0000000000000000000000000000000000000000024306c4097859c43c000000
Arg [19] : 000000000000000000000000000000000000000000084595161401484a000000
Arg [20] : 0000000000000000000000000000000000000000006ed79a8e3f446246000000
Arg [21] : 0000000000000000000000000000000000000000019d971e4fe8401e74000000
Arg [22] : 0000000000000000000000000000000000000000006ed79a8e3f446246000000
Arg [23] : 0000000000000000000000000000000000000000019d971e4fe8401e74000000
Arg [24] : 0000000000000000000000000000000000000000019d971e4fe8401e74000000
Arg [25] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [26] : 0000000000000000000000000000000000000000019d971e4fe8401e74000000
Arg [27] : 000000000000000000000000000000000000000000e0fe3d8bb9bc7b10000000
Arg [28] : 000000000000000000000000000000000000000001363156bbee3016d7000000
Arg [29] : 0000000000000000000000000000000000000000001f04ef12cb04cf15800000
Arg [30] : 000000000000000000000000000000000000000001172c67a9232b47c1800000
Arg [31] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [32] : 68747470733a2f2f6170692e646f7365746f6b656e2e636f6d2f6a736f6e0000


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.