ETH Price: $3,328.54 (-3.84%)

Token

coo.so (COO)
 

Overview

Max Total Supply

20,379,127,909 COO

Holders

332

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
bitcoin1996.eth
Balance
300,279 COO

Value
$0.00
0x43f708c3f68B5fE2Fe5cf38844b56613c71fc544
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:
COO

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// 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) {
        return msg.data;
    }
}

/**
 * @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 Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

/**
 * @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 Contracts guidelines: functions revert
 * instead 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, IERC20Metadata {
    
    mapping(address => uint256) private _balances;

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

    uint256 internal _totalSupply;

    string private _name;

    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two 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 override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override 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
     * overridden;
     *
     * 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 override 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");
        unchecked {
            _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");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This 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");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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:
     *
     * - `account` 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);
        // _afterTokenTransfer(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");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` 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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

abstract contract EIP712 {
    /* solhint-disable var-name-mixedcase */
    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    bytes32 private immutable _TYPE_HASH;

    /* solhint-enable var-name-mixedcase */

    /**
     * @dev Initializes the domain separator and parameter caches.
     *
     * The meaning of `name` and `version` is specified in
     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
     *
     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
     * - `version`: the current major version of the signing domain.
     *
     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
     * contract upgrade].
     */
    constructor(string memory name, string memory version) {
        bytes32 hashedName = keccak256(bytes(name));
        bytes32 hashedVersion = keccak256(bytes(version));
        bytes32 typeHash = keccak256(
            "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
        );
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = block.chainid;
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
        _TYPE_HASH = typeHash;
    }

    /**
     * @dev Returns the domain separator for the current chain.
     */
    function _domainSeparatorV4() internal view returns (bytes32) {
        if (block.chainid == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
        }
    }

    function _buildDomainSeparator(
        bytes32 typeHash,
        bytes32 nameHash,
        bytes32 versionHash
    ) private view returns (bytes32) {
        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));
    }

    /**
     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
     * function returns the hash of the fully encoded EIP712 message for this domain.
     *
     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
     *
     * ```solidity
     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
     *     keccak256("Mail(address to,string contents)"),
     *     mailTo,
     *     keccak256(bytes(mailContents))
     * )));
     * address signer = ECDSA.recover(digest, signature);
     * ```
     */
    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {
        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
    }
}

contract COO is ERC20, EIP712 {

    address public owner;
    
    uint256 public constant MAX_SUPPLY = 100000000000 ether;

    uint256 public constant AMOUNT_DAO = MAX_SUPPLY / 100 * 50;

    uint256 public constant AMOUNT_TEAM = MAX_SUPPLY / 100 * 10;

    uint256 public constant AMOUNT_ORGAN = MAX_SUPPLY / 100 * 10;

    uint256 public constant AMOUNT_AIREDROP = MAX_SUPPLY / 100 * 30;

    bytes32 constant public MINT_CALL_HASH_TYPE = keccak256("mint(uint256 account,uint256 amount)");

    address public immutable cSigner;

    uint256 public endTime;

    uint256 public _claimed;

    mapping(uint256 => uint8) public _minted;

    mapping(uint256 => uint8) public _sysminted;

    mapping(address => uint8) public _addrminted;

    constructor(string memory _name, string memory _symbol, address _signer) ERC20(_name, _symbol) EIP712("COO", "1") {
        owner = msg.sender;
        cSigner = _signer;
        endTime = block.timestamp + 60 days;
    }

    function mintDAO(address daoAddress) external {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        require(_sysminted[1] == 0, "Minted");
        _sysminted[1] = 1;
        _mint(daoAddress, AMOUNT_DAO);
        _totalSupply = _totalSupply + AMOUNT_DAO;
    }

    function mintTeam(address teamAddress) external {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        require(_sysminted[2] == 0, "Minted");
        _sysminted[2] = 1;
        _mint(teamAddress, AMOUNT_TEAM);
        _totalSupply = _totalSupply + AMOUNT_TEAM;
    }

    function mintOrgan(address organAddress) external {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        require(_sysminted[3] == 0, "Minted");
        _sysminted[3] = 1;
        _mint(organAddress, AMOUNT_ORGAN);
        _totalSupply = _totalSupply + AMOUNT_ORGAN;
    }

    function claim(uint256 account,uint256 amount, bytes32 r, bytes32 s, uint8 v) external {
        require(block.timestamp < endTime, "claim end");
        uint256 total = _claimed + amount;
        require(total <= AMOUNT_AIREDROP, "Exceed max supply");
        require(_minted[account] == 0, "Claimed");
        require(_addrminted[msg.sender] == 0,"Used");
        _minted[account] = 1;
        _addrminted[msg.sender] = 1;
        bytes32 digest = ECDSA.toTypedDataHash(_domainSeparatorV4(),keccak256(abi.encode(MINT_CALL_HASH_TYPE, account, amount)));
        require(ecrecover(digest, v, r, s) == cSigner, "Invalid signer");
        _mint(msg.sender, amount);
        _claimed = total;
        _totalSupply = _totalSupply + amount;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_signer","type":"address"}],"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":"AMOUNT_AIREDROP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AMOUNT_DAO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AMOUNT_ORGAN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AMOUNT_TEAM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_CALL_HASH_TYPE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_addrminted","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_minted","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_sysminted","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"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":[],"name":"cSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"account","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"name":"claim","outputs":[],"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":"endTime","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":[{"internalType":"address","name":"daoAddress","type":"address"}],"name":"mintDAO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"organAddress","type":"address"}],"name":"mintOrgan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"teamAddress","type":"address"}],"name":"mintTeam","outputs":[],"stateMutability":"nonpayable","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"}]

6101406040523480156200001257600080fd5b5060405162001a0638038062001a068339810160408190526200003591620002c9565b60405180604001604052806003815260200162434f4f60e81b815250604051806040016040528060018152602001603160f81b815250848481600390805190602001906200008592919062000178565b5080516200009b90600490602084019062000178565b5050825160208085019190912083519184019190912060c082905260e08190524660a0529091507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000f08184846200013c565b608052610100525050600580546001600160a01b0319163317905550506001600160601b0319606082901b16610120526200012f42624f1a006200037e565b60065550620003f6915050565b600083838346306040516020016200015995949392919062000352565b6040516020818303038152906040528051906020012090509392505050565b8280546200018690620003a3565b90600052602060002090601f016020900481019282620001aa5760008555620001f5565b82601f10620001c557805160ff1916838001178555620001f5565b82800160010185558215620001f5579182015b82811115620001f5578251825591602001919060010190620001d8565b506200020392915062000207565b5090565b5b8082111562000203576000815560010162000208565b600082601f8301126200022f578081fd5b81516001600160401b03808211156200024c576200024c620003e0565b6040516020601f8401601f1916820181018381118382101715620002745762000274620003e0565b60405283825285840181018710156200028b578485fd5b8492505b83831015620002ae57858301810151828401820152918201916200028f565b83831115620002bf57848185840101525b5095945050505050565b600080600060608486031215620002de578283fd5b83516001600160401b0380821115620002f5578485fd5b62000303878388016200021e565b9450602086015191508082111562000319578384fd5b5062000328868287016200021e565b604086015190935090506001600160a01b038116811462000347578182fd5b809150509250925092565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b600082198211156200039e57634e487b7160e01b81526011600452602481fd5b500190565b600281046001821680620003b857607f821691505b60208210811415620003da57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160e051610100516101205160601c6115b66200045060003960008181610587015261087901526000610ed301526000610f1501526000610ef401526000610e8101526000610eaa01526115b66000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063720248de116100f9578063a57d121b11610097578063dd62ed3e11610071578063dd62ed3e14610346578063f79b803f14610359578063f9423d891461036c578063fdfe8d641461037f576101c4565b8063a57d121b14610318578063a9059cbb1461032b578063c688387f1461033e576101c4565b806395d89b41116100d357806395d89b41146102d75780639b15f023146102df5780639b4bb607146102f2578063a457c2d714610305576101c4565b8063720248de146102b25780638da5cb5b146102ba57806395a3ca2e146102c2576101c4565b8063313ce56711610166578063362e701911610140578063362e70191461026f57806339509351146102775780635760cc5d1461028a57806370a082311461029f576101c4565b8063313ce567146102575780633197cbb61461025f57806332cb6b0c14610267576101c4565b806310e29cd3116101a257806310e29cd31461021c57806318160ddd1461023c57806323b872dd1461024457806328221d71146101c9576101c4565b80630389223d146101c957806306fdde03146101e7578063095ea7b3146101fc575b600080fd5b6101d1610387565b6040516101de9190611123565b60405180910390f35b6101ef6103ac565b6040516101de919061118c565b61020f61020a366004611057565b61043f565b6040516101de9190611118565b61022f61022a366004611080565b61045c565b6040516101de91906114ca565b6101d1610471565b61020f61025236600461101c565b610477565b61022f610510565b6101d1610515565b6101d161051b565b6101d161052b565b61020f610285366004611057565b610531565b610292610585565b6040516101de9190611104565b6101d16102ad366004610fc9565b6105a9565b6101d16105c8565b6102926105ea565b6102d56102d0366004610fc9565b6105f9565b005b6101ef610705565b6102d56102ed366004611098565b610714565b6102d5610300366004610fc9565b61093f565b61020f610313366004611057565b610a06565b61022f610326366004610fc9565b610a7f565b61020f610339366004611057565b610a94565b6101d1610aa8565b6101d1610354366004610fea565b610acc565b61022f610367366004611080565b610af7565b6102d561037a366004610fc9565b610b0c565b6101d1610c02565b61039e6064680a18f07d736b90be55601d1b6114f0565b6103a990600a611510565b81565b6060600380546103bb9061152f565b80601f01602080910402602001604051908101604052809291908181526020018280546103e79061152f565b80156104345780601f1061040957610100808354040283529160200191610434565b820191906000526020600020905b81548152906001019060200180831161041757829003601f168201915b505050505090505b90565b600061045361044c610c24565b8484610c28565b50600192915050565b60096020526000908152604090205460ff1681565b60025490565b6000610484848484610cdc565b6001600160a01b0384166000908152600160205260408120816104a5610c24565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156104f15760405162461bcd60e51b81526004016104e8906112fd565b60405180910390fd5b610505856104fd610c24565b858403610c28565b506001949350505050565b601290565b60065481565b680a18f07d736b90be55601d1b81565b60075481565b600061045361053e610c24565b84846001600061054c610c24565b6001600160a01b03908116825260208083019390935260409182016000908120918b168152925290205461058091906114d8565b610c28565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152602081905260409020545b919050565b6105df6064680a18f07d736b90be55601d1b6114f0565b6103a9906032611510565b6005546001600160a01b031681565b6005546001600160a01b031633146106235760405162461bcd60e51b81526004016104e890611345565b600260005260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c35460ff161561066f5760405162461bcd60e51b81526004016104e890611465565b600260005260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c3805460ff191660011790556106d0816106c06064680a18f07d736b90be55601d1b6114f0565b6106cb90600a611510565b610e06565b6106e76064680a18f07d736b90be55601d1b6114f0565b6106f290600a611510565b6002546106ff91906114d8565b60025550565b6060600480546103bb9061152f565b60065442106107355760405162461bcd60e51b81526004016104e89061139b565b60008460075461074591906114d8565b905061075e6064680a18f07d736b90be55601d1b6114f0565b61076990601e611510565b8111156107885760405162461bcd60e51b81526004016104e8906112d2565b60008681526008602052604090205460ff16156107b75760405162461bcd60e51b81526004016104e89061137a565b336000908152600a602052604090205460ff16156107e75760405162461bcd60e51b81526004016104e8906113be565b60008681526008602090815260408083208054600160ff199182168117909255338552600a9093529083208054909216179055610875610825610e7d565b7feb3d6babccd0a373424ad0223f41f87f27b5c39fad91fca4cdb225d1a22c0c8a898960405160200161085a93929190611158565b60405160208183030381529060405280519060200120610f40565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600182858888604051600081526020016040526040516108c4949392919061116e565b6020604051602081039080840390855afa1580156108e6573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146109165760405162461bcd60e51b81526004016104e8906112aa565b6109203387610e06565b60078290556002546109339087906114d8565b60025550505050505050565b6005546001600160a01b031633146109695760405162461bcd60e51b81526004016104e890611345565b600360005260096020527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e75460ff16156109b55760405162461bcd60e51b81526004016104e890611465565b600360005260096020527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e7805460ff191660011790556106d0816106c06064680a18f07d736b90be55601d1b6114f0565b60008060016000610a15610c24565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015610a615760405162461bcd60e51b81526004016104e890611485565b610a75610a6c610c24565b85858403610c28565b5060019392505050565b600a6020526000908152604090205460ff1681565b6000610453610aa1610c24565b8484610cdc565b7feb3d6babccd0a373424ad0223f41f87f27b5c39fad91fca4cdb225d1a22c0c8a81565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60086020526000908152604090205460ff1681565b6005546001600160a01b03163314610b365760405162461bcd60e51b81526004016104e890611345565b600160005260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365460ff1615610b825760405162461bcd60e51b81526004016104e890611465565b6001600081905260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36805460ff19169091179055610be081610bd56064680a18f07d736b90be55601d1b6114f0565b6106cb906032611510565b610bf76064680a18f07d736b90be55601d1b6114f0565b6106f2906032611510565b610c196064680a18f07d736b90be55601d1b6114f0565b6103a990601e611510565b3390565b6001600160a01b038316610c4e5760405162461bcd60e51b81526004016104e890611421565b6001600160a01b038216610c745760405162461bcd60e51b81526004016104e890611222565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ccf908590611123565b60405180910390a3505050565b6001600160a01b038316610d025760405162461bcd60e51b81526004016104e8906113dc565b6001600160a01b038216610d285760405162461bcd60e51b81526004016104e8906111df565b610d33838383610f73565b6001600160a01b03831660009081526020819052604090205481811015610d6c5760405162461bcd60e51b81526004016104e890611264565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610da39084906114d8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ded9190611123565b60405180910390a3610e00848484610f73565b50505050565b6001600160a01b03821660009081526020819052604081208054839290610e2e9084906114d8565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e71908590611123565b60405180910390a35050565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ece57507f000000000000000000000000000000000000000000000000000000000000000061043c565b610f397f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610f78565b905061043c565b60008282604051602001610f559291906110e9565b60405160208183030381529060405280519060200120905092915050565b505050565b60008383834630604051602001610f9395949392919061112c565b6040516020818303038152906040528051906020012090509392505050565b80356001600160a01b03811681146105c357600080fd5b600060208284031215610fda578081fd5b610fe382610fb2565b9392505050565b60008060408385031215610ffc578081fd5b61100583610fb2565b915061101360208401610fb2565b90509250929050565b600080600060608486031215611030578081fd5b61103984610fb2565b925061104760208501610fb2565b9150604084013590509250925092565b60008060408385031215611069578182fd5b61107283610fb2565b946020939093013593505050565b600060208284031215611091578081fd5b5035919050565b600080600080600060a086880312156110af578081fd5b85359450602086013593506040860135925060608601359150608086013560ff811681146110db578182fd5b809150509295509295909350565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b9283526020830191909152604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b818110156111b85785810183015185820160400152820161119c565b818111156111c95783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252600e908201526d24b73b30b634b21039b4b3b732b960911b604082015260600190565b602080825260119082015270457863656564206d617820737570706c7960781b604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526007908201526610db185a5b595960ca1b604082015260600190565b60208082526009908201526818db185a5b48195b9960ba1b604082015260600190565b602080825260049082015263155cd95960e21b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b602080825260069082015265135a5b9d195960d21b604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60ff91909116815260200190565b600082198211156114eb576114eb61156a565b500190565b60008261150b57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561152a5761152a61156a565b500290565b60028104600182168061154357607f821691505b6020821081141561156457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212200358493bd80475f065aa96e9acc87952fe4192b5a77c3a2833bf2905d7961f6c64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a05676223c83e6c24d95c4f8942a47f1c40e56a00000000000000000000000000000000000000000000000000000000000000006636f6f2e736f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003434f4f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063720248de116100f9578063a57d121b11610097578063dd62ed3e11610071578063dd62ed3e14610346578063f79b803f14610359578063f9423d891461036c578063fdfe8d641461037f576101c4565b8063a57d121b14610318578063a9059cbb1461032b578063c688387f1461033e576101c4565b806395d89b41116100d357806395d89b41146102d75780639b15f023146102df5780639b4bb607146102f2578063a457c2d714610305576101c4565b8063720248de146102b25780638da5cb5b146102ba57806395a3ca2e146102c2576101c4565b8063313ce56711610166578063362e701911610140578063362e70191461026f57806339509351146102775780635760cc5d1461028a57806370a082311461029f576101c4565b8063313ce567146102575780633197cbb61461025f57806332cb6b0c14610267576101c4565b806310e29cd3116101a257806310e29cd31461021c57806318160ddd1461023c57806323b872dd1461024457806328221d71146101c9576101c4565b80630389223d146101c957806306fdde03146101e7578063095ea7b3146101fc575b600080fd5b6101d1610387565b6040516101de9190611123565b60405180910390f35b6101ef6103ac565b6040516101de919061118c565b61020f61020a366004611057565b61043f565b6040516101de9190611118565b61022f61022a366004611080565b61045c565b6040516101de91906114ca565b6101d1610471565b61020f61025236600461101c565b610477565b61022f610510565b6101d1610515565b6101d161051b565b6101d161052b565b61020f610285366004611057565b610531565b610292610585565b6040516101de9190611104565b6101d16102ad366004610fc9565b6105a9565b6101d16105c8565b6102926105ea565b6102d56102d0366004610fc9565b6105f9565b005b6101ef610705565b6102d56102ed366004611098565b610714565b6102d5610300366004610fc9565b61093f565b61020f610313366004611057565b610a06565b61022f610326366004610fc9565b610a7f565b61020f610339366004611057565b610a94565b6101d1610aa8565b6101d1610354366004610fea565b610acc565b61022f610367366004611080565b610af7565b6102d561037a366004610fc9565b610b0c565b6101d1610c02565b61039e6064680a18f07d736b90be55601d1b6114f0565b6103a990600a611510565b81565b6060600380546103bb9061152f565b80601f01602080910402602001604051908101604052809291908181526020018280546103e79061152f565b80156104345780601f1061040957610100808354040283529160200191610434565b820191906000526020600020905b81548152906001019060200180831161041757829003601f168201915b505050505090505b90565b600061045361044c610c24565b8484610c28565b50600192915050565b60096020526000908152604090205460ff1681565b60025490565b6000610484848484610cdc565b6001600160a01b0384166000908152600160205260408120816104a5610c24565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156104f15760405162461bcd60e51b81526004016104e8906112fd565b60405180910390fd5b610505856104fd610c24565b858403610c28565b506001949350505050565b601290565b60065481565b680a18f07d736b90be55601d1b81565b60075481565b600061045361053e610c24565b84846001600061054c610c24565b6001600160a01b03908116825260208083019390935260409182016000908120918b168152925290205461058091906114d8565b610c28565b7f000000000000000000000000a05676223c83e6c24d95c4f8942a47f1c40e56a081565b6001600160a01b0381166000908152602081905260409020545b919050565b6105df6064680a18f07d736b90be55601d1b6114f0565b6103a9906032611510565b6005546001600160a01b031681565b6005546001600160a01b031633146106235760405162461bcd60e51b81526004016104e890611345565b600260005260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c35460ff161561066f5760405162461bcd60e51b81526004016104e890611465565b600260005260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c3805460ff191660011790556106d0816106c06064680a18f07d736b90be55601d1b6114f0565b6106cb90600a611510565b610e06565b6106e76064680a18f07d736b90be55601d1b6114f0565b6106f290600a611510565b6002546106ff91906114d8565b60025550565b6060600480546103bb9061152f565b60065442106107355760405162461bcd60e51b81526004016104e89061139b565b60008460075461074591906114d8565b905061075e6064680a18f07d736b90be55601d1b6114f0565b61076990601e611510565b8111156107885760405162461bcd60e51b81526004016104e8906112d2565b60008681526008602052604090205460ff16156107b75760405162461bcd60e51b81526004016104e89061137a565b336000908152600a602052604090205460ff16156107e75760405162461bcd60e51b81526004016104e8906113be565b60008681526008602090815260408083208054600160ff199182168117909255338552600a9093529083208054909216179055610875610825610e7d565b7feb3d6babccd0a373424ad0223f41f87f27b5c39fad91fca4cdb225d1a22c0c8a898960405160200161085a93929190611158565b60405160208183030381529060405280519060200120610f40565b90507f000000000000000000000000a05676223c83e6c24d95c4f8942a47f1c40e56a06001600160a01b0316600182858888604051600081526020016040526040516108c4949392919061116e565b6020604051602081039080840390855afa1580156108e6573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146109165760405162461bcd60e51b81526004016104e8906112aa565b6109203387610e06565b60078290556002546109339087906114d8565b60025550505050505050565b6005546001600160a01b031633146109695760405162461bcd60e51b81526004016104e890611345565b600360005260096020527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e75460ff16156109b55760405162461bcd60e51b81526004016104e890611465565b600360005260096020527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e7805460ff191660011790556106d0816106c06064680a18f07d736b90be55601d1b6114f0565b60008060016000610a15610c24565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015610a615760405162461bcd60e51b81526004016104e890611485565b610a75610a6c610c24565b85858403610c28565b5060019392505050565b600a6020526000908152604090205460ff1681565b6000610453610aa1610c24565b8484610cdc565b7feb3d6babccd0a373424ad0223f41f87f27b5c39fad91fca4cdb225d1a22c0c8a81565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60086020526000908152604090205460ff1681565b6005546001600160a01b03163314610b365760405162461bcd60e51b81526004016104e890611345565b600160005260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365460ff1615610b825760405162461bcd60e51b81526004016104e890611465565b6001600081905260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36805460ff19169091179055610be081610bd56064680a18f07d736b90be55601d1b6114f0565b6106cb906032611510565b610bf76064680a18f07d736b90be55601d1b6114f0565b6106f2906032611510565b610c196064680a18f07d736b90be55601d1b6114f0565b6103a990601e611510565b3390565b6001600160a01b038316610c4e5760405162461bcd60e51b81526004016104e890611421565b6001600160a01b038216610c745760405162461bcd60e51b81526004016104e890611222565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ccf908590611123565b60405180910390a3505050565b6001600160a01b038316610d025760405162461bcd60e51b81526004016104e8906113dc565b6001600160a01b038216610d285760405162461bcd60e51b81526004016104e8906111df565b610d33838383610f73565b6001600160a01b03831660009081526020819052604090205481811015610d6c5760405162461bcd60e51b81526004016104e890611264565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610da39084906114d8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ded9190611123565b60405180910390a3610e00848484610f73565b50505050565b6001600160a01b03821660009081526020819052604081208054839290610e2e9084906114d8565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e71908590611123565b60405180910390a35050565b60007f0000000000000000000000000000000000000000000000000000000000000001461415610ece57507f7c02f0f621fd765a48cf138d26ac355fefe58bf8da6a58f7b0315dc4f8c4f22c61043c565b610f397f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fefa080c67ecf4a6bf40c9dc64173420c08f359250ca6562d7c80f7c7b9b139697fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6610f78565b905061043c565b60008282604051602001610f559291906110e9565b60405160208183030381529060405280519060200120905092915050565b505050565b60008383834630604051602001610f9395949392919061112c565b6040516020818303038152906040528051906020012090509392505050565b80356001600160a01b03811681146105c357600080fd5b600060208284031215610fda578081fd5b610fe382610fb2565b9392505050565b60008060408385031215610ffc578081fd5b61100583610fb2565b915061101360208401610fb2565b90509250929050565b600080600060608486031215611030578081fd5b61103984610fb2565b925061104760208501610fb2565b9150604084013590509250925092565b60008060408385031215611069578182fd5b61107283610fb2565b946020939093013593505050565b600060208284031215611091578081fd5b5035919050565b600080600080600060a086880312156110af578081fd5b85359450602086013593506040860135925060608601359150608086013560ff811681146110db578182fd5b809150509295509295909350565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b9283526020830191909152604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b818110156111b85785810183015185820160400152820161119c565b818111156111c95783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252600e908201526d24b73b30b634b21039b4b3b732b960911b604082015260600190565b602080825260119082015270457863656564206d617820737570706c7960781b604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526007908201526610db185a5b595960ca1b604082015260600190565b60208082526009908201526818db185a5b48195b9960ba1b604082015260600190565b602080825260049082015263155cd95960e21b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b602080825260069082015265135a5b9d195960d21b604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60ff91909116815260200190565b600082198211156114eb576114eb61156a565b500190565b60008261150b57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561152a5761152a61156a565b500290565b60028104600182168061154357607f821691505b6020821081141561156457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212200358493bd80475f065aa96e9acc87952fe4192b5a77c3a2833bf2905d7961f6c64736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a05676223c83e6c24d95c4f8942a47f1c40e56a00000000000000000000000000000000000000000000000000000000000000006636f6f2e736f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003434f4f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): coo.so
Arg [1] : _symbol (string): COO
Arg [2] : _signer (address): 0xa05676223c83e6c24d95c4F8942a47f1c40e56A0

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000a05676223c83e6c24d95c4f8942a47f1c40e56a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 636f6f2e736f0000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 434f4f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

28076:2693:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28279:59;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6064:100;;;:::i;:::-;;;;;;;:::i;8231:169::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28745:43::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7184:108::-;;;:::i;8882:452::-;;;;;;:::i;:::-;;:::i;7026:93::-;;;:::i;28633:22::-;;;:::i;28148:55::-;;;:::i;28664:23::-;;;:::i;9743:215::-;;;;;;:::i;:::-;;:::i;28592:32::-;;;:::i;:::-;;;;;;;:::i;7355:127::-;;;;;;:::i;:::-;;:::i;28212:58::-;;;:::i;28115:20::-;;;:::i;29387:301::-;;;;;;:::i;:::-;;:::i;:::-;;6283:104;;;:::i;30010:754::-;;;;;;:::i;:::-;;:::i;29696:306::-;;;;;;:::i;:::-;;:::i;10461:413::-;;;;;;:::i;:::-;;:::i;28797:44::-;;;;;;:::i;:::-;;:::i;7695:175::-;;;;;;:::i;:::-;;:::i;28488:95::-;;;:::i;7933:151::-;;;;;;:::i;:::-;;:::i;28696:40::-;;;;;;:::i;:::-;;:::i;29083:296::-;;;;;;:::i;:::-;;:::i;28416:63::-;;;:::i;28279:59::-;28317:16;28330:3;-1:-1:-1;;;28317:16:0;:::i;:::-;:21;;28336:2;28317:21;:::i;:::-;28279:59;:::o;6064:100::-;6118:13;6151:5;6144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6064:100;;:::o;8231:169::-;8314:4;8331:39;8340:12;:10;:12::i;:::-;8354:7;8363:6;8331:8;:39::i;:::-;-1:-1:-1;8388:4:0;8231:169;;;;:::o;28745:43::-;;;;;;;;;;;;;;;:::o;7184:108::-;7272:12;;7184:108;:::o;8882:452::-;8986:4;9003:36;9013:6;9021:9;9032:6;9003:9;:36::i;:::-;-1:-1:-1;;;;;9077:19:0;;9050:24;9077:19;;;:11;:19;;;;;9050:24;9097:12;:10;:12::i;:::-;-1:-1:-1;;;;;9077:33:0;-1:-1:-1;;;;;9077:33:0;;;;;;;;;;;;;9050:60;;9149:6;9129:16;:26;;9121:79;;;;-1:-1:-1;;;9121:79:0;;;;;;;:::i;:::-;;;;;;;;;9236:57;9245:6;9253:12;:10;:12::i;:::-;9286:6;9267:16;:25;9236:8;:57::i;:::-;-1:-1:-1;9322:4:0;;8882:452;-1:-1:-1;;;;8882:452:0:o;7026:93::-;7109:2;7026:93;:::o;28633:22::-;;;;:::o;28148:55::-;-1:-1:-1;;;28148:55:0;:::o;28664:23::-;;;;:::o;9743:215::-;9831:4;9848:80;9857:12;:10;:12::i;:::-;9871:7;9917:10;9880:11;:25;9892:12;:10;:12::i;:::-;-1:-1:-1;;;;;9880:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;9880:25:0;;;:34;;;;;;;;;;:47;;;;:::i;:::-;9848:8;:80::i;28592:32::-;;;:::o;7355:127::-;-1:-1:-1;;;;;7456:18:0;;7429:7;7456:18;;;;;;;;;;;7355:127;;;;:::o;28212:58::-;28249:16;28262:3;-1:-1:-1;;;28249:16:0;:::i;:::-;:21;;28268:2;28249:21;:::i;28115:20::-;;;-1:-1:-1;;;;;28115:20:0;;:::o;29387:301::-;29468:5;;-1:-1:-1;;;;;29468:5:0;29454:10;:19;29446:64;;;;-1:-1:-1;;;29446:64:0;;;;;;;:::i;:::-;29540:1;29529:13;;:10;:13;;;;;;:18;29521:37;;;;-1:-1:-1;;;29521:37:0;;;;;;;:::i;:::-;29580:1;29569:13;;:10;:13;;;:17;;-1:-1:-1;;29569:17:0;29585:1;29569:17;;;29597:31;29603:11;28317:16;28330:3;-1:-1:-1;;;28317:16:0;:::i;:::-;:21;;28336:2;28317:21;:::i;:::-;29597:5;:31::i;:::-;28317:16;28330:3;-1:-1:-1;;;28317:16:0;:::i;:::-;:21;;28336:2;28317:21;:::i;:::-;29654:12;;:26;;;;:::i;:::-;29639:12;:41;-1:-1:-1;29387:301:0:o;6283:104::-;6339:13;6372:7;6365:14;;;;;:::i;30010:754::-;30134:7;;30116:15;:25;30108:47;;;;-1:-1:-1;;;30108:47:0;;;;;;;:::i;:::-;30166:13;30193:6;30182:8;;:17;;;;:::i;:::-;30166:33;-1:-1:-1;28458:16:0;28471:3;-1:-1:-1;;;28458:16:0;:::i;:::-;:21;;28477:2;28458:21;:::i;:::-;30218:5;:24;;30210:54;;;;-1:-1:-1;;;30210:54:0;;;;;;;:::i;:::-;30283:16;;;;:7;:16;;;;;;;;:21;30275:41;;;;-1:-1:-1;;;30275:41:0;;;;;;;:::i;:::-;30347:10;30335:23;;;;:11;:23;;;;;;;;:28;30327:44;;;;-1:-1:-1;;;30327:44:0;;;;;;;:::i;:::-;30382:16;;;;:7;:16;;;;;;;;:20;;30401:1;-1:-1:-1;;30382:20:0;;;;;;;;30425:10;30413:23;;:11;:23;;;;;;:27;;;;;;;;30468:103;30490:20;:18;:20::i;:::-;28534:49;30553:7;30562:6;30521:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30511:59;;;;;;30468:21;:103::i;:::-;30451:120;;30620:7;-1:-1:-1;;;;;30590:37:0;:26;30600:6;30608:1;30611;30614;30590:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30590:37:0;;30582:64;;;;-1:-1:-1;;;30582:64:0;;;;;;;:::i;:::-;30657:25;30663:10;30675:6;30657:5;:25::i;:::-;30693:8;:16;;;30735:12;;:21;;30750:6;;30735:21;:::i;:::-;30720:12;:36;-1:-1:-1;;;;;;;30010:754:0:o;29696:306::-;29779:5;;-1:-1:-1;;;;;29779:5:0;29765:10;:19;29757:64;;;;-1:-1:-1;;;29757:64:0;;;;;;;:::i;:::-;29851:1;29840:13;;:10;:13;;;;;;:18;29832:37;;;;-1:-1:-1;;;29832:37:0;;;;;;;:::i;:::-;29891:1;29880:13;;:10;:13;;;:17;;-1:-1:-1;;29880:17:0;29896:1;29880:17;;;29908:33;29914:12;28386:16;28399:3;-1:-1:-1;;;28386:16:0;:::i;10461:413::-;10554:4;10571:24;10598:11;:25;10610:12;:10;:12::i;:::-;-1:-1:-1;;;;;10598:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;10598:25:0;;;:34;;;;;;;;;;;-1:-1:-1;10651:35:0;;;;10643:85;;;;-1:-1:-1;;;10643:85:0;;;;;;;:::i;:::-;10764:67;10773:12;:10;:12::i;:::-;10787:7;10815:15;10796:16;:34;10764:8;:67::i;:::-;-1:-1:-1;10862:4:0;;10461:413;-1:-1:-1;;;10461:413:0:o;28797:44::-;;;;;;;;;;;;;;;:::o;7695:175::-;7781:4;7798:42;7808:12;:10;:12::i;:::-;7822:9;7833:6;7798:9;:42::i;28488:95::-;28534:49;28488:95;:::o;7933:151::-;-1:-1:-1;;;;;8049:18:0;;;8022:7;8049:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7933:151::o;28696:40::-;;;;;;;;;;;;;;;:::o;29083:296::-;29162:5;;-1:-1:-1;;;;;29162:5:0;29148:10;:19;29140:64;;;;-1:-1:-1;;;29140:64:0;;;;;;;:::i;:::-;29234:1;29223:13;;:10;:13;;;;;;:18;29215:37;;;;-1:-1:-1;;;29215:37:0;;;;;;;:::i;:::-;29279:1;29263:13;;;;:10;:13;;;:17;;-1:-1:-1;;29263:17:0;;;;;;29291:29;29297:10;28249:16;28262:3;-1:-1:-1;;;28249:16:0;:::i;:::-;:21;;28268:2;28249:21;:::i;29291:29::-;28249:16;28262:3;-1:-1:-1;;;28249:16:0;:::i;:::-;:21;;28268:2;28249:21;:::i;28416:63::-;28458:16;28471:3;-1:-1:-1;;;28458:16:0;:::i;:::-;:21;;28477:2;28458:21;:::i;606:98::-;686:10;606:98;:::o;14151:380::-;-1:-1:-1;;;;;14287:19:0;;14279:68;;;;-1:-1:-1;;;14279:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14366:21:0;;14358:68;;;;-1:-1:-1;;;14358:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14439:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;14491:32;;;;;14469:6;;14491:32;:::i;:::-;;;;;;;;14151:380;;;:::o;11364:733::-;-1:-1:-1;;;;;11504:20:0;;11496:70;;;;-1:-1:-1;;;11496:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11585:23:0;;11577:71;;;;-1:-1:-1;;;11577:71:0;;;;;;;:::i;:::-;11661:47;11682:6;11690:9;11701:6;11661:20;:47::i;:::-;-1:-1:-1;;;;;11745:17:0;;11721:21;11745:17;;;;;;;;;;;11781:23;;;;11773:74;;;;-1:-1:-1;;;11773:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11883:17:0;;;:9;:17;;;;;;;;;;;11903:22;;;11883:42;;11947:20;;;;;;;;:30;;11919:6;;11883:9;11947:30;;11919:6;;11947:30;:::i;:::-;;;;;;;;12012:9;-1:-1:-1;;;;;11995:35:0;12004:6;-1:-1:-1;;;;;11995:35:0;;12023:6;11995:35;;;;;;:::i;:::-;;;;;;;;12043:46;12063:6;12071:9;12082:6;12043:19;:46::i;:::-;11364:733;;;;:::o;12384:405::-;-1:-1:-1;;;;;12638:18:0;;:9;:18;;;;;;;;;;:28;;12660:6;;12638:9;:28;;12660:6;;12638:28;:::i;:::-;;;;-1:-1:-1;;12682:37:0;;-1:-1:-1;;;;;12682:37:0;;;12699:1;;12682:37;;;;12712:6;;12682:37;:::i;:::-;;;;;;;;12384:405;;:::o;26708:281::-;26761:7;26802:16;26785:13;:33;26781:201;;;-1:-1:-1;26842:24:0;26835:31;;26781:201;26906:64;26928:10;26940:12;26954:15;26906:21;:64::i;:::-;26899:71;;;;24698:196;24791:7;24857:15;24874:10;24828:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24818:68;;;;;;24811:75;;24698:196;;;;:::o;15131:125::-;;;;:::o;26997:263::-;27141:7;27189:8;27199;27209:11;27222:13;27245:4;27178:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27168:84;;;;;;27161:91;;26997:263;;;;;:::o;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;:::-;345:41;264:128;-1:-1:-1;;;264:128:1:o;397:274::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;;625:40;661:2;650:9;646:18;625:40;:::i;:::-;615:50;;484:187;;;;;:::o;676:342::-;;;;822:2;810:9;801:7;797:23;793:32;790:2;;;843:6;835;828:22;790:2;871:31;892:9;871:31;:::i;:::-;861:41;;921:40;957:2;946:9;942:18;921:40;:::i;:::-;911:50;;1008:2;997:9;993:18;980:32;970:42;;780:238;;;;;:::o;1023:266::-;;;1152:2;1140:9;1131:7;1127:23;1123:32;1120:2;;;1173:6;1165;1158:22;1120:2;1201:31;1222:9;1201:31;:::i;:::-;1191:41;1279:2;1264:18;;;;1251:32;;-1:-1:-1;;;1110:179:1:o;1294:190::-;;1406:2;1394:9;1385:7;1381:23;1377:32;1374:2;;;1427:6;1419;1412:22;1374:2;-1:-1:-1;1455:23:1;;1364:120;-1:-1:-1;1364:120:1:o;1489:563::-;;;;;;1667:3;1655:9;1646:7;1642:23;1638:33;1635:2;;;1689:6;1681;1674:22;1635:2;1730:9;1717:23;1707:33;;1787:2;1776:9;1772:18;1759:32;1749:42;;1838:2;1827:9;1823:18;1810:32;1800:42;;1889:2;1878:9;1874:18;1861:32;1851:42;;1943:3;1932:9;1928:19;1915:33;1988:4;1981:5;1977:16;1970:5;1967:27;1957:2;;2013:6;2005;1998:22;1957:2;2041:5;2031:15;;;1625:427;;;;;;;;:::o;2057:392::-;-1:-1:-1;;;2315:27:1;;2367:1;2358:11;;2351:27;;;;2403:2;2394:12;;2387:28;2440:2;2431:12;;2305:144::o;2454:203::-;-1:-1:-1;;;;;2618:32:1;;;;2600:51;;2588:2;2573:18;;2555:102::o;2662:187::-;2827:14;;2820:22;2802:41;;2790:2;2775:18;;2757:92::o;2854:177::-;3000:25;;;2988:2;2973:18;;2955:76::o;3036:489::-;3295:25;;;3351:2;3336:18;;3329:34;;;;3394:2;3379:18;;3372:34;;;;3437:2;3422:18;;3415:34;-1:-1:-1;;;;;3486:32:1;3480:3;3465:19;;3458:61;3282:3;3267:19;;3249:276::o;3530:319::-;3732:25;;;3788:2;3773:18;;3766:34;;;;3831:2;3816:18;;3809:34;3720:2;3705:18;;3687:162::o;3854:398::-;4081:25;;;4154:4;4142:17;;;;4137:2;4122:18;;4115:45;4191:2;4176:18;;4169:34;4234:2;4219:18;;4212:34;4068:3;4053:19;;4035:217::o;4257:603::-;;4398:2;4427;4416:9;4409:21;4459:6;4453:13;4502:6;4497:2;4486:9;4482:18;4475:34;4527:4;4540:140;4554:6;4551:1;4548:13;4540:140;;;4649:14;;;4645:23;;4639:30;4615:17;;;4634:2;4611:26;4604:66;4569:10;;4540:140;;;4698:6;4695:1;4692:13;4689:2;;;4768:4;4763:2;4754:6;4743:9;4739:22;4735:31;4728:45;4689:2;-1:-1:-1;4844:2:1;4823:15;-1:-1:-1;;4819:29:1;4804:45;;;;4851:2;4800:54;;4378:482;-1:-1:-1;;;4378:482:1:o;4865:399::-;5067:2;5049:21;;;5106:2;5086:18;;;5079:30;5145:34;5140:2;5125:18;;5118:62;-1:-1:-1;;;5211:2:1;5196:18;;5189:33;5254:3;5239:19;;5039:225::o;5269:398::-;5471:2;5453:21;;;5510:2;5490:18;;;5483:30;5549:34;5544:2;5529:18;;5522:62;-1:-1:-1;;;5615:2:1;5600:18;;5593:32;5657:3;5642:19;;5443:224::o;5672:402::-;5874:2;5856:21;;;5913:2;5893:18;;;5886:30;5952:34;5947:2;5932:18;;5925:62;-1:-1:-1;;;6018:2:1;6003:18;;5996:36;6064:3;6049:19;;5846:228::o;6079:338::-;6281:2;6263:21;;;6320:2;6300:18;;;6293:30;-1:-1:-1;;;6354:2:1;6339:18;;6332:44;6408:2;6393:18;;6253:164::o;6422:341::-;6624:2;6606:21;;;6663:2;6643:18;;;6636:30;-1:-1:-1;;;6697:2:1;6682:18;;6675:47;6754:2;6739:18;;6596:167::o;6768:404::-;6970:2;6952:21;;;7009:2;6989:18;;;6982:30;7048:34;7043:2;7028:18;;7021:62;-1:-1:-1;;;7114:2:1;7099:18;;7092:38;7162:3;7147:19;;6942:230::o;7177:356::-;7379:2;7361:21;;;7398:18;;;7391:30;7457:34;7452:2;7437:18;;7430:62;7524:2;7509:18;;7351:182::o;7538:330::-;7740:2;7722:21;;;7779:1;7759:18;;;7752:29;-1:-1:-1;;;7812:2:1;7797:18;;7790:37;7859:2;7844:18;;7712:156::o;7873:332::-;8075:2;8057:21;;;8114:1;8094:18;;;8087:29;-1:-1:-1;;;8147:2:1;8132:18;;8125:39;8196:2;8181:18;;8047:158::o;8210:327::-;8412:2;8394:21;;;8451:1;8431:18;;;8424:29;-1:-1:-1;;;8484:2:1;8469:18;;8462:34;8528:2;8513:18;;8384:153::o;8542:401::-;8744:2;8726:21;;;8783:2;8763:18;;;8756:30;8822:34;8817:2;8802:18;;8795:62;-1:-1:-1;;;8888:2:1;8873:18;;8866:35;8933:3;8918:19;;8716:227::o;8948:400::-;9150:2;9132:21;;;9189:2;9169:18;;;9162:30;9228:34;9223:2;9208:18;;9201:62;-1:-1:-1;;;9294:2:1;9279:18;;9272:34;9338:3;9323:19;;9122:226::o;9353:329::-;9555:2;9537:21;;;9594:1;9574:18;;;9567:29;-1:-1:-1;;;9627:2:1;9612:18;;9605:36;9673:2;9658:18;;9527:155::o;9687:401::-;9889:2;9871:21;;;9928:2;9908:18;;;9901:30;9967:34;9962:2;9947:18;;9940:62;-1:-1:-1;;;10033:2:1;10018:18;;10011:35;10078:3;10063:19;;9861:227::o;10275:184::-;10447:4;10435:17;;;;10417:36;;10405:2;10390:18;;10372:87::o;10464:128::-;;10535:1;10531:6;10528:1;10525:13;10522:2;;;10541:18;;:::i;:::-;-1:-1:-1;10577:9:1;;10512:80::o;10597:217::-;;10663:1;10653:2;;-1:-1:-1;;;10688:31:1;;10742:4;10739:1;10732:15;10770:4;10695:1;10760:15;10653:2;-1:-1:-1;10799:9:1;;10643:171::o;10819:168::-;;10925:1;10921;10917:6;10913:14;10910:1;10907:21;10902:1;10895:9;10888:17;10884:45;10881:2;;;10932:18;;:::i;:::-;-1:-1:-1;10972:9:1;;10871:116::o;10992:380::-;11077:1;11067:12;;11124:1;11114:12;;;11135:2;;11189:4;11181:6;11177:17;11167:27;;11135:2;11242;11234:6;11231:14;11211:18;11208:38;11205:2;;;11288:10;11283:3;11279:20;11276:1;11269:31;11323:4;11320:1;11313:15;11351:4;11348:1;11341:15;11205:2;;11047:325;;;:::o;11377:127::-;11438:10;11433:3;11429:20;11426:1;11419:31;11469:4;11466:1;11459:15;11493:4;11490:1;11483:15

Swarm Source

ipfs://0358493bd80475f065aa96e9acc87952fe4192b5a77c3a2833bf2905d7961f6c
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.