ETH Price: $3,386.38 (+0.77%)
Gas: 4.91 Gwei

Token

$2000 ETH (2kETH)
 

Overview

Max Total Supply

22,200,000 2kETH

Holders

115

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.00000000000279701 2kETH

Value
$0.00
0xdF509d252232E4f5DDe22d010995940f3857D7f3
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ETH2000USD

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-13
*/

/*
    /$$     /$$$$$$   /$$$$$$   /$$$$$$   /$$$$$$        /$$$$$$$$ /$$$$$$$$ /$$   /$$        /$$$$$$   /$$$$$$   /$$$$$$  /$$   /$$
  /$$$$$$  /$$__  $$ /$$$_  $$ /$$$_  $$ /$$$_  $$      | $$_____/|__  $$__/| $$  | $$       /$$__  $$ /$$__  $$ /$$__  $$| $$$ | $$
 /$$__  $$|__/  \ $$| $$$$\ $$| $$$$\ $$| $$$$\ $$      | $$         | $$   | $$  | $$      | $$  \__/| $$  \ $$| $$  \ $$| $$$$| $$
| $$  \__/  /$$$$$$/| $$ $$ $$| $$ $$ $$| $$ $$ $$      | $$$$$      | $$   | $$$$$$$$      |  $$$$$$ | $$  | $$| $$  | $$| $$ $$ $$
|  $$$$$$  /$$____/ | $$\ $$$$| $$\ $$$$| $$\ $$$$      | $$__/      | $$   | $$__  $$       \____  $$| $$  | $$| $$  | $$| $$  $$$$
 \____  $$| $$      | $$ \ $$$| $$ \ $$$| $$ \ $$$      | $$         | $$   | $$  | $$       /$$  \ $$| $$  | $$| $$  | $$| $$\  $$$
 /$$  \ $$| $$$$$$$$|  $$$$$$/|  $$$$$$/|  $$$$$$/      | $$$$$$$$   | $$   | $$  | $$      |  $$$$$$/|  $$$$$$/|  $$$$$$/| $$ \  $$
|  $$$$$$/|________/ \______/  \______/  \______/       |________/   |__/   |__/  |__/       \______/  \______/  \______/ |__/  \__/
 \_  $$_/                                                                                                                           
   \__/                                                                                                                             
                                                                                                                                    
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣴⣶⣾⣿⣿⣿⣿⣷⣶⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣠⣴⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀
⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀
⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀
⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀ ⠀⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀
⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⣀⠀⠀⠀⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⡆
⣾⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⣀⡤⠖⠛⠉⠛⠶⣤⣀⠀⠹⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⡿⠞⠋⠁⠀⠀⠀⠀⠀⠀⠀⠈⠙⠳⣿⣿⣿⣿⣿⣿⣿⣿
⢿⣿⣿⣿⣿⣿⣿⣿⣿⡳⢦⣄⠀⠀⠀⠀⠀⠀⠀⣠⡴⢚⣿⣿⣿⣿⣿⣿⣿⡿                    TG:    https://t.me/ETH2kChat
⠸⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠈⠙⠶⣄⣀⣤⠖⠋⠁⣠⣿⣿⣿⣿⣿⣿⣿⣿               Twitter:    https://twitter.com/2kETHtoken
⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠉⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀                          
⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀
⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀
⠀⠀⠀⠀⠀⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠀⠀⠀⠀⠀                    Don't yeet cunts, let's pump this <3 
⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠻⠿⢿⣿⣿⣿⣿⡿⠿⠟⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀           



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

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

// SPDX-License-Identifier: BUSL-1.1
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

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

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

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

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

// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.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.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 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 override returns (string memory) {
        return _name;
    }

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the 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 override returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` 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 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * 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 `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `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.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

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

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


interface DexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface DexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
}

pragma solidity ^0.8.17;

contract ETH2000USD is ERC20, Ownable {
    address public pool;
    uint256 _startTime;
    uint256 constant _startTotalSupply = 222_000_00 * 1e18;
    uint256 constant _startMaxWallet = _startTotalSupply / 300;
    uint256 constant _addMaxWalletPerSec = (_startTotalSupply - _startMaxWallet) / 79000;

    mapping(address => bool) public excludedFromMaxWallet;
    mapping(address => bool) public excludedFromFees;

    address public taxWallet = 0xcb852dB5345b98522cE71f2E2178890D05CDb51f;
    address public immutable pair;
    DexRouter public immutable router;

    uint256 public constant buyTax = 4;
    uint256 public constant sellTax = 4;

    bool public swapping;

    modifier inSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    constructor() ERC20("$2000 ETH", "2kETH") {
        router = DexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = DexFactory(router.factory()).createPair(address(this), router.WETH());
        _mint(msg.sender, _startTotalSupply);
        _approve(address(this), address(router), ~uint256(0));

        excludedFromFees[owner()] = true;
        excludedFromFees[address(this)] = true;
        excludedFromFees[taxWallet] = true;

        excludedFromMaxWallet[owner()] = true;
        excludedFromMaxWallet[address(this)] = true;
        excludedFromMaxWallet[taxWallet] = true;
    }

    receive() external payable {}

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function start(address poolAddress) external onlyOwner {
        pool = poolAddress;
        _startTime = block.timestamp;
    }

    function maxWallet(address acc) public view returns (uint256) {
        if (pool == address(0) || acc == pool || acc == owner()) {
            return _startTotalSupply;
        }
        return _startMaxWallet + (block.timestamp - _startTime) * _addMaxWalletPerSec;
    }

    function addMaxWalletPerSec() external pure returns (uint256) {
        return _addMaxWalletPerSec;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual override {
        if (to != pair) {
            if (!excludedFromMaxWallet[to] && !excludedFromMaxWallet[from]) {
                require(balanceOf(to) + amount <= maxWallet(to), "max wallet limit");
            }
        }
        if (!excludedFromFees[from] && !excludedFromFees[to]) {
            require(pool != address(0), "not started");
            if (from == pair) {
                uint256 taxAmount = (amount * buyTax) / 100;
                super._transfer(address(from), address(this), taxAmount);
                amount = amount - taxAmount;
            } else if (to == pair) {
                uint256 taxAmount = (amount * sellTax) / 100;
                super._transfer(address(from), address(this), taxAmount);
                amount = amount - taxAmount;
                if (!swapping) {
                    _InternalSwap();
                }
            }
        }

        super._transfer(from, to, amount);
    }

    function _InternalSwap() internal inSwap {
        address[] memory path = new address[](2);

        path[0] = address(this);
        path[1] = address(router.WETH());

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            balanceOf(address(this)), 0, path, address(taxWallet), block.timestamp
        );
    }

    function setExcludeFromMaxWallet(address wallet, bool isExcluded) public onlyOwner {
        excludedFromMaxWallet[wallet] = isExcluded;
    }

    function setExcludeFromFees(address wallet, bool isExcluded) public onlyOwner {
        excludedFromFees[wallet] = isExcluded;
    }

    function withdrawETH() public onlyOwner {
        (bool success,) = owner().call{value: address(this).balance}("");
    }

    function withdrawTokens(address token) public onlyOwner {
        IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"addMaxWalletPerSec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract DexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"setExcludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolAddress","type":"address"}],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"amount","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273cb852db5345b98522ce71f2e2178890d05cdb51f600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b506040518060400160405280600981526020017f24323030302045544800000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f326b4554480000000000000000000000000000000000000000000000000000008152508160039081620000e4919062000c63565b508060049081620000f6919062000c63565b505050620001196200010d620005a960201b60201c565b620005b160201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d5919062000db4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000265919062000db4565b6040518363ffffffff1660e01b81526004016200028492919062000df7565b6020604051808303816000875af1158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000db4565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200031a336a125d0869555f01c30000006200067760201b60201c565b620003313060a051600019620007e460201b60201c565b60016009600062000347620009b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600062000480620009b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200106f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e09062000e85565b60405180910390fd5b620006fd60008383620009df60201b60201c565b806002600082825462000711919062000ed6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007c4919062000f22565b60405180910390a3620007e060008383620009e460201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000856576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084d9062000fb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008bf906200104d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620009a8919062000f22565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6b57607f821691505b60208210810362000a815762000a8062000a23565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000aeb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aac565b62000af7868362000aac565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b4462000b3e62000b388462000b0f565b62000b19565b62000b0f565b9050919050565b6000819050919050565b62000b608362000b23565b62000b7862000b6f8262000b4b565b84845462000ab9565b825550505050565b600090565b62000b8f62000b80565b62000b9c81848462000b55565b505050565b5b8181101562000bc45762000bb860008262000b85565b60018101905062000ba2565b5050565b601f82111562000c135762000bdd8162000a87565b62000be88462000a9c565b8101602085101562000bf8578190505b62000c1062000c078562000a9c565b83018262000ba1565b50505b505050565b600082821c905092915050565b600062000c386000198460080262000c18565b1980831691505092915050565b600062000c53838362000c25565b9150826002028217905092915050565b62000c6e82620009e9565b67ffffffffffffffff81111562000c8a5762000c89620009f4565b5b62000c96825462000a52565b62000ca382828562000bc8565b600060209050601f83116001811462000cdb576000841562000cc6578287015190505b62000cd2858262000c45565b86555062000d42565b601f19841662000ceb8662000a87565b60005b8281101562000d155784890151825560018201915060208501945060208101905062000cee565b8683101562000d35578489015162000d31601f89168262000c25565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d7c8262000d4f565b9050919050565b62000d8e8162000d6f565b811462000d9a57600080fd5b50565b60008151905062000dae8162000d83565b92915050565b60006020828403121562000dcd5762000dcc62000d4a565b5b600062000ddd8482850162000d9d565b91505092915050565b62000df18162000d6f565b82525050565b600060408201905062000e0e600083018562000de6565b62000e1d602083018462000de6565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e6d601f8362000e24565b915062000e7a8262000e35565b602082019050919050565b6000602082019050818103600083015262000ea08162000e5e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ee38262000b0f565b915062000ef08362000b0f565b925082820190508082111562000f0b5762000f0a62000ea7565b5b92915050565b62000f1c8162000b0f565b82525050565b600060208201905062000f39600083018462000f11565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000f9d60248362000e24565b915062000faa8262000f3f565b604082019050919050565b6000602082019050818103600083015262000fd08162000f8e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200103560228362000e24565b9150620010428262000fd7565b604082019050919050565b60006020820190508181036000830152620010688162001026565b9050919050565b60805160a051612b6f620010b86000396000818161108701528181611b590152611c36015260008181610c5d015281816113080152818161159e015261162d0152612b6f6000f3fe6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063d63cad2211610095578063e086e5ec11610064578063e086e5ec146106c1578063e73793ec146106d8578063f2fde38b14610715578063f887ea401461073e576101d8565b8063d63cad22146105f5578063dbe66ca01461061e578063dd0b281e1461065b578063dd62ed3e14610684576101d8565b8063a457c2d7116100d1578063a457c2d714610525578063a8aa1b3114610562578063a9059cbb1461058d578063cc1776d3146105ca576101d8565b80638da5cb5b146104a6578063929f1360146104d157806395d89b41146104fa576101d8565b8063313ce5671161016f57806370a082311161013e57806370a08231146103ea578063715018a6146104275780637d99f9a41461043e5780638d855f151461047b576101d8565b8063313ce5671461032e578063395093511461035957806349df728c146103965780634f7041a5146103bf576101d8565b80631732cded116101ab5780631732cded1461027057806318160ddd1461029b57806323b872dd146102c65780632dc0562d14610303576101d8565b806306fdde03146101dd578063095ea7b31461020857806316f0115b14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610769565b6040516101ff9190611daa565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190611e65565b6107fb565b60405161023c9190611ec0565b60405180910390f35b34801561025157600080fd5b5061025a61081e565b6040516102679190611eea565b60405180910390f35b34801561027c57600080fd5b50610285610844565b6040516102929190611ec0565b60405180910390f35b3480156102a757600080fd5b506102b0610857565b6040516102bd9190611f14565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190611f2f565b610861565b6040516102fa9190611ec0565b60405180910390f35b34801561030f57600080fd5b50610318610890565b6040516103259190611eea565b60405180910390f35b34801561033a57600080fd5b506103436108b6565b6040516103509190611f9e565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190611e65565b6108bf565b60405161038d9190611ec0565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b89190611fb9565b6108f6565b005b3480156103cb57600080fd5b506103d4610a00565b6040516103e19190611f14565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190611fb9565b610a05565b60405161041e9190611f14565b60405180910390f35b34801561043357600080fd5b5061043c610a4d565b005b34801561044a57600080fd5b5061046560048036038101906104609190611fb9565b610a61565b6040516104729190611ec0565b60405180910390f35b34801561048757600080fd5b50610490610a81565b60405161049d9190611f14565b60405180910390f35b3480156104b257600080fd5b506104bb610ac5565b6040516104c89190611eea565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190612012565b610aef565b005b34801561050657600080fd5b5061050f610b52565b60405161051c9190611daa565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190611e65565b610be4565b6040516105599190611ec0565b60405180910390f35b34801561056e57600080fd5b50610577610c5b565b6040516105849190611eea565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190611e65565b610c7f565b6040516105c19190611ec0565b60405180910390f35b3480156105d657600080fd5b506105df610ca2565b6040516105ec9190611f14565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190612012565b610ca7565b005b34801561062a57600080fd5b5061064560048036038101906106409190611fb9565b610d0a565b6040516106529190611ec0565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190611fb9565b610d2a565b005b34801561069057600080fd5b506106ab60048036038101906106a69190612052565b610d7d565b6040516106b89190611f14565b60405180910390f35b3480156106cd57600080fd5b506106d6610e04565b005b3480156106e457600080fd5b506106ff60048036038101906106fa9190611fb9565b610e82565b60405161070c9190611f14565b60405180910390f35b34801561072157600080fd5b5061073c60048036038101906107379190611fb9565b611002565b005b34801561074a57600080fd5b50610753611085565b60405161076091906120f1565b60405180910390f35b6060600380546107789061213b565b80601f01602080910402602001604051908101604052809291908181526020018280546107a49061213b565b80156107f15780601f106107c6576101008083540402835291602001916107f1565b820191906000526020600020905b8154815290600101906020018083116107d457829003601f168201915b5050505050905090565b6000806108066110a9565b90506108138185856110b1565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60149054906101000a900460ff1681565b6000600254905090565b60008061086c6110a9565b905061087985828561127a565b610884858585611306565b60019150509392505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b6000806108ca6110a9565b90506108eb8185856108dc8589610d7d565b6108e6919061219b565b6110b1565b600191505092915050565b6108fe6116e5565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610922610ac5565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161095b9190611eea565b602060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c91906121e4565b6040518363ffffffff1660e01b81526004016109b9929190612211565b6020604051808303816000875af11580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fc919061224f565b5050565b600481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a556116e5565b610a5f6000611763565b565b60086020528060005260406000206000915054906101000a900460ff1681565b60006201349861012c6a125d0869555f01c3000000610aa091906122ab565b6a125d0869555f01c3000000610ab691906122dc565b610ac091906122ab565b905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610af76116e5565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060048054610b619061213b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8d9061213b565b8015610bda5780601f10610baf57610100808354040283529160200191610bda565b820191906000526020600020905b815481529060010190602001808311610bbd57829003601f168201915b5050505050905090565b600080610bef6110a9565b90506000610bfd8286610d7d565b905083811015610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990612382565b60405180910390fd5b610c4f82868684036110b1565b60019250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610c8a6110a9565b9050610c97818585611306565b600191505092915050565b600481565b610caf6116e5565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b610d326116e5565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260078190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e0c6116e5565b6000610e16610ac5565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e39906123d3565b60006040518083038185875af1925050503d8060008114610e76576040519150601f19603f3d011682016040523d82523d6000602084013e610e7b565b606091505b5050905050565b60008073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f2d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80610f6a5750610f3b610ac5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610f82576a125d0869555f01c30000009050610ffd565b6201349861012c6a125d0869555f01c3000000610f9f91906122ab565b6a125d0869555f01c3000000610fb591906122dc565b610fbf91906122ab565b60075442610fcd91906122dc565b610fd791906123e8565b61012c6a125d0869555f01c3000000610ff091906122ab565b610ffa919061219b565b90505b919050565b61100a6116e5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611079576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110709061249c565b60405180910390fd5b61108281611763565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111179061252e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361118f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611186906125c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126d9190611f14565b60405180910390a3505050565b60006112868484610d7d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461130057818110156112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e99061262c565b60405180910390fd5b6112ff84848484036110b1565b5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461146257600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113fd5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156114615761140b82610e82565b8161141584610a05565b61141f919061219b565b1115611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790612698565b60405180910390fd5b5b5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156115065750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116d557600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390612704565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361162b576000606460048361160091906123e8565b61160a91906122ab565b9050611617843083611829565b808261162391906122dc565b9150506116d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d3576000606460048361168f91906123e8565b61169991906122ab565b90506116a6843083611829565b80826116b291906122dc565b9150600a60149054906101000a900460ff166116d1576116d0611a9f565b5b505b5b5b6116e0838383611829565b505050565b6116ed6110a9565b73ffffffffffffffffffffffffffffffffffffffff1661170b610ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175890612770565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90612802565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90612894565b60405180910390fd5b611912838383611d10565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90612926565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a869190611f14565b60405180910390a3611a99848484611d15565b50505050565b6001600a60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611ad757611ad6612946565b5b604051908082528060200260200182016040528015611b055781602001602082028036833780820191505090505b5090503081600081518110611b1d57611b1c612975565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be691906129b9565b81600181518110611bfa57611bf9612975565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947611c7930610a05565b600084600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611cc0959493929190612adf565b600060405180830381600087803b158015611cda57600080fd5b505af1158015611cee573d6000803e3d6000fd5b50505050506000600a60146101000a81548160ff021916908315150217905550565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d54578082015181840152602081019050611d39565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d7c82611d1a565b611d868185611d25565b9350611d96818560208601611d36565b611d9f81611d60565b840191505092915050565b60006020820190508181036000830152611dc48184611d71565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611dfc82611dd1565b9050919050565b611e0c81611df1565b8114611e1757600080fd5b50565b600081359050611e2981611e03565b92915050565b6000819050919050565b611e4281611e2f565b8114611e4d57600080fd5b50565b600081359050611e5f81611e39565b92915050565b60008060408385031215611e7c57611e7b611dcc565b5b6000611e8a85828601611e1a565b9250506020611e9b85828601611e50565b9150509250929050565b60008115159050919050565b611eba81611ea5565b82525050565b6000602082019050611ed56000830184611eb1565b92915050565b611ee481611df1565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b611f0e81611e2f565b82525050565b6000602082019050611f296000830184611f05565b92915050565b600080600060608486031215611f4857611f47611dcc565b5b6000611f5686828701611e1a565b9350506020611f6786828701611e1a565b9250506040611f7886828701611e50565b9150509250925092565b600060ff82169050919050565b611f9881611f82565b82525050565b6000602082019050611fb36000830184611f8f565b92915050565b600060208284031215611fcf57611fce611dcc565b5b6000611fdd84828501611e1a565b91505092915050565b611fef81611ea5565b8114611ffa57600080fd5b50565b60008135905061200c81611fe6565b92915050565b6000806040838503121561202957612028611dcc565b5b600061203785828601611e1a565b925050602061204885828601611ffd565b9150509250929050565b6000806040838503121561206957612068611dcc565b5b600061207785828601611e1a565b925050602061208885828601611e1a565b9150509250929050565b6000819050919050565b60006120b76120b26120ad84611dd1565b612092565b611dd1565b9050919050565b60006120c98261209c565b9050919050565b60006120db826120be565b9050919050565b6120eb816120d0565b82525050565b600060208201905061210660008301846120e2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061215357607f821691505b6020821081036121665761216561210c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121a682611e2f565b91506121b183611e2f565b92508282019050808211156121c9576121c861216c565b5b92915050565b6000815190506121de81611e39565b92915050565b6000602082840312156121fa576121f9611dcc565b5b6000612208848285016121cf565b91505092915050565b60006040820190506122266000830185611edb565b6122336020830184611f05565b9392505050565b60008151905061224981611fe6565b92915050565b60006020828403121561226557612264611dcc565b5b60006122738482850161223a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122b682611e2f565b91506122c183611e2f565b9250826122d1576122d061227c565b5b828204905092915050565b60006122e782611e2f565b91506122f283611e2f565b925082820390508181111561230a5761230961216c565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061236c602583611d25565b915061237782612310565b604082019050919050565b6000602082019050818103600083015261239b8161235f565b9050919050565b600081905092915050565b50565b60006123bd6000836123a2565b91506123c8826123ad565b600082019050919050565b60006123de826123b0565b9150819050919050565b60006123f382611e2f565b91506123fe83611e2f565b925082820261240c81611e2f565b915082820484148315176124235761242261216c565b5b5092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612486602683611d25565b91506124918261242a565b604082019050919050565b600060208201905081810360008301526124b581612479565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612518602483611d25565b9150612523826124bc565b604082019050919050565b600060208201905081810360008301526125478161250b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006125aa602283611d25565b91506125b58261254e565b604082019050919050565b600060208201905081810360008301526125d98161259d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612616601d83611d25565b9150612621826125e0565b602082019050919050565b6000602082019050818103600083015261264581612609565b9050919050565b7f6d61782077616c6c6574206c696d697400000000000000000000000000000000600082015250565b6000612682601083611d25565b915061268d8261264c565b602082019050919050565b600060208201905081810360008301526126b181612675565b9050919050565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b60006126ee600b83611d25565b91506126f9826126b8565b602082019050919050565b6000602082019050818103600083015261271d816126e1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061275a602083611d25565b915061276582612724565b602082019050919050565b600060208201905081810360008301526127898161274d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127ec602583611d25565b91506127f782612790565b604082019050919050565b6000602082019050818103600083015261281b816127df565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061287e602383611d25565b915061288982612822565b604082019050919050565b600060208201905081810360008301526128ad81612871565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612910602683611d25565b915061291b826128b4565b604082019050919050565b6000602082019050818103600083015261293f81612903565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506129b381611e03565b92915050565b6000602082840312156129cf576129ce611dcc565b5b60006129dd848285016129a4565b91505092915050565b6000819050919050565b6000612a0b612a06612a01846129e6565b612092565b611e2f565b9050919050565b612a1b816129f0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a5681611df1565b82525050565b6000612a688383612a4d565b60208301905092915050565b6000602082019050919050565b6000612a8c82612a21565b612a968185612a2c565b9350612aa183612a3d565b8060005b83811015612ad2578151612ab98882612a5c565b9750612ac483612a74565b925050600181019050612aa5565b5085935050505092915050565b600060a082019050612af46000830188611f05565b612b016020830187612a12565b8181036040830152612b138186612a81565b9050612b226060830185611edb565b612b2f6080830184611f05565b969550505050505056fea2646970667358221220eb197e63c88f8522fc9c4a4d21ba1b514489491b281a2ce14338671dc35af0b964736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063d63cad2211610095578063e086e5ec11610064578063e086e5ec146106c1578063e73793ec146106d8578063f2fde38b14610715578063f887ea401461073e576101d8565b8063d63cad22146105f5578063dbe66ca01461061e578063dd0b281e1461065b578063dd62ed3e14610684576101d8565b8063a457c2d7116100d1578063a457c2d714610525578063a8aa1b3114610562578063a9059cbb1461058d578063cc1776d3146105ca576101d8565b80638da5cb5b146104a6578063929f1360146104d157806395d89b41146104fa576101d8565b8063313ce5671161016f57806370a082311161013e57806370a08231146103ea578063715018a6146104275780637d99f9a41461043e5780638d855f151461047b576101d8565b8063313ce5671461032e578063395093511461035957806349df728c146103965780634f7041a5146103bf576101d8565b80631732cded116101ab5780631732cded1461027057806318160ddd1461029b57806323b872dd146102c65780632dc0562d14610303576101d8565b806306fdde03146101dd578063095ea7b31461020857806316f0115b14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610769565b6040516101ff9190611daa565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190611e65565b6107fb565b60405161023c9190611ec0565b60405180910390f35b34801561025157600080fd5b5061025a61081e565b6040516102679190611eea565b60405180910390f35b34801561027c57600080fd5b50610285610844565b6040516102929190611ec0565b60405180910390f35b3480156102a757600080fd5b506102b0610857565b6040516102bd9190611f14565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190611f2f565b610861565b6040516102fa9190611ec0565b60405180910390f35b34801561030f57600080fd5b50610318610890565b6040516103259190611eea565b60405180910390f35b34801561033a57600080fd5b506103436108b6565b6040516103509190611f9e565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190611e65565b6108bf565b60405161038d9190611ec0565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b89190611fb9565b6108f6565b005b3480156103cb57600080fd5b506103d4610a00565b6040516103e19190611f14565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190611fb9565b610a05565b60405161041e9190611f14565b60405180910390f35b34801561043357600080fd5b5061043c610a4d565b005b34801561044a57600080fd5b5061046560048036038101906104609190611fb9565b610a61565b6040516104729190611ec0565b60405180910390f35b34801561048757600080fd5b50610490610a81565b60405161049d9190611f14565b60405180910390f35b3480156104b257600080fd5b506104bb610ac5565b6040516104c89190611eea565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190612012565b610aef565b005b34801561050657600080fd5b5061050f610b52565b60405161051c9190611daa565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190611e65565b610be4565b6040516105599190611ec0565b60405180910390f35b34801561056e57600080fd5b50610577610c5b565b6040516105849190611eea565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190611e65565b610c7f565b6040516105c19190611ec0565b60405180910390f35b3480156105d657600080fd5b506105df610ca2565b6040516105ec9190611f14565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190612012565b610ca7565b005b34801561062a57600080fd5b5061064560048036038101906106409190611fb9565b610d0a565b6040516106529190611ec0565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190611fb9565b610d2a565b005b34801561069057600080fd5b506106ab60048036038101906106a69190612052565b610d7d565b6040516106b89190611f14565b60405180910390f35b3480156106cd57600080fd5b506106d6610e04565b005b3480156106e457600080fd5b506106ff60048036038101906106fa9190611fb9565b610e82565b60405161070c9190611f14565b60405180910390f35b34801561072157600080fd5b5061073c60048036038101906107379190611fb9565b611002565b005b34801561074a57600080fd5b50610753611085565b60405161076091906120f1565b60405180910390f35b6060600380546107789061213b565b80601f01602080910402602001604051908101604052809291908181526020018280546107a49061213b565b80156107f15780601f106107c6576101008083540402835291602001916107f1565b820191906000526020600020905b8154815290600101906020018083116107d457829003601f168201915b5050505050905090565b6000806108066110a9565b90506108138185856110b1565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60149054906101000a900460ff1681565b6000600254905090565b60008061086c6110a9565b905061087985828561127a565b610884858585611306565b60019150509392505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b6000806108ca6110a9565b90506108eb8185856108dc8589610d7d565b6108e6919061219b565b6110b1565b600191505092915050565b6108fe6116e5565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610922610ac5565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161095b9190611eea565b602060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c91906121e4565b6040518363ffffffff1660e01b81526004016109b9929190612211565b6020604051808303816000875af11580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fc919061224f565b5050565b600481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a556116e5565b610a5f6000611763565b565b60086020528060005260406000206000915054906101000a900460ff1681565b60006201349861012c6a125d0869555f01c3000000610aa091906122ab565b6a125d0869555f01c3000000610ab691906122dc565b610ac091906122ab565b905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610af76116e5565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060048054610b619061213b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8d9061213b565b8015610bda5780601f10610baf57610100808354040283529160200191610bda565b820191906000526020600020905b815481529060010190602001808311610bbd57829003601f168201915b5050505050905090565b600080610bef6110a9565b90506000610bfd8286610d7d565b905083811015610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990612382565b60405180910390fd5b610c4f82868684036110b1565b60019250505092915050565b7f000000000000000000000000be955fb81236dc9f47d72e75f29d78c7b4097b9481565b600080610c8a6110a9565b9050610c97818585611306565b600191505092915050565b600481565b610caf6116e5565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b610d326116e5565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260078190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e0c6116e5565b6000610e16610ac5565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e39906123d3565b60006040518083038185875af1925050503d8060008114610e76576040519150601f19603f3d011682016040523d82523d6000602084013e610e7b565b606091505b5050905050565b60008073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f2d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80610f6a5750610f3b610ac5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610f82576a125d0869555f01c30000009050610ffd565b6201349861012c6a125d0869555f01c3000000610f9f91906122ab565b6a125d0869555f01c3000000610fb591906122dc565b610fbf91906122ab565b60075442610fcd91906122dc565b610fd791906123e8565b61012c6a125d0869555f01c3000000610ff091906122ab565b610ffa919061219b565b90505b919050565b61100a6116e5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611079576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110709061249c565b60405180910390fd5b61108281611763565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111179061252e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361118f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611186906125c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126d9190611f14565b60405180910390a3505050565b60006112868484610d7d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461130057818110156112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e99061262c565b60405180910390fd5b6112ff84848484036110b1565b5b50505050565b7f000000000000000000000000be955fb81236dc9f47d72e75f29d78c7b4097b9473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461146257600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113fd5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156114615761140b82610e82565b8161141584610a05565b61141f919061219b565b1115611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790612698565b60405180910390fd5b5b5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156115065750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116d557600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390612704565b60405180910390fd5b7f000000000000000000000000be955fb81236dc9f47d72e75f29d78c7b4097b9473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361162b576000606460048361160091906123e8565b61160a91906122ab565b9050611617843083611829565b808261162391906122dc565b9150506116d4565b7f000000000000000000000000be955fb81236dc9f47d72e75f29d78c7b4097b9473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d3576000606460048361168f91906123e8565b61169991906122ab565b90506116a6843083611829565b80826116b291906122dc565b9150600a60149054906101000a900460ff166116d1576116d0611a9f565b5b505b5b5b6116e0838383611829565b505050565b6116ed6110a9565b73ffffffffffffffffffffffffffffffffffffffff1661170b610ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175890612770565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90612802565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90612894565b60405180910390fd5b611912838383611d10565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90612926565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a869190611f14565b60405180910390a3611a99848484611d15565b50505050565b6001600a60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611ad757611ad6612946565b5b604051908082528060200260200182016040528015611b055781602001602082028036833780820191505090505b5090503081600081518110611b1d57611b1c612975565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be691906129b9565b81600181518110611bfa57611bf9612975565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947611c7930610a05565b600084600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611cc0959493929190612adf565b600060405180830381600087803b158015611cda57600080fd5b505af1158015611cee573d6000803e3d6000fd5b50505050506000600a60146101000a81548160ff021916908315150217905550565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d54578082015181840152602081019050611d39565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d7c82611d1a565b611d868185611d25565b9350611d96818560208601611d36565b611d9f81611d60565b840191505092915050565b60006020820190508181036000830152611dc48184611d71565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611dfc82611dd1565b9050919050565b611e0c81611df1565b8114611e1757600080fd5b50565b600081359050611e2981611e03565b92915050565b6000819050919050565b611e4281611e2f565b8114611e4d57600080fd5b50565b600081359050611e5f81611e39565b92915050565b60008060408385031215611e7c57611e7b611dcc565b5b6000611e8a85828601611e1a565b9250506020611e9b85828601611e50565b9150509250929050565b60008115159050919050565b611eba81611ea5565b82525050565b6000602082019050611ed56000830184611eb1565b92915050565b611ee481611df1565b82525050565b6000602082019050611eff6000830184611edb565b92915050565b611f0e81611e2f565b82525050565b6000602082019050611f296000830184611f05565b92915050565b600080600060608486031215611f4857611f47611dcc565b5b6000611f5686828701611e1a565b9350506020611f6786828701611e1a565b9250506040611f7886828701611e50565b9150509250925092565b600060ff82169050919050565b611f9881611f82565b82525050565b6000602082019050611fb36000830184611f8f565b92915050565b600060208284031215611fcf57611fce611dcc565b5b6000611fdd84828501611e1a565b91505092915050565b611fef81611ea5565b8114611ffa57600080fd5b50565b60008135905061200c81611fe6565b92915050565b6000806040838503121561202957612028611dcc565b5b600061203785828601611e1a565b925050602061204885828601611ffd565b9150509250929050565b6000806040838503121561206957612068611dcc565b5b600061207785828601611e1a565b925050602061208885828601611e1a565b9150509250929050565b6000819050919050565b60006120b76120b26120ad84611dd1565b612092565b611dd1565b9050919050565b60006120c98261209c565b9050919050565b60006120db826120be565b9050919050565b6120eb816120d0565b82525050565b600060208201905061210660008301846120e2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061215357607f821691505b6020821081036121665761216561210c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121a682611e2f565b91506121b183611e2f565b92508282019050808211156121c9576121c861216c565b5b92915050565b6000815190506121de81611e39565b92915050565b6000602082840312156121fa576121f9611dcc565b5b6000612208848285016121cf565b91505092915050565b60006040820190506122266000830185611edb565b6122336020830184611f05565b9392505050565b60008151905061224981611fe6565b92915050565b60006020828403121561226557612264611dcc565b5b60006122738482850161223a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122b682611e2f565b91506122c183611e2f565b9250826122d1576122d061227c565b5b828204905092915050565b60006122e782611e2f565b91506122f283611e2f565b925082820390508181111561230a5761230961216c565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061236c602583611d25565b915061237782612310565b604082019050919050565b6000602082019050818103600083015261239b8161235f565b9050919050565b600081905092915050565b50565b60006123bd6000836123a2565b91506123c8826123ad565b600082019050919050565b60006123de826123b0565b9150819050919050565b60006123f382611e2f565b91506123fe83611e2f565b925082820261240c81611e2f565b915082820484148315176124235761242261216c565b5b5092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612486602683611d25565b91506124918261242a565b604082019050919050565b600060208201905081810360008301526124b581612479565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612518602483611d25565b9150612523826124bc565b604082019050919050565b600060208201905081810360008301526125478161250b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006125aa602283611d25565b91506125b58261254e565b604082019050919050565b600060208201905081810360008301526125d98161259d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612616601d83611d25565b9150612621826125e0565b602082019050919050565b6000602082019050818103600083015261264581612609565b9050919050565b7f6d61782077616c6c6574206c696d697400000000000000000000000000000000600082015250565b6000612682601083611d25565b915061268d8261264c565b602082019050919050565b600060208201905081810360008301526126b181612675565b9050919050565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b60006126ee600b83611d25565b91506126f9826126b8565b602082019050919050565b6000602082019050818103600083015261271d816126e1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061275a602083611d25565b915061276582612724565b602082019050919050565b600060208201905081810360008301526127898161274d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127ec602583611d25565b91506127f782612790565b604082019050919050565b6000602082019050818103600083015261281b816127df565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061287e602383611d25565b915061288982612822565b604082019050919050565b600060208201905081810360008301526128ad81612871565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612910602683611d25565b915061291b826128b4565b604082019050919050565b6000602082019050818103600083015261293f81612903565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506129b381611e03565b92915050565b6000602082840312156129cf576129ce611dcc565b5b60006129dd848285016129a4565b91505092915050565b6000819050919050565b6000612a0b612a06612a01846129e6565b612092565b611e2f565b9050919050565b612a1b816129f0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a5681611df1565b82525050565b6000612a688383612a4d565b60208301905092915050565b6000602082019050919050565b6000612a8c82612a21565b612a968185612a2c565b9350612aa183612a3d565b8060005b83811015612ad2578151612ab98882612a5c565b9750612ac483612a74565b925050600181019050612aa5565b5085935050505092915050565b600060a082019050612af46000830188611f05565b612b016020830187612a12565b8181036040830152612b138186612a81565b9050612b226060830185611edb565b612b2f6080830184611f05565b969550505050505056fea2646970667358221220eb197e63c88f8522fc9c4a4d21ba1b514489491b281a2ce14338671dc35af0b964736f6c63430008110033

Deployed Bytecode Sourcemap

25228:4069:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12420:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14780:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25273:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25899:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13549:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15561:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25660:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26686:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16231:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29148:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25814:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13720:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5889:103;;;;;;;;;;;;;:::i;:::-;;25543:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27210:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5248:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28723:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12639:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16972:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25736:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14053:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25855:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28875:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25603:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26787:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14309:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29017:123;;;;;;;;;;;;;:::i;:::-;;26926:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6147:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25772:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12420:100;12474:13;12507:5;12500:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12420:100;:::o;14780:201::-;14863:4;14880:13;14896:12;:10;:12::i;:::-;14880:28;;14919:32;14928:5;14935:7;14944:6;14919:8;:32::i;:::-;14969:4;14962:11;;;14780:201;;;;:::o;25273:19::-;;;;;;;;;;;;;:::o;25899:20::-;;;;;;;;;;;;;:::o;13549:108::-;13610:7;13637:12;;13630:19;;13549:108;:::o;15561:261::-;15658:4;15675:15;15693:12;:10;:12::i;:::-;15675:30;;15716:38;15732:4;15738:7;15747:6;15716:15;:38::i;:::-;15765:27;15775:4;15781:2;15785:6;15765:9;:27::i;:::-;15810:4;15803:11;;;15561:261;;;;;:::o;25660:69::-;;;;;;;;;;;;;:::o;26686:93::-;26744:5;26769:2;26762:9;;26686:93;:::o;16231:238::-;16319:4;16336:13;16352:12;:10;:12::i;:::-;16336:28;;16375:64;16384:5;16391:7;16428:10;16400:25;16410:5;16417:7;16400:9;:25::i;:::-;:38;;;;:::i;:::-;16375:8;:64::i;:::-;16457:4;16450:11;;;16231:238;;;;:::o;29148:146::-;5134:13;:11;:13::i;:::-;29222:5:::1;29215:22;;;29238:7;:5;:7::i;:::-;29254:5;29247:23;;;29279:4;29247:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29215:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29148:146:::0;:::o;25814:34::-;25847:1;25814:34;:::o;13720:127::-;13794:7;13821:9;:18;13831:7;13821:18;;;;;;;;;;;;;;;;13814:25;;13720:127;;;:::o;5889:103::-;5134:13;:11;:13::i;:::-;5954:30:::1;5981:1;5954:18;:30::i;:::-;5889:103::o:0;25543:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;27210:107::-;27263:7;25529:5;25440:3;25361:17;25420:23;;;;:::i;:::-;25361:17;25490:35;;;;:::i;:::-;25489:45;;;;:::i;:::-;27283:26;;27210:107;:::o;5248:87::-;5294:7;5321:6;;;;;;;;;;;5314:13;;5248:87;:::o;28723:144::-;5134:13;:11;:13::i;:::-;28849:10:::1;28817:21;:29;28839:6;28817:29;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;28723:144:::0;;:::o;12639:104::-;12695:13;12728:7;12721:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12639:104;:::o;16972:436::-;17065:4;17082:13;17098:12;:10;:12::i;:::-;17082:28;;17121:24;17148:25;17158:5;17165:7;17148:9;:25::i;:::-;17121:52;;17212:15;17192:16;:35;;17184:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17305:60;17314:5;17321:7;17349:15;17330:16;:34;17305:8;:60::i;:::-;17396:4;17389:11;;;;16972:436;;;;:::o;25736:29::-;;;:::o;14053:193::-;14132:4;14149:13;14165:12;:10;:12::i;:::-;14149:28;;14188;14198:5;14205:2;14209:6;14188:9;:28::i;:::-;14234:4;14227:11;;;14053:193;;;;:::o;25855:35::-;25889:1;25855:35;:::o;28875:134::-;5134:13;:11;:13::i;:::-;28991:10:::1;28964:16;:24;28981:6;28964:24;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;28875:134:::0;;:::o;25603:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;26787:131::-;5134:13;:11;:13::i;:::-;26860:11:::1;26853:4;;:18;;;;;;;;;;;;;;;;;;26895:15;26882:10;:28;;;;26787:131:::0;:::o;14309:151::-;14398:7;14425:11;:18;14437:5;14425:18;;;;;;;;;;;;;;;:27;14444:7;14425:27;;;;;;;;;;;;;;;;14418:34;;14309:151;;;;:::o;29017:123::-;5134:13;:11;:13::i;:::-;29069:12:::1;29086:7;:5;:7::i;:::-;:12;;29106:21;29086:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29068:64;;;29057:83;29017:123::o:0;26926:276::-;26979:7;27019:1;27003:18;;:4;;;;;;;;;;;:18;;;:33;;;;27032:4;;;;;;;;;;;27025:11;;:3;:11;;;27003:33;:51;;;;27047:7;:5;:7::i;:::-;27040:14;;:3;:14;;;27003:51;26999:108;;;25361:17;27071:24;;;;26999:108;25529:5;25440:3;25361:17;25420:23;;;;:::i;:::-;25361:17;25490:35;;;;:::i;:::-;25489:45;;;;:::i;:::-;27161:10;;27143:15;:28;;;;:::i;:::-;27142:52;;;;:::i;:::-;25440:3;25361:17;25420:23;;;;:::i;:::-;27124:70;;;;:::i;:::-;27117:77;;26926:276;;;;:::o;6147:201::-;5134:13;:11;:13::i;:::-;6256:1:::1;6236:22;;:8;:22;;::::0;6228:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6312:28;6331:8;6312:18;:28::i;:::-;6147:201:::0;:::o;25772:33::-;;;:::o;3765:98::-;3818:7;3845:10;3838:17;;3765:98;:::o;20973:346::-;21092:1;21075:19;;:5;:19;;;21067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21173:1;21154:21;;:7;:21;;;21146:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21257:6;21227:11;:18;21239:5;21227:18;;;;;;;;;;;;;;;:27;21246:7;21227:27;;;;;;;;;;;;;;;:36;;;;21295:7;21279:32;;21288:5;21279:32;;;21304:6;21279:32;;;;;;:::i;:::-;;;;;;;;20973:346;;;:::o;21610:419::-;21711:24;21738:25;21748:5;21755:7;21738:9;:25::i;:::-;21711:52;;21798:17;21778:16;:37;21774:248;;21860:6;21840:16;:26;;21832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21944:51;21953:5;21960:7;21988:6;21969:16;:25;21944:8;:51::i;:::-;21774:248;21700:329;21610:419;;;:::o;27325:1037::-;27433:4;27427:10;;:2;:10;;;27423:209;;27459:21;:25;27481:2;27459:25;;;;;;;;;;;;;;;;;;;;;;;;;27458:26;:58;;;;;27489:21;:27;27511:4;27489:27;;;;;;;;;;;;;;;;;;;;;;;;;27488:28;27458:58;27454:167;;;27571:13;27581:2;27571:9;:13::i;:::-;27561:6;27545:13;27555:2;27545:9;:13::i;:::-;:22;;;;:::i;:::-;:39;;27537:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27454:167;27423:209;27647:16;:22;27664:4;27647:22;;;;;;;;;;;;;;;;;;;;;;;;;27646:23;:48;;;;;27674:16;:20;27691:2;27674:20;;;;;;;;;;;;;;;;;;;;;;;;;27673:21;27646:48;27642:667;;;27735:1;27719:18;;:4;;;;;;;;;;;:18;;;27711:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;27780:4;27772:12;;:4;:12;;;27768:530;;27805:17;27845:3;25847:1;27826:6;:15;;;;:::i;:::-;27825:23;;;;:::i;:::-;27805:43;;27867:56;27891:4;27906;27913:9;27867:15;:56::i;:::-;27960:9;27951:6;:18;;;;:::i;:::-;27942:27;;27786:199;27768:530;;;28001:4;27995:10;;:2;:10;;;27991:307;;28026:17;28067:3;25889:1;28047:6;:16;;;;:::i;:::-;28046:24;;;;:::i;:::-;28026:44;;28089:56;28113:4;28128;28135:9;28089:15;:56::i;:::-;28182:9;28173:6;:18;;;;:::i;:::-;28164:27;;28215:8;;;;;;;;;;;28210:73;;28248:15;:13;:15::i;:::-;28210:73;28007:291;27991:307;27768:530;27642:667;28321:33;28337:4;28343:2;28347:6;28321:15;:33::i;:::-;27325:1037;;;:::o;5413:132::-;5488:12;:10;:12::i;:::-;5477:23;;:7;:5;:7::i;:::-;:23;;;5469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5413:132::o;6508:191::-;6582:16;6601:6;;;;;;;;;;;6582:25;;6627:8;6618:6;;:17;;;;;;;;;;;;;;;;;;6682:8;6651:40;;6672:8;6651:40;;;;;;;;;;;;6571:128;6508:191;:::o;17878:806::-;17991:1;17975:18;;:4;:18;;;17967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18068:1;18054:16;;:2;:16;;;18046:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18123:38;18144:4;18150:2;18154:6;18123:20;:38::i;:::-;18174:19;18196:9;:15;18206:4;18196:15;;;;;;;;;;;;;;;;18174:37;;18245:6;18230:11;:21;;18222:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;18362:6;18348:11;:20;18330:9;:15;18340:4;18330:15;;;;;;;;;;;;;;;:38;;;;18565:6;18548:9;:13;18558:2;18548:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;18615:2;18600:26;;18609:4;18600:26;;;18619:6;18600:26;;;;;;:::i;:::-;;;;;;;;18639:37;18659:4;18665:2;18669:6;18639:19;:37::i;:::-;17956:728;17878:806;;;:::o;28370:345::-;25968:4;25957:8;;:15;;;;;;;;;;;;;;;;;;28422:21:::1;28460:1;28446:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28422:40;;28493:4;28475;28480:1;28475:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28527:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28509:4;28514:1;28509:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;28554:6;:57;;;28626:24;28644:4;28626:9;:24::i;:::-;28652:1;28655:4;28669:9;;;;;;;;;;;28681:15;28554:153;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28411:304;26006:5:::0;25995:8;;:16;;;;;;;;;;;;;;;;;;28370:345::o;22629:91::-;;;;:::o;23324:90::-;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:222::-;4015:4;4053:2;4042:9;4038:18;4030:26;;4066:71;4134:1;4123:9;4119:17;4110:6;4066:71;:::i;:::-;3922:222;;;;:::o;4150:619::-;4227:6;4235;4243;4292:2;4280:9;4271:7;4267:23;4263:32;4260:119;;;4298:79;;:::i;:::-;4260:119;4418:1;4443:53;4488:7;4479:6;4468:9;4464:22;4443:53;:::i;:::-;4433:63;;4389:117;4545:2;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4516:118;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4150:619;;;;;:::o;4775:86::-;4810:7;4850:4;4843:5;4839:16;4828:27;;4775:86;;;:::o;4867:112::-;4950:22;4966:5;4950:22;:::i;:::-;4945:3;4938:35;4867:112;;:::o;4985:214::-;5074:4;5112:2;5101:9;5097:18;5089:26;;5125:67;5189:1;5178:9;5174:17;5165:6;5125:67;:::i;:::-;4985:214;;;;:::o;5205:329::-;5264:6;5313:2;5301:9;5292:7;5288:23;5284:32;5281:119;;;5319:79;;:::i;:::-;5281:119;5439:1;5464:53;5509:7;5500:6;5489:9;5485:22;5464:53;:::i;:::-;5454:63;;5410:117;5205:329;;;;:::o;5540:116::-;5610:21;5625:5;5610:21;:::i;:::-;5603:5;5600:32;5590:60;;5646:1;5643;5636:12;5590:60;5540:116;:::o;5662:133::-;5705:5;5743:6;5730:20;5721:29;;5759:30;5783:5;5759:30;:::i;:::-;5662:133;;;;:::o;5801:468::-;5866:6;5874;5923:2;5911:9;5902:7;5898:23;5894:32;5891:119;;;5929:79;;:::i;:::-;5891:119;6049:1;6074:53;6119:7;6110:6;6099:9;6095:22;6074:53;:::i;:::-;6064:63;;6020:117;6176:2;6202:50;6244:7;6235:6;6224:9;6220:22;6202:50;:::i;:::-;6192:60;;6147:115;5801:468;;;;;:::o;6275:474::-;6343:6;6351;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:53;6596:7;6587:6;6576:9;6572:22;6551:53;:::i;:::-;6541:63;;6497:117;6653:2;6679:53;6724:7;6715:6;6704:9;6700:22;6679:53;:::i;:::-;6669:63;;6624:118;6275:474;;;;;:::o;6755:60::-;6783:3;6804:5;6797:12;;6755:60;;;:::o;6821:142::-;6871:9;6904:53;6922:34;6931:24;6949:5;6931:24;:::i;:::-;6922:34;:::i;:::-;6904:53;:::i;:::-;6891:66;;6821:142;;;:::o;6969:126::-;7019:9;7052:37;7083:5;7052:37;:::i;:::-;7039:50;;6969:126;;;:::o;7101:143::-;7168:9;7201:37;7232:5;7201:37;:::i;:::-;7188:50;;7101:143;;;:::o;7250:165::-;7354:54;7402:5;7354:54;:::i;:::-;7349:3;7342:67;7250:165;;:::o;7421:256::-;7531:4;7569:2;7558:9;7554:18;7546:26;;7582:88;7667:1;7656:9;7652:17;7643:6;7582:88;:::i;:::-;7421:256;;;;:::o;7683:180::-;7731:77;7728:1;7721:88;7828:4;7825:1;7818:15;7852:4;7849:1;7842:15;7869:320;7913:6;7950:1;7944:4;7940:12;7930:22;;7997:1;7991:4;7987:12;8018:18;8008:81;;8074:4;8066:6;8062:17;8052:27;;8008:81;8136:2;8128:6;8125:14;8105:18;8102:38;8099:84;;8155:18;;:::i;:::-;8099:84;7920:269;7869:320;;;:::o;8195:180::-;8243:77;8240:1;8233:88;8340:4;8337:1;8330:15;8364:4;8361:1;8354:15;8381:191;8421:3;8440:20;8458:1;8440:20;:::i;:::-;8435:25;;8474:20;8492:1;8474:20;:::i;:::-;8469:25;;8517:1;8514;8510:9;8503:16;;8538:3;8535:1;8532:10;8529:36;;;8545:18;;:::i;:::-;8529:36;8381:191;;;;:::o;8578:143::-;8635:5;8666:6;8660:13;8651:22;;8682:33;8709:5;8682:33;:::i;:::-;8578:143;;;;:::o;8727:351::-;8797:6;8846:2;8834:9;8825:7;8821:23;8817:32;8814:119;;;8852:79;;:::i;:::-;8814:119;8972:1;8997:64;9053:7;9044:6;9033:9;9029:22;8997:64;:::i;:::-;8987:74;;8943:128;8727:351;;;;:::o;9084:332::-;9205:4;9243:2;9232:9;9228:18;9220:26;;9256:71;9324:1;9313:9;9309:17;9300:6;9256:71;:::i;:::-;9337:72;9405:2;9394:9;9390:18;9381:6;9337:72;:::i;:::-;9084:332;;;;;:::o;9422:137::-;9476:5;9507:6;9501:13;9492:22;;9523:30;9547:5;9523:30;:::i;:::-;9422:137;;;;:::o;9565:345::-;9632:6;9681:2;9669:9;9660:7;9656:23;9652:32;9649:119;;;9687:79;;:::i;:::-;9649:119;9807:1;9832:61;9885:7;9876:6;9865:9;9861:22;9832:61;:::i;:::-;9822:71;;9778:125;9565:345;;;;:::o;9916:180::-;9964:77;9961:1;9954:88;10061:4;10058:1;10051:15;10085:4;10082:1;10075:15;10102:185;10142:1;10159:20;10177:1;10159:20;:::i;:::-;10154:25;;10193:20;10211:1;10193:20;:::i;:::-;10188:25;;10232:1;10222:35;;10237:18;;:::i;:::-;10222:35;10279:1;10276;10272:9;10267:14;;10102:185;;;;:::o;10293:194::-;10333:4;10353:20;10371:1;10353:20;:::i;:::-;10348:25;;10387:20;10405:1;10387:20;:::i;:::-;10382:25;;10431:1;10428;10424:9;10416:17;;10455:1;10449:4;10446:11;10443:37;;;10460:18;;:::i;:::-;10443:37;10293:194;;;;:::o;10493:224::-;10633:34;10629:1;10621:6;10617:14;10610:58;10702:7;10697:2;10689:6;10685:15;10678:32;10493:224;:::o;10723:366::-;10865:3;10886:67;10950:2;10945:3;10886:67;:::i;:::-;10879:74;;10962:93;11051:3;10962:93;:::i;:::-;11080:2;11075:3;11071:12;11064:19;;10723:366;;;:::o;11095:419::-;11261:4;11299:2;11288:9;11284:18;11276:26;;11348:9;11342:4;11338:20;11334:1;11323:9;11319:17;11312:47;11376:131;11502:4;11376:131;:::i;:::-;11368:139;;11095:419;;;:::o;11520:147::-;11621:11;11658:3;11643:18;;11520:147;;;;:::o;11673:114::-;;:::o;11793:398::-;11952:3;11973:83;12054:1;12049:3;11973:83;:::i;:::-;11966:90;;12065:93;12154:3;12065:93;:::i;:::-;12183:1;12178:3;12174:11;12167:18;;11793:398;;;:::o;12197:379::-;12381:3;12403:147;12546:3;12403:147;:::i;:::-;12396:154;;12567:3;12560:10;;12197:379;;;:::o;12582:410::-;12622:7;12645:20;12663:1;12645:20;:::i;:::-;12640:25;;12679:20;12697:1;12679:20;:::i;:::-;12674:25;;12734:1;12731;12727:9;12756:30;12774:11;12756:30;:::i;:::-;12745:41;;12935:1;12926:7;12922:15;12919:1;12916:22;12896:1;12889:9;12869:83;12846:139;;12965:18;;:::i;:::-;12846:139;12630:362;12582:410;;;;:::o;12998:225::-;13138:34;13134:1;13126:6;13122:14;13115:58;13207:8;13202:2;13194:6;13190:15;13183:33;12998:225;:::o;13229:366::-;13371:3;13392:67;13456:2;13451:3;13392:67;:::i;:::-;13385:74;;13468:93;13557:3;13468:93;:::i;:::-;13586:2;13581:3;13577:12;13570:19;;13229:366;;;:::o;13601:419::-;13767:4;13805:2;13794:9;13790:18;13782:26;;13854:9;13848:4;13844:20;13840:1;13829:9;13825:17;13818:47;13882:131;14008:4;13882:131;:::i;:::-;13874:139;;13601:419;;;:::o;14026:223::-;14166:34;14162:1;14154:6;14150:14;14143:58;14235:6;14230:2;14222:6;14218:15;14211:31;14026:223;:::o;14255:366::-;14397:3;14418:67;14482:2;14477:3;14418:67;:::i;:::-;14411:74;;14494:93;14583:3;14494:93;:::i;:::-;14612:2;14607:3;14603:12;14596:19;;14255:366;;;:::o;14627:419::-;14793:4;14831:2;14820:9;14816:18;14808:26;;14880:9;14874:4;14870:20;14866:1;14855:9;14851:17;14844:47;14908:131;15034:4;14908:131;:::i;:::-;14900:139;;14627:419;;;:::o;15052:221::-;15192:34;15188:1;15180:6;15176:14;15169:58;15261:4;15256:2;15248:6;15244:15;15237:29;15052:221;:::o;15279:366::-;15421:3;15442:67;15506:2;15501:3;15442:67;:::i;:::-;15435:74;;15518:93;15607:3;15518:93;:::i;:::-;15636:2;15631:3;15627:12;15620:19;;15279:366;;;:::o;15651:419::-;15817:4;15855:2;15844:9;15840:18;15832:26;;15904:9;15898:4;15894:20;15890:1;15879:9;15875:17;15868:47;15932:131;16058:4;15932:131;:::i;:::-;15924:139;;15651:419;;;:::o;16076:179::-;16216:31;16212:1;16204:6;16200:14;16193:55;16076:179;:::o;16261:366::-;16403:3;16424:67;16488:2;16483:3;16424:67;:::i;:::-;16417:74;;16500:93;16589:3;16500:93;:::i;:::-;16618:2;16613:3;16609:12;16602:19;;16261:366;;;:::o;16633:419::-;16799:4;16837:2;16826:9;16822:18;16814:26;;16886:9;16880:4;16876:20;16872:1;16861:9;16857:17;16850:47;16914:131;17040:4;16914:131;:::i;:::-;16906:139;;16633:419;;;:::o;17058:166::-;17198:18;17194:1;17186:6;17182:14;17175:42;17058:166;:::o;17230:366::-;17372:3;17393:67;17457:2;17452:3;17393:67;:::i;:::-;17386:74;;17469:93;17558:3;17469:93;:::i;:::-;17587:2;17582:3;17578:12;17571:19;;17230:366;;;:::o;17602:419::-;17768:4;17806:2;17795:9;17791:18;17783:26;;17855:9;17849:4;17845:20;17841:1;17830:9;17826:17;17819:47;17883:131;18009:4;17883:131;:::i;:::-;17875:139;;17602:419;;;:::o;18027:161::-;18167:13;18163:1;18155:6;18151:14;18144:37;18027:161;:::o;18194:366::-;18336:3;18357:67;18421:2;18416:3;18357:67;:::i;:::-;18350:74;;18433:93;18522:3;18433:93;:::i;:::-;18551:2;18546:3;18542:12;18535:19;;18194:366;;;:::o;18566:419::-;18732:4;18770:2;18759:9;18755:18;18747:26;;18819:9;18813:4;18809:20;18805:1;18794:9;18790:17;18783:47;18847:131;18973:4;18847:131;:::i;:::-;18839:139;;18566:419;;;:::o;18991:182::-;19131:34;19127:1;19119:6;19115:14;19108:58;18991:182;:::o;19179:366::-;19321:3;19342:67;19406:2;19401:3;19342:67;:::i;:::-;19335:74;;19418:93;19507:3;19418:93;:::i;:::-;19536:2;19531:3;19527:12;19520:19;;19179:366;;;:::o;19551:419::-;19717:4;19755:2;19744:9;19740:18;19732:26;;19804:9;19798:4;19794:20;19790:1;19779:9;19775:17;19768:47;19832:131;19958:4;19832:131;:::i;:::-;19824:139;;19551:419;;;:::o;19976:224::-;20116:34;20112:1;20104:6;20100:14;20093:58;20185:7;20180:2;20172:6;20168:15;20161:32;19976:224;:::o;20206:366::-;20348:3;20369:67;20433:2;20428:3;20369:67;:::i;:::-;20362:74;;20445:93;20534:3;20445:93;:::i;:::-;20563:2;20558:3;20554:12;20547:19;;20206:366;;;:::o;20578:419::-;20744:4;20782:2;20771:9;20767:18;20759:26;;20831:9;20825:4;20821:20;20817:1;20806:9;20802:17;20795:47;20859:131;20985:4;20859:131;:::i;:::-;20851:139;;20578:419;;;:::o;21003:222::-;21143:34;21139:1;21131:6;21127:14;21120:58;21212:5;21207:2;21199:6;21195:15;21188:30;21003:222;:::o;21231:366::-;21373:3;21394:67;21458:2;21453:3;21394:67;:::i;:::-;21387:74;;21470:93;21559:3;21470:93;:::i;:::-;21588:2;21583:3;21579:12;21572:19;;21231:366;;;:::o;21603:419::-;21769:4;21807:2;21796:9;21792:18;21784:26;;21856:9;21850:4;21846:20;21842:1;21831:9;21827:17;21820:47;21884:131;22010:4;21884:131;:::i;:::-;21876:139;;21603:419;;;:::o;22028:225::-;22168:34;22164:1;22156:6;22152:14;22145:58;22237:8;22232:2;22224:6;22220:15;22213:33;22028:225;:::o;22259:366::-;22401:3;22422:67;22486:2;22481:3;22422:67;:::i;:::-;22415:74;;22498:93;22587:3;22498:93;:::i;:::-;22616:2;22611:3;22607:12;22600:19;;22259:366;;;:::o;22631:419::-;22797:4;22835:2;22824:9;22820:18;22812:26;;22884:9;22878:4;22874:20;22870:1;22859:9;22855:17;22848:47;22912:131;23038:4;22912:131;:::i;:::-;22904:139;;22631:419;;;:::o;23056:180::-;23104:77;23101:1;23094:88;23201:4;23198:1;23191:15;23225:4;23222:1;23215:15;23242:180;23290:77;23287:1;23280:88;23387:4;23384:1;23377:15;23411:4;23408:1;23401:15;23428:143;23485:5;23516:6;23510:13;23501:22;;23532:33;23559:5;23532:33;:::i;:::-;23428:143;;;;:::o;23577:351::-;23647:6;23696:2;23684:9;23675:7;23671:23;23667:32;23664:119;;;23702:79;;:::i;:::-;23664:119;23822:1;23847:64;23903:7;23894:6;23883:9;23879:22;23847:64;:::i;:::-;23837:74;;23793:128;23577:351;;;;:::o;23934:85::-;23979:7;24008:5;23997:16;;23934:85;;;:::o;24025:158::-;24083:9;24116:61;24134:42;24143:32;24169:5;24143:32;:::i;:::-;24134:42;:::i;:::-;24116:61;:::i;:::-;24103:74;;24025:158;;;:::o;24189:147::-;24284:45;24323:5;24284:45;:::i;:::-;24279:3;24272:58;24189:147;;:::o;24342:114::-;24409:6;24443:5;24437:12;24427:22;;24342:114;;;:::o;24462:184::-;24561:11;24595:6;24590:3;24583:19;24635:4;24630:3;24626:14;24611:29;;24462:184;;;;:::o;24652:132::-;24719:4;24742:3;24734:11;;24772:4;24767:3;24763:14;24755:22;;24652:132;;;:::o;24790:108::-;24867:24;24885:5;24867:24;:::i;:::-;24862:3;24855:37;24790:108;;:::o;24904:179::-;24973:10;24994:46;25036:3;25028:6;24994:46;:::i;:::-;25072:4;25067:3;25063:14;25049:28;;24904:179;;;;:::o;25089:113::-;25159:4;25191;25186:3;25182:14;25174:22;;25089:113;;;:::o;25238:732::-;25357:3;25386:54;25434:5;25386:54;:::i;:::-;25456:86;25535:6;25530:3;25456:86;:::i;:::-;25449:93;;25566:56;25616:5;25566:56;:::i;:::-;25645:7;25676:1;25661:284;25686:6;25683:1;25680:13;25661:284;;;25762:6;25756:13;25789:63;25848:3;25833:13;25789:63;:::i;:::-;25782:70;;25875:60;25928:6;25875:60;:::i;:::-;25865:70;;25721:224;25708:1;25705;25701:9;25696:14;;25661:284;;;25665:14;25961:3;25954:10;;25362:608;;;25238:732;;;;:::o;25976:831::-;26239:4;26277:3;26266:9;26262:19;26254:27;;26291:71;26359:1;26348:9;26344:17;26335:6;26291:71;:::i;:::-;26372:80;26448:2;26437:9;26433:18;26424:6;26372:80;:::i;:::-;26499:9;26493:4;26489:20;26484:2;26473:9;26469:18;26462:48;26527:108;26630:4;26621:6;26527:108;:::i;:::-;26519:116;;26645:72;26713:2;26702:9;26698:18;26689:6;26645:72;:::i;:::-;26727:73;26795:3;26784:9;26780:19;26771:6;26727:73;:::i;:::-;25976:831;;;;;;;;:::o

Swarm Source

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