ETH Price: $3,447.98 (+1.45%)

Token

ApuToken (APU)
 

Overview

Max Total Supply

1,337,000,000,000 APU

Holders

337

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
171,255,602.64069543825353891 APU

Value
$0.00
0xae89123af175e264878a63d2979b4238dadac956
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ApuToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-17
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * 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
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * 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. This is the value {ERC20} uses, unless this function is
     * overloaded;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

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

    /**
     * @dev Sets `amount` as the allowance of `smpender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

contract ApuToken is ERC20, Ownable {
    mapping (address => bool) public blacklist;
    mapping (address => bool) public exemptedAddresses;
    uint256 public maxTxAmount = 13370000000 * (10 ** 18);
    uint256 public maxWalletToken = 13370000000 * (10 ** 18);
    bool public tradingEnabled = false;

    constructor() ERC20("ApuToken", "APU") {
        _mint(msg.sender, 1337000000000 * (10 ** 18));
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
       require(tradingEnabled, "Trading is not enabled.");
        require(!blacklist[msg.sender], "You are blacklisted!");

        if (!exemptedAddresses[msg.sender]) {
            require(amount <= maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            require(balanceOf(recipient) + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }

        return super.transfer(recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(tradingEnabled, "Trading is not enabled.");
        require(!blacklist[sender], "Sender is blacklisted!");

        if (!exemptedAddresses[sender]) {
            require(amount <= maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            require(balanceOf(recipient) + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }

        return super.transferFrom(sender, recipient, amount);
    }

    function addToBlacklist(address account) public onlyOwner {
        blacklist[account] = true;
    }

    function removeFromBlacklist(address account) public onlyOwner {
        blacklist[account] = false;
    }

    function addExemptedAddress(address account) public onlyOwner {
        exemptedAddresses[account] = true;
    }

    function removeExemptedAddress(address account) public onlyOwner {
        exemptedAddresses[account] = false;
    }

    function setMaxTxAmount(uint256 maxTxTokens) external onlyOwner() {
        maxTxAmount = maxTxTokens * (10 ** 18);
    }

    function setMaxWalletToken(uint256 maxWalletTokens) external onlyOwner() {
        maxWalletToken = maxWalletTokens * (10 ** 18);
    }

        function enableTrading() external onlyOwner() {
        tradingEnabled = true;
    }

    function disableTrading() external onlyOwner() {
        tradingEnabled = false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addExemptedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","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":"amount","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":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExemptedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxTokens","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletTokens","type":"uint256"}],"name":"setMaxWalletToken","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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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"}]

60806040526b2b3367a04e7ab28a7a0000006008819055600955600a805460ff191690553480156200002f575f80fd5b506040518060400160405280600881526020016720b83aaa37b5b2b760c11b8152506040518060400160405280600381526020016241505560e81b81525081600390816200007e91906200029a565b5060046200008d82826200029a565b5050505f620000a16200010d60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000107336c10e0147a9ea7edbe17a800000062000111565b62000388565b3390565b6001600160a01b0382166200016c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f8282546200017f919062000362565b90915550506001600160a01b0382165f9081526020819052604081208054839290620001ad90849062000362565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200022457607f821691505b6020821081036200024357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001f6575f81815260208120601f850160051c81016020861015620002715750805b601f850160051c820191505b8181101562000292578281556001016200027d565b505050505050565b81516001600160401b03811115620002b657620002b6620001fb565b620002ce81620002c784546200020f565b8462000249565b602080601f83116001811462000304575f8415620002ec5750858301515b5f19600386901b1c1916600185901b17855562000292565b5f85815260208120601f198616915b82811015620003345788860151825594840194600190910190840162000313565b50858210156200035257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200038257634e487b7160e01b5f52601160045260245ffd5b92915050565b6111c080620003965f395ff3fe608060405234801561000f575f80fd5b50600436106101a1575f3560e01c8063811d4f69116100f3578063a777a94011610093578063e6c75f711161006e578063e6c75f7114610387578063ec28438a14610390578063f2fde38b146103a3578063f9f92be4146103b6575f80fd5b8063a777a9401461031a578063a9059cbb1461033c578063dd62ed3e1461034f575f80fd5b80638da5cb5b116100ce5780638da5cb5b146102d157806391d55f41146102ec57806395d89b41146102ff578063a457c2d714610307575f80fd5b8063811d4f69146102ad5780638a8c523c146102c05780638c0b5e22146102c8575f80fd5b8063313ce5671161015e5780634ada218b116101395780634ada218b1461025d578063537df3b61461026a57806370a082311461027d578063715018a6146102a5575f80fd5b8063313ce56714610228578063395093511461023757806344337ea11461024a575f80fd5b806306fdde03146101a5578063095ea7b3146101c357806317700f01146101e657806318160ddd146101f0578063213f53ac1461020257806323b872dd14610215575b5f80fd5b6101ad6103d8565b6040516101ba9190610f18565b60405180910390f35b6101d66101d1366004610f7e565b610468565b60405190151581526020016101ba565b6101ee61047e565b005b6002545b6040519081526020016101ba565b6101ee610210366004610fa6565b6104bd565b6101d6610223366004610fbf565b610507565b604051601281526020016101ba565b6101d6610245366004610f7e565b610654565b6101ee610258366004610fa6565b61068f565b600a546101d69060ff1681565b6101ee610278366004610fa6565b6106dc565b6101f461028b366004610fa6565b6001600160a01b03165f9081526020819052604090205490565b6101ee610726565b6101ee6102bb366004610fa6565b610799565b6101ee6107e6565b6101f460085481565b6005546040516001600160a01b0390911681526020016101ba565b6101ee6102fa366004610ff8565b61081f565b6101ad610861565b6101d6610315366004610f7e565b610870565b6101d6610328366004610fa6565b60076020525f908152604090205460ff1681565b6101d661034a366004610f7e565b61090a565b6101f461035d36600461100f565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101f460095481565b6101ee61039e366004610ff8565b610a41565b6101ee6103b1366004610fa6565b610a83565b6101d66103c4366004610fa6565b60066020525f908152604090205460ff1681565b6060600380546103e790611040565b80601f016020809104026020016040519081016040528092919081815260200182805461041390611040565b801561045e5780601f106104355761010080835404028352916020019161045e565b820191905f5260205f20905b81548152906001019060200180831161044157829003601f168201915b5050505050905090565b5f610474338484610b6d565b5060015b92915050565b6005546001600160a01b031633146104b15760405162461bcd60e51b81526004016104a890611078565b60405180910390fd5b600a805460ff19169055565b6005546001600160a01b031633146104e75760405162461bcd60e51b81526004016104a890611078565b6001600160a01b03165f908152600760205260409020805460ff19169055565b600a545f9060ff166105555760405162461bcd60e51b81526020600482015260176024820152762a3930b234b7339034b9903737ba1032b730b13632b21760491b60448201526064016104a8565b6001600160a01b0384165f9081526006602052604090205460ff16156105b65760405162461bcd60e51b815260206004820152601660248201527553656e64657220697320626c61636b6c69737465642160501b60448201526064016104a8565b6001600160a01b0384165f9081526007602052604090205460ff16610641576008548211156105f75760405162461bcd60e51b81526004016104a8906110ad565b60095482610619856001600160a01b03165f9081526020819052604090205490565b6106239190611109565b11156106415760405162461bcd60e51b81526004016104a89061111c565b61064c848484610c90565b949350505050565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909161047491859061068a908690611109565b610b6d565b6005546001600160a01b031633146106b95760405162461bcd60e51b81526004016104a890611078565b6001600160a01b03165f908152600660205260409020805460ff19166001179055565b6005546001600160a01b031633146107065760405162461bcd60e51b81526004016104a890611078565b6001600160a01b03165f908152600660205260409020805460ff19169055565b6005546001600160a01b031633146107505760405162461bcd60e51b81526004016104a890611078565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146107c35760405162461bcd60e51b81526004016104a890611078565b6001600160a01b03165f908152600760205260409020805460ff19166001179055565b6005546001600160a01b031633146108105760405162461bcd60e51b81526004016104a890611078565b600a805460ff19166001179055565b6005546001600160a01b031633146108495760405162461bcd60e51b81526004016104a890611078565b61085b81670de0b6b3a7640000611160565b60095550565b6060600480546103e790611040565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156108f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b610900338561068a8685611177565b5060019392505050565b600a545f9060ff166109585760405162461bcd60e51b81526020600482015260176024820152762a3930b234b7339034b9903737ba1032b730b13632b21760491b60448201526064016104a8565b335f9081526006602052604090205460ff16156109ae5760405162461bcd60e51b8152602060048201526014602482015273596f752061726520626c61636b6c69737465642160601b60448201526064016104a8565b335f9081526007602052604090205460ff16610a30576008548211156109e65760405162461bcd60e51b81526004016104a8906110ad565b60095482610a08856001600160a01b03165f9081526020819052604090205490565b610a129190611109565b1115610a305760405162461bcd60e51b81526004016104a89061111c565b610a3a8383610d3a565b9392505050565b6005546001600160a01b03163314610a6b5760405162461bcd60e51b81526004016104a890611078565b610a7d81670de0b6b3a7640000611160565b60085550565b6005546001600160a01b03163314610aad5760405162461bcd60e51b81526004016104a890611078565b6001600160a01b038116610b125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104a8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610bcf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610c305760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f610c9c848484610d42565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610d205760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016104a8565b610d2f853361068a8685611177565b506001949350505050565b5f6104743384845b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610e085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526020819052604090205481811015610e7f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b610e898282611177565b6001600160a01b038086165f908152602081905260408082209390935590851681529081208054849290610ebe908490611109565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0a91815260200190565b60405180910390a350505050565b5f6020808352835180828501525f5b81811015610f4357858101830151858201604001528201610f27565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f79575f80fd5b919050565b5f8060408385031215610f8f575f80fd5b610f9883610f63565b946020939093013593505050565b5f60208284031215610fb6575f80fd5b610a3a82610f63565b5f805f60608486031215610fd1575f80fd5b610fda84610f63565b9250610fe860208501610f63565b9150604084013590509250925092565b5f60208284031215611008575f80fd5b5035919050565b5f8060408385031215611020575f80fd5b61102983610f63565b915061103760208401610f63565b90509250929050565b600181811c9082168061105457607f821691505b60208210810361107257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610478576104786110f5565b60208082526024908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152633ab73a1760e11b606082015260800190565b8082028115828204841417610478576104786110f5565b81810381811115610478576104786110f556fea264697066735822122014800bb653f5d19dc5eefc4ebbfd479cbc1b8840355d2af52f7319abc9a86b9964736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101a1575f3560e01c8063811d4f69116100f3578063a777a94011610093578063e6c75f711161006e578063e6c75f7114610387578063ec28438a14610390578063f2fde38b146103a3578063f9f92be4146103b6575f80fd5b8063a777a9401461031a578063a9059cbb1461033c578063dd62ed3e1461034f575f80fd5b80638da5cb5b116100ce5780638da5cb5b146102d157806391d55f41146102ec57806395d89b41146102ff578063a457c2d714610307575f80fd5b8063811d4f69146102ad5780638a8c523c146102c05780638c0b5e22146102c8575f80fd5b8063313ce5671161015e5780634ada218b116101395780634ada218b1461025d578063537df3b61461026a57806370a082311461027d578063715018a6146102a5575f80fd5b8063313ce56714610228578063395093511461023757806344337ea11461024a575f80fd5b806306fdde03146101a5578063095ea7b3146101c357806317700f01146101e657806318160ddd146101f0578063213f53ac1461020257806323b872dd14610215575b5f80fd5b6101ad6103d8565b6040516101ba9190610f18565b60405180910390f35b6101d66101d1366004610f7e565b610468565b60405190151581526020016101ba565b6101ee61047e565b005b6002545b6040519081526020016101ba565b6101ee610210366004610fa6565b6104bd565b6101d6610223366004610fbf565b610507565b604051601281526020016101ba565b6101d6610245366004610f7e565b610654565b6101ee610258366004610fa6565b61068f565b600a546101d69060ff1681565b6101ee610278366004610fa6565b6106dc565b6101f461028b366004610fa6565b6001600160a01b03165f9081526020819052604090205490565b6101ee610726565b6101ee6102bb366004610fa6565b610799565b6101ee6107e6565b6101f460085481565b6005546040516001600160a01b0390911681526020016101ba565b6101ee6102fa366004610ff8565b61081f565b6101ad610861565b6101d6610315366004610f7e565b610870565b6101d6610328366004610fa6565b60076020525f908152604090205460ff1681565b6101d661034a366004610f7e565b61090a565b6101f461035d36600461100f565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101f460095481565b6101ee61039e366004610ff8565b610a41565b6101ee6103b1366004610fa6565b610a83565b6101d66103c4366004610fa6565b60066020525f908152604090205460ff1681565b6060600380546103e790611040565b80601f016020809104026020016040519081016040528092919081815260200182805461041390611040565b801561045e5780601f106104355761010080835404028352916020019161045e565b820191905f5260205f20905b81548152906001019060200180831161044157829003601f168201915b5050505050905090565b5f610474338484610b6d565b5060015b92915050565b6005546001600160a01b031633146104b15760405162461bcd60e51b81526004016104a890611078565b60405180910390fd5b600a805460ff19169055565b6005546001600160a01b031633146104e75760405162461bcd60e51b81526004016104a890611078565b6001600160a01b03165f908152600760205260409020805460ff19169055565b600a545f9060ff166105555760405162461bcd60e51b81526020600482015260176024820152762a3930b234b7339034b9903737ba1032b730b13632b21760491b60448201526064016104a8565b6001600160a01b0384165f9081526006602052604090205460ff16156105b65760405162461bcd60e51b815260206004820152601660248201527553656e64657220697320626c61636b6c69737465642160501b60448201526064016104a8565b6001600160a01b0384165f9081526007602052604090205460ff16610641576008548211156105f75760405162461bcd60e51b81526004016104a8906110ad565b60095482610619856001600160a01b03165f9081526020819052604090205490565b6106239190611109565b11156106415760405162461bcd60e51b81526004016104a89061111c565b61064c848484610c90565b949350505050565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909161047491859061068a908690611109565b610b6d565b6005546001600160a01b031633146106b95760405162461bcd60e51b81526004016104a890611078565b6001600160a01b03165f908152600660205260409020805460ff19166001179055565b6005546001600160a01b031633146107065760405162461bcd60e51b81526004016104a890611078565b6001600160a01b03165f908152600660205260409020805460ff19169055565b6005546001600160a01b031633146107505760405162461bcd60e51b81526004016104a890611078565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146107c35760405162461bcd60e51b81526004016104a890611078565b6001600160a01b03165f908152600760205260409020805460ff19166001179055565b6005546001600160a01b031633146108105760405162461bcd60e51b81526004016104a890611078565b600a805460ff19166001179055565b6005546001600160a01b031633146108495760405162461bcd60e51b81526004016104a890611078565b61085b81670de0b6b3a7640000611160565b60095550565b6060600480546103e790611040565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156108f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b610900338561068a8685611177565b5060019392505050565b600a545f9060ff166109585760405162461bcd60e51b81526020600482015260176024820152762a3930b234b7339034b9903737ba1032b730b13632b21760491b60448201526064016104a8565b335f9081526006602052604090205460ff16156109ae5760405162461bcd60e51b8152602060048201526014602482015273596f752061726520626c61636b6c69737465642160601b60448201526064016104a8565b335f9081526007602052604090205460ff16610a30576008548211156109e65760405162461bcd60e51b81526004016104a8906110ad565b60095482610a08856001600160a01b03165f9081526020819052604090205490565b610a129190611109565b1115610a305760405162461bcd60e51b81526004016104a89061111c565b610a3a8383610d3a565b9392505050565b6005546001600160a01b03163314610a6b5760405162461bcd60e51b81526004016104a890611078565b610a7d81670de0b6b3a7640000611160565b60085550565b6005546001600160a01b03163314610aad5760405162461bcd60e51b81526004016104a890611078565b6001600160a01b038116610b125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104a8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610bcf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610c305760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f610c9c848484610d42565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610d205760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016104a8565b610d2f853361068a8685611177565b506001949350505050565b5f6104743384845b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610e085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526020819052604090205481811015610e7f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b610e898282611177565b6001600160a01b038086165f908152602081905260408082209390935590851681529081208054849290610ebe908490611109565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0a91815260200190565b60405180910390a350505050565b5f6020808352835180828501525f5b81811015610f4357858101830151858201604001528201610f27565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f79575f80fd5b919050565b5f8060408385031215610f8f575f80fd5b610f9883610f63565b946020939093013593505050565b5f60208284031215610fb6575f80fd5b610a3a82610f63565b5f805f60608486031215610fd1575f80fd5b610fda84610f63565b9250610fe860208501610f63565b9150604084013590509250925092565b5f60208284031215611008575f80fd5b5035919050565b5f8060408385031215611020575f80fd5b61102983610f63565b915061103760208401610f63565b90509250929050565b600181811c9082168061105457607f821691505b60208210810361107257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610478576104786110f5565b60208082526024908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152633ab73a1760e11b606082015260800190565b8082028115828204841417610478576104786110f5565b81810381811115610478576104786110f556fea264697066735822122014800bb653f5d19dc5eefc4ebbfd479cbc1b8840355d2af52f7319abc9a86b9964736f6c63430008140033

Deployed Bytecode Sourcemap

16574:2470:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7829:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9969:169;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;9969:169:0;1004:187:1;18953:88:0;;;:::i;:::-;;8922:108;9010:12;;8922:108;;;1342:25:1;;;1330:2;1315:18;8922:108:0;1196:177:1;18453:118:0;;;;;;:::i;:::-;;:::i;17539:558::-;;;;;;:::i;:::-;;:::i;8773:84::-;;;8847:2;2044:36:1;;2032:2;2017:18;8773:84:0;1902:184:1;11451:215:0;;;;;;:::i;:::-;;:::i;18105:102::-;;;;;;:::i;:::-;;:::i;16846:34::-;;;;;;;;;18215:108;;;;;;:::i;:::-;;:::i;9093:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9194:18:0;9167:7;9194:18;;;;;;;;;;;;9093:127;2606:148;;;:::i;18331:114::-;;;;;;:::i;:::-;;:::i;18859:86::-;;;:::i;16723:53::-;;;;;;1955:87;2028:6;;1955:87;;-1:-1:-1;;;;;2028:6:0;;;2237:51:1;;2225:2;2210:18;1955:87:0;2091:203:1;18710:137:0;;;;;;:::i;:::-;;:::i;8039:95::-;;;:::i;12169:377::-;;;;;;:::i;:::-;;:::i;16666:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17000:531;;;;;;:::i;:::-;;:::i;9671:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9787:18:0;;;9760:7;9787:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9671:151;16783:56;;;;;;18579:123;;;;;;:::i;:::-;;:::i;2909:244::-;;;;;;:::i;:::-;;:::i;16617:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7829:91;7874:13;7907:5;7900:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7829:91;:::o;9969:169::-;10052:4;10069:39;679:10;10092:7;10101:6;10069:8;:39::i;:::-;-1:-1:-1;10126:4:0;9969:169;;;;;:::o;18953:88::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;;;;;;;;;19011:14:::1;:22:::0;;-1:-1:-1;;19011:22:0::1;::::0;;18953:88::o;18453:118::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18529:26:0::1;18558:5;18529:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;18529:34:0::1;::::0;;18453:118::o;17539:558::-;17662:14;;17637:4;;17662:14;;17654:50;;;;-1:-1:-1;;;17654:50:0;;3697:2:1;17654:50:0;;;3679:21:1;3736:2;3716:18;;;3709:30;-1:-1:-1;;;3755:18:1;;;3748:53;3818:18;;17654:50:0;3495:347:1;17654:50:0;-1:-1:-1;;;;;17724:17:0;;;;;;:9;:17;;;;;;;;17723:18;17715:53;;;;-1:-1:-1;;;17715:53:0;;4049:2:1;17715:53:0;;;4031:21:1;4088:2;4068:18;;;4061:30;-1:-1:-1;;;4107:18:1;;;4100:52;4169:18;;17715:53:0;3847:346:1;17715:53:0;-1:-1:-1;;;;;17786:25:0;;;;;;:17;:25;;;;;;;;17781:244;;17846:11;;17836:6;:21;;17828:74;;;;-1:-1:-1;;;17828:74:0;;;;;;;:::i;:::-;17958:14;;17948:6;17925:20;17935:9;-1:-1:-1;;;;;9194:18:0;9167:7;9194:18;;;;;;;;;;;;9093:127;17925:20;:29;;;;:::i;:::-;:47;;17917:96;;;;-1:-1:-1;;;17917:96:0;;;;;;;:::i;:::-;18044:45;18063:6;18071:9;18082:6;18044:18;:45::i;:::-;18037:52;17539:558;-1:-1:-1;;;;17539:558:0:o;11451:215::-;679:10;11539:4;11588:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11588:34:0;;;;;;;;;;11539:4;;11556:80;;11579:7;;11588:47;;11625:10;;11588:47;:::i;:::-;11556:8;:80::i;18105:102::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18174:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;18174:25:0::1;18195:4;18174:25;::::0;;18105:102::o;18215:108::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18289:18:0::1;18310:5;18289:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;18289:26:0::1;::::0;;18215:108::o;2606:148::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;2697:6:::1;::::0;2676:40:::1;::::0;2713:1:::1;::::0;-1:-1:-1;;;;;2697:6:0::1;::::0;2676:40:::1;::::0;2713:1;;2676:40:::1;2727:6;:19:::0;;-1:-1:-1;;;;;;2727:19:0::1;::::0;;2606:148::o;18331:114::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18404:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;18404:33:0::1;18433:4;18404:33;::::0;;18331:114::o;18859:86::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;18916:14:::1;:21:::0;;-1:-1:-1;;18916:21:0::1;18933:4;18916:21;::::0;;18859:86::o;18710:137::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;18811:28:::1;:15:::0;18830:8:::1;18811:28;:::i;:::-;18794:14;:45:::0;-1:-1:-1;18710:137:0:o;8039:95::-;8086:13;8119:7;8112:14;;;;;:::i;12169:377::-;679:10;12262:4;12306:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12306:34:0;;;;;;;;;;12359:35;;;;12351:85;;;;-1:-1:-1;;;12351:85:0;;5649:2:1;12351:85:0;;;5631:21:1;5688:2;5668:18;;;5661:30;5727:34;5707:18;;;5700:62;-1:-1:-1;;;5778:18:1;;;5771:35;5823:19;;12351:85:0;5447:401:1;12351:85:0;12447:67;679:10;12470:7;12479:34;12498:15;12479:16;:34;:::i;12447:67::-;-1:-1:-1;12534:4:0;;12169:377;-1:-1:-1;;;12169:377:0:o;17000:531::-;17102:14;;17078:4;;17102:14;;17094:50;;;;-1:-1:-1;;;17094:50:0;;3697:2:1;17094:50:0;;;3679:21:1;3736:2;3716:18;;;3709:30;-1:-1:-1;;;3755:18:1;;;3748:53;3818:18;;17094:50:0;3495:347:1;17094:50:0;17174:10;17164:21;;;;:9;:21;;;;;;;;17163:22;17155:55;;;;-1:-1:-1;;;17155:55:0;;6188:2:1;17155:55:0;;;6170:21:1;6227:2;6207:18;;;6200:30;-1:-1:-1;;;6246:18:1;;;6239:50;6306:18;;17155:55:0;5986:344:1;17155:55:0;17246:10;17228:29;;;;:17;:29;;;;;;;;17223:248;;17292:11;;17282:6;:21;;17274:74;;;;-1:-1:-1;;;17274:74:0;;;;;;;:::i;:::-;17404:14;;17394:6;17371:20;17381:9;-1:-1:-1;;;;;9194:18:0;9167:7;9194:18;;;;;;;;;;;;9093:127;17371:20;:29;;;;:::i;:::-;:47;;17363:96;;;;-1:-1:-1;;;17363:96:0;;;;;;;:::i;:::-;17490:33;17505:9;17516:6;17490:14;:33::i;:::-;17483:40;17000:531;-1:-1:-1;;;17000:531:0:o;18579:123::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;18670:24:::1;:11:::0;18685:8:::1;18670:24;:::i;:::-;18656:11;:38:::0;-1:-1:-1;18579:123:0:o;2909:244::-;2028:6;;-1:-1:-1;;;;;2028:6:0;679:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2998:22:0;::::1;2990:73;;;::::0;-1:-1:-1;;;2990:73:0;;6537:2:1;2990:73:0::1;::::0;::::1;6519:21:1::0;6576:2;6556:18;;;6549:30;6615:34;6595:18;;;6588:62;-1:-1:-1;;;6666:18:1;;;6659:36;6712:19;;2990:73:0::1;6335:402:1::0;2990:73:0::1;3100:6;::::0;3079:38:::1;::::0;-1:-1:-1;;;;;3079:38:0;;::::1;::::0;3100:6:::1;::::0;3079:38:::1;::::0;3100:6:::1;::::0;3079:38:::1;3128:6;:17:::0;;-1:-1:-1;;;;;;3128:17:0::1;-1:-1:-1::0;;;;;3128:17:0;;;::::1;::::0;;;::::1;::::0;;2909:244::o;15526:346::-;-1:-1:-1;;;;;15628:19:0;;15620:68;;;;-1:-1:-1;;;15620:68:0;;6944:2:1;15620:68:0;;;6926:21:1;6983:2;6963:18;;;6956:30;7022:34;7002:18;;;6995:62;-1:-1:-1;;;7073:18:1;;;7066:34;7117:19;;15620:68:0;6742:400:1;15620:68:0;-1:-1:-1;;;;;15707:21:0;;15699:68;;;;-1:-1:-1;;;15699:68:0;;7349:2:1;15699:68:0;;;7331:21:1;7388:2;7368:18;;;7361:30;7427:34;7407:18;;;7400:62;-1:-1:-1;;;7478:18:1;;;7471:32;7520:19;;15699:68:0;7147:398:1;15699:68:0;-1:-1:-1;;;;;15780:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15832:32;;1342:25:1;;;15832:32:0;;1315:18:1;15832:32:0;;;;;;;15526:346;;;:::o;10620:422::-;10726:4;10743:36;10753:6;10761:9;10772:6;10743:9;:36::i;:::-;-1:-1:-1;;;;;10819:19:0;;10792:24;10819:19;;;:11;:19;;;;;;;;679:10;10819:33;;;;;;;;10871:26;;;;10863:79;;;;-1:-1:-1;;;10863:79:0;;7752:2:1;10863:79:0;;;7734:21:1;7791:2;7771:18;;;7764:30;7830:34;7810:18;;;7803:62;-1:-1:-1;;;7881:18:1;;;7874:38;7929:19;;10863:79:0;7550:404:1;10863:79:0;10953:57;10962:6;679:10;10984:25;11003:6;10984:16;:25;:::i;10953:57::-;-1:-1:-1;11030:4:0;;10620:422;-1:-1:-1;;;;10620:422:0:o;9433:175::-;9519:4;9536:42;679:10;9560:9;9571:6;13036:604;-1:-1:-1;;;;;13142:20:0;;13134:70;;;;-1:-1:-1;;;13134:70:0;;8161:2:1;13134:70:0;;;8143:21:1;8200:2;8180:18;;;8173:30;8239:34;8219:18;;;8212:62;-1:-1:-1;;;8290:18:1;;;8283:35;8335:19;;13134:70:0;7959:401:1;13134:70:0;-1:-1:-1;;;;;13223:23:0;;13215:71;;;;-1:-1:-1;;;13215:71:0;;8567:2:1;13215:71:0;;;8549:21:1;8606:2;8586:18;;;8579:30;8645:34;8625:18;;;8618:62;-1:-1:-1;;;8696:18:1;;;8689:33;8739:19;;13215:71:0;8365:399:1;13215:71:0;-1:-1:-1;;;;;13383:17:0;;13359:21;13383:17;;;;;;;;;;;13419:23;;;;13411:74;;;;-1:-1:-1;;;13411:74:0;;8971:2:1;13411:74:0;;;8953:21:1;9010:2;8990:18;;;8983:30;9049:34;9029:18;;;9022:62;-1:-1:-1;;;9100:18:1;;;9093:36;9146:19;;13411:74:0;8769:402:1;13411:74:0;13516:22;13532:6;13516:13;:22;:::i;:::-;-1:-1:-1;;;;;13496:17:0;;;:9;:17;;;;;;;;;;;:42;;;;13549:20;;;;;;;;:30;;13573:6;;13496:9;13549:30;;13573:6;;13549:30;:::i;:::-;;;;;;;;13614:9;-1:-1:-1;;;;;13597:35:0;13606:6;-1:-1:-1;;;;;13597:35:0;;13625:6;13597:35;;;;1342:25:1;;1330:2;1315:18;;1196:177;13597:35:0;;;;;;;;13123:517;13036:604;;;:::o;14:548:1:-;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;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1378:186::-;1437:6;1490:2;1478:9;1469:7;1465:23;1461:32;1458:52;;;1506:1;1503;1496:12;1458:52;1529:29;1548:9;1529:29;:::i;1569:328::-;1646:6;1654;1662;1715:2;1703:9;1694:7;1690:23;1686:32;1683:52;;;1731:1;1728;1721:12;1683:52;1754:29;1773:9;1754:29;:::i;:::-;1744:39;;1802:38;1836:2;1825:9;1821:18;1802:38;:::i;:::-;1792:48;;1887:2;1876:9;1872:18;1859:32;1849:42;;1569:328;;;;;:::o;2299:180::-;2358:6;2411:2;2399:9;2390:7;2386:23;2382:32;2379:52;;;2427:1;2424;2417:12;2379:52;-1:-1:-1;2450:23:1;;2299:180;-1:-1:-1;2299:180:1:o;2484:260::-;2552:6;2560;2613:2;2601:9;2592:7;2588:23;2584:32;2581:52;;;2629:1;2626;2619:12;2581:52;2652:29;2671:9;2652:29;:::i;:::-;2642:39;;2700:38;2734:2;2723:9;2719:18;2700:38;:::i;:::-;2690:48;;2484:260;;;;;:::o;2749:380::-;2828:1;2824:12;;;;2871;;;2892:61;;2946:4;2938:6;2934:17;2924:27;;2892:61;2999:2;2991:6;2988:14;2968:18;2965:38;2962:161;;3045:10;3040:3;3036:20;3033:1;3026:31;3080:4;3077:1;3070:15;3108:4;3105:1;3098:15;2962:161;;2749:380;;;:::o;3134:356::-;3336:2;3318:21;;;3355:18;;;3348:30;3414:34;3409:2;3394:18;;3387:62;3481:2;3466:18;;3134:356::o;4198:404::-;4400:2;4382:21;;;4439:2;4419:18;;;4412:30;4478:34;4473:2;4458:18;;4451:62;-1:-1:-1;;;4544:2:1;4529:18;;4522:38;4592:3;4577:19;;4198:404::o;4607:127::-;4668:10;4663:3;4659:20;4656:1;4649:31;4699:4;4696:1;4689:15;4723:4;4720:1;4713:15;4739:125;4804:9;;;4825:10;;;4822:36;;;4838:18;;:::i;4869:400::-;5071:2;5053:21;;;5110:2;5090:18;;;5083:30;5149:34;5144:2;5129:18;;5122:62;-1:-1:-1;;;5215:2:1;5200:18;;5193:34;5259:3;5244:19;;4869:400::o;5274:168::-;5347:9;;;5378;;5395:15;;;5389:22;;5375:37;5365:71;;5416:18;;:::i;5853:128::-;5920:9;;;5941:11;;;5938:37;;;5955:18;;:::i

Swarm Source

ipfs://14800bb653f5d19dc5eefc4ebbfd479cbc1b8840355d2af52f7319abc9a86b99
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.