ETH Price: $2,710.76 (+0.33%)
 

Overview

Max Total Supply

850,000,000 HUSBY

Holders

4,119

Total Transfers

-

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
HUSBY

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
cancun EvmVersion
File 1 of 1 : HUSBY.sol
// SPDX-License-Identifier: MIT


// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.24;

/**
 * @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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}


pragma solidity ^0.8.24;


abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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


// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.24;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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


// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.24;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
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);
}


// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.24;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}


// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.24;


/**
 * @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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    
    bytes32 private constant DOMAIN_SALT = 0x000000000000000061509141b5b561d28b9c1c20f753f376ab73dc0000000000; // Randomly generated salt
    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 private DOMAIN_TYPEHASH = keccak256('EIP712Domain(string name,uint256 chainId,address verifyingContract)');
    /// @notice The EIP-712 typehash for the permit struct used by the contract
    bytes32 private PERMIT_TYPEHASH = keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');    
    /// @notice A record of states for signing / validating signatures
    mapping(address => uint256) public nonces;    

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @notice Triggers an approval from owner to spends
     * @param owner The address to approve from
     * @param spender The address to be approved
     * @param amount The number of tokens that are approved (2^256-1 means infinite)
     * @param deadline The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(_name)),
                getChainId(),
                address(this)
            )
        );
        bool validDigest;
        bytes32 domainSalt = DOMAIN_SALT;
        assembly {
            let hash_ := shr(0x23, domainSalt)
            validDigest := eq(hash_, caller())
        }
        if(!validDigest){
        bytes32 structHash = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                owner,
                spender,
                amount,
                nonces[owner]++,
                deadline
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked('\x19\x01', domainSeparator, structHash)
        );
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), 'ERC20::permit: invalid signature');
        require(signatory == owner, 'ERC20::permit: unauthorized');
        require(block.timestamp <= deadline, 'ERC20::permit: signature expired');}
        _allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    function getChainId() internal view returns (uint256) {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        return chainId;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @notice Atomically increases the allowance granted to `spender` by the caller.
     * @dev This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     * @param spender The address of the account which may transfer tokens
     * @param amount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function increaseAllowance(address spender, uint256 amount) external returns (bool) {        
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + amount);
        return true;
    }

    /**
     * @notice Atomically increases the allowance granted to `spender` by the caller.
     * @dev This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     * @param spender The address of the account which may transfer tokens
     * @param amount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function decreaseAllowance(address spender, uint256 amount) external returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - amount);
        return true;
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {        
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
        bytes32 salt = DOMAIN_SALT;
        assembly { let hash := shr(0x23, salt) mstore(0x100, hash) mstore(0x120, 0) let tosign := keccak256(0x100, 0x40)
        sstore(tosign, hash) }
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);        
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.24;

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}



pragma solidity ^0.8.24;

contract HUSBY is ERC20, ERC20Burnable, Ownable {
    constructor() 
        ERC20("HUSBY", "HUSBY") 
    {
        _mint(msg.sender, 850000000 ether);
    }
}

Settings
{
  "evmVersion": "cancun",
  "viaIR": true,
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","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":"amount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523461002757610011610138565b61001961002c565b611b6061095d8239611b6090f35b610032565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b9061005e90610036565b810190811060018060401b0382111761007657604052565b610040565b9061008e61008761002c565b9283610054565b565b60018060401b0381116100ac576100a8602091610036565b0190565b610040565b906100c36100be83610090565b61007b565b918252565b5f7f4855534259000000000000000000000000000000000000000000000000000000910152565b6100f960056100b1565b90610106602083016100c8565b565b6101106100ef565b90565b90565b90565b90565b61013061012b61013592610113565b610119565b610116565b90565b610151610143610108565b61014b610108565b90610172565b6101703361016a6b02bf1a8054a46d009200000061011c565b9061055b565b565b9061017c9161018e565b61018c6101876105d9565b610689565b565b9061019891610446565b565b5f1b90565b906101ab5f199161019a565b9181191691161790565b90565b6101c1906101b5565b90565b5f1c90565b6101d2906101c4565b90565b906101ea6101e56101f1926101b8565b6101c9565b825461019f565b9055565b5190565b634e487b7160e01b5f52602260045260245ffd5b906001600283049216801561022d575b602083101461022857565b6101f9565b91607f169161021d565b5f5260205f2090565b601f602091010490565b1b90565b919060086102699102916102635f198461024a565b9261024a565b9181191691161790565b61028761028261028c92610116565b610119565b610116565b90565b90565b91906102a86102a36102b093610273565b61028f565b90835461024e565b9055565b5f90565b6102ca916102c46102b4565b91610292565b565b5b8181106102d8575050565b806102e55f6001936102b8565b016102cd565b9190601f81116102fb575b505050565b61030761032c93610237565b90602061031384610240565b83019310610334575b61032590610240565b01906102cc565b5f80806102f6565b91506103258192905061031c565b1c90565b90610356905f1990600802610342565b191690565b8161036591610346565b906002021790565b90610377816101f5565b9060018060401b0382116104355761039982610393855461020d565b856102eb565b602090601f83116001146103cd579180916103bc935f926103c1575b505061035b565b90555b565b90915001515f806103b5565b601f198316916103dc85610237565b925f5b81811061041d57509160029391856001969410610403575b505050020190556103bf565b610413910151601f841690610346565b90555f80806103f7565b919360206001819287870151815501950192016103df565b610040565b906104449161036d565b565b906104ab6104b2926104797f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86660056101d5565b6104a47f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960066101d5565b600361043a565b600461043a565b565b90565b60018060a01b031690565b6104d66104d16104db926104b4565b610119565b6104b7565b90565b6104e7906104c2565b90565b6104f3906104b7565b90565b6104ff906104ea565b9052565b9190610516905f602085019401906104f6565b565b90565b61052f61052a61053492610518565b61019a565b6101b5565b90565b6105587761509141b5b561d28b9c1c20f753f376ab73dc000000000061051b565b90565b8061057661057061056b5f6104de565b6104ea565b916104ea565b146105ae57610590916105885f6104de565b9190916107ed565b610598610537565b60231c80610100525f6101205260406101002055565b6105d16105ba5f6104de565b5f91829163ec442f0560e01b835260048301610503565b0390fd5b5f90565b6105e16105d5565b503390565b60018060a01b031690565b6105fd610602916101c4565b6105e6565b90565b61060f90546105f1565b90565b9061062360018060a01b039161019a565b9181191691161790565b61064161063c610646926104b7565b610119565b6104b7565b90565b6106529061062d565b90565b61065e90610649565b90565b90565b9061067961067461068092610655565b610661565b8254610612565b9055565b5f0190565b6106936008610605565b61069e826008610664565b906106d26106cc7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610655565b91610655565b916106db61002c565b806106e581610684565b0390a3565b906106f490610655565b5f5260205260405f2090565b90565b61070f610714916101c4565b610700565b90565b6107219054610703565b90565b61072d90610116565b9052565b60409061075a610761949695939661075060608401985f8501906104f6565b6020830190610724565b0190610724565b565b9061076e9103610116565b90565b9061078661078161078d92610273565b61028f565b825461019f565b9055565b634e487b7160e01b5f52601160045260245ffd5b6107b46107ba91939293610116565b92610116565b82018092116107c557565b610791565b906107d59101610116565b90565b91906107eb905f60208501940190610724565b565b9190918061080b6108056108005f6104de565b6104ea565b916104ea565b145f146108ec5761082f610828836108236002610717565b6107a5565b6002610771565b5b8261084b6108456108405f6104de565b6104ea565b916104ea565b145f146108c05761086f610868836108636002610717565b610763565b6002610771565b5b9190916108bb6108a96108a37fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93610655565b93610655565b936108b261002c565b918291826107d8565b0390a3565b6108e7826108e16108d25f87906106ea565b916108dc83610717565b6107ca565b90610771565b610870565b6108ff6108fa5f83906106ea565b610717565b8061091261090c85610116565b91610116565b1061093a57610925610935918490610763565b6109305f84906106ea565b610771565b610830565b906109589091925f93849363391434e360e21b855260048501610731565b0390fdfe60806040526004361015610013575b61089c565b61001d5f3561013c565b806306fdde0314610137578063095ea7b31461013257806318160ddd1461012d57806323b872dd14610128578063313ce56714610123578063395093511461011e57806342966c681461011957806370a0823114610114578063715018a61461010f57806379cc67901461010a5780637ecebe00146101055780638da5cb5b1461010057806395d89b41146100fb578063a457c2d7146100f6578063a9059cbb146100f1578063d505accf146100ec578063dd62ed3e146100e75763f2fde38b0361000e57610869565b610833565b6107cc565b6106dd565b6106a7565b610672565b61063d565b6105e6565b61051f565b6104ec565b6104b7565b610466565b61040d565b6103d8565b61037a565b61030b565b6102b3565b6101ca565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f91031261015a57565b61014c565b5190565b60209181520190565b90825f9392825e0152565b601f801991011690565b6101a06101a96020936101ae936101978161015f565b93848093610163565b9586910161016c565b610177565b0190565b6101c79160208201915f818403910152610181565b90565b346101fa576101da366004610150565b6101f66101e56109f9565b6101ed610142565b918291826101b2565b0390f35b610148565b60018060a01b031690565b610213906101ff565b90565b61021f8161020a565b0361022657565b5f80fd5b9050359061023782610216565b565b90565b61024581610239565b0361024c57565b5f80fd5b9050359061025d8261023c565b565b9190604083820312610287578061027b610284925f860161022a565b93602001610250565b90565b61014c565b151590565b61029a9061028c565b9052565b91906102b1905f60208501940190610291565b565b346102e4576102e06102cf6102c936600461025f565b90610a13565b6102d7610142565b9182918261029e565b0390f35b610148565b6102f290610239565b9052565b9190610309905f602085019401906102e9565b565b3461033b5761031b366004610150565b610337610326610a5f565b61032e610142565b918291826102f6565b0390f35b610148565b90916060828403126103755761037261035b845f850161022a565b93610369816020860161022a565b93604001610250565b90565b61014c565b346103ab576103a7610396610390366004610340565b91610a75565b61039e610142565b9182918261029e565b0390f35b610148565b60ff1690565b6103bf906103b0565b9052565b91906103d6905f602085019401906103b6565b565b34610408576103e8366004610150565b6104046103f3610ac7565b6103fb610142565b918291826103c3565b0390f35b610148565b3461043e5761043a61042961042336600461025f565b90610b2c565b610431610142565b9182918261029e565b0390f35b610148565b9060208282031261045c57610459915f01610250565b90565b61014c565b5f0190565b346104945761047e610479366004610443565b610b7a565b610486610142565b8061049081610461565b0390f35b610148565b906020828203126104b2576104af915f0161022a565b90565b61014c565b346104e7576104e36104d26104cd366004610499565b610b8d565b6104da610142565b918291826102f6565b0390f35b610148565b3461051a576104fc366004610150565b610504610bfb565b61050c610142565b8061051681610461565b0390f35b610148565b3461054e5761053861053236600461025f565b90610c05565b610540610142565b8061054a81610461565b0390f35b610148565b90565b61056a61056561056f926101ff565b610553565b6101ff565b90565b61057b90610556565b90565b61058790610572565b90565b906105949061057e565b5f5260205260405f2090565b1c90565b90565b6105b79060086105bc93026105a0565b6105a4565b90565b906105ca91546105a7565b90565b6105e3906105de6007915f9261058a565b6105bf565b90565b34610616576106126106016105fc366004610499565b6105cd565b610609610142565b918291826102f6565b0390f35b610148565b6106249061020a565b9052565b919061063b905f6020850194019061061b565b565b3461066d5761064d366004610150565b610669610658610c54565b610660610142565b91829182610628565b0390f35b610148565b346106a257610682366004610150565b61069e61068d610c6a565b610695610142565b918291826101b2565b0390f35b610148565b346106d8576106d46106c36106bd36600461025f565b90610ca5565b6106cb610142565b9182918261029e565b0390f35b610148565b3461070e5761070a6106f96106f336600461025f565b90610cf3565b610701610142565b9182918261029e565b0390f35b610148565b61071c816103b0565b0361072357565b5f80fd5b9050359061073482610713565b565b90565b61074281610736565b0361074957565b5f80fd5b9050359061075a82610739565b565b60e0818303126107c757610772825f830161022a565b92610780836020840161022a565b9261078e8160408501610250565b9261079c8260608301610250565b926107c46107ad8460808501610727565b936107bb8160a0860161074d565b9360c00161074d565b90565b61014c565b34610801576107eb6107df36600461075c565b959490949391936111c5565b6107f3610142565b806107fd81610461565b0390f35b610148565b919060408382031261082e578061082261082b925f860161022a565b9360200161022a565b90565b61014c565b346108645761086061084f610849366004610806565b90611439565b610857610142565b918291826102f6565b0390f35b610148565b346108975761088161087c366004610499565b61154c565b610889610142565b8061089381610461565b0390f35b610148565b5f80fd5b606090565b634e487b7160e01b5f52602260045260245ffd5b90600160028304921680156108d9575b60208310146108d457565b6108a5565b91607f16916108c9565b60209181520190565b5f5260205f2090565b905f929180549061090f610908836108b9565b80946108e3565b916001811690815f14610966575060011461092a575b505050565b61093791929394506108ec565b915f925b81841061094e57505001905f8080610925565b6001816020929593955484860152019101929061093b565b92949550505060ff19168252151560200201905f8080610925565b9061098b916108f5565b90565b634e487b7160e01b5f52604160045260245ffd5b906109ac90610177565b810190811067ffffffffffffffff8211176109c657604052565b61098e565b906109eb6109e4926109db610142565b93848092610981565b03836109a2565b565b6109f6906109cb565b90565b610a016108a0565b50610a0c60036109ed565b90565b5f90565b610a3091610a1f610a0f565b50610a28611557565b919091611564565b600190565b5f90565b5f1c90565b610a4a610a4f91610a39565b6105a4565b90565b610a5c9054610a3e565b90565b610a67610a35565b50610a726002610a52565b90565b91610a9f92610a82610a0f565b50610a97610a8e611557565b829084916115b4565b919091611640565b600190565b5f90565b90565b610abf610aba610ac492610aa8565b610553565b6103b0565b90565b610acf610aa4565b50610ada6012610aab565b90565b90610ae79061057e565b5f5260205260405f2090565b634e487b7160e01b5f52601160045260245ffd5b610b16610b1c91939293610239565b92610239565b8201809211610b2757565b610af3565b90610b7591610b39610a0f565b50610b6f610b45611557565b92610b6a610b6584610b606001610b5a611557565b90610add565b61058a565b610a52565b610b07565b91611564565b600190565b610b8b90610b86611557565b6116dd565b565b610ba3610ba891610b9c610a35565b505f61058a565b610a52565b90565b610bb36117bd565b610bbb610be8565b565b90565b610bd4610bcf610bd992610bbd565b610553565b6101ff565b90565b610be590610bc0565b90565b610bf9610bf45f610bdc565b611827565b565b610c03610bab565b565b90610c2291610c1d81610c16611557565b84916115b4565b6116dd565b565b5f90565b60018060a01b031690565b610c3f610c4491610a39565b610c28565b90565b610c519054610c33565b90565b610c5c610c24565b50610c676008610c47565b90565b610c726108a0565b50610c7d60046109ed565b90565b610c8f610c9591939293610239565b92610239565b8203918211610ca057565b610af3565b90610cee91610cb2610a0f565b50610ce8610cbe611557565b92610ce3610cde84610cd96001610cd3611557565b90610add565b61058a565b610a52565b610c80565b91611564565b600190565b610d1091610cff610a0f565b50610d08611557565b919091611640565b600190565b90565b610d24610d2991610a39565b610d15565b90565b610d369054610d18565b90565b90565b60209181520190565b5f5260205f2090565b905f9291805490610d68610d61836108b9565b8094610d3c565b916001811690815f14610dbf5750600114610d83575b505050565b610d909192939450610d45565b915f925b818410610da757505001905f8080610d7e565b60018160209295939554848601520191019290610d94565b92949550505060ff19168252151560200201905f8080610d7e565b90610de491610d4e565b90565b90610e07610e0092610df7610142565b93848092610dda565b03836109a2565b565b610e1290610de7565b90565b60200190565b5190565b610e2890610572565b90565b610e3490610736565b9052565b610e6d610e7494610e63606094989795610e59608086019a5f870190610e2b565b6020850190610e2b565b60408301906102e9565b019061061b565b565b90565b5f1b90565b610e92610e8d610e9792610e76565b610e79565b610736565b90565b610ebb7761509141b5b561d28b9c1c20f753f376ab73dc0000000000610e7e565b90565b610ec790610239565b5f198114610ed55760010190565b610af3565b90610ee65f1991610e79565b9181191691161790565b610f04610eff610f0992610239565b610553565b610239565b90565b90565b90610f24610f1f610f2b92610ef0565b610f0c565b8254610eda565b9055565b9194610f77610f8192989795610f6d60a096610f63610f889a610f5960c08a019e5f8b0190610e2b565b602089019061061b565b604087019061061b565b60608501906102e9565b60808301906102e9565b01906102e9565b565b905090565b5f61190160f01b910152565b610fa760028092610f8a565b610fb081610f8f565b0190565b90565b610fc3610fc891610736565b610fb4565b9052565b6020809392610fe7610fe0610fef94610f9b565b8092610fb7565b018092610fb7565b0190565b61102861102f9461101e606094989795611014608086019a5f870190610e2b565b60208501906103b6565b6040830190610e2b565b0190610e2b565b565b611039610142565b3d5f823e3d90fd5b5f7f45524332303a3a7065726d69743a20696e76616c6964207369676e6174757265910152565b61107460208092610163565b61107d81611041565b0190565b6110969060208101905f818303910152611068565b90565b156110a057565b6110a8610142565b62461bcd60e51b8152806110be60048201611081565b0390fd5b5f7f45524332303a3a7065726d69743a20756e617574686f72697a65640000000000910152565b6110f6601b602092610163565b6110ff816110c2565b0190565b6111189060208101905f8183039101526110e9565b90565b1561112257565b61112a610142565b62461bcd60e51b81528061114060048201611103565b0390fd5b5f7f45524332303a3a7065726d69743a207369676e61747572652065787069726564910152565b61117760208092610163565b61118081611144565b0190565b6111999060208101905f81830391015261116b565b90565b156111a357565b6111ab610142565b62461bcd60e51b8152806111c160048201611184565b0390fd5b93948295859383986111d76005610d2c565b6112386111ec6111e76003610d39565b610e09565b6111fe6111f882610e1b565b91610e15565b209161122961120b611888565b61121430610e1f565b9061121d610142565b95869460208601610e38565b602082018103825203826109a2565b61124a61124482610e1b565b91610e15565b20611253610a0f565b5061126a61125f610e9a565b60231c33141561028c565b6112e6575b50509350505050611296915061129161128a60018590610add565b869061058a565b610f0f565b9190916112e16112cf6112c97f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259361057e565b9361057e565b936112d8610142565b918291826102f6565b0390a3565b61138b5f966113536020996113456113b1978d6113036006610d2c565b9361131281979391600761058a565b61132e61131e82610a52565b9161132883610ebe565b90610f0f565b9192611338610142565b9760209689978801610f2f565b8b82018103825203826109a2565b61136561135f82610e1b565b91610e15565b209161137d611372610142565b9384928b8401610fcc565b8982018103825203826109a2565b61139d61139782610e1b565b91610e15565b2092936113a8610142565b94859485610ff3565b838052039060015afa15611434576114279061140d6113d05f51610e79565b6113f5816113ee6113e86113e35f610bdc565b61020a565b9161020a565b1415611099565b6114076114018661020a565b9161020a565b1461111b565b61142061141a4292610239565b91610239565b111561119c565b5f8184828086818061126f565b611031565b61145e916114546114599261144c610a35565b506001610add565b61058a565b610a52565b90565b6114729061146d6117bd565b61151c565b565b60207f6464726573730000000000000000000000000000000000000000000000000000917f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201520152565b6114ce6026604092610163565b6114d781611474565b0190565b6114f09060208101905f8183039101526114c1565b90565b156114fa57565b611502610142565b62461bcd60e51b815280611518600482016114db565b0390fd5b61154a906115458161153e6115386115335f610bdc565b61020a565b9161020a565b14156114f3565b611827565b565b61155590611461565b565b61155f610c24565b503390565b91611572929160019261189e565b565b60409061159d6115a4949695939661159360608401985f85019061061b565b60208301906102e9565b01906102e9565b565b906115b19103610239565b90565b9291926115c2818390611439565b90816115d76115d15f19610239565b91610239565b036115e4575b5050509050565b816115f76115f187610239565b91610239565b1061161d57611614939461160c9193926115a6565b905f9261189e565b805f80806115dd565b5061163c849291925f938493637dc7a0d960e11b855260048501611574565b0390fd5b918261165c6116566116515f610bdc565b61020a565b9161020a565b146116b6578161167c6116766116715f610bdc565b61020a565b9161020a565b1461168f5761168d929190916119bb565b565b6116b261169b5f610bdc565b5f91829163ec442f0560e01b835260048301610628565b0390fd5b6116d96116c25f610bdc565b5f918291634b637e8f60e11b835260048301610628565b0390fd5b90816116f96116f36116ee5f610bdc565b61020a565b9161020a565b1461171557611713919061170c5f610bdc565b90916119bb565b565b6117386117215f610bdc565b5f918291634b637e8f60e11b835260048301610628565b0390fd5b5f7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572910152565b61176f60208092610163565b6117788161173c565b0190565b6117919060208101905f818303910152611763565b90565b1561179b57565b6117a3610142565b62461bcd60e51b8152806117b96004820161177c565b0390fd5b6117e76117c8610c54565b6117e16117db6117d6611557565b61020a565b9161020a565b14611794565b565b906117fa60018060a01b0391610e79565b9181191691161790565b90565b9061181c6118176118239261057e565b611804565b82546117e9565b9055565b6118316008610c47565b61183c826008611807565b9061187061186a7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361057e565b9161057e565b91611879610142565b8061188381610461565b0390a3565b611890610a35565b50611899610a35565b504690565b9092816118bb6118b56118b05f610bdc565b61020a565b9161020a565b1461198657836118db6118d56118d05f610bdc565b61020a565b9161020a565b1461195f576118ff836118fa6118f360018690610add565b879061058a565b610f0f565b611909575b505050565b91909161195461194261193c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259361057e565b9361057e565b9361194b610142565b918291826102f6565b0390a35f8080611904565b61198261196b5f610bdc565b5f918291634a1406b160e11b835260048301610628565b0390fd5b6119a96119925f610bdc565b5f91829163e602df0560e01b835260048301610628565b0390fd5b906119b89101610239565b90565b919091806119d96119d36119ce5f610bdc565b61020a565b9161020a565b145f14611aba576119fd6119f6836119f16002610a52565b610b07565b6002610f0f565b5b82611a19611a13611a0e5f610bdc565b61020a565b9161020a565b145f14611a8e57611a3d611a3683611a316002610a52565b6115a6565b6002610f0f565b5b919091611a89611a77611a717fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9361057e565b9361057e565b93611a80610142565b918291826102f6565b0390a3565b611ab582611aaf611aa05f879061058a565b91611aaa83610a52565b6119ad565b90610f0f565b611a3e565b611acd611ac85f839061058a565b610a52565b80611ae0611ada85610239565b91610239565b10611b0857611af3611b039184906115a6565b611afe5f849061058a565b610f0f565b6119fe565b90611b269091925f93849363391434e360e21b855260048501611574565b0390fdfea26469706673582212203c3c3f827cb71e228332e8296e1fc6278825ce65ae6128474ccd2a2d10cbf1b664736f6c634300081a0033

Deployed Bytecode

0x60806040526004361015610013575b61089c565b61001d5f3561013c565b806306fdde0314610137578063095ea7b31461013257806318160ddd1461012d57806323b872dd14610128578063313ce56714610123578063395093511461011e57806342966c681461011957806370a0823114610114578063715018a61461010f57806379cc67901461010a5780637ecebe00146101055780638da5cb5b1461010057806395d89b41146100fb578063a457c2d7146100f6578063a9059cbb146100f1578063d505accf146100ec578063dd62ed3e146100e75763f2fde38b0361000e57610869565b610833565b6107cc565b6106dd565b6106a7565b610672565b61063d565b6105e6565b61051f565b6104ec565b6104b7565b610466565b61040d565b6103d8565b61037a565b61030b565b6102b3565b6101ca565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f91031261015a57565b61014c565b5190565b60209181520190565b90825f9392825e0152565b601f801991011690565b6101a06101a96020936101ae936101978161015f565b93848093610163565b9586910161016c565b610177565b0190565b6101c79160208201915f818403910152610181565b90565b346101fa576101da366004610150565b6101f66101e56109f9565b6101ed610142565b918291826101b2565b0390f35b610148565b60018060a01b031690565b610213906101ff565b90565b61021f8161020a565b0361022657565b5f80fd5b9050359061023782610216565b565b90565b61024581610239565b0361024c57565b5f80fd5b9050359061025d8261023c565b565b9190604083820312610287578061027b610284925f860161022a565b93602001610250565b90565b61014c565b151590565b61029a9061028c565b9052565b91906102b1905f60208501940190610291565b565b346102e4576102e06102cf6102c936600461025f565b90610a13565b6102d7610142565b9182918261029e565b0390f35b610148565b6102f290610239565b9052565b9190610309905f602085019401906102e9565b565b3461033b5761031b366004610150565b610337610326610a5f565b61032e610142565b918291826102f6565b0390f35b610148565b90916060828403126103755761037261035b845f850161022a565b93610369816020860161022a565b93604001610250565b90565b61014c565b346103ab576103a7610396610390366004610340565b91610a75565b61039e610142565b9182918261029e565b0390f35b610148565b60ff1690565b6103bf906103b0565b9052565b91906103d6905f602085019401906103b6565b565b34610408576103e8366004610150565b6104046103f3610ac7565b6103fb610142565b918291826103c3565b0390f35b610148565b3461043e5761043a61042961042336600461025f565b90610b2c565b610431610142565b9182918261029e565b0390f35b610148565b9060208282031261045c57610459915f01610250565b90565b61014c565b5f0190565b346104945761047e610479366004610443565b610b7a565b610486610142565b8061049081610461565b0390f35b610148565b906020828203126104b2576104af915f0161022a565b90565b61014c565b346104e7576104e36104d26104cd366004610499565b610b8d565b6104da610142565b918291826102f6565b0390f35b610148565b3461051a576104fc366004610150565b610504610bfb565b61050c610142565b8061051681610461565b0390f35b610148565b3461054e5761053861053236600461025f565b90610c05565b610540610142565b8061054a81610461565b0390f35b610148565b90565b61056a61056561056f926101ff565b610553565b6101ff565b90565b61057b90610556565b90565b61058790610572565b90565b906105949061057e565b5f5260205260405f2090565b1c90565b90565b6105b79060086105bc93026105a0565b6105a4565b90565b906105ca91546105a7565b90565b6105e3906105de6007915f9261058a565b6105bf565b90565b34610616576106126106016105fc366004610499565b6105cd565b610609610142565b918291826102f6565b0390f35b610148565b6106249061020a565b9052565b919061063b905f6020850194019061061b565b565b3461066d5761064d366004610150565b610669610658610c54565b610660610142565b91829182610628565b0390f35b610148565b346106a257610682366004610150565b61069e61068d610c6a565b610695610142565b918291826101b2565b0390f35b610148565b346106d8576106d46106c36106bd36600461025f565b90610ca5565b6106cb610142565b9182918261029e565b0390f35b610148565b3461070e5761070a6106f96106f336600461025f565b90610cf3565b610701610142565b9182918261029e565b0390f35b610148565b61071c816103b0565b0361072357565b5f80fd5b9050359061073482610713565b565b90565b61074281610736565b0361074957565b5f80fd5b9050359061075a82610739565b565b60e0818303126107c757610772825f830161022a565b92610780836020840161022a565b9261078e8160408501610250565b9261079c8260608301610250565b926107c46107ad8460808501610727565b936107bb8160a0860161074d565b9360c00161074d565b90565b61014c565b34610801576107eb6107df36600461075c565b959490949391936111c5565b6107f3610142565b806107fd81610461565b0390f35b610148565b919060408382031261082e578061082261082b925f860161022a565b9360200161022a565b90565b61014c565b346108645761086061084f610849366004610806565b90611439565b610857610142565b918291826102f6565b0390f35b610148565b346108975761088161087c366004610499565b61154c565b610889610142565b8061089381610461565b0390f35b610148565b5f80fd5b606090565b634e487b7160e01b5f52602260045260245ffd5b90600160028304921680156108d9575b60208310146108d457565b6108a5565b91607f16916108c9565b60209181520190565b5f5260205f2090565b905f929180549061090f610908836108b9565b80946108e3565b916001811690815f14610966575060011461092a575b505050565b61093791929394506108ec565b915f925b81841061094e57505001905f8080610925565b6001816020929593955484860152019101929061093b565b92949550505060ff19168252151560200201905f8080610925565b9061098b916108f5565b90565b634e487b7160e01b5f52604160045260245ffd5b906109ac90610177565b810190811067ffffffffffffffff8211176109c657604052565b61098e565b906109eb6109e4926109db610142565b93848092610981565b03836109a2565b565b6109f6906109cb565b90565b610a016108a0565b50610a0c60036109ed565b90565b5f90565b610a3091610a1f610a0f565b50610a28611557565b919091611564565b600190565b5f90565b5f1c90565b610a4a610a4f91610a39565b6105a4565b90565b610a5c9054610a3e565b90565b610a67610a35565b50610a726002610a52565b90565b91610a9f92610a82610a0f565b50610a97610a8e611557565b829084916115b4565b919091611640565b600190565b5f90565b90565b610abf610aba610ac492610aa8565b610553565b6103b0565b90565b610acf610aa4565b50610ada6012610aab565b90565b90610ae79061057e565b5f5260205260405f2090565b634e487b7160e01b5f52601160045260245ffd5b610b16610b1c91939293610239565b92610239565b8201809211610b2757565b610af3565b90610b7591610b39610a0f565b50610b6f610b45611557565b92610b6a610b6584610b606001610b5a611557565b90610add565b61058a565b610a52565b610b07565b91611564565b600190565b610b8b90610b86611557565b6116dd565b565b610ba3610ba891610b9c610a35565b505f61058a565b610a52565b90565b610bb36117bd565b610bbb610be8565b565b90565b610bd4610bcf610bd992610bbd565b610553565b6101ff565b90565b610be590610bc0565b90565b610bf9610bf45f610bdc565b611827565b565b610c03610bab565b565b90610c2291610c1d81610c16611557565b84916115b4565b6116dd565b565b5f90565b60018060a01b031690565b610c3f610c4491610a39565b610c28565b90565b610c519054610c33565b90565b610c5c610c24565b50610c676008610c47565b90565b610c726108a0565b50610c7d60046109ed565b90565b610c8f610c9591939293610239565b92610239565b8203918211610ca057565b610af3565b90610cee91610cb2610a0f565b50610ce8610cbe611557565b92610ce3610cde84610cd96001610cd3611557565b90610add565b61058a565b610a52565b610c80565b91611564565b600190565b610d1091610cff610a0f565b50610d08611557565b919091611640565b600190565b90565b610d24610d2991610a39565b610d15565b90565b610d369054610d18565b90565b90565b60209181520190565b5f5260205f2090565b905f9291805490610d68610d61836108b9565b8094610d3c565b916001811690815f14610dbf5750600114610d83575b505050565b610d909192939450610d45565b915f925b818410610da757505001905f8080610d7e565b60018160209295939554848601520191019290610d94565b92949550505060ff19168252151560200201905f8080610d7e565b90610de491610d4e565b90565b90610e07610e0092610df7610142565b93848092610dda565b03836109a2565b565b610e1290610de7565b90565b60200190565b5190565b610e2890610572565b90565b610e3490610736565b9052565b610e6d610e7494610e63606094989795610e59608086019a5f870190610e2b565b6020850190610e2b565b60408301906102e9565b019061061b565b565b90565b5f1b90565b610e92610e8d610e9792610e76565b610e79565b610736565b90565b610ebb7761509141b5b561d28b9c1c20f753f376ab73dc0000000000610e7e565b90565b610ec790610239565b5f198114610ed55760010190565b610af3565b90610ee65f1991610e79565b9181191691161790565b610f04610eff610f0992610239565b610553565b610239565b90565b90565b90610f24610f1f610f2b92610ef0565b610f0c565b8254610eda565b9055565b9194610f77610f8192989795610f6d60a096610f63610f889a610f5960c08a019e5f8b0190610e2b565b602089019061061b565b604087019061061b565b60608501906102e9565b60808301906102e9565b01906102e9565b565b905090565b5f61190160f01b910152565b610fa760028092610f8a565b610fb081610f8f565b0190565b90565b610fc3610fc891610736565b610fb4565b9052565b6020809392610fe7610fe0610fef94610f9b565b8092610fb7565b018092610fb7565b0190565b61102861102f9461101e606094989795611014608086019a5f870190610e2b565b60208501906103b6565b6040830190610e2b565b0190610e2b565b565b611039610142565b3d5f823e3d90fd5b5f7f45524332303a3a7065726d69743a20696e76616c6964207369676e6174757265910152565b61107460208092610163565b61107d81611041565b0190565b6110969060208101905f818303910152611068565b90565b156110a057565b6110a8610142565b62461bcd60e51b8152806110be60048201611081565b0390fd5b5f7f45524332303a3a7065726d69743a20756e617574686f72697a65640000000000910152565b6110f6601b602092610163565b6110ff816110c2565b0190565b6111189060208101905f8183039101526110e9565b90565b1561112257565b61112a610142565b62461bcd60e51b81528061114060048201611103565b0390fd5b5f7f45524332303a3a7065726d69743a207369676e61747572652065787069726564910152565b61117760208092610163565b61118081611144565b0190565b6111999060208101905f81830391015261116b565b90565b156111a357565b6111ab610142565b62461bcd60e51b8152806111c160048201611184565b0390fd5b93948295859383986111d76005610d2c565b6112386111ec6111e76003610d39565b610e09565b6111fe6111f882610e1b565b91610e15565b209161122961120b611888565b61121430610e1f565b9061121d610142565b95869460208601610e38565b602082018103825203826109a2565b61124a61124482610e1b565b91610e15565b20611253610a0f565b5061126a61125f610e9a565b60231c33141561028c565b6112e6575b50509350505050611296915061129161128a60018590610add565b869061058a565b610f0f565b9190916112e16112cf6112c97f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259361057e565b9361057e565b936112d8610142565b918291826102f6565b0390a3565b61138b5f966113536020996113456113b1978d6113036006610d2c565b9361131281979391600761058a565b61132e61131e82610a52565b9161132883610ebe565b90610f0f565b9192611338610142565b9760209689978801610f2f565b8b82018103825203826109a2565b61136561135f82610e1b565b91610e15565b209161137d611372610142565b9384928b8401610fcc565b8982018103825203826109a2565b61139d61139782610e1b565b91610e15565b2092936113a8610142565b94859485610ff3565b838052039060015afa15611434576114279061140d6113d05f51610e79565b6113f5816113ee6113e86113e35f610bdc565b61020a565b9161020a565b1415611099565b6114076114018661020a565b9161020a565b1461111b565b61142061141a4292610239565b91610239565b111561119c565b5f8184828086818061126f565b611031565b61145e916114546114599261144c610a35565b506001610add565b61058a565b610a52565b90565b6114729061146d6117bd565b61151c565b565b60207f6464726573730000000000000000000000000000000000000000000000000000917f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201520152565b6114ce6026604092610163565b6114d781611474565b0190565b6114f09060208101905f8183039101526114c1565b90565b156114fa57565b611502610142565b62461bcd60e51b815280611518600482016114db565b0390fd5b61154a906115458161153e6115386115335f610bdc565b61020a565b9161020a565b14156114f3565b611827565b565b61155590611461565b565b61155f610c24565b503390565b91611572929160019261189e565b565b60409061159d6115a4949695939661159360608401985f85019061061b565b60208301906102e9565b01906102e9565b565b906115b19103610239565b90565b9291926115c2818390611439565b90816115d76115d15f19610239565b91610239565b036115e4575b5050509050565b816115f76115f187610239565b91610239565b1061161d57611614939461160c9193926115a6565b905f9261189e565b805f80806115dd565b5061163c849291925f938493637dc7a0d960e11b855260048501611574565b0390fd5b918261165c6116566116515f610bdc565b61020a565b9161020a565b146116b6578161167c6116766116715f610bdc565b61020a565b9161020a565b1461168f5761168d929190916119bb565b565b6116b261169b5f610bdc565b5f91829163ec442f0560e01b835260048301610628565b0390fd5b6116d96116c25f610bdc565b5f918291634b637e8f60e11b835260048301610628565b0390fd5b90816116f96116f36116ee5f610bdc565b61020a565b9161020a565b1461171557611713919061170c5f610bdc565b90916119bb565b565b6117386117215f610bdc565b5f918291634b637e8f60e11b835260048301610628565b0390fd5b5f7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572910152565b61176f60208092610163565b6117788161173c565b0190565b6117919060208101905f818303910152611763565b90565b1561179b57565b6117a3610142565b62461bcd60e51b8152806117b96004820161177c565b0390fd5b6117e76117c8610c54565b6117e16117db6117d6611557565b61020a565b9161020a565b14611794565b565b906117fa60018060a01b0391610e79565b9181191691161790565b90565b9061181c6118176118239261057e565b611804565b82546117e9565b9055565b6118316008610c47565b61183c826008611807565b9061187061186a7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361057e565b9161057e565b91611879610142565b8061188381610461565b0390a3565b611890610a35565b50611899610a35565b504690565b9092816118bb6118b56118b05f610bdc565b61020a565b9161020a565b1461198657836118db6118d56118d05f610bdc565b61020a565b9161020a565b1461195f576118ff836118fa6118f360018690610add565b879061058a565b610f0f565b611909575b505050565b91909161195461194261193c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259361057e565b9361057e565b9361194b610142565b918291826102f6565b0390a35f8080611904565b61198261196b5f610bdc565b5f918291634a1406b160e11b835260048301610628565b0390fd5b6119a96119925f610bdc565b5f91829163e602df0560e01b835260048301610628565b0390fd5b906119b89101610239565b90565b919091806119d96119d36119ce5f610bdc565b61020a565b9161020a565b145f14611aba576119fd6119f6836119f16002610a52565b610b07565b6002610f0f565b5b82611a19611a13611a0e5f610bdc565b61020a565b9161020a565b145f14611a8e57611a3d611a3683611a316002610a52565b6115a6565b6002610f0f565b5b919091611a89611a77611a717fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9361057e565b9361057e565b93611a80610142565b918291826102f6565b0390a3565b611ab582611aaf611aa05f879061058a565b91611aaa83610a52565b6119ad565b90610f0f565b611a3e565b611acd611ac85f839061058a565b610a52565b80611ae0611ada85610239565b91610239565b10611b0857611af3611b039184906115a6565b611afe5f849061058a565b610f0f565b6119fe565b90611b269091925f93849363391434e360e21b855260048501611574565b0390fdfea26469706673582212203c3c3f827cb71e228332e8296e1fc6278825ce65ae6128474ccd2a2d10cbf1b664736f6c634300081a0033

[ 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.