ETH Price: $2,955.01 (+1.46%)
 

Overview

Max Total Supply

6,493,913,241.452897239826442054 WNK

Holders

19,270 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (-0.04%)

Onchain Market Cap

$252,483.35

Circulating Supply Market Cap

$251,463.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
nouga.base.eth
Balance
9,219 WNK

Value
$0.36 ( ~0.000121827130295284 ETH) [0.0001%]
0x943fad332d266b1b8a9eb56aa62fc8ccd3a2bd19
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Winkyverse is a blockchain-powered gamified learning ecosystem combining AI, immersive education, and decentralized incentives. Users access interactive learning experiences, earn verifiable on-chain certifications, and engage through a Telegram app with incentive model.

Market

Volume (24H):$2.80
Market Capitalization:$251,463.00
Circulating Supply:6,467,186,637.00 WNK
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
Winkies

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2025-02-20
*/

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


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

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC-20 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/utils/Context.sol


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

pragma solidity ^0.8.20;

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

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


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

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 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);
}

/**
 * @dev Standard ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

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

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

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

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

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

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @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.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

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

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

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

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

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

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

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


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

pragma solidity ^0.8.20;





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

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

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

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


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

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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: contracts/Winkies.sol


pragma solidity ^0.8.28;



interface IFees {
    /**
     * @dev Enum representing possible statuses of an address.
     */
    enum Status { UNREGISTERED, WHITELISTED, DEX }

    /**
     * @dev Emitted when `fee` is updated
     */
    event FeeUpdated(uint256 oldFee, uint256 fee, bool isSellFee);

    /**
     * @dev Emitted when `burn` is updated
     */
    event BurnUpdated(uint256 oldBurn, uint256 burn);

    /**
     * @dev Emitted when the treasury address is updated to `treasury`
     */
    event TreasuryUpdated(address indexed oldTreasury, address indexed treasury);
    
    /**
     * @dev Emitted when `account` `status` is updated
     */
    event StatusUpdated(address indexed account, Status status);

    /**
     * @dev Sets the buy fee to `_buyFee`.
     *
     * Emits a {FeeUpdated} event.
     */
    function setBuyFee(uint256 _buyFee) external;

    /**
     * @dev Sets the sell fee to `_sellFee`.
     *
     * Emits a {FeeUpdated} event.
     */
    function setSellFee(uint256 _sellFee) external;

    /**
     * @dev Sets the burn percentage to `_burnPercentage`.
     *
     * Emits a {BurnUpdated} event.
     */
    function setBurn(uint256 _burnPercentage) external;
    
    /**
     * @dev Sets the treasury wallet to `_treasury`.
     *
     * Emits a {TreasuryUpdated} event.
     */
    function setTreasury(address _treasury) external;

    /**
     * @dev Sets the status of the address `_addr` to DEX.
     *
     * Emits a {StatusUpdated} event.
     */
    function registerDEX(address _addr) external;
    /**
     * @dev Sets the status of the address `_addr` to WHITELISTED.
     * An address with WHITELISTED status does not pay any fee.
     *
     * Emits a {StatusUpdated} event.
     */
    function registerWhitelist(address _addr) external;
    /**
     * @dev Sets the status of the address `_addr` to UNREGISTERED.
     *
     * Emits a {StatusUpdated} event.
     */
    function unregister(address _addr) external;
}

contract Winkies is ERC20, IFees, Ownable {
    uint256 public constant MAX_FEE = 10;
    uint256 public buyFee = 2;  // 2% taxes on buy
    uint256 public sellFee = 2; // 2% taxes on sell
    uint256 public burnPercentage = 1; // 1% burn on sell
    address public treasury;
    mapping(address => Status) public registeredAddress;
    
    constructor(address _treasury) 
    Ownable(_msgSender())
    ERC20("Winkies", "WNK") {
        require(_treasury != address(0), "Treasury cannot be zero address");
        _mint(_msgSender(), 6500000000 * 1e18);
        treasury = _treasury;
        registeredAddress[_msgSender()] = Status.WHITELISTED;
        registeredAddress[treasury] = Status.WHITELISTED;
        registeredAddress[address(this)] = Status.WHITELISTED;
    }

    /**
     * @dev Calculates and applies fees for a transaction between `sender` and `recipient` 
     * based on whitelist and DEX status.
     * 
     * This internal function is called in `transfer` and `transferFrom`.
     */
    function _applyFees(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if (registeredAddress[sender] == Status.WHITELISTED || registeredAddress[recipient] == Status.WHITELISTED) {
            return amount;
        }
        uint256 fee = 0;
        uint256 burn = 0;
        if (registeredAddress[recipient] == Status.DEX) {
            fee = (amount * sellFee) / 100;
            burn = (amount * burnPercentage) / 100;
        } else if (registeredAddress[sender] == Status.DEX) {
            fee = (amount * buyFee) / 100;
        }
        if (fee > 0) {
            super._transfer(sender, treasury, fee);
            amount -= fee;
        }
        if (burn > 0) {
            super._burn(sender, burn);
            amount -= burn;
        }
        return amount;
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Fees are applied if the transaction is sent to or from a DEX.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `value`.
     */
    function transfer(address to, uint256 value) public override returns (bool) {
        address owner = _msgSender();
        value = _applyFees(owner, to, value);
        super._transfer(owner, to, 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}.
     * Fees are applied if the transaction is sent to or from a DEX.
     *
     * 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 override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        value = _applyFees(from, to, value); 
        super._transfer(from, to, value);
        return true;
    }

    /**
     * @dev See {IFees-registerDEX}.
     *
     * Requirements:
     *
     * - `_addr` cannot be the zero address.
     * - `_addr` is not registered as DEX
     */
    function registerDEX(address _addr) external onlyOwner {
        require(_addr != address(0), "DEX cannot be zero address");
        require(registeredAddress[_addr] != Status.DEX, "_addr is already registered as DEX");
        registeredAddress[_addr] = Status.DEX;
        emit StatusUpdated(_addr, Status.DEX);
    }

    /**
     * @dev See {IFees-registerWhitelist}.
     *
     * Requirements:
     *
     * - `_addr` cannot be the zero address.
     * - `_addr` is not whitelisted
     */
    function registerWhitelist(address _addr) external onlyOwner {
        require(_addr != address(0), "Cannot whitelist zero address");
        require(registeredAddress[_addr] != Status.WHITELISTED, "_addr is already whitelisted");
        registeredAddress[_addr] = Status.WHITELISTED;
        emit StatusUpdated(_addr, Status.WHITELISTED);
    }

    /**
     * @dev See {IFees-unregister}.
     *
     * Requirements:
     *
     * - `_addr` cannot be the zero address.
     * - `_addr` is registered.
     */
    function unregister(address _addr) external onlyOwner {
        require(_addr != address(0), "Cannot unregister zero address");
        require(registeredAddress[_addr] != Status.UNREGISTERED, "_addr is not registered");
        registeredAddress[_addr] = Status.UNREGISTERED;
        emit StatusUpdated(_addr, Status.UNREGISTERED);
    }

    /**
     * @dev See {IFees-setBuyFee}.
     *
     * Requirements:
     *
     * - _buyFee cannot exceed 10%
     * - _buyFee must be different from previous value
     */
    function setBuyFee(uint256 _buyFee) external onlyOwner {
        require(_buyFee <= MAX_FEE, "buy fee cannot exceed 10%");
        require(_buyFee != buyFee, "_buyFee must be different from previous value");
        uint256 oldBuyFee = buyFee;
        buyFee = _buyFee;
        emit FeeUpdated(oldBuyFee, buyFee, false);
    }

    /**
     * @dev See {IFees-setSellFee}.
     *
     * Requirements:
     *
     * - _sellFee cannot exceed 10%
     * - _sellFee must be different from previous value
     */
    function setSellFee(uint256 _sellFee) external onlyOwner {
        require(_sellFee <= MAX_FEE, "sell fee cannot exceed 10%");
        require(_sellFee != sellFee, "_sellFee must be different from previous value");
        uint256 oldSellFee = sellFee;
        sellFee = _sellFee;
        emit FeeUpdated(oldSellFee, sellFee, true);
    }

    /**
     * @dev See {IFees-setBurn}.
     *
     * Requirements:
     *
     * - _burnPercentage cannot exceed 10%
     * - _burnPercentage must be different from previous value
     */
    function setBurn(uint256 _burnPercentage) external onlyOwner {
        require(_burnPercentage <= MAX_FEE, "Burn percentage cannot exceed 10%");
        require(_burnPercentage != burnPercentage, "_burnPercentage must be different from previous value");
        uint256 oldBurn = burnPercentage;
        burnPercentage = _burnPercentage;
        emit BurnUpdated(oldBurn, burnPercentage);
    }
    
    /**
     * @dev See {IFees-setTreasury}.
     *
     * Requirements:
     *
     * - `_treasury` cannot be the zero address.
     * - _treasury must be different from previous value
     */
    function setTreasury(address _treasury) external onlyOwner {
        require(_treasury != address(0), "Treasury cannot be zero address");
        require(_treasury != treasury, "_treasury must be different from previous address");
        address oldTreasury = treasury;
        treasury = _treasury;
        emit TreasuryUpdated(oldTreasury, _treasury);
    }

    /**
     * Requirements:
     *
     * - `_token` cannot be the zero address.
     * - _token cannot be this token
     */
    function recoverTokens(address _token) external onlyOwner {
        require(_token != address(0), "Token cannot be zero address");
        require(_token != address(this), "Cannot recover native token");
        uint256 balance = IERC20(_token).balanceOf(address(this));
        require(balance > 0, "No tokens to recover");
        IERC20(_token).transfer(_msgSender(), balance);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"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"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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":false,"internalType":"uint256","name":"oldBurn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"BurnUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isSellFee","type":"bool"}],"name":"FeeUpdated","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":"account","type":"address"},{"indexed":false,"internalType":"enum IFees.Status","name":"status","type":"uint8"}],"name":"StatusUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldTreasury","type":"address"},{"indexed":true,"internalType":"address","name":"treasury","type":"address"}],"name":"TreasuryUpdated","type":"event"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"registerDEX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"registerWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"registeredAddress","outputs":[{"internalType":"enum IFees.Status","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnPercentage","type":"uint256"}],"name":"setBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","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"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"unregister","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260026006556002600755600160085534801561001e575f5ffd5b506040516139253803806139258339818101604052810190610040919061075c565b61004e61039660201b60201c565b6040518060400160405280600781526020017f57696e6b696573000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f574e4b000000000000000000000000000000000000000000000000000000000081525081600390816100c991906109c4565b5080600490816100d991906109c4565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361014c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101439190610aa2565b60405180910390fd5b61015b8161039d60201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c190610b15565b60405180910390fd5b6101f36101db61039660201b60201c565b6b1500ac8a0ecb418be400000061046060201b60201c565b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a5f61024661039660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908360028111156102a05761029f610b33565b5b02179055506001600a5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083600281111561032657610325610b33565b5b02179055506001600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083600281111561038b5761038a610b33565b5b021790555050610c1d565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104d0575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016104c79190610aa2565b60405180910390fd5b6104e15f83836104e560201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610535578060025f8282546105299190610b8d565b92505081905550610603565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156105be578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016105b593929190610bcf565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361064a578060025f8282540392505081905550610694565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106f19190610c04565b60405180910390a3505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61072b82610702565b9050919050565b61073b81610721565b8114610745575f5ffd5b50565b5f8151905061075681610732565b92915050565b5f60208284031215610771576107706106fe565b5b5f61077e84828501610748565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061080257607f821691505b602082108103610815576108146107be565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026108777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261083c565b610881868361083c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6108c56108c06108bb84610899565b6108a2565b610899565b9050919050565b5f819050919050565b6108de836108ab565b6108f26108ea826108cc565b848454610848565b825550505050565b5f5f905090565b6109096108fa565b6109148184846108d5565b505050565b5b818110156109375761092c5f82610901565b60018101905061091a565b5050565b601f82111561097c5761094d8161081b565b6109568461082d565b81016020851015610965578190505b6109796109718561082d565b830182610919565b50505b505050565b5f82821c905092915050565b5f61099c5f1984600802610981565b1980831691505092915050565b5f6109b4838361098d565b9150826002028217905092915050565b6109cd82610787565b67ffffffffffffffff8111156109e6576109e5610791565b5b6109f082546107eb565b6109fb82828561093b565b5f60209050601f831160018114610a2c575f8415610a1a578287015190505b610a2485826109a9565b865550610a8b565b601f198416610a3a8661081b565b5f5b82811015610a6157848901518255600182019150602085019450602081019050610a3c565b86831015610a7e5784890151610a7a601f89168261098d565b8355505b6001600288020188555050505b505050505050565b610a9c81610721565b82525050565b5f602082019050610ab55f830184610a93565b92915050565b5f82825260208201905092915050565b7f54726561737572792063616e6e6f74206265207a65726f2061646472657373005f82015250565b5f610aff601f83610abb565b9150610b0a82610acb565b602082019050919050565b5f6020820190508181035f830152610b2c81610af3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b9782610899565b9150610ba283610899565b9250828201905080821115610bba57610bb9610b60565b5b92915050565b610bc981610899565b82525050565b5f606082019050610be25f830186610a93565b610bef6020830185610bc0565b610bfc6040830184610bc0565b949350505050565b5f602082019050610c175f830184610bc0565b92915050565b612cfb80610c2a5f395ff3fe608060405234801561000f575f5ffd5b506004361061018c575f3560e01c806370a08231116100dc578063a9059cbb11610095578063dd62ed3e1161006f578063dd62ed3e1461045c578063f01f20df1461048c578063f0f44260146104aa578063f2fde38b146104c65761018c565b8063a9059cbb146103de578063ad1def421461040e578063bc063e1a1461043e5761018c565b806370a0823114610330578063715018a6146103605780638b4cee081461036a5780638da5cb5b1461038657806395aad7b8146103a457806395d89b41146103c05761018c565b80632b14ca5611610149578063470624021161012357806347062402146102bc578063611f4a2b146102da57806361d027b3146102f657806366c4b782146103145761018c565b80632b14ca56146102645780632ec2c24614610282578063313ce5671461029e5761018c565b806306fdde0314610190578063095ea7b3146101ae5780630cc835a3146101de57806316114acd146101fa57806318160ddd1461021657806323b872dd14610234575b5f5ffd5b6101986104e2565b6040516101a59190611f09565b60405180910390f35b6101c860048036038101906101c39190611fba565b610572565b6040516101d59190612012565b60405180910390f35b6101f860048036038101906101f3919061202b565b610594565b005b610214600480360381019061020f9190612056565b610672565b005b61021e61089a565b60405161022b9190612090565b60405180910390f35b61024e600480360381019061024991906120a9565b6108a3565b60405161025b9190612012565b60405180910390f35b61026c6108de565b6040516102799190612090565b60405180910390f35b61029c60048036038101906102979190612056565b6108e4565b005b6102a6610abe565b6040516102b39190612114565b60405180910390f35b6102c4610ac6565b6040516102d19190612090565b60405180910390f35b6102f460048036038101906102ef9190612056565b610acc565b005b6102fe610ca9565b60405161030b919061213c565b60405180910390f35b61032e6004803603810190610329919061202b565b610cce565b005b61034a60048036038101906103459190612056565b610daa565b6040516103579190612090565b60405180910390f35b610368610def565b005b610384600480360381019061037f919061202b565b610e02565b005b61038e610ee1565b60405161039b919061213c565b60405180910390f35b6103be60048036038101906103b99190612056565b610f09565b005b6103c86110e5565b6040516103d59190611f09565b60405180910390f35b6103f860048036038101906103f39190611fba565b611175565b6040516104059190612012565b60405180910390f35b61042860048036038101906104239190612056565b6111a4565b60405161043591906121c8565b60405180910390f35b6104466111c1565b6040516104539190612090565b60405180910390f35b610476600480360381019061047191906121e1565b6111c6565b6040516104839190612090565b60405180910390f35b610494611248565b6040516104a19190612090565b60405180910390f35b6104c460048036038101906104bf9190612056565b61124e565b005b6104e060048036038101906104db9190612056565b611416565b005b6060600380546104f19061224c565b80601f016020809104026020016040519081016040528092919081815260200182805461051d9061224c565b80156105685780601f1061053f57610100808354040283529160200191610568565b820191905f5260205f20905b81548152906001019060200180831161054b57829003601f168201915b5050505050905090565b5f5f61057c61149a565b90506105898185856114a1565b600191505092915050565b61059c6114b3565b600a8111156105e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d7906122c6565b60405180910390fd5b6006548103610624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061b90612354565b60405180910390fd5b5f6006549050816006819055507f2049f695866222205424f7cf59a1f6f4ddfe053fff07778c6458dc0da485be2a816006545f60405161066693929190612372565b60405180910390a15050565b61067a6114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106df906123f1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074d90612459565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610790919061213c565b602060405180830381865afa1580156107ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cf919061248b565b90505f8111610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080a90612500565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61083761149a565b836040518363ffffffff1660e01b815260040161085592919061251e565b6020604051808303815f875af1158015610871573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610895919061256f565b505050565b5f600254905090565b5f5f6108ad61149a565b90506108ba85828561153a565b6108c58585856115cc565b92506108d285858561187f565b60019150509392505050565b60075481565b6108ec6114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361095a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610951906125e4565b60405180910390fd5b5f600281111561096d5761096c612155565b5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660028111156109c9576109c8612155565b5b03610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a009061264c565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690836002811115610a6857610a67612155565b5b02179055508073ffffffffffffffffffffffffffffffffffffffff167fa7cc6673952dd2140cd171b21cdf21825b0f34e690500ecf38ed0aeb006f356e5f604051610ab391906121c8565b60405180910390a250565b5f6012905090565b60065481565b610ad46114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b39906126b4565b60405180910390fd5b60016002811115610b5657610b55612155565b5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166002811115610bb257610bb1612155565b5b03610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be99061271c565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690836002811115610c5257610c51612155565b5b02179055508073ffffffffffffffffffffffffffffffffffffffff167fa7cc6673952dd2140cd171b21cdf21825b0f34e690500ecf38ed0aeb006f356e6001604051610c9e91906121c8565b60405180910390a250565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cd66114b3565b600a811115610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d11906127aa565b60405180910390fd5b6008548103610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590612838565b60405180910390fd5b5f6008549050816008819055507f263c87936a5e67ee0cf8a36c254ed9ce096b452b8a2a24fc11d63c9fa760846681600854604051610d9e929190612856565b60405180910390a15050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610df76114b3565b610e005f61196f565b565b610e0a6114b3565b600a811115610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e45906128c7565b60405180910390fd5b6007548103610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990612955565b60405180910390fd5b5f6007549050816007819055507f2049f695866222205424f7cf59a1f6f4ddfe053fff07778c6458dc0da485be2a816007546001604051610ed593929190612372565b60405180910390a15050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f116114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906129bd565b60405180910390fd5b600280811115610f9257610f91612155565b5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166002811115610fee57610fed612155565b5b0361102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590612a4b565b60405180910390fd5b6002600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083600281111561108e5761108d612155565b5b02179055508073ffffffffffffffffffffffffffffffffffffffff167fa7cc6673952dd2140cd171b21cdf21825b0f34e690500ecf38ed0aeb006f356e60026040516110da91906121c8565b60405180910390a250565b6060600480546110f49061224c565b80601f01602080910402602001604051908101604052809291908181526020018280546111209061224c565b801561116b5780601f106111425761010080835404028352916020019161116b565b820191905f5260205f20905b81548152906001019060200180831161114e57829003601f168201915b5050505050905090565b5f5f61117f61149a565b905061118c8185856115cc565b925061119981858561187f565b600191505092915050565b600a602052805f5260405f205f915054906101000a900460ff1681565b600a81565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6112566114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90612ab3565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90612b41565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a60405160405180910390a35050565b61141e6114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361148e575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611485919061213c565b60405180910390fd5b6114978161196f565b50565b5f33905090565b6114ae8383836001611a32565b505050565b6114bb61149a565b73ffffffffffffffffffffffffffffffffffffffff166114d9610ee1565b73ffffffffffffffffffffffffffffffffffffffff1614611538576114fc61149a565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161152f919061213c565b60405180910390fd5b565b5f61154584846111c6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115c657818110156115b7578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016115ae93929190612b5f565b60405180910390fd5b6115c584848484035f611a32565b5b50505050565b5f600160028111156115e1576115e0612155565b5b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16600281111561163d5761163c612155565b5b14806116b657506001600281111561165857611657612155565b5b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660028111156116b4576116b3612155565b5b145b156116c357819050611878565b5f5f90505f5f90506002808111156116de576116dd612155565b5b600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16600281111561173a57611739612155565b5b0361177c5760646007548561174f9190612bc1565b6117599190612c2f565b915060646008548561176b9190612bc1565b6117759190612c2f565b905061180e565b60028081111561178f5761178e612155565b5b600a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660028111156117eb576117ea612155565b5b0361180d576064600654856118009190612bc1565b61180a9190612c2f565b91505b5b5f821115611851576118428660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461187f565b818461184e9190612c5f565b93505b5f811115611872576118638682611c01565b808461186f9190612c5f565b93505b83925050505b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ef575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016118e6919061213c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361195f575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611956919061213c565b60405180910390fd5b61196a838383611c80565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611aa2575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a99919061213c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b12575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611b09919061213c565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611bfb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611bf29190612090565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c71575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611c68919061213c565b60405180910390fd5b611c7c825f83611c80565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd0578060025f828254611cc49190612c92565b92505081905550611d9e565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611d59578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611d5093929190612b5f565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611de5578060025f8282540392505081905550611e2f565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e8c9190612090565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611edb82611e99565b611ee58185611ea3565b9350611ef5818560208601611eb3565b611efe81611ec1565b840191505092915050565b5f6020820190508181035f830152611f218184611ed1565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f5682611f2d565b9050919050565b611f6681611f4c565b8114611f70575f5ffd5b50565b5f81359050611f8181611f5d565b92915050565b5f819050919050565b611f9981611f87565b8114611fa3575f5ffd5b50565b5f81359050611fb481611f90565b92915050565b5f5f60408385031215611fd057611fcf611f29565b5b5f611fdd85828601611f73565b9250506020611fee85828601611fa6565b9150509250929050565b5f8115159050919050565b61200c81611ff8565b82525050565b5f6020820190506120255f830184612003565b92915050565b5f602082840312156120405761203f611f29565b5b5f61204d84828501611fa6565b91505092915050565b5f6020828403121561206b5761206a611f29565b5b5f61207884828501611f73565b91505092915050565b61208a81611f87565b82525050565b5f6020820190506120a35f830184612081565b92915050565b5f5f5f606084860312156120c0576120bf611f29565b5b5f6120cd86828701611f73565b93505060206120de86828701611f73565b92505060406120ef86828701611fa6565b9150509250925092565b5f60ff82169050919050565b61210e816120f9565b82525050565b5f6020820190506121275f830184612105565b92915050565b61213681611f4c565b82525050565b5f60208201905061214f5f83018461212d565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6003811061219357612192612155565b5b50565b5f8190506121a382612182565b919050565b5f6121b282612196565b9050919050565b6121c2816121a8565b82525050565b5f6020820190506121db5f8301846121b9565b92915050565b5f5f604083850312156121f7576121f6611f29565b5b5f61220485828601611f73565b925050602061221585828601611f73565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061226357607f821691505b6020821081036122765761227561221f565b5b50919050565b7f627579206665652063616e6e6f742065786365656420313025000000000000005f82015250565b5f6122b0601983611ea3565b91506122bb8261227c565b602082019050919050565b5f6020820190508181035f8301526122dd816122a4565b9050919050565b7f5f627579466565206d75737420626520646966666572656e742066726f6d20705f8201527f726576696f75732076616c756500000000000000000000000000000000000000602082015250565b5f61233e602d83611ea3565b9150612349826122e4565b604082019050919050565b5f6020820190508181035f83015261236b81612332565b9050919050565b5f6060820190506123855f830186612081565b6123926020830185612081565b61239f6040830184612003565b949350505050565b7f546f6b656e2063616e6e6f74206265207a65726f2061646472657373000000005f82015250565b5f6123db601c83611ea3565b91506123e6826123a7565b602082019050919050565b5f6020820190508181035f830152612408816123cf565b9050919050565b7f43616e6e6f74207265636f766572206e617469766520746f6b656e00000000005f82015250565b5f612443601b83611ea3565b915061244e8261240f565b602082019050919050565b5f6020820190508181035f83015261247081612437565b9050919050565b5f8151905061248581611f90565b92915050565b5f602082840312156124a05761249f611f29565b5b5f6124ad84828501612477565b91505092915050565b7f4e6f20746f6b656e7320746f207265636f7665720000000000000000000000005f82015250565b5f6124ea601483611ea3565b91506124f5826124b6565b602082019050919050565b5f6020820190508181035f830152612517816124de565b9050919050565b5f6040820190506125315f83018561212d565b61253e6020830184612081565b9392505050565b61254e81611ff8565b8114612558575f5ffd5b50565b5f8151905061256981612545565b92915050565b5f6020828403121561258457612583611f29565b5b5f6125918482850161255b565b91505092915050565b7f43616e6e6f7420756e7265676973746572207a65726f206164647265737300005f82015250565b5f6125ce601e83611ea3565b91506125d98261259a565b602082019050919050565b5f6020820190508181035f8301526125fb816125c2565b9050919050565b7f5f61646472206973206e6f7420726567697374657265640000000000000000005f82015250565b5f612636601783611ea3565b915061264182612602565b602082019050919050565b5f6020820190508181035f8301526126638161262a565b9050919050565b7f43616e6e6f742077686974656c697374207a65726f20616464726573730000005f82015250565b5f61269e601d83611ea3565b91506126a98261266a565b602082019050919050565b5f6020820190508181035f8301526126cb81612692565b9050919050565b7f5f6164647220697320616c72656164792077686974656c6973746564000000005f82015250565b5f612706601c83611ea3565b9150612711826126d2565b602082019050919050565b5f6020820190508181035f830152612733816126fa565b9050919050565b7f4275726e2070657263656e746167652063616e6e6f74206578636565642031305f8201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b5f612794602183611ea3565b915061279f8261273a565b604082019050919050565b5f6020820190508181035f8301526127c181612788565b9050919050565b7f5f6275726e50657263656e74616765206d75737420626520646966666572656e5f8201527f742066726f6d2070726576696f75732076616c75650000000000000000000000602082015250565b5f612822603583611ea3565b915061282d826127c8565b604082019050919050565b5f6020820190508181035f83015261284f81612816565b9050919050565b5f6040820190506128695f830185612081565b6128766020830184612081565b9392505050565b7f73656c6c206665652063616e6e6f7420657863656564203130250000000000005f82015250565b5f6128b1601a83611ea3565b91506128bc8261287d565b602082019050919050565b5f6020820190508181035f8301526128de816128a5565b9050919050565b7f5f73656c6c466565206d75737420626520646966666572656e742066726f6d205f8201527f70726576696f75732076616c7565000000000000000000000000000000000000602082015250565b5f61293f602e83611ea3565b915061294a826128e5565b604082019050919050565b5f6020820190508181035f83015261296c81612933565b9050919050565b7f4445582063616e6e6f74206265207a65726f20616464726573730000000000005f82015250565b5f6129a7601a83611ea3565b91506129b282612973565b602082019050919050565b5f6020820190508181035f8301526129d48161299b565b9050919050565b7f5f6164647220697320616c7265616479207265676973746572656420617320445f8201527f4558000000000000000000000000000000000000000000000000000000000000602082015250565b5f612a35602283611ea3565b9150612a40826129db565b604082019050919050565b5f6020820190508181035f830152612a6281612a29565b9050919050565b7f54726561737572792063616e6e6f74206265207a65726f2061646472657373005f82015250565b5f612a9d601f83611ea3565b9150612aa882612a69565b602082019050919050565b5f6020820190508181035f830152612aca81612a91565b9050919050565b7f5f7472656173757279206d75737420626520646966666572656e742066726f6d5f8201527f2070726576696f75732061646472657373000000000000000000000000000000602082015250565b5f612b2b603183611ea3565b9150612b3682612ad1565b604082019050919050565b5f6020820190508181035f830152612b5881612b1f565b9050919050565b5f606082019050612b725f83018661212d565b612b7f6020830185612081565b612b8c6040830184612081565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612bcb82611f87565b9150612bd683611f87565b9250828202612be481611f87565b91508282048414831517612bfb57612bfa612b94565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c3982611f87565b9150612c4483611f87565b925082612c5457612c53612c02565b5b828204905092915050565b5f612c6982611f87565b9150612c7483611f87565b9250828203905081811115612c8c57612c8b612b94565b5b92915050565b5f612c9c82611f87565b9150612ca783611f87565b9250828201905080821115612cbf57612cbe612b94565b5b9291505056fea2646970667358221220d1946046a6bcdc2599d9d9463100573f1698c8186d7bea2cda5ba93344074f7264736f6c634300081c0033000000000000000000000000d7936c5c0730a0b850ee3e776d000e4a77c2c101

Deployed Bytecode

0x608060405234801561000f575f5ffd5b506004361061018c575f3560e01c806370a08231116100dc578063a9059cbb11610095578063dd62ed3e1161006f578063dd62ed3e1461045c578063f01f20df1461048c578063f0f44260146104aa578063f2fde38b146104c65761018c565b8063a9059cbb146103de578063ad1def421461040e578063bc063e1a1461043e5761018c565b806370a0823114610330578063715018a6146103605780638b4cee081461036a5780638da5cb5b1461038657806395aad7b8146103a457806395d89b41146103c05761018c565b80632b14ca5611610149578063470624021161012357806347062402146102bc578063611f4a2b146102da57806361d027b3146102f657806366c4b782146103145761018c565b80632b14ca56146102645780632ec2c24614610282578063313ce5671461029e5761018c565b806306fdde0314610190578063095ea7b3146101ae5780630cc835a3146101de57806316114acd146101fa57806318160ddd1461021657806323b872dd14610234575b5f5ffd5b6101986104e2565b6040516101a59190611f09565b60405180910390f35b6101c860048036038101906101c39190611fba565b610572565b6040516101d59190612012565b60405180910390f35b6101f860048036038101906101f3919061202b565b610594565b005b610214600480360381019061020f9190612056565b610672565b005b61021e61089a565b60405161022b9190612090565b60405180910390f35b61024e600480360381019061024991906120a9565b6108a3565b60405161025b9190612012565b60405180910390f35b61026c6108de565b6040516102799190612090565b60405180910390f35b61029c60048036038101906102979190612056565b6108e4565b005b6102a6610abe565b6040516102b39190612114565b60405180910390f35b6102c4610ac6565b6040516102d19190612090565b60405180910390f35b6102f460048036038101906102ef9190612056565b610acc565b005b6102fe610ca9565b60405161030b919061213c565b60405180910390f35b61032e6004803603810190610329919061202b565b610cce565b005b61034a60048036038101906103459190612056565b610daa565b6040516103579190612090565b60405180910390f35b610368610def565b005b610384600480360381019061037f919061202b565b610e02565b005b61038e610ee1565b60405161039b919061213c565b60405180910390f35b6103be60048036038101906103b99190612056565b610f09565b005b6103c86110e5565b6040516103d59190611f09565b60405180910390f35b6103f860048036038101906103f39190611fba565b611175565b6040516104059190612012565b60405180910390f35b61042860048036038101906104239190612056565b6111a4565b60405161043591906121c8565b60405180910390f35b6104466111c1565b6040516104539190612090565b60405180910390f35b610476600480360381019061047191906121e1565b6111c6565b6040516104839190612090565b60405180910390f35b610494611248565b6040516104a19190612090565b60405180910390f35b6104c460048036038101906104bf9190612056565b61124e565b005b6104e060048036038101906104db9190612056565b611416565b005b6060600380546104f19061224c565b80601f016020809104026020016040519081016040528092919081815260200182805461051d9061224c565b80156105685780601f1061053f57610100808354040283529160200191610568565b820191905f5260205f20905b81548152906001019060200180831161054b57829003601f168201915b5050505050905090565b5f5f61057c61149a565b90506105898185856114a1565b600191505092915050565b61059c6114b3565b600a8111156105e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d7906122c6565b60405180910390fd5b6006548103610624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061b90612354565b60405180910390fd5b5f6006549050816006819055507f2049f695866222205424f7cf59a1f6f4ddfe053fff07778c6458dc0da485be2a816006545f60405161066693929190612372565b60405180910390a15050565b61067a6114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106df906123f1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074d90612459565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610790919061213c565b602060405180830381865afa1580156107ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cf919061248b565b90505f8111610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080a90612500565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61083761149a565b836040518363ffffffff1660e01b815260040161085592919061251e565b6020604051808303815f875af1158015610871573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610895919061256f565b505050565b5f600254905090565b5f5f6108ad61149a565b90506108ba85828561153a565b6108c58585856115cc565b92506108d285858561187f565b60019150509392505050565b60075481565b6108ec6114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361095a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610951906125e4565b60405180910390fd5b5f600281111561096d5761096c612155565b5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660028111156109c9576109c8612155565b5b03610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a009061264c565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690836002811115610a6857610a67612155565b5b02179055508073ffffffffffffffffffffffffffffffffffffffff167fa7cc6673952dd2140cd171b21cdf21825b0f34e690500ecf38ed0aeb006f356e5f604051610ab391906121c8565b60405180910390a250565b5f6012905090565b60065481565b610ad46114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b39906126b4565b60405180910390fd5b60016002811115610b5657610b55612155565b5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166002811115610bb257610bb1612155565b5b03610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be99061271c565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690836002811115610c5257610c51612155565b5b02179055508073ffffffffffffffffffffffffffffffffffffffff167fa7cc6673952dd2140cd171b21cdf21825b0f34e690500ecf38ed0aeb006f356e6001604051610c9e91906121c8565b60405180910390a250565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cd66114b3565b600a811115610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d11906127aa565b60405180910390fd5b6008548103610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590612838565b60405180910390fd5b5f6008549050816008819055507f263c87936a5e67ee0cf8a36c254ed9ce096b452b8a2a24fc11d63c9fa760846681600854604051610d9e929190612856565b60405180910390a15050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610df76114b3565b610e005f61196f565b565b610e0a6114b3565b600a811115610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e45906128c7565b60405180910390fd5b6007548103610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990612955565b60405180910390fd5b5f6007549050816007819055507f2049f695866222205424f7cf59a1f6f4ddfe053fff07778c6458dc0da485be2a816007546001604051610ed593929190612372565b60405180910390a15050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f116114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906129bd565b60405180910390fd5b600280811115610f9257610f91612155565b5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166002811115610fee57610fed612155565b5b0361102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590612a4b565b60405180910390fd5b6002600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083600281111561108e5761108d612155565b5b02179055508073ffffffffffffffffffffffffffffffffffffffff167fa7cc6673952dd2140cd171b21cdf21825b0f34e690500ecf38ed0aeb006f356e60026040516110da91906121c8565b60405180910390a250565b6060600480546110f49061224c565b80601f01602080910402602001604051908101604052809291908181526020018280546111209061224c565b801561116b5780601f106111425761010080835404028352916020019161116b565b820191905f5260205f20905b81548152906001019060200180831161114e57829003601f168201915b5050505050905090565b5f5f61117f61149a565b905061118c8185856115cc565b925061119981858561187f565b600191505092915050565b600a602052805f5260405f205f915054906101000a900460ff1681565b600a81565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6112566114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90612ab3565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90612b41565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a60405160405180910390a35050565b61141e6114b3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361148e575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611485919061213c565b60405180910390fd5b6114978161196f565b50565b5f33905090565b6114ae8383836001611a32565b505050565b6114bb61149a565b73ffffffffffffffffffffffffffffffffffffffff166114d9610ee1565b73ffffffffffffffffffffffffffffffffffffffff1614611538576114fc61149a565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161152f919061213c565b60405180910390fd5b565b5f61154584846111c6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115c657818110156115b7578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016115ae93929190612b5f565b60405180910390fd5b6115c584848484035f611a32565b5b50505050565b5f600160028111156115e1576115e0612155565b5b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16600281111561163d5761163c612155565b5b14806116b657506001600281111561165857611657612155565b5b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660028111156116b4576116b3612155565b5b145b156116c357819050611878565b5f5f90505f5f90506002808111156116de576116dd612155565b5b600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16600281111561173a57611739612155565b5b0361177c5760646007548561174f9190612bc1565b6117599190612c2f565b915060646008548561176b9190612bc1565b6117759190612c2f565b905061180e565b60028081111561178f5761178e612155565b5b600a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660028111156117eb576117ea612155565b5b0361180d576064600654856118009190612bc1565b61180a9190612c2f565b91505b5b5f821115611851576118428660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461187f565b818461184e9190612c5f565b93505b5f811115611872576118638682611c01565b808461186f9190612c5f565b93505b83925050505b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ef575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016118e6919061213c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361195f575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611956919061213c565b60405180910390fd5b61196a838383611c80565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611aa2575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a99919061213c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b12575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611b09919061213c565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611bfb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611bf29190612090565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c71575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611c68919061213c565b60405180910390fd5b611c7c825f83611c80565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd0578060025f828254611cc49190612c92565b92505081905550611d9e565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611d59578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611d5093929190612b5f565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611de5578060025f8282540392505081905550611e2f565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e8c9190612090565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611edb82611e99565b611ee58185611ea3565b9350611ef5818560208601611eb3565b611efe81611ec1565b840191505092915050565b5f6020820190508181035f830152611f218184611ed1565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f5682611f2d565b9050919050565b611f6681611f4c565b8114611f70575f5ffd5b50565b5f81359050611f8181611f5d565b92915050565b5f819050919050565b611f9981611f87565b8114611fa3575f5ffd5b50565b5f81359050611fb481611f90565b92915050565b5f5f60408385031215611fd057611fcf611f29565b5b5f611fdd85828601611f73565b9250506020611fee85828601611fa6565b9150509250929050565b5f8115159050919050565b61200c81611ff8565b82525050565b5f6020820190506120255f830184612003565b92915050565b5f602082840312156120405761203f611f29565b5b5f61204d84828501611fa6565b91505092915050565b5f6020828403121561206b5761206a611f29565b5b5f61207884828501611f73565b91505092915050565b61208a81611f87565b82525050565b5f6020820190506120a35f830184612081565b92915050565b5f5f5f606084860312156120c0576120bf611f29565b5b5f6120cd86828701611f73565b93505060206120de86828701611f73565b92505060406120ef86828701611fa6565b9150509250925092565b5f60ff82169050919050565b61210e816120f9565b82525050565b5f6020820190506121275f830184612105565b92915050565b61213681611f4c565b82525050565b5f60208201905061214f5f83018461212d565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6003811061219357612192612155565b5b50565b5f8190506121a382612182565b919050565b5f6121b282612196565b9050919050565b6121c2816121a8565b82525050565b5f6020820190506121db5f8301846121b9565b92915050565b5f5f604083850312156121f7576121f6611f29565b5b5f61220485828601611f73565b925050602061221585828601611f73565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061226357607f821691505b6020821081036122765761227561221f565b5b50919050565b7f627579206665652063616e6e6f742065786365656420313025000000000000005f82015250565b5f6122b0601983611ea3565b91506122bb8261227c565b602082019050919050565b5f6020820190508181035f8301526122dd816122a4565b9050919050565b7f5f627579466565206d75737420626520646966666572656e742066726f6d20705f8201527f726576696f75732076616c756500000000000000000000000000000000000000602082015250565b5f61233e602d83611ea3565b9150612349826122e4565b604082019050919050565b5f6020820190508181035f83015261236b81612332565b9050919050565b5f6060820190506123855f830186612081565b6123926020830185612081565b61239f6040830184612003565b949350505050565b7f546f6b656e2063616e6e6f74206265207a65726f2061646472657373000000005f82015250565b5f6123db601c83611ea3565b91506123e6826123a7565b602082019050919050565b5f6020820190508181035f830152612408816123cf565b9050919050565b7f43616e6e6f74207265636f766572206e617469766520746f6b656e00000000005f82015250565b5f612443601b83611ea3565b915061244e8261240f565b602082019050919050565b5f6020820190508181035f83015261247081612437565b9050919050565b5f8151905061248581611f90565b92915050565b5f602082840312156124a05761249f611f29565b5b5f6124ad84828501612477565b91505092915050565b7f4e6f20746f6b656e7320746f207265636f7665720000000000000000000000005f82015250565b5f6124ea601483611ea3565b91506124f5826124b6565b602082019050919050565b5f6020820190508181035f830152612517816124de565b9050919050565b5f6040820190506125315f83018561212d565b61253e6020830184612081565b9392505050565b61254e81611ff8565b8114612558575f5ffd5b50565b5f8151905061256981612545565b92915050565b5f6020828403121561258457612583611f29565b5b5f6125918482850161255b565b91505092915050565b7f43616e6e6f7420756e7265676973746572207a65726f206164647265737300005f82015250565b5f6125ce601e83611ea3565b91506125d98261259a565b602082019050919050565b5f6020820190508181035f8301526125fb816125c2565b9050919050565b7f5f61646472206973206e6f7420726567697374657265640000000000000000005f82015250565b5f612636601783611ea3565b915061264182612602565b602082019050919050565b5f6020820190508181035f8301526126638161262a565b9050919050565b7f43616e6e6f742077686974656c697374207a65726f20616464726573730000005f82015250565b5f61269e601d83611ea3565b91506126a98261266a565b602082019050919050565b5f6020820190508181035f8301526126cb81612692565b9050919050565b7f5f6164647220697320616c72656164792077686974656c6973746564000000005f82015250565b5f612706601c83611ea3565b9150612711826126d2565b602082019050919050565b5f6020820190508181035f830152612733816126fa565b9050919050565b7f4275726e2070657263656e746167652063616e6e6f74206578636565642031305f8201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b5f612794602183611ea3565b915061279f8261273a565b604082019050919050565b5f6020820190508181035f8301526127c181612788565b9050919050565b7f5f6275726e50657263656e74616765206d75737420626520646966666572656e5f8201527f742066726f6d2070726576696f75732076616c75650000000000000000000000602082015250565b5f612822603583611ea3565b915061282d826127c8565b604082019050919050565b5f6020820190508181035f83015261284f81612816565b9050919050565b5f6040820190506128695f830185612081565b6128766020830184612081565b9392505050565b7f73656c6c206665652063616e6e6f7420657863656564203130250000000000005f82015250565b5f6128b1601a83611ea3565b91506128bc8261287d565b602082019050919050565b5f6020820190508181035f8301526128de816128a5565b9050919050565b7f5f73656c6c466565206d75737420626520646966666572656e742066726f6d205f8201527f70726576696f75732076616c7565000000000000000000000000000000000000602082015250565b5f61293f602e83611ea3565b915061294a826128e5565b604082019050919050565b5f6020820190508181035f83015261296c81612933565b9050919050565b7f4445582063616e6e6f74206265207a65726f20616464726573730000000000005f82015250565b5f6129a7601a83611ea3565b91506129b282612973565b602082019050919050565b5f6020820190508181035f8301526129d48161299b565b9050919050565b7f5f6164647220697320616c7265616479207265676973746572656420617320445f8201527f4558000000000000000000000000000000000000000000000000000000000000602082015250565b5f612a35602283611ea3565b9150612a40826129db565b604082019050919050565b5f6020820190508181035f830152612a6281612a29565b9050919050565b7f54726561737572792063616e6e6f74206265207a65726f2061646472657373005f82015250565b5f612a9d601f83611ea3565b9150612aa882612a69565b602082019050919050565b5f6020820190508181035f830152612aca81612a91565b9050919050565b7f5f7472656173757279206d75737420626520646966666572656e742066726f6d5f8201527f2070726576696f75732061646472657373000000000000000000000000000000602082015250565b5f612b2b603183611ea3565b9150612b3682612ad1565b604082019050919050565b5f6020820190508181035f830152612b5881612b1f565b9050919050565b5f606082019050612b725f83018661212d565b612b7f6020830185612081565b612b8c6040830184612081565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612bcb82611f87565b9150612bd683611f87565b9250828202612be481611f87565b91508282048414831517612bfb57612bfa612b94565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c3982611f87565b9150612c4483611f87565b925082612c5457612c53612c02565b5b828204905092915050565b5f612c6982611f87565b9150612c7483611f87565b9250828203905081811115612c8c57612c8b612b94565b5b92915050565b5f612c9c82611f87565b9150612ca783611f87565b9250828201905080821115612cbf57612cbe612b94565b5b9291505056fea2646970667358221220d1946046a6bcdc2599d9d9463100573f1698c8186d7bea2cda5ba93344074f7264736f6c634300081c0033

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

000000000000000000000000d7936c5c0730a0b850ee3e776d000e4a77c2c101

-----Decoded View---------------
Arg [0] : _treasury (address): 0xD7936C5C0730a0B850eE3e776d000E4A77C2c101

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d7936c5c0730a0b850ee3e776d000e4a77c2c101


Deployed Bytecode Sourcemap

27916:7707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13305:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15598:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33030:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35228:392;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14407:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30955:303;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28060:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32495:343;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14258:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28008:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31964:351;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28172:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34107:400;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14569:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24980:103;;;:::i;:::-;;33557:344;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24305:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31449:324;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13515:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30071:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28202:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27965:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15137:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28113:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34721:366;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25238:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13305:91;13350:13;13383:5;13376:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13305:91;:::o;15598:190::-;15671:4;15688:13;15704:12;:10;:12::i;:::-;15688:28;;15727:31;15736:5;15743:7;15752:5;15727:8;:31::i;:::-;15776:4;15769:11;;;15598:190;;;;:::o;33030:332::-;24191:13;:11;:13::i;:::-;27999:2:::1;33104:7;:18;;33096:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33182:6;;33171:7;:17:::0;33163:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33249:17;33269:6;;33249:26;;33295:7;33286:6;:16;;;;33318:36;33329:9;33340:6;;33348:5;33318:36;;;;;;;;:::i;:::-;;;;;;;;33085:277;33030:332:::0;:::o;35228:392::-;24191:13;:11;:13::i;:::-;35323:1:::1;35305:20;;:6;:20;;::::0;35297:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35395:4;35377:23;;:6;:23;;::::0;35369:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35443:15;35468:6;35461:24;;;35494:4;35461:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35443:57;;35529:1;35519:7;:11;35511:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;35573:6;35566:23;;;35590:12;:10;:12::i;:::-;35604:7;35566:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35286:334;35228:392:::0;:::o;14407:99::-;14459:7;14486:12;;14479:19;;14407:99;:::o;30955:303::-;31043:4;31060:15;31078:12;:10;:12::i;:::-;31060:30;;31101:37;31117:4;31123:7;31132:5;31101:15;:37::i;:::-;31157:27;31168:4;31174:2;31178:5;31157:10;:27::i;:::-;31149:35;;31196:32;31212:4;31218:2;31222:5;31196:15;:32::i;:::-;31246:4;31239:11;;;30955:303;;;;;:::o;28060:26::-;;;;:::o;32495:343::-;24191:13;:11;:13::i;:::-;32585:1:::1;32568:19;;:5;:19;;::::0;32560:62:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32669:19;32641:47;;;;;;;;:::i;:::-;;:17;:24;32659:5;32641:24;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;;;;;:::i;:::-;;::::0;32633:83:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32754:19;32727:17;:24;32745:5;32727:24;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;32803:5;32789:41;;;32810:19;32789:41;;;;;;:::i;:::-;;;;;;;;32495:343:::0;:::o;14258:84::-;14307:5;14332:2;14325:9;;14258:84;:::o;28008:25::-;;;;:::o;31964:351::-;24191:13;:11;:13::i;:::-;32061:1:::1;32044:19;;:5;:19;;::::0;32036:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32144:18;32116:46;;;;;;;;:::i;:::-;;:17;:24;32134:5;32116:24;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;:::i;:::-;;::::0;32108:87:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32233:18;32206:17;:24;32224:5;32206:24;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;32281:5;32267:40;;;32288:18;32267:40;;;;;;:::i;:::-;;;;;;;;31964:351:::0;:::o;28172:23::-;;;;;;;;;;;;;:::o;34107:400::-;24191:13;:11;:13::i;:::-;27999:2:::1;34187:15;:26;;34179:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;34289:14;;34270:15;:33:::0;34262:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34372:15;34390:14;;34372:32;;34432:15;34415:14;:32;;;;34463:36;34475:7;34484:14;;34463:36;;;;;;;:::i;:::-;;;;;;;;34168:339;34107:400:::0;:::o;14569:118::-;14634:7;14661:9;:18;14671:7;14661:18;;;;;;;;;;;;;;;;14654:25;;14569:118;;;:::o;24980:103::-;24191:13;:11;:13::i;:::-;25045:30:::1;25072:1;25045:18;:30::i;:::-;24980:103::o:0;33557:344::-;24191:13;:11;:13::i;:::-;27999:2:::1;33633:8;:19;;33625:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33714:7;;33702:8;:19:::0;33694:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33783:18;33804:7;;33783:28;;33832:8;33822:7;:18;;;;33856:37;33867:10;33879:7;;33888:4;33856:37;;;;;;;;:::i;:::-;;;;;;;;33614:287;33557:344:::0;:::o;24305:87::-;24351:7;24378:6;;;;;;;;;;;24371:13;;24305:87;:::o;31449:324::-;24191:13;:11;:13::i;:::-;31540:1:::1;31523:19;;:5;:19;;::::0;31515:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31620:10;31592:38:::0;::::1;;;;;;;:::i;:::-;;:17;:24;31610:5;31592:24;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;;;;;:::i;:::-;;::::0;31584:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31707:10;31680:17;:24;31698:5;31680:24;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;31747:5;31733:32;;;31754:10;31733:32;;;;;;:::i;:::-;;;;;;;;31449:324:::0;:::o;13515:95::-;13562:13;13595:7;13588:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13515:95;:::o;30071:236::-;30141:4;30158:13;30174:12;:10;:12::i;:::-;30158:28;;30205;30216:5;30223:2;30227:5;30205:10;:28::i;:::-;30197:36;;30244:33;30260:5;30267:2;30271:5;30244:15;:33::i;:::-;30295:4;30288:11;;;30071:236;;;;:::o;28202:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;27965:36::-;27999:2;27965:36;:::o;15137:142::-;15217:7;15244:11;:18;15256:5;15244:18;;;;;;;;;;;;;;;:27;15263:7;15244:27;;;;;;;;;;;;;;;;15237:34;;15137:142;;;;:::o;28113:33::-;;;;:::o;34721:366::-;24191:13;:11;:13::i;:::-;34820:1:::1;34799:23;;:9;:23;;::::0;34791:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34890:8;;;;;;;;;;;34877:21;;:9;:21;;::::0;34869:83:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34963:19;34985:8;;;;;;;;;;;34963:30;;35015:9;35004:8;;:20;;;;;;;;;;;;;;;;;;35069:9;35040:39;;35056:11;35040:39;;;;;;;;;;;;34780:307;34721:366:::0;:::o;25238:220::-;24191:13;:11;:13::i;:::-;25343:1:::1;25323:22;;:8;:22;;::::0;25319:93:::1;;25397:1;25369:31;;;;;;;;;;;:::i;:::-;;;;;;;;25319:93;25422:28;25441:8;25422:18;:28::i;:::-;25238:220:::0;:::o;4304:98::-;4357:7;4384:10;4377:17;;4304:98;:::o;20425:130::-;20510:37;20519:5;20526:7;20535:5;20542:4;20510:8;:37::i;:::-;20425:130;;;:::o;24470:166::-;24541:12;:10;:12::i;:::-;24530:23;;:7;:5;:7::i;:::-;:23;;;24526:103;;24604:12;:10;:12::i;:::-;24577:40;;;;;;;;;;;:::i;:::-;;;;;;;;24526:103;24470:166::o;22141:487::-;22241:24;22268:25;22278:5;22285:7;22268:9;:25::i;:::-;22241:52;;22328:17;22308:16;:37;22304:317;;22385:5;22366:16;:24;22362:132;;;22445:7;22454:16;22472:5;22418:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;22362:132;22537:57;22546:5;22553:7;22581:5;22562:16;:24;22588:5;22537:8;:57::i;:::-;22304:317;22230:398;22141:487;;;:::o;28952:836::-;29041:7;29094:18;29065:47;;;;;;;;:::i;:::-;;:17;:25;29083:6;29065:25;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;;;;;:::i;:::-;;;:101;;;;29148:18;29116:50;;;;;;;;:::i;:::-;;:17;:28;29134:9;29116:28;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;;;;:::i;:::-;;;29065:101;29061:147;;;29190:6;29183:13;;;;29061:147;29218:11;29232:1;29218:15;;29244:12;29259:1;29244:16;;29307:10;29275:42;;;;;;;;:::i;:::-;;:17;:28;29293:9;29275:28;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;;;;:::i;:::-;;;29271:265;;29361:3;29350:7;;29341:6;:16;;;;:::i;:::-;29340:24;;;;:::i;:::-;29334:30;;29414:3;29396:14;;29387:6;:23;;;;:::i;:::-;29386:31;;;;:::i;:::-;29379:38;;29271:265;;;29468:10;29439:39;;;;;;;;:::i;:::-;;:17;:25;29457:6;29439:25;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;;;;;:::i;:::-;;;29435:101;;29521:3;29511:6;;29502;:15;;;;:::i;:::-;29501:23;;;;:::i;:::-;29495:29;;29435:101;29271:265;29556:1;29550:3;:7;29546:106;;;29574:38;29590:6;29598:8;;;;;;;;;;;29608:3;29574:15;:38::i;:::-;29637:3;29627:13;;;;;:::i;:::-;;;29546:106;29673:1;29666:4;:8;29662:95;;;29691:25;29703:6;29711:4;29691:11;:25::i;:::-;29741:4;29731:14;;;;;:::i;:::-;;;29662:95;29774:6;29767:13;;;;28952:836;;;;;;:::o;17000:308::-;17100:1;17084:18;;:4;:18;;;17080:88;;17153:1;17126:30;;;;;;;;;;;:::i;:::-;;;;;;;;17080:88;17196:1;17182:16;;:2;:16;;;17178:88;;17251:1;17222:32;;;;;;;;;;;:::i;:::-;;;;;;;;17178:88;17276:24;17284:4;17290:2;17294:5;17276:7;:24::i;:::-;17000:308;;;:::o;25618:191::-;25692:16;25711:6;;;;;;;;;;;25692:25;;25737:8;25728:6;;:17;;;;;;;;;;;;;;;;;;25792:8;25761:40;;25782:8;25761:40;;;;;;;;;;;;25681:128;25618:191;:::o;21406:443::-;21536:1;21519:19;;:5;:19;;;21515:91;;21591:1;21562:32;;;;;;;;;;;:::i;:::-;;;;;;;;21515:91;21639:1;21620:21;;:7;:21;;;21616:92;;21693:1;21665:31;;;;;;;;;;;:::i;:::-;;;;;;;;21616:92;21748:5;21718:11;:18;21730:5;21718:18;;;;;;;;;;;;;;;:27;21737:7;21718:27;;;;;;;;;;;;;;;:35;;;;21768:9;21764:78;;;21815:7;21799:31;;21808:5;21799:31;;;21824:5;21799:31;;;;;;:::i;:::-;;;;;;;;21764:78;21406:443;;;;:::o;19661:211::-;19751:1;19732:21;;:7;:21;;;19728:91;;19804:1;19777:30;;;;;;;;;;;:::i;:::-;;;;;;;;19728:91;19829:35;19837:7;19854:1;19858:5;19829:7;:35::i;:::-;19661:211;;:::o;17632:1135::-;17738:1;17722:18;;:4;:18;;;17718:552;;17876:5;17860:12;;:21;;;;;;;:::i;:::-;;;;;;;;17718:552;;;17914:19;17936:9;:15;17946:4;17936:15;;;;;;;;;;;;;;;;17914:37;;17984:5;17970:11;:19;17966:117;;;18042:4;18048:11;18061:5;18017:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;17966:117;18238:5;18224:11;:19;18206:9;:15;18216:4;18206:15;;;;;;;;;;;;;;;:37;;;;17899:371;17718:552;18300:1;18286:16;;:2;:16;;;18282:435;;18468:5;18452:12;;:21;;;;;;;;;;;18282:435;;;18685:5;18668:9;:13;18678:2;18668:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;18282:435;18749:2;18734:25;;18743:4;18734:25;;;18753:5;18734:25;;;;;;:::i;:::-;;;;;;;;17632:1135;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:::-;3733:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:119;;;3788:79;;:::i;:::-;3750:119;3908:1;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3879:117;3674:329;;;;:::o;4009:118::-;4096:24;4114:5;4096:24;:::i;:::-;4091:3;4084:37;4009:118;;:::o;4133:222::-;4226:4;4264:2;4253:9;4249:18;4241:26;;4277:71;4345:1;4334:9;4330:17;4321:6;4277:71;:::i;:::-;4133:222;;;;:::o;4361:619::-;4438:6;4446;4454;4503:2;4491:9;4482:7;4478:23;4474:32;4471:119;;;4509:79;;:::i;:::-;4471:119;4629:1;4654:53;4699:7;4690:6;4679:9;4675:22;4654:53;:::i;:::-;4644:63;;4600:117;4756:2;4782:53;4827:7;4818:6;4807:9;4803:22;4782:53;:::i;:::-;4772:63;;4727:118;4884:2;4910:53;4955:7;4946:6;4935:9;4931:22;4910:53;:::i;:::-;4900:63;;4855:118;4361:619;;;;;:::o;4986:86::-;5021:7;5061:4;5054:5;5050:16;5039:27;;4986:86;;;:::o;5078:112::-;5161:22;5177:5;5161:22;:::i;:::-;5156:3;5149:35;5078:112;;:::o;5196:214::-;5285:4;5323:2;5312:9;5308:18;5300:26;;5336:67;5400:1;5389:9;5385:17;5376:6;5336:67;:::i;:::-;5196:214;;;;:::o;5416:118::-;5503:24;5521:5;5503:24;:::i;:::-;5498:3;5491:37;5416:118;;:::o;5540:222::-;5633:4;5671:2;5660:9;5656:18;5648:26;;5684:71;5752:1;5741:9;5737:17;5728:6;5684:71;:::i;:::-;5540:222;;;;:::o;5768:180::-;5816:77;5813:1;5806:88;5913:4;5910:1;5903:15;5937:4;5934:1;5927:15;5954:115;6037:1;6030:5;6027:12;6017:46;;6043:18;;:::i;:::-;6017:46;5954:115;:::o;6075:131::-;6122:7;6151:5;6140:16;;6157:43;6194:5;6157:43;:::i;:::-;6075:131;;;:::o;6212:::-;6270:9;6303:34;6331:5;6303:34;:::i;:::-;6290:47;;6212:131;;;:::o;6349:147::-;6444:45;6483:5;6444:45;:::i;:::-;6439:3;6432:58;6349:147;;:::o;6502:238::-;6603:4;6641:2;6630:9;6626:18;6618:26;;6654:79;6730:1;6719:9;6715:17;6706:6;6654:79;:::i;:::-;6502:238;;;;:::o;6746:474::-;6814:6;6822;6871:2;6859:9;6850:7;6846:23;6842:32;6839:119;;;6877:79;;:::i;:::-;6839:119;6997:1;7022:53;7067:7;7058:6;7047:9;7043:22;7022:53;:::i;:::-;7012:63;;6968:117;7124:2;7150:53;7195:7;7186:6;7175:9;7171:22;7150:53;:::i;:::-;7140:63;;7095:118;6746:474;;;;;:::o;7226:180::-;7274:77;7271:1;7264:88;7371:4;7368:1;7361:15;7395:4;7392:1;7385:15;7412:320;7456:6;7493:1;7487:4;7483:12;7473:22;;7540:1;7534:4;7530:12;7561:18;7551:81;;7617:4;7609:6;7605:17;7595:27;;7551:81;7679:2;7671:6;7668:14;7648:18;7645:38;7642:84;;7698:18;;:::i;:::-;7642:84;7463:269;7412:320;;;:::o;7738:175::-;7878:27;7874:1;7866:6;7862:14;7855:51;7738:175;:::o;7919:366::-;8061:3;8082:67;8146:2;8141:3;8082:67;:::i;:::-;8075:74;;8158:93;8247:3;8158:93;:::i;:::-;8276:2;8271:3;8267:12;8260:19;;7919:366;;;:::o;8291:419::-;8457:4;8495:2;8484:9;8480:18;8472:26;;8544:9;8538:4;8534:20;8530:1;8519:9;8515:17;8508:47;8572:131;8698:4;8572:131;:::i;:::-;8564:139;;8291:419;;;:::o;8716:232::-;8856:34;8852:1;8844:6;8840:14;8833:58;8925:15;8920:2;8912:6;8908:15;8901:40;8716:232;:::o;8954:366::-;9096:3;9117:67;9181:2;9176:3;9117:67;:::i;:::-;9110:74;;9193:93;9282:3;9193:93;:::i;:::-;9311:2;9306:3;9302:12;9295:19;;8954:366;;;:::o;9326:419::-;9492:4;9530:2;9519:9;9515:18;9507:26;;9579:9;9573:4;9569:20;9565:1;9554:9;9550:17;9543:47;9607:131;9733:4;9607:131;:::i;:::-;9599:139;;9326:419;;;:::o;9751:430::-;9894:4;9932:2;9921:9;9917:18;9909:26;;9945:71;10013:1;10002:9;9998:17;9989:6;9945:71;:::i;:::-;10026:72;10094:2;10083:9;10079:18;10070:6;10026:72;:::i;:::-;10108:66;10170:2;10159:9;10155:18;10146:6;10108:66;:::i;:::-;9751:430;;;;;;:::o;10187:178::-;10327:30;10323:1;10315:6;10311:14;10304:54;10187:178;:::o;10371:366::-;10513:3;10534:67;10598:2;10593:3;10534:67;:::i;:::-;10527:74;;10610:93;10699:3;10610:93;:::i;:::-;10728:2;10723:3;10719:12;10712:19;;10371:366;;;:::o;10743:419::-;10909:4;10947:2;10936:9;10932:18;10924:26;;10996:9;10990:4;10986:20;10982:1;10971:9;10967:17;10960:47;11024:131;11150:4;11024:131;:::i;:::-;11016:139;;10743:419;;;:::o;11168:177::-;11308:29;11304:1;11296:6;11292:14;11285:53;11168:177;:::o;11351:366::-;11493:3;11514:67;11578:2;11573:3;11514:67;:::i;:::-;11507:74;;11590:93;11679:3;11590:93;:::i;:::-;11708:2;11703:3;11699:12;11692:19;;11351:366;;;:::o;11723:419::-;11889:4;11927:2;11916:9;11912:18;11904:26;;11976:9;11970:4;11966:20;11962:1;11951:9;11947:17;11940:47;12004:131;12130:4;12004:131;:::i;:::-;11996:139;;11723:419;;;:::o;12148:143::-;12205:5;12236:6;12230:13;12221:22;;12252:33;12279:5;12252:33;:::i;:::-;12148:143;;;;:::o;12297:351::-;12367:6;12416:2;12404:9;12395:7;12391:23;12387:32;12384:119;;;12422:79;;:::i;:::-;12384:119;12542:1;12567:64;12623:7;12614:6;12603:9;12599:22;12567:64;:::i;:::-;12557:74;;12513:128;12297:351;;;;:::o;12654:170::-;12794:22;12790:1;12782:6;12778:14;12771:46;12654:170;:::o;12830:366::-;12972:3;12993:67;13057:2;13052:3;12993:67;:::i;:::-;12986:74;;13069:93;13158:3;13069:93;:::i;:::-;13187:2;13182:3;13178:12;13171:19;;12830:366;;;:::o;13202:419::-;13368:4;13406:2;13395:9;13391:18;13383:26;;13455:9;13449:4;13445:20;13441:1;13430:9;13426:17;13419:47;13483:131;13609:4;13483:131;:::i;:::-;13475:139;;13202:419;;;:::o;13627:332::-;13748:4;13786:2;13775:9;13771:18;13763:26;;13799:71;13867:1;13856:9;13852:17;13843:6;13799:71;:::i;:::-;13880:72;13948:2;13937:9;13933:18;13924:6;13880:72;:::i;:::-;13627:332;;;;;:::o;13965:116::-;14035:21;14050:5;14035:21;:::i;:::-;14028:5;14025:32;14015:60;;14071:1;14068;14061:12;14015:60;13965:116;:::o;14087:137::-;14141:5;14172:6;14166:13;14157:22;;14188:30;14212:5;14188:30;:::i;:::-;14087:137;;;;:::o;14230:345::-;14297:6;14346:2;14334:9;14325:7;14321:23;14317:32;14314:119;;;14352:79;;:::i;:::-;14314:119;14472:1;14497:61;14550:7;14541:6;14530:9;14526:22;14497:61;:::i;:::-;14487:71;;14443:125;14230:345;;;;:::o;14581:180::-;14721:32;14717:1;14709:6;14705:14;14698:56;14581:180;:::o;14767:366::-;14909:3;14930:67;14994:2;14989:3;14930:67;:::i;:::-;14923:74;;15006:93;15095:3;15006:93;:::i;:::-;15124:2;15119:3;15115:12;15108:19;;14767:366;;;:::o;15139:419::-;15305:4;15343:2;15332:9;15328:18;15320:26;;15392:9;15386:4;15382:20;15378:1;15367:9;15363:17;15356:47;15420:131;15546:4;15420:131;:::i;:::-;15412:139;;15139:419;;;:::o;15564:173::-;15704:25;15700:1;15692:6;15688:14;15681:49;15564:173;:::o;15743:366::-;15885:3;15906:67;15970:2;15965:3;15906:67;:::i;:::-;15899:74;;15982:93;16071:3;15982:93;:::i;:::-;16100:2;16095:3;16091:12;16084:19;;15743:366;;;:::o;16115:419::-;16281:4;16319:2;16308:9;16304:18;16296:26;;16368:9;16362:4;16358:20;16354:1;16343:9;16339:17;16332:47;16396:131;16522:4;16396:131;:::i;:::-;16388:139;;16115:419;;;:::o;16540:179::-;16680:31;16676:1;16668:6;16664:14;16657:55;16540:179;:::o;16725:366::-;16867:3;16888:67;16952:2;16947:3;16888:67;:::i;:::-;16881:74;;16964:93;17053:3;16964:93;:::i;:::-;17082:2;17077:3;17073:12;17066:19;;16725:366;;;:::o;17097:419::-;17263:4;17301:2;17290:9;17286:18;17278:26;;17350:9;17344:4;17340:20;17336:1;17325:9;17321:17;17314:47;17378:131;17504:4;17378:131;:::i;:::-;17370:139;;17097:419;;;:::o;17522:178::-;17662:30;17658:1;17650:6;17646:14;17639:54;17522:178;:::o;17706:366::-;17848:3;17869:67;17933:2;17928:3;17869:67;:::i;:::-;17862:74;;17945:93;18034:3;17945:93;:::i;:::-;18063:2;18058:3;18054:12;18047:19;;17706:366;;;:::o;18078:419::-;18244:4;18282:2;18271:9;18267:18;18259:26;;18331:9;18325:4;18321:20;18317:1;18306:9;18302:17;18295:47;18359:131;18485:4;18359:131;:::i;:::-;18351:139;;18078:419;;;:::o;18503:220::-;18643:34;18639:1;18631:6;18627:14;18620:58;18712:3;18707:2;18699:6;18695:15;18688:28;18503:220;:::o;18729:366::-;18871:3;18892:67;18956:2;18951:3;18892:67;:::i;:::-;18885:74;;18968:93;19057:3;18968:93;:::i;:::-;19086:2;19081:3;19077:12;19070:19;;18729:366;;;:::o;19101:419::-;19267:4;19305:2;19294:9;19290:18;19282:26;;19354:9;19348:4;19344:20;19340:1;19329:9;19325:17;19318:47;19382:131;19508:4;19382:131;:::i;:::-;19374:139;;19101:419;;;:::o;19526:240::-;19666:34;19662:1;19654:6;19650:14;19643:58;19735:23;19730:2;19722:6;19718:15;19711:48;19526:240;:::o;19772:366::-;19914:3;19935:67;19999:2;19994:3;19935:67;:::i;:::-;19928:74;;20011:93;20100:3;20011:93;:::i;:::-;20129:2;20124:3;20120:12;20113:19;;19772:366;;;:::o;20144:419::-;20310:4;20348:2;20337:9;20333:18;20325:26;;20397:9;20391:4;20387:20;20383:1;20372:9;20368:17;20361:47;20425:131;20551:4;20425:131;:::i;:::-;20417:139;;20144:419;;;:::o;20569:332::-;20690:4;20728:2;20717:9;20713:18;20705:26;;20741:71;20809:1;20798:9;20794:17;20785:6;20741:71;:::i;:::-;20822:72;20890:2;20879:9;20875:18;20866:6;20822:72;:::i;:::-;20569:332;;;;;:::o;20907:176::-;21047:28;21043:1;21035:6;21031:14;21024:52;20907:176;:::o;21089:366::-;21231:3;21252:67;21316:2;21311:3;21252:67;:::i;:::-;21245:74;;21328:93;21417:3;21328:93;:::i;:::-;21446:2;21441:3;21437:12;21430:19;;21089:366;;;:::o;21461:419::-;21627:4;21665:2;21654:9;21650:18;21642:26;;21714:9;21708:4;21704:20;21700:1;21689:9;21685:17;21678:47;21742:131;21868:4;21742:131;:::i;:::-;21734:139;;21461:419;;;:::o;21886:233::-;22026:34;22022:1;22014:6;22010:14;22003:58;22095:16;22090:2;22082:6;22078:15;22071:41;21886:233;:::o;22125:366::-;22267:3;22288:67;22352:2;22347:3;22288:67;:::i;:::-;22281:74;;22364:93;22453:3;22364:93;:::i;:::-;22482:2;22477:3;22473:12;22466:19;;22125:366;;;:::o;22497:419::-;22663:4;22701:2;22690:9;22686:18;22678:26;;22750:9;22744:4;22740:20;22736:1;22725:9;22721:17;22714:47;22778:131;22904:4;22778:131;:::i;:::-;22770:139;;22497:419;;;:::o;22922:176::-;23062:28;23058:1;23050:6;23046:14;23039:52;22922:176;:::o;23104:366::-;23246:3;23267:67;23331:2;23326:3;23267:67;:::i;:::-;23260:74;;23343:93;23432:3;23343:93;:::i;:::-;23461:2;23456:3;23452:12;23445:19;;23104:366;;;:::o;23476:419::-;23642:4;23680:2;23669:9;23665:18;23657:26;;23729:9;23723:4;23719:20;23715:1;23704:9;23700:17;23693:47;23757:131;23883:4;23757:131;:::i;:::-;23749:139;;23476:419;;;:::o;23901:221::-;24041:34;24037:1;24029:6;24025:14;24018:58;24110:4;24105:2;24097:6;24093:15;24086:29;23901:221;:::o;24128:366::-;24270:3;24291:67;24355:2;24350:3;24291:67;:::i;:::-;24284:74;;24367:93;24456:3;24367:93;:::i;:::-;24485:2;24480:3;24476:12;24469:19;;24128:366;;;:::o;24500:419::-;24666:4;24704:2;24693:9;24689:18;24681:26;;24753:9;24747:4;24743:20;24739:1;24728:9;24724:17;24717:47;24781:131;24907:4;24781:131;:::i;:::-;24773:139;;24500:419;;;:::o;24925:181::-;25065:33;25061:1;25053:6;25049:14;25042:57;24925:181;:::o;25112:366::-;25254:3;25275:67;25339:2;25334:3;25275:67;:::i;:::-;25268:74;;25351:93;25440:3;25351:93;:::i;:::-;25469:2;25464:3;25460:12;25453:19;;25112:366;;;:::o;25484:419::-;25650:4;25688:2;25677:9;25673:18;25665:26;;25737:9;25731:4;25727:20;25723:1;25712:9;25708:17;25701:47;25765:131;25891:4;25765:131;:::i;:::-;25757:139;;25484:419;;;:::o;25909:236::-;26049:34;26045:1;26037:6;26033:14;26026:58;26118:19;26113:2;26105:6;26101:15;26094:44;25909:236;:::o;26151:366::-;26293:3;26314:67;26378:2;26373:3;26314:67;:::i;:::-;26307:74;;26390:93;26479:3;26390:93;:::i;:::-;26508:2;26503:3;26499:12;26492:19;;26151:366;;;:::o;26523:419::-;26689:4;26727:2;26716:9;26712:18;26704:26;;26776:9;26770:4;26766:20;26762:1;26751:9;26747:17;26740:47;26804:131;26930:4;26804:131;:::i;:::-;26796:139;;26523:419;;;:::o;26948:442::-;27097:4;27135:2;27124:9;27120:18;27112:26;;27148:71;27216:1;27205:9;27201:17;27192:6;27148:71;:::i;:::-;27229:72;27297:2;27286:9;27282:18;27273:6;27229:72;:::i;:::-;27311;27379:2;27368:9;27364:18;27355:6;27311:72;:::i;:::-;26948:442;;;;;;:::o;27396:180::-;27444:77;27441:1;27434:88;27541:4;27538:1;27531:15;27565:4;27562:1;27555:15;27582:410;27622:7;27645:20;27663:1;27645:20;:::i;:::-;27640:25;;27679:20;27697:1;27679:20;:::i;:::-;27674:25;;27734:1;27731;27727:9;27756:30;27774:11;27756:30;:::i;:::-;27745:41;;27935:1;27926:7;27922:15;27919:1;27916:22;27896:1;27889:9;27869:83;27846:139;;27965:18;;:::i;:::-;27846:139;27630:362;27582:410;;;;:::o;27998:180::-;28046:77;28043:1;28036:88;28143:4;28140:1;28133:15;28167:4;28164:1;28157:15;28184:185;28224:1;28241:20;28259:1;28241:20;:::i;:::-;28236:25;;28275:20;28293:1;28275:20;:::i;:::-;28270:25;;28314:1;28304:35;;28319:18;;:::i;:::-;28304:35;28361:1;28358;28354:9;28349:14;;28184:185;;;;:::o;28375:194::-;28415:4;28435:20;28453:1;28435:20;:::i;:::-;28430:25;;28469:20;28487:1;28469:20;:::i;:::-;28464:25;;28513:1;28510;28506:9;28498:17;;28537:1;28531:4;28528:11;28525:37;;;28542:18;;:::i;:::-;28525:37;28375:194;;;;:::o;28575:191::-;28615:3;28634:20;28652:1;28634:20;:::i;:::-;28629:25;;28668:20;28686:1;28668:20;:::i;:::-;28663:25;;28711:1;28708;28704:9;28697:16;;28732:3;28729:1;28726:10;28723:36;;;28739:18;;:::i;:::-;28723:36;28575:191;;;;:::o

Swarm Source

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