ETH Price: $3,447.11 (+1.23%)
Gas: 10 Gwei

Token

DINGER (DINGER)
 

Overview

Max Total Supply

244,400,000,000 DINGER

Holders

209

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
20,819,129.251402732615858593 DINGER

Value
$0.00
0xd5b839e69054781a547721270c2e0e966d056586
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:
Dinger

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-06
*/

/*                                                                                                                  
DDDDDDDDDDDDD        IIIIIIIIIINNNNNNNN        NNNNNNNN        GGGGGGGGGGGGGEEEEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRR   
D::::::::::::DDD     I::::::::IN:::::::N       N::::::N     GGG::::::::::::GE::::::::::::::::::::ER::::::::::::::::R  
D:::::::::::::::DD   I::::::::IN::::::::N      N::::::N   GG:::::::::::::::GE::::::::::::::::::::ER::::::RRRRRR:::::R 
DDD:::::DDDDD:::::D  II::::::IIN:::::::::N     N::::::N  G:::::GGGGGGGG::::GEE::::::EEEEEEEEE::::ERR:::::R     R:::::R
  D:::::D    D:::::D   I::::I  N::::::::::N    N::::::N G:::::G       GGGGGG  E:::::E       EEEEEE  R::::R     R:::::R
  D:::::D     D:::::D  I::::I  N:::::::::::N   N::::::NG:::::G                E:::::E               R::::R     R:::::R
  D:::::D     D:::::D  I::::I  N:::::::N::::N  N::::::NG:::::G                E::::::EEEEEEEEEE     R::::RRRRRR:::::R 
  D:::::D     D:::::D  I::::I  N::::::N N::::N N::::::NG:::::G    GGGGGGGGGG  E:::::::::::::::E     R:::::::::::::RR  
  D:::::D     D:::::D  I::::I  N::::::N  N::::N:::::::NG:::::G    G::::::::G  E:::::::::::::::E     R::::RRRRRR:::::R 
  D:::::D     D:::::D  I::::I  N::::::N   N:::::::::::NG:::::G    GGGGG::::G  E::::::EEEEEEEEEE     R::::R     R:::::R
  D:::::D     D:::::D  I::::I  N::::::N    N::::::::::NG:::::G        G::::G  E:::::E               R::::R     R:::::R
  D:::::D    D:::::D   I::::I  N::::::N     N:::::::::N G:::::G       G::::G  E:::::E       EEEEEE  R::::R     R:::::R
DDD:::::DDDDD:::::D  II::::::IIN::::::N      N::::::::N  G:::::GGGGGGGG::::GEE::::::EEEEEEEE:::::ERR:::::R     R:::::R
D:::::::::::::::DD   I::::::::IN::::::N       N:::::::N   GG:::::::::::::::GE::::::::::::::::::::ER::::::R     R:::::R
D::::::::::::DDD     I::::::::IN::::::N        N::::::N     GGG::::::GGG:::GE::::::::::::::::::::ER::::::R     R:::::R
DDDDDDDDDDDDD        IIIIIIIIIINNNNNNNN         NNNNNNN        GGGGGG   GGGGEEEEEEEEEEEEEEEEEEEEEERRRRRRRR     RRRRRRR
*/

// SPDX-License-Identifier: UNLICENSED

// 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/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/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 {}
}

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


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

pragma solidity ^0.8.0;


/**
 * @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: contracts/dev/Dinger.sol

/*                                                                                                                  
DDDDDDDDDDDDD        IIIIIIIIIINNNNNNNN        NNNNNNNN        GGGGGGGGGGGGGEEEEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRR   
D::::::::::::DDD     I::::::::IN:::::::N       N::::::N     GGG::::::::::::GE::::::::::::::::::::ER::::::::::::::::R  
D:::::::::::::::DD   I::::::::IN::::::::N      N::::::N   GG:::::::::::::::GE::::::::::::::::::::ER::::::RRRRRR:::::R 
DDD:::::DDDDD:::::D  II::::::IIN:::::::::N     N::::::N  G:::::GGGGGGGG::::GEE::::::EEEEEEEEE::::ERR:::::R     R:::::R
  D:::::D    D:::::D   I::::I  N::::::::::N    N::::::N G:::::G       GGGGGG  E:::::E       EEEEEE  R::::R     R:::::R
  D:::::D     D:::::D  I::::I  N:::::::::::N   N::::::NG:::::G                E:::::E               R::::R     R:::::R
  D:::::D     D:::::D  I::::I  N:::::::N::::N  N::::::NG:::::G                E::::::EEEEEEEEEE     R::::RRRRRR:::::R 
  D:::::D     D:::::D  I::::I  N::::::N N::::N N::::::NG:::::G    GGGGGGGGGG  E:::::::::::::::E     R:::::::::::::RR  
  D:::::D     D:::::D  I::::I  N::::::N  N::::N:::::::NG:::::G    G::::::::G  E:::::::::::::::E     R::::RRRRRR:::::R 
  D:::::D     D:::::D  I::::I  N::::::N   N:::::::::::NG:::::G    GGGGG::::G  E::::::EEEEEEEEEE     R::::R     R:::::R
  D:::::D     D:::::D  I::::I  N::::::N    N::::::::::NG:::::G        G::::G  E:::::E               R::::R     R:::::R
  D:::::D    D:::::D   I::::I  N::::::N     N:::::::::N G:::::G       G::::G  E:::::E       EEEEEE  R::::R     R:::::R
DDD:::::DDDDD:::::D  II::::::IIN::::::N      N::::::::N  G:::::GGGGGGGG::::GEE::::::EEEEEEEE:::::ERR:::::R     R:::::R
D:::::::::::::::DD   I::::::::IN::::::N       N:::::::N   GG:::::::::::::::GE::::::::::::::::::::ER::::::R     R:::::R
D::::::::::::DDD     I::::::::IN::::::N        N::::::N     GGG::::::GGG:::GE::::::::::::::::::::ER::::::R     R:::::R
DDDDDDDDDDDDD        IIIIIIIIIINNNNNNNN         NNNNNNN        GGGGGG   GGGGEEEEEEEEEEEEEEEEEEEEEERRRRRRRR     RRRRRRR
*/


pragma solidity ^0.8.0;



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

    function WETH() external pure returns (address);

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

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

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

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

contract Dinger is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address taxAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public swapToEth = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyTaxFee;

    uint256 public sellTotalFees;
    uint256 public sellTaxFee;

    uint256 public tokensForTax;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("DINGER", "DINGER") {
        address contractOwner = msg.sender;

        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;

        lpPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 244_400_000_000 * 1e18;

        maxBuyAmount = (totalSupply * 10) / 1000;
        maxSellAmount = (totalSupply * 10) / 1000;
        maxWalletAmount = (totalSupply * 10) / 1000;
        swapTokensAtAmount = (totalSupply * 10) / 1000;

        // Initial buy and sell fees to punish bots
        buyTaxFee = 30;
        buyTotalFees = buyTaxFee;

        sellTaxFee = 60;
        sellTotalFees = sellTaxFee;

        taxAddress = msg.sender;

        _excludeFromMaxTransaction(contractOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(taxAddress, true);

        excludeFromFees(contractOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(taxAddress, true);

        _mint(contractOwner, totalSupply);
        transferOwnership(contractOwner);
    }

    receive() external payable {}

    function enableTrading(uint256 deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + deadBlocks;
        emit EnabledTrading();
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function manageBoughtEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    function massManageBoughtEarly(
        address[] calldata wallets,
        bool flag
    ) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            boughtEarly[wallets[i]] = flag;
        }
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newNum * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newNum * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );
        maxWalletAmount = newNum * (10 ** 18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove Uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setSwapToEth(bool _swapToEth) public onlyOwner {
        swapToEth = _swapToEth;
    }

    function updateBuyFees(uint256 _taxFee) external onlyOwner {
        buyTaxFee = _taxFee;
        buyTotalFees = buyTaxFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less.");
    }

    function updateSellFees(uint256 _taxFee) external onlyOwner {
        sellTaxFee = _taxFee;
        sellTotalFees = sellTaxFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less.");
    }

    function updateBuySellFees(uint256 _buyTaxFee, uint256 _sellTaxFee) external onlyOwner {
        buyTaxFee = _buyTaxFee;
        buyTotalFees = buyTaxFee;
        sellTaxFee = _sellTaxFee;
        sellTotalFees = sellTaxFee;
        require(sellTotalFees <= 10 && buyTotalFees <= 10, "Must keep fees at 10% or less.");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (blockForPenaltyEnd > 0) {
            require(
                !boughtEarly[from] || to == owner() || to == address(0xdead),
                "Bots cannot transfer tokens in or out except to owner or dead address."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot exceed max wallet."
                    );
                } else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot exceed max wallet."
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            if (
                earlyBuyPenaltyInEffect() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForTax += (fees * buyTaxFee) / buyTotalFees;
            } else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForTax += (fees * sellTaxFee) / sellTotalFees;
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForTax += (fees * buyTaxFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool) {
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForTax;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        bool success;

        if (swapToEth) {
            swapTokensForEth(contractBalance);
            tokensForTax = 0;
            (success, ) = address(taxAddress).call{
                value: address(this).balance
            }("");
        }

        if (!swapToEth) {
            _transfer(address(this), taxAddress, contractBalance);
            tokensForTax = 0;
            success = true;
        }
    }

    // Withdraw ETH from contract address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function updateTaxAddress(address _taxAddress) external onlyOwner {
        require(_taxAddress != address(0), "_taxAddress address cannot be 0");
        taxAddress = payable(_taxAddress);
    }

    function forceSwapBack() external onlyOwner {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }
}

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":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapToEth","type":"bool"}],"name":"setSwapToEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapToEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"_taxFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"_sellTaxFee","type":"uint256"}],"name":"updateBuySellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxAddress","type":"address"}],"name":"updateTaxAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600d55600160115f6101000a81548160ff0219169083151502179055505f601160016101000a81548160ff0219169083151502179055505f601160026101000a81548160ff0219169083151502179055506001601160036101000a81548160ff021916908315150217905550600160135f6101000a81548160ff02191690831515021790555034801562000097575f80fd5b506040518060400160405280600681526020017f44494e47455200000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f44494e4745520000000000000000000000000000000000000000000000000000815250816003908162000115919062000d9e565b50806004908162000127919062000d9e565b5050506200014a6200013e620005b860201b60201c565b620005bf60201b60201c565b5f3390505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000216919062000ee7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a2919062000ee7565b6040518363ffffffff1660e01b8152600401620002c192919062000f28565b6020604051808303815f875af1158015620002de573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000304919062000ee7565b600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000377600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200068260201b60201c565b620003ab600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200071560201b60201c565b5f6c0315b2f113c5da6d58b000000090506103e8600a82620003ce919062000f80565b620003da919062000ff7565b6006819055506103e8600a82620003f2919062000f80565b620003fe919062000ff7565b6007819055506103e8600a8262000416919062000f80565b62000422919062000ff7565b6008819055506103e8600a826200043a919062000f80565b62000446919062000ff7565b600b81905550601e601581905550601554601481905550603c60178190555060175460168190555033600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004c18360016200068260201b60201c565b620004d43060016200068260201b60201c565b620004e961dead60016200068260201b60201c565b6200051d600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200068260201b60201c565b62000530836001620007c560201b60201c565b62000543306001620007c560201b60201c565b6200055861dead6001620007c560201b60201c565b6200058c600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007c560201b60201c565b6200059e83826200087d60201b60201c565b620005af83620009e260201b60201c565b50505062001276565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051620007099291906200104a565b60405180910390a15050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200077b82826200068260201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620007d562000a7760201b60201c565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000871919062001075565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e590620010ee565b60405180910390fd5b620009015f838362000b0860201b60201c565b8060025f8282546200091491906200110e565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009c3919062001159565b60405180910390a3620009de5f838362000b0d60201b60201c565b5050565b620009f262000a7760201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5a90620011e8565b60405180910390fd5b62000a7481620005bf60201b60201c565b50565b62000a87620005b860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000aad62000b1260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000b06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afd9062001256565b60405180910390fd5b565b505050565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000bb657607f821691505b60208210810362000bcc5762000bcb62000b71565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bf3565b62000c3c868362000bf3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c8662000c8062000c7a8462000c54565b62000c5d565b62000c54565b9050919050565b5f819050919050565b62000ca18362000c66565b62000cb962000cb08262000c8d565b84845462000bff565b825550505050565b5f90565b62000ccf62000cc1565b62000cdc81848462000c96565b505050565b5b8181101562000d035762000cf75f8262000cc5565b60018101905062000ce2565b5050565b601f82111562000d525762000d1c8162000bd2565b62000d278462000be4565b8101602085101562000d37578190505b62000d4f62000d468562000be4565b83018262000ce1565b50505b505050565b5f82821c905092915050565b5f62000d745f198460080262000d57565b1980831691505092915050565b5f62000d8e838362000d63565b9150826002028217905092915050565b62000da98262000b3a565b67ffffffffffffffff81111562000dc55762000dc462000b44565b5b62000dd1825462000b9e565b62000dde82828562000d07565b5f60209050601f83116001811462000e14575f841562000dff578287015190505b62000e0b858262000d81565b86555062000e7a565b601f19841662000e248662000bd2565b5f5b8281101562000e4d5784890151825560018201915060208501945060208101905062000e26565b8683101562000e6d578489015162000e69601f89168262000d63565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000eb18262000e86565b9050919050565b62000ec38162000ea5565b811462000ece575f80fd5b50565b5f8151905062000ee18162000eb8565b92915050565b5f6020828403121562000eff5762000efe62000e82565b5b5f62000f0e8482850162000ed1565b91505092915050565b62000f228162000ea5565b82525050565b5f60408201905062000f3d5f83018562000f17565b62000f4c602083018462000f17565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f8c8262000c54565b915062000f998362000c54565b925082820262000fa98162000c54565b9150828204841483151762000fc35762000fc262000f53565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010038262000c54565b9150620010108362000c54565b92508262001023576200102262000fca565b5b828204905092915050565b5f8115159050919050565b62001044816200102e565b82525050565b5f6040820190506200105f5f83018562000f17565b6200106e602083018462001039565b9392505050565b5f6020820190506200108a5f83018462001039565b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010d6601f8362001090565b9150620010e382620010a0565b602082019050919050565b5f6020820190508181035f8301526200110781620010c8565b9050919050565b5f6200111a8262000c54565b9150620011278362000c54565b925082820190508082111562001142576200114162000f53565b5b92915050565b620011538162000c54565b82525050565b5f6020820190506200116e5f83018462001148565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f620011d060268362001090565b9150620011dd8262001174565b604082019050919050565b5f6020820190508181035f8301526200120181620011c2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200123e60208362001090565b91506200124b8262001208565b602082019050919050565b5f6020820190508181035f8301526200126f8162001230565b9050919050565b614d3880620012845f395ff3fe60806040526004361061036e575f3560e01c806388e765ff116101c5578063d257b34f116100f6578063e884f26011610094578063f2fde38b1161006e578063f2fde38b14610c49578063f5648a4f14610c71578063f8a25a9414610c87578063fd91194d14610cb157610375565b8063e884f26014610be1578063eba4c33314610bf7578063ee40166e14610c1f57610375565b8063dd62ed3e116100d0578063dd62ed3e14610b29578063e2f4560514610b65578063e620a25c14610b8f578063e800dff714610bb957610375565b8063d257b34f14610aaf578063d85ba06314610ad7578063dc3f0d0f14610b0157610375565b8063a9059cbb11610163578063bbc0c7421161013d578063bbc0c74214610a0b578063c024666814610a35578063c18bc19514610a5d578063c876d0b914610a8557610375565b8063a9059cbb14610969578063aa4bde28146109a5578063b62496f5146109cf57610375565b806395d89b411161019f57806395d89b41146108b15780639a7a23d6146108db578063a457c2d714610903578063a62068ce1461093f57610375565b806388e765ff146108335780638da5cb5b1461085d578063941fa5cd1461088757610375565b806358a6d5311161029f57806370a082311161023d578063751039fc11610217578063751039fc146107915780637571336a146107a757806382aa7c68146107cf57806385ecfd28146107f757610375565b806370a0823114610717578063715018a61461075357806371fc46881461076957610375565b80636a486a8e116102795780636a486a8e1461066f5780636b0a894c146106995780636d7adcad146106c35780636ddd1713146106ed57610375565b806358a6d531146105f35780635adf655a1461061d57806366d602ae1461064557610375565b8063281f2a0a1161030c57806339509351116102e6578063395093511461054d578063452ed4f1146105895780634a62bb65146105b357806351f205e4146105dd57610375565b8063281f2a0a146104d35780632be32b61146104fb578063313ce5671461052357610375565b806310d5de531161034857806310d5de5314610409578063130a2c3c1461044557806318160ddd1461046d57806323b872dd1461049757610375565b806306fdde03146103795780630758d924146103a3578063095ea7b3146103cd57610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610cd9565b60405161039a91906137c6565b60405180910390f35b3480156103ae575f80fd5b506103b7610d69565b6040516103c49190613860565b60405180910390f35b3480156103d8575f80fd5b506103f360048036038101906103ee91906138ef565b610d8e565b6040516104009190613947565b60405180910390f35b348015610414575f80fd5b5061042f600480360381019061042a9190613960565b610db0565b60405161043c9190613947565b60405180910390f35b348015610450575f80fd5b5061046b60048036038101906104669190613a16565b610dcd565b005b348015610478575f80fd5b50610481610e70565b60405161048e9190613a82565b60405180910390f35b3480156104a2575f80fd5b506104bd60048036038101906104b89190613a9b565b610e79565b6040516104ca9190613947565b60405180910390f35b3480156104de575f80fd5b506104f960048036038101906104f49190613aeb565b610ea7565b005b348015610506575f80fd5b50610521600480360381019061051c9190613b16565b610ecc565b005b34801561052e575f80fd5b50610537610fa0565b6040516105449190613b5c565b60405180910390f35b348015610558575f80fd5b50610573600480360381019061056e91906138ef565b610fa8565b6040516105809190613947565b60405180910390f35b348015610594575f80fd5b5061059d610fde565b6040516105aa9190613b84565b60405180910390f35b3480156105be575f80fd5b506105c7611003565b6040516105d49190613947565b60405180910390f35b3480156105e8575f80fd5b506105f1611015565b005b3480156105fe575f80fd5b506106076110e0565b6040516106149190613947565b60405180910390f35b348015610628575f80fd5b50610643600480360381019061063e9190613960565b6110eb565b005b348015610650575f80fd5b506106596111a4565b6040516106669190613a82565b60405180910390f35b34801561067a575f80fd5b506106836111aa565b6040516106909190613a82565b60405180910390f35b3480156106a4575f80fd5b506106ad6111b0565b6040516106ba9190613a82565b60405180910390f35b3480156106ce575f80fd5b506106d76111b6565b6040516106e49190613a82565b60405180910390f35b3480156106f8575f80fd5b506107016111bc565b60405161070e9190613947565b60405180910390f35b348015610722575f80fd5b5061073d60048036038101906107389190613960565b6111cf565b60405161074a9190613a82565b60405180910390f35b34801561075e575f80fd5b50610767611214565b005b348015610774575f80fd5b5061078f600480360381019061078a9190613b16565b611227565b005b34801561079c575f80fd5b506107a5611288565b005b3480156107b2575f80fd5b506107cd60048036038101906107c89190613b9d565b6112f0565b005b3480156107da575f80fd5b506107f560048036038101906107f09190613b16565b6113e5565b005b348015610802575f80fd5b5061081d60048036038101906108189190613960565b6114bd565b60405161082a9190613947565b60405180910390f35b34801561083e575f80fd5b506108476114da565b6040516108549190613a82565b60405180910390f35b348015610868575f80fd5b506108716114e0565b60405161087e9190613b84565b60405180910390f35b348015610892575f80fd5b5061089b611508565b6040516108a89190613a82565b60405180910390f35b3480156108bc575f80fd5b506108c561150e565b6040516108d291906137c6565b60405180910390f35b3480156108e6575f80fd5b5061090160048036038101906108fc9190613b9d565b61159e565b005b34801561090e575f80fd5b50610929600480360381019061092491906138ef565b611689565b6040516109369190613947565b60405180910390f35b34801561094a575f80fd5b506109536116fe565b6040516109609190613a82565b60405180910390f35b348015610974575f80fd5b5061098f600480360381019061098a91906138ef565b611704565b60405161099c9190613947565b60405180910390f35b3480156109b0575f80fd5b506109b9611726565b6040516109c69190613a82565b60405180910390f35b3480156109da575f80fd5b506109f560048036038101906109f09190613960565b61172c565b604051610a029190613947565b60405180910390f35b348015610a16575f80fd5b50610a1f611749565b604051610a2c9190613947565b60405180910390f35b348015610a40575f80fd5b50610a5b6004803603810190610a569190613b9d565b61175c565b005b348015610a68575f80fd5b50610a836004803603810190610a7e9190613b16565b61180a565b005b348015610a90575f80fd5b50610a996118de565b604051610aa69190613947565b60405180910390f35b348015610aba575f80fd5b50610ad56004803603810190610ad09190613b16565b6118f0565b005b348015610ae2575f80fd5b50610aeb611902565b604051610af89190613a82565b60405180910390f35b348015610b0c575f80fd5b50610b276004803603810190610b229190613b16565b611908565b005b348015610b34575f80fd5b50610b4f6004803603810190610b4a9190613bdb565b6119dc565b604051610b5c9190613a82565b60405180910390f35b348015610b70575f80fd5b50610b79611a5e565b604051610b869190613a82565b60405180910390f35b348015610b9a575f80fd5b50610ba3611a64565b604051610bb09190613947565b60405180910390f35b348015610bc4575f80fd5b50610bdf6004803603810190610bda9190613b9d565b611a77565b005b348015610bec575f80fd5b50610bf5611ad7565b005b348015610c02575f80fd5b50610c1d6004803603810190610c189190613b16565b611afa565b005b348015610c2a575f80fd5b50610c33611b5b565b604051610c409190613a82565b60405180910390f35b348015610c54575f80fd5b50610c6f6004803603810190610c6a9190613960565b611b61565b005b348015610c7c575f80fd5b50610c85611be3565b005b348015610c92575f80fd5b50610c9b611c58565b604051610ca89190613a82565b60405180910390f35b348015610cbc575f80fd5b50610cd76004803603810190610cd29190613c19565b611c5e565b005b606060038054610ce890613c84565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1490613c84565b8015610d5f5780601f10610d3657610100808354040283529160200191610d5f565b820191905f5260205f20905b815481529060010190602001808311610d4257829003601f168201915b5050505050905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610d98611cdf565b9050610da5818585611ce6565b600191505092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b610dd5611ea9565b5f5b83839050811015610e6a5781600f5f868685818110610df957610df8613cb4565b5b9050602002016020810190610e0e9190613960565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610dd7565b50505050565b5f600254905090565b5f80610e83611cdf565b9050610e90858285611f27565b610e9b858585611fb2565b60019150509392505050565b610eaf611ea9565b80601160036101000a81548160ff02191690831515021790555050565b610ed4611ea9565b670de0b6b3a76400006103e86002610eea610e70565b610ef49190613d0e565b610efe9190613d7c565b610f089190613d7c565b811015610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613e1c565b60405180910390fd5b670de0b6b3a764000081610f5e9190613d0e565b6006819055507ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009600654604051610f959190613a82565b60405180910390a150565b5f6012905090565b5f80610fb2611cdf565b9050610fd3818585610fc485896119dc565b610fce9190613e3a565b611ce6565b600191505092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115f9054906101000a900460ff1681565b61101d611ea9565b600b54611029306111cf565b101561106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613edd565b60405180910390fd5b6001600a60146101000a81548160ff02191690831515021790555061108d612f3e565b5f600a60146101000a81548160ff0219169083151502179055507f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516110d69190613a82565b60405180910390a1565b5f600e544310905090565b6110f3611ea9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613f45565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b60165481565b60105481565b60185481565b601160029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61121c611ea9565b6112255f613094565b565b61122f611ea9565b80601581905550601554601481905550600a6014541115611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90613fad565b60405180910390fd5b50565b611290611ea9565b5f60115f6101000a81548160ff0219169083151502179055505f60135f6101000a81548160ff0219169083151502179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b6112f8611ea9565b8061138d57600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361138c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113839061403b565b60405180910390fd5b5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113ed611ea9565b601160019054906101000a900460ff161561143d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611434906140a3565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555043600d8190555080600d546114889190613e3a565b600e819055507fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb760405160405180910390a150565b600f602052805f5260405f205f915054906101000a900460ff1681565b60065481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b60606004805461151d90613c84565b80601f016020809104026020016040519081016040528092919081815260200182805461154990613c84565b80156115945780601f1061156b57610100808354040283529160200191611594565b820191905f5260205f20905b81548152906001019060200180831161157757829003601f168201915b5050505050905090565b6115a6611ea9565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90614131565b60405180910390fd5b61163f8282613157565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f80611693611cdf565b90505f6116a082866119dc565b9050838110156116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc906141bf565b60405180910390fd5b6116f28286868403611ce6565b60019250505092915050565b600e5481565b5f8061170e611cdf565b905061171b818585611fb2565b600191505092915050565b60085481565b601b602052805f5260405f205f915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611764611ea9565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117fe9190613947565b60405180910390a25050565b611812611ea9565b670de0b6b3a76400006103e86003611828610e70565b6118329190613d0e565b61183c9190613d7c565b6118469190613d7c565b811015611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f9061424d565b60405180910390fd5b670de0b6b3a76400008161189c9190613d0e565b6008819055507fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc6008546040516118d39190613a82565b60405180910390a150565b60135f9054906101000a900460ff1681565b6118f8611ea9565b80600b8190555050565b60145481565b611910611ea9565b670de0b6b3a76400006103e86002611926610e70565b6119309190613d0e565b61193a9190613d7c565b6119449190613d7c565b811015611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906142db565b60405180910390fd5b670de0b6b3a76400008161199a9190613d0e565b6007819055507f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e6007546040516119d19190613a82565b60405180910390a150565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b601160039054906101000a900460ff1681565b611a7f611ea9565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611adf611ea9565b5f60135f6101000a81548160ff021916908315150217905550565b611b02611ea9565b80601781905550601754601681905550600a6016541115611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f90613fad565b60405180910390fd5b50565b600d5481565b611b69611ea9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90614369565b60405180910390fd5b611be081613094565b50565b611beb611ea9565b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051611c10906143b4565b5f6040518083038185875af1925050503d805f8114611c4a576040519150601f19603f3d011682016040523d82523d5f602084013e611c4f565b606091505b50508091505050565b60175481565b611c66611ea9565b8160158190555060155460148190555080601781905550601754601681905550600a60165411158015611c9c5750600a60145411155b611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290613fad565b60405180910390fd5b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b90614438565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db9906144c6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e9c9190613a82565b60405180910390a3505050565b611eb1611cdf565b73ffffffffffffffffffffffffffffffffffffffff16611ecf6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c9061452e565b60405180910390fd5b565b5f611f3284846119dc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611fac5781811015611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590614596565b60405180910390fd5b611fab8484848403611ce6565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790614624565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361208e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612085906146b2565b60405180910390fd5b5f81116120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c79061471a565b60405180910390fd5b601160019054906101000a900460ff166121bf5760195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061217f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590614782565b60405180910390fd5b5b5f600e5411156122c957600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158061225157506122226114e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612289575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90614836565b60405180910390fd5b5b60115f9054906101000a900460ff1615612973576122e56114e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561235357506123236114e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123c5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612418575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561246b575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129725760135f9054906101000a900460ff16156126985760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561252e5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612697576002436125409190614854565b60125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541080156125d357506002436125939190614854565b60125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054105b612612576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612609906148f7565b60405180910390fd5b4360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504360125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127355750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127dc5760065481111561277f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277690614985565b60405180910390fd5b60085461278b836111cf565b826127969190613e3a565b11156127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce906149ed565b60405180910390fd5b612971565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128795750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128c8576007548111156128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba90614a7b565b60405180910390fd5b612970565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661296f57600854612922836111cf565b8261292d9190613e3a565b111561296e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612965906149ed565b60405180910390fd5b5b5b5b5b5b5f61297d306111cf565b90505f600b5482101590508080156129a15750601160029054906101000a900460ff165b80156129ba5750600a60149054906101000a900460ff16155b8015612a0d5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a60575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ab3575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612af6576001600a60146101000a81548160ff021916908315150217905550612adb612f3e565b5f600a60146101000a81548160ff0219169083151502179055505b5f6001905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b96575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b9f575f90505b5f8115612f2a57612bae6110e0565b8015612c005750601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612c535750601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c6057505f601454115b15612dab57600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612d59576001600f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f828254612d1a9190613e3a565b925050819055507f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a86604051612d509190613b84565b60405180910390a15b6064606386612d689190613d0e565b612d729190613d7c565b905060145460155482612d859190613d0e565b612d8f9190613d7c565b60185f828254612d9f9190613e3a565b92505081905550612f07565b601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e0257505f601654115b15612e5a57606460165486612e179190613d0e565b612e219190613d7c565b905060165460175482612e349190613d0e565b612e3e9190613d7c565b60185f828254612e4e9190613e3a565b92505081905550612f06565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612eb157505f601454115b15612f0557606460145486612ec69190613d0e565b612ed09190613d7c565b905060145460155482612ee39190613d0e565b612eed9190613d7c565b60185f828254612efd9190613e3a565b925050819055505b5b5b5f811115612f1b57612f1a8730836131ff565b5b8085612f279190614854565b94505b612f358787876131ff565b50505050505050565b5f612f48306111cf565b90505f60185490505f821480612f5d57505f81145b15612f69575050613092565b6014600b54612f789190613d0e565b821115612f91576014600b54612f8e9190613d0e565b91505b5f601160039054906101000a900460ff161561304257612fb08361346b565b5f601881905550600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ffc906143b4565b5f6040518083038185875af1925050503d805f8114613036576040519150601f19603f3d011682016040523d82523d5f602084013e61303b565b606091505b5050809150505b601160039054906101000a900460ff1661308e5761308230600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611fb2565b5f601881905550600190505b5050505b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506131b582826136a1565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361326d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326490614624565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d2906146b2565b60405180910390fd5b6132e6838383613732565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336090614b09565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134529190613a82565b60405180910390a3613465848484613737565b50505050565b5f600267ffffffffffffffff81111561348757613486614b27565b5b6040519080825280602002602001820160405280156134b55781602001602082028036833780820191505090505b50905030815f815181106134cc576134cb613cb4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613570573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135949190614b68565b816001815181106135a8576135a7613cb4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061360e3060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ce6565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613670959493929190614c83565b5f604051808303815f87803b158015613687575f80fd5b505af1158015613699573d5f803e3d5ffd5b505050505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051613726929190614cdb565b60405180910390a15050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613773578082015181840152602081019050613758565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6137988261373c565b6137a28185613746565b93506137b2818560208601613756565b6137bb8161377e565b840191505092915050565b5f6020820190508181035f8301526137de818461378e565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61382861382361381e846137e6565b613805565b6137e6565b9050919050565b5f6138398261380e565b9050919050565b5f61384a8261382f565b9050919050565b61385a81613840565b82525050565b5f6020820190506138735f830184613851565b92915050565b5f80fd5b5f80fd5b5f61388b826137e6565b9050919050565b61389b81613881565b81146138a5575f80fd5b50565b5f813590506138b681613892565b92915050565b5f819050919050565b6138ce816138bc565b81146138d8575f80fd5b50565b5f813590506138e9816138c5565b92915050565b5f806040838503121561390557613904613879565b5b5f613912858286016138a8565b9250506020613923858286016138db565b9150509250929050565b5f8115159050919050565b6139418161392d565b82525050565b5f60208201905061395a5f830184613938565b92915050565b5f6020828403121561397557613974613879565b5b5f613982848285016138a8565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126139ac576139ab61398b565b5b8235905067ffffffffffffffff8111156139c9576139c861398f565b5b6020830191508360208202830111156139e5576139e4613993565b5b9250929050565b6139f58161392d565b81146139ff575f80fd5b50565b5f81359050613a10816139ec565b92915050565b5f805f60408486031215613a2d57613a2c613879565b5b5f84013567ffffffffffffffff811115613a4a57613a4961387d565b5b613a5686828701613997565b93509350506020613a6986828701613a02565b9150509250925092565b613a7c816138bc565b82525050565b5f602082019050613a955f830184613a73565b92915050565b5f805f60608486031215613ab257613ab1613879565b5b5f613abf868287016138a8565b9350506020613ad0868287016138a8565b9250506040613ae1868287016138db565b9150509250925092565b5f60208284031215613b0057613aff613879565b5b5f613b0d84828501613a02565b91505092915050565b5f60208284031215613b2b57613b2a613879565b5b5f613b38848285016138db565b91505092915050565b5f60ff82169050919050565b613b5681613b41565b82525050565b5f602082019050613b6f5f830184613b4d565b92915050565b613b7e81613881565b82525050565b5f602082019050613b975f830184613b75565b92915050565b5f8060408385031215613bb357613bb2613879565b5b5f613bc0858286016138a8565b9250506020613bd185828601613a02565b9150509250929050565b5f8060408385031215613bf157613bf0613879565b5b5f613bfe858286016138a8565b9250506020613c0f858286016138a8565b9150509250929050565b5f8060408385031215613c2f57613c2e613879565b5b5f613c3c858286016138db565b9250506020613c4d858286016138db565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c9b57607f821691505b602082108103613cae57613cad613c57565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d18826138bc565b9150613d23836138bc565b9250828202613d31816138bc565b91508282048414831517613d4857613d47613ce1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d86826138bc565b9150613d91836138bc565b925082613da157613da0613d4f565b5b828204905092915050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572205f8201527f7468616e20302e32250000000000000000000000000000000000000000000000602082015250565b5f613e06602983613746565b9150613e1182613dac565b604082019050919050565b5f6020820190508181035f830152613e3381613dfa565b9050919050565b5f613e44826138bc565b9150613e4f836138bc565b9250828201905080821115613e6757613e66613ce1565b5b92915050565b7f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e74205f8201527f6973206174206f7220686967686572207468616e207265737472696374696f6e602082015250565b5f613ec7604083613746565b9150613ed282613e6d565b604082019050919050565b5f6020820190508181035f830152613ef481613ebb565b9050919050565b7f5f7461784164647265737320616464726573732063616e6e6f742062652030005f82015250565b5f613f2f601f83613746565b9150613f3a82613efb565b602082019050919050565b5f6020820190508181035f830152613f5c81613f23565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573732e00005f82015250565b5f613f97601e83613746565b9150613fa282613f63565b602082019050919050565b5f6020820190508181035f830152613fc481613f8b565b9050919050565b7f43616e6e6f742072656d6f766520556e697377617020706169722066726f6d205f8201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b5f614025602783613746565b915061403082613fcb565b604082019050919050565b5f6020820190508181035f83015261405281614019565b9050919050565b7f43616e6e6f74207265656e61626c652074726164696e670000000000000000005f82015250565b5f61408d601783613746565b915061409882614059565b602082019050919050565b5f6020820190508181035f8301526140ba81614081565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61411b603983613746565b9150614126826140c1565b604082019050919050565b5f6020820190508181035f8301526141488161410f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141a9602583613746565b91506141b48261414f565b604082019050919050565b5f6020820190508181035f8301526141d68161419d565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f775f8201527f6572207468616e20302e33250000000000000000000000000000000000000000602082015250565b5f614237602c83613746565b9150614242826141dd565b604082019050919050565b5f6020820190508181035f8301526142648161422b565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f7765725f8201527f207468616e20302e322500000000000000000000000000000000000000000000602082015250565b5f6142c5602a83613746565b91506142d08261426b565b604082019050919050565b5f6020820190508181035f8301526142f2816142b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614353602683613746565b915061435e826142f9565b604082019050919050565b5f6020820190508181035f83015261438081614347565b9050919050565b5f81905092915050565b50565b5f61439f5f83614387565b91506143aa82614391565b5f82019050919050565b5f6143be82614394565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614422602483613746565b915061442d826143c8565b604082019050919050565b5f6020820190508181035f83015261444f81614416565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144b0602283613746565b91506144bb82614456565b604082019050919050565b5f6020820190508181035f8301526144dd816144a4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614518602083613746565b9150614523826144e4565b602082019050919050565b5f6020820190508181035f8301526145458161450c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614580601d83613746565b915061458b8261454c565b602082019050919050565b5f6020820190508181035f8301526145ad81614574565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61460e602583613746565b9150614619826145b4565b604082019050919050565b5f6020820190508181035f83015261463b81614602565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61469c602383613746565b91506146a782614642565b604082019050919050565b5f6020820190508181035f8301526146c981614690565b9050919050565b7f616d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f614704601d83613746565b915061470f826146d0565b602082019050919050565b5f6020820190508181035f830152614731816146f8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61476c601683613746565b915061477782614738565b602082019050919050565b5f6020820190508181035f83015261479981614760565b9050919050565b7f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f5f8201527f72206f75742065786365707420746f206f776e6572206f72206465616420616460208201527f64726573732e0000000000000000000000000000000000000000000000000000604082015250565b5f614820604683613746565b915061482b826147a0565b606082019050919050565b5f6020820190508181035f83015261484d81614814565b9050919050565b5f61485e826138bc565b9150614869836138bc565b925082820390508181111561488157614880613ce1565b5b92915050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b5f6148e1603583613746565b91506148ec82614887565b604082019050919050565b5f6020820190508181035f83015261490e816148d5565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b5f61496f602883613746565b915061497a82614915565b604082019050919050565b5f6020820190508181035f83015261499c81614963565b9050919050565b7f43616e6e6f7420657863656564206d61782077616c6c65742e000000000000005f82015250565b5f6149d7601983613746565b91506149e2826149a3565b602082019050919050565b5f6020820190508181035f830152614a04816149cb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b5f614a65602a83613746565b9150614a7082614a0b565b604082019050919050565b5f6020820190508181035f830152614a9281614a59565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614af3602683613746565b9150614afe82614a99565b604082019050919050565b5f6020820190508181035f830152614b2081614ae7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050614b6281613892565b92915050565b5f60208284031215614b7d57614b7c613879565b5b5f614b8a84828501614b54565b91505092915050565b5f819050919050565b5f614bb6614bb1614bac84614b93565b613805565b6138bc565b9050919050565b614bc681614b9c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614bfe81613881565b82525050565b5f614c0f8383614bf5565b60208301905092915050565b5f602082019050919050565b5f614c3182614bcc565b614c3b8185614bd6565b9350614c4683614be6565b805f5b83811015614c76578151614c5d8882614c04565b9750614c6883614c1b565b925050600181019050614c49565b5085935050505092915050565b5f60a082019050614c965f830188613a73565b614ca36020830187614bbd565b8181036040830152614cb58186614c27565b9050614cc46060830185613b75565b614cd16080830184613a73565b9695505050505050565b5f604082019050614cee5f830185613b75565b614cfb6020830184613938565b939250505056fea2646970667358221220c1c223cea43d7e74749c76e5de8b4b20cc39dda9dfeb2af689b52599f3fd126264736f6c63430008160033

Deployed Bytecode

0x60806040526004361061036e575f3560e01c806388e765ff116101c5578063d257b34f116100f6578063e884f26011610094578063f2fde38b1161006e578063f2fde38b14610c49578063f5648a4f14610c71578063f8a25a9414610c87578063fd91194d14610cb157610375565b8063e884f26014610be1578063eba4c33314610bf7578063ee40166e14610c1f57610375565b8063dd62ed3e116100d0578063dd62ed3e14610b29578063e2f4560514610b65578063e620a25c14610b8f578063e800dff714610bb957610375565b8063d257b34f14610aaf578063d85ba06314610ad7578063dc3f0d0f14610b0157610375565b8063a9059cbb11610163578063bbc0c7421161013d578063bbc0c74214610a0b578063c024666814610a35578063c18bc19514610a5d578063c876d0b914610a8557610375565b8063a9059cbb14610969578063aa4bde28146109a5578063b62496f5146109cf57610375565b806395d89b411161019f57806395d89b41146108b15780639a7a23d6146108db578063a457c2d714610903578063a62068ce1461093f57610375565b806388e765ff146108335780638da5cb5b1461085d578063941fa5cd1461088757610375565b806358a6d5311161029f57806370a082311161023d578063751039fc11610217578063751039fc146107915780637571336a146107a757806382aa7c68146107cf57806385ecfd28146107f757610375565b806370a0823114610717578063715018a61461075357806371fc46881461076957610375565b80636a486a8e116102795780636a486a8e1461066f5780636b0a894c146106995780636d7adcad146106c35780636ddd1713146106ed57610375565b806358a6d531146105f35780635adf655a1461061d57806366d602ae1461064557610375565b8063281f2a0a1161030c57806339509351116102e6578063395093511461054d578063452ed4f1146105895780634a62bb65146105b357806351f205e4146105dd57610375565b8063281f2a0a146104d35780632be32b61146104fb578063313ce5671461052357610375565b806310d5de531161034857806310d5de5314610409578063130a2c3c1461044557806318160ddd1461046d57806323b872dd1461049757610375565b806306fdde03146103795780630758d924146103a3578063095ea7b3146103cd57610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610cd9565b60405161039a91906137c6565b60405180910390f35b3480156103ae575f80fd5b506103b7610d69565b6040516103c49190613860565b60405180910390f35b3480156103d8575f80fd5b506103f360048036038101906103ee91906138ef565b610d8e565b6040516104009190613947565b60405180910390f35b348015610414575f80fd5b5061042f600480360381019061042a9190613960565b610db0565b60405161043c9190613947565b60405180910390f35b348015610450575f80fd5b5061046b60048036038101906104669190613a16565b610dcd565b005b348015610478575f80fd5b50610481610e70565b60405161048e9190613a82565b60405180910390f35b3480156104a2575f80fd5b506104bd60048036038101906104b89190613a9b565b610e79565b6040516104ca9190613947565b60405180910390f35b3480156104de575f80fd5b506104f960048036038101906104f49190613aeb565b610ea7565b005b348015610506575f80fd5b50610521600480360381019061051c9190613b16565b610ecc565b005b34801561052e575f80fd5b50610537610fa0565b6040516105449190613b5c565b60405180910390f35b348015610558575f80fd5b50610573600480360381019061056e91906138ef565b610fa8565b6040516105809190613947565b60405180910390f35b348015610594575f80fd5b5061059d610fde565b6040516105aa9190613b84565b60405180910390f35b3480156105be575f80fd5b506105c7611003565b6040516105d49190613947565b60405180910390f35b3480156105e8575f80fd5b506105f1611015565b005b3480156105fe575f80fd5b506106076110e0565b6040516106149190613947565b60405180910390f35b348015610628575f80fd5b50610643600480360381019061063e9190613960565b6110eb565b005b348015610650575f80fd5b506106596111a4565b6040516106669190613a82565b60405180910390f35b34801561067a575f80fd5b506106836111aa565b6040516106909190613a82565b60405180910390f35b3480156106a4575f80fd5b506106ad6111b0565b6040516106ba9190613a82565b60405180910390f35b3480156106ce575f80fd5b506106d76111b6565b6040516106e49190613a82565b60405180910390f35b3480156106f8575f80fd5b506107016111bc565b60405161070e9190613947565b60405180910390f35b348015610722575f80fd5b5061073d60048036038101906107389190613960565b6111cf565b60405161074a9190613a82565b60405180910390f35b34801561075e575f80fd5b50610767611214565b005b348015610774575f80fd5b5061078f600480360381019061078a9190613b16565b611227565b005b34801561079c575f80fd5b506107a5611288565b005b3480156107b2575f80fd5b506107cd60048036038101906107c89190613b9d565b6112f0565b005b3480156107da575f80fd5b506107f560048036038101906107f09190613b16565b6113e5565b005b348015610802575f80fd5b5061081d60048036038101906108189190613960565b6114bd565b60405161082a9190613947565b60405180910390f35b34801561083e575f80fd5b506108476114da565b6040516108549190613a82565b60405180910390f35b348015610868575f80fd5b506108716114e0565b60405161087e9190613b84565b60405180910390f35b348015610892575f80fd5b5061089b611508565b6040516108a89190613a82565b60405180910390f35b3480156108bc575f80fd5b506108c561150e565b6040516108d291906137c6565b60405180910390f35b3480156108e6575f80fd5b5061090160048036038101906108fc9190613b9d565b61159e565b005b34801561090e575f80fd5b50610929600480360381019061092491906138ef565b611689565b6040516109369190613947565b60405180910390f35b34801561094a575f80fd5b506109536116fe565b6040516109609190613a82565b60405180910390f35b348015610974575f80fd5b5061098f600480360381019061098a91906138ef565b611704565b60405161099c9190613947565b60405180910390f35b3480156109b0575f80fd5b506109b9611726565b6040516109c69190613a82565b60405180910390f35b3480156109da575f80fd5b506109f560048036038101906109f09190613960565b61172c565b604051610a029190613947565b60405180910390f35b348015610a16575f80fd5b50610a1f611749565b604051610a2c9190613947565b60405180910390f35b348015610a40575f80fd5b50610a5b6004803603810190610a569190613b9d565b61175c565b005b348015610a68575f80fd5b50610a836004803603810190610a7e9190613b16565b61180a565b005b348015610a90575f80fd5b50610a996118de565b604051610aa69190613947565b60405180910390f35b348015610aba575f80fd5b50610ad56004803603810190610ad09190613b16565b6118f0565b005b348015610ae2575f80fd5b50610aeb611902565b604051610af89190613a82565b60405180910390f35b348015610b0c575f80fd5b50610b276004803603810190610b229190613b16565b611908565b005b348015610b34575f80fd5b50610b4f6004803603810190610b4a9190613bdb565b6119dc565b604051610b5c9190613a82565b60405180910390f35b348015610b70575f80fd5b50610b79611a5e565b604051610b869190613a82565b60405180910390f35b348015610b9a575f80fd5b50610ba3611a64565b604051610bb09190613947565b60405180910390f35b348015610bc4575f80fd5b50610bdf6004803603810190610bda9190613b9d565b611a77565b005b348015610bec575f80fd5b50610bf5611ad7565b005b348015610c02575f80fd5b50610c1d6004803603810190610c189190613b16565b611afa565b005b348015610c2a575f80fd5b50610c33611b5b565b604051610c409190613a82565b60405180910390f35b348015610c54575f80fd5b50610c6f6004803603810190610c6a9190613960565b611b61565b005b348015610c7c575f80fd5b50610c85611be3565b005b348015610c92575f80fd5b50610c9b611c58565b604051610ca89190613a82565b60405180910390f35b348015610cbc575f80fd5b50610cd76004803603810190610cd29190613c19565b611c5e565b005b606060038054610ce890613c84565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1490613c84565b8015610d5f5780601f10610d3657610100808354040283529160200191610d5f565b820191905f5260205f20905b815481529060010190602001808311610d4257829003601f168201915b5050505050905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610d98611cdf565b9050610da5818585611ce6565b600191505092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b610dd5611ea9565b5f5b83839050811015610e6a5781600f5f868685818110610df957610df8613cb4565b5b9050602002016020810190610e0e9190613960565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610dd7565b50505050565b5f600254905090565b5f80610e83611cdf565b9050610e90858285611f27565b610e9b858585611fb2565b60019150509392505050565b610eaf611ea9565b80601160036101000a81548160ff02191690831515021790555050565b610ed4611ea9565b670de0b6b3a76400006103e86002610eea610e70565b610ef49190613d0e565b610efe9190613d7c565b610f089190613d7c565b811015610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613e1c565b60405180910390fd5b670de0b6b3a764000081610f5e9190613d0e565b6006819055507ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009600654604051610f959190613a82565b60405180910390a150565b5f6012905090565b5f80610fb2611cdf565b9050610fd3818585610fc485896119dc565b610fce9190613e3a565b611ce6565b600191505092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115f9054906101000a900460ff1681565b61101d611ea9565b600b54611029306111cf565b101561106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613edd565b60405180910390fd5b6001600a60146101000a81548160ff02191690831515021790555061108d612f3e565b5f600a60146101000a81548160ff0219169083151502179055507f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516110d69190613a82565b60405180910390a1565b5f600e544310905090565b6110f3611ea9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613f45565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b60165481565b60105481565b60185481565b601160029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61121c611ea9565b6112255f613094565b565b61122f611ea9565b80601581905550601554601481905550600a6014541115611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90613fad565b60405180910390fd5b50565b611290611ea9565b5f60115f6101000a81548160ff0219169083151502179055505f60135f6101000a81548160ff0219169083151502179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b6112f8611ea9565b8061138d57600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361138c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113839061403b565b60405180910390fd5b5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113ed611ea9565b601160019054906101000a900460ff161561143d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611434906140a3565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555043600d8190555080600d546114889190613e3a565b600e819055507fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb760405160405180910390a150565b600f602052805f5260405f205f915054906101000a900460ff1681565b60065481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b60606004805461151d90613c84565b80601f016020809104026020016040519081016040528092919081815260200182805461154990613c84565b80156115945780601f1061156b57610100808354040283529160200191611594565b820191905f5260205f20905b81548152906001019060200180831161157757829003601f168201915b5050505050905090565b6115a6611ea9565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90614131565b60405180910390fd5b61163f8282613157565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f80611693611cdf565b90505f6116a082866119dc565b9050838110156116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc906141bf565b60405180910390fd5b6116f28286868403611ce6565b60019250505092915050565b600e5481565b5f8061170e611cdf565b905061171b818585611fb2565b600191505092915050565b60085481565b601b602052805f5260405f205f915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611764611ea9565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117fe9190613947565b60405180910390a25050565b611812611ea9565b670de0b6b3a76400006103e86003611828610e70565b6118329190613d0e565b61183c9190613d7c565b6118469190613d7c565b811015611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f9061424d565b60405180910390fd5b670de0b6b3a76400008161189c9190613d0e565b6008819055507fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc6008546040516118d39190613a82565b60405180910390a150565b60135f9054906101000a900460ff1681565b6118f8611ea9565b80600b8190555050565b60145481565b611910611ea9565b670de0b6b3a76400006103e86002611926610e70565b6119309190613d0e565b61193a9190613d7c565b6119449190613d7c565b811015611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906142db565b60405180910390fd5b670de0b6b3a76400008161199a9190613d0e565b6007819055507f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e6007546040516119d19190613a82565b60405180910390a150565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b601160039054906101000a900460ff1681565b611a7f611ea9565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611adf611ea9565b5f60135f6101000a81548160ff021916908315150217905550565b611b02611ea9565b80601781905550601754601681905550600a6016541115611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f90613fad565b60405180910390fd5b50565b600d5481565b611b69611ea9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90614369565b60405180910390fd5b611be081613094565b50565b611beb611ea9565b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051611c10906143b4565b5f6040518083038185875af1925050503d805f8114611c4a576040519150601f19603f3d011682016040523d82523d5f602084013e611c4f565b606091505b50508091505050565b60175481565b611c66611ea9565b8160158190555060155460148190555080601781905550601754601681905550600a60165411158015611c9c5750600a60145411155b611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290613fad565b60405180910390fd5b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b90614438565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db9906144c6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e9c9190613a82565b60405180910390a3505050565b611eb1611cdf565b73ffffffffffffffffffffffffffffffffffffffff16611ecf6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c9061452e565b60405180910390fd5b565b5f611f3284846119dc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611fac5781811015611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590614596565b60405180910390fd5b611fab8484848403611ce6565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790614624565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361208e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612085906146b2565b60405180910390fd5b5f81116120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c79061471a565b60405180910390fd5b601160019054906101000a900460ff166121bf5760195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061217f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590614782565b60405180910390fd5b5b5f600e5411156122c957600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158061225157506122226114e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612289575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90614836565b60405180910390fd5b5b60115f9054906101000a900460ff1615612973576122e56114e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561235357506123236114e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123c5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612418575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561246b575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129725760135f9054906101000a900460ff16156126985760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561252e5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612697576002436125409190614854565b60125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541080156125d357506002436125939190614854565b60125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054105b612612576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612609906148f7565b60405180910390fd5b4360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504360125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127355750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127dc5760065481111561277f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277690614985565b60405180910390fd5b60085461278b836111cf565b826127969190613e3a565b11156127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce906149ed565b60405180910390fd5b612971565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128795750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128c8576007548111156128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba90614a7b565b60405180910390fd5b612970565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661296f57600854612922836111cf565b8261292d9190613e3a565b111561296e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612965906149ed565b60405180910390fd5b5b5b5b5b5b5f61297d306111cf565b90505f600b5482101590508080156129a15750601160029054906101000a900460ff165b80156129ba5750600a60149054906101000a900460ff16155b8015612a0d5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a60575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ab3575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612af6576001600a60146101000a81548160ff021916908315150217905550612adb612f3e565b5f600a60146101000a81548160ff0219169083151502179055505b5f6001905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b96575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b9f575f90505b5f8115612f2a57612bae6110e0565b8015612c005750601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612c535750601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c6057505f601454115b15612dab57600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612d59576001600f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f828254612d1a9190613e3a565b925050819055507f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a86604051612d509190613b84565b60405180910390a15b6064606386612d689190613d0e565b612d729190613d7c565b905060145460155482612d859190613d0e565b612d8f9190613d7c565b60185f828254612d9f9190613e3a565b92505081905550612f07565b601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e0257505f601654115b15612e5a57606460165486612e179190613d0e565b612e219190613d7c565b905060165460175482612e349190613d0e565b612e3e9190613d7c565b60185f828254612e4e9190613e3a565b92505081905550612f06565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612eb157505f601454115b15612f0557606460145486612ec69190613d0e565b612ed09190613d7c565b905060145460155482612ee39190613d0e565b612eed9190613d7c565b60185f828254612efd9190613e3a565b925050819055505b5b5b5f811115612f1b57612f1a8730836131ff565b5b8085612f279190614854565b94505b612f358787876131ff565b50505050505050565b5f612f48306111cf565b90505f60185490505f821480612f5d57505f81145b15612f69575050613092565b6014600b54612f789190613d0e565b821115612f91576014600b54612f8e9190613d0e565b91505b5f601160039054906101000a900460ff161561304257612fb08361346b565b5f601881905550600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ffc906143b4565b5f6040518083038185875af1925050503d805f8114613036576040519150601f19603f3d011682016040523d82523d5f602084013e61303b565b606091505b5050809150505b601160039054906101000a900460ff1661308e5761308230600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611fb2565b5f601881905550600190505b5050505b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506131b582826136a1565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361326d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326490614624565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d2906146b2565b60405180910390fd5b6132e6838383613732565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336090614b09565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134529190613a82565b60405180910390a3613465848484613737565b50505050565b5f600267ffffffffffffffff81111561348757613486614b27565b5b6040519080825280602002602001820160405280156134b55781602001602082028036833780820191505090505b50905030815f815181106134cc576134cb613cb4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613570573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135949190614b68565b816001815181106135a8576135a7613cb4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061360e3060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ce6565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613670959493929190614c83565b5f604051808303815f87803b158015613687575f80fd5b505af1158015613699573d5f803e3d5ffd5b505050505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051613726929190614cdb565b60405180910390a15050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613773578082015181840152602081019050613758565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6137988261373c565b6137a28185613746565b93506137b2818560208601613756565b6137bb8161377e565b840191505092915050565b5f6020820190508181035f8301526137de818461378e565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61382861382361381e846137e6565b613805565b6137e6565b9050919050565b5f6138398261380e565b9050919050565b5f61384a8261382f565b9050919050565b61385a81613840565b82525050565b5f6020820190506138735f830184613851565b92915050565b5f80fd5b5f80fd5b5f61388b826137e6565b9050919050565b61389b81613881565b81146138a5575f80fd5b50565b5f813590506138b681613892565b92915050565b5f819050919050565b6138ce816138bc565b81146138d8575f80fd5b50565b5f813590506138e9816138c5565b92915050565b5f806040838503121561390557613904613879565b5b5f613912858286016138a8565b9250506020613923858286016138db565b9150509250929050565b5f8115159050919050565b6139418161392d565b82525050565b5f60208201905061395a5f830184613938565b92915050565b5f6020828403121561397557613974613879565b5b5f613982848285016138a8565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126139ac576139ab61398b565b5b8235905067ffffffffffffffff8111156139c9576139c861398f565b5b6020830191508360208202830111156139e5576139e4613993565b5b9250929050565b6139f58161392d565b81146139ff575f80fd5b50565b5f81359050613a10816139ec565b92915050565b5f805f60408486031215613a2d57613a2c613879565b5b5f84013567ffffffffffffffff811115613a4a57613a4961387d565b5b613a5686828701613997565b93509350506020613a6986828701613a02565b9150509250925092565b613a7c816138bc565b82525050565b5f602082019050613a955f830184613a73565b92915050565b5f805f60608486031215613ab257613ab1613879565b5b5f613abf868287016138a8565b9350506020613ad0868287016138a8565b9250506040613ae1868287016138db565b9150509250925092565b5f60208284031215613b0057613aff613879565b5b5f613b0d84828501613a02565b91505092915050565b5f60208284031215613b2b57613b2a613879565b5b5f613b38848285016138db565b91505092915050565b5f60ff82169050919050565b613b5681613b41565b82525050565b5f602082019050613b6f5f830184613b4d565b92915050565b613b7e81613881565b82525050565b5f602082019050613b975f830184613b75565b92915050565b5f8060408385031215613bb357613bb2613879565b5b5f613bc0858286016138a8565b9250506020613bd185828601613a02565b9150509250929050565b5f8060408385031215613bf157613bf0613879565b5b5f613bfe858286016138a8565b9250506020613c0f858286016138a8565b9150509250929050565b5f8060408385031215613c2f57613c2e613879565b5b5f613c3c858286016138db565b9250506020613c4d858286016138db565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c9b57607f821691505b602082108103613cae57613cad613c57565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d18826138bc565b9150613d23836138bc565b9250828202613d31816138bc565b91508282048414831517613d4857613d47613ce1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d86826138bc565b9150613d91836138bc565b925082613da157613da0613d4f565b5b828204905092915050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572205f8201527f7468616e20302e32250000000000000000000000000000000000000000000000602082015250565b5f613e06602983613746565b9150613e1182613dac565b604082019050919050565b5f6020820190508181035f830152613e3381613dfa565b9050919050565b5f613e44826138bc565b9150613e4f836138bc565b9250828201905080821115613e6757613e66613ce1565b5b92915050565b7f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e74205f8201527f6973206174206f7220686967686572207468616e207265737472696374696f6e602082015250565b5f613ec7604083613746565b9150613ed282613e6d565b604082019050919050565b5f6020820190508181035f830152613ef481613ebb565b9050919050565b7f5f7461784164647265737320616464726573732063616e6e6f742062652030005f82015250565b5f613f2f601f83613746565b9150613f3a82613efb565b602082019050919050565b5f6020820190508181035f830152613f5c81613f23565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573732e00005f82015250565b5f613f97601e83613746565b9150613fa282613f63565b602082019050919050565b5f6020820190508181035f830152613fc481613f8b565b9050919050565b7f43616e6e6f742072656d6f766520556e697377617020706169722066726f6d205f8201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b5f614025602783613746565b915061403082613fcb565b604082019050919050565b5f6020820190508181035f83015261405281614019565b9050919050565b7f43616e6e6f74207265656e61626c652074726164696e670000000000000000005f82015250565b5f61408d601783613746565b915061409882614059565b602082019050919050565b5f6020820190508181035f8301526140ba81614081565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61411b603983613746565b9150614126826140c1565b604082019050919050565b5f6020820190508181035f8301526141488161410f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141a9602583613746565b91506141b48261414f565b604082019050919050565b5f6020820190508181035f8301526141d68161419d565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f775f8201527f6572207468616e20302e33250000000000000000000000000000000000000000602082015250565b5f614237602c83613746565b9150614242826141dd565b604082019050919050565b5f6020820190508181035f8301526142648161422b565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f7765725f8201527f207468616e20302e322500000000000000000000000000000000000000000000602082015250565b5f6142c5602a83613746565b91506142d08261426b565b604082019050919050565b5f6020820190508181035f8301526142f2816142b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614353602683613746565b915061435e826142f9565b604082019050919050565b5f6020820190508181035f83015261438081614347565b9050919050565b5f81905092915050565b50565b5f61439f5f83614387565b91506143aa82614391565b5f82019050919050565b5f6143be82614394565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614422602483613746565b915061442d826143c8565b604082019050919050565b5f6020820190508181035f83015261444f81614416565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144b0602283613746565b91506144bb82614456565b604082019050919050565b5f6020820190508181035f8301526144dd816144a4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614518602083613746565b9150614523826144e4565b602082019050919050565b5f6020820190508181035f8301526145458161450c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614580601d83613746565b915061458b8261454c565b602082019050919050565b5f6020820190508181035f8301526145ad81614574565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61460e602583613746565b9150614619826145b4565b604082019050919050565b5f6020820190508181035f83015261463b81614602565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61469c602383613746565b91506146a782614642565b604082019050919050565b5f6020820190508181035f8301526146c981614690565b9050919050565b7f616d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f614704601d83613746565b915061470f826146d0565b602082019050919050565b5f6020820190508181035f830152614731816146f8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61476c601683613746565b915061477782614738565b602082019050919050565b5f6020820190508181035f83015261479981614760565b9050919050565b7f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f5f8201527f72206f75742065786365707420746f206f776e6572206f72206465616420616460208201527f64726573732e0000000000000000000000000000000000000000000000000000604082015250565b5f614820604683613746565b915061482b826147a0565b606082019050919050565b5f6020820190508181035f83015261484d81614814565b9050919050565b5f61485e826138bc565b9150614869836138bc565b925082820390508181111561488157614880613ce1565b5b92915050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b5f6148e1603583613746565b91506148ec82614887565b604082019050919050565b5f6020820190508181035f83015261490e816148d5565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b5f61496f602883613746565b915061497a82614915565b604082019050919050565b5f6020820190508181035f83015261499c81614963565b9050919050565b7f43616e6e6f7420657863656564206d61782077616c6c65742e000000000000005f82015250565b5f6149d7601983613746565b91506149e2826149a3565b602082019050919050565b5f6020820190508181035f830152614a04816149cb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b5f614a65602a83613746565b9150614a7082614a0b565b604082019050919050565b5f6020820190508181035f830152614a9281614a59565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614af3602683613746565b9150614afe82614a99565b604082019050919050565b5f6020820190508181035f830152614b2081614ae7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050614b6281613892565b92915050565b5f60208284031215614b7d57614b7c613879565b5b5f614b8a84828501614b54565b91505092915050565b5f819050919050565b5f614bb6614bb1614bac84614b93565b613805565b6138bc565b9050919050565b614bc681614b9c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614bfe81613881565b82525050565b5f614c0f8383614bf5565b60208301905092915050565b5f602082019050919050565b5f614c3182614bcc565b614c3b8185614bd6565b9350614c4683614be6565b805f5b83811015614c76578151614c5d8882614c04565b9750614c6883614c1b565b925050600181019050614c49565b5085935050505092915050565b5f60a082019050614c965f830188613a73565b614ca36020830187614bbd565b8181036040830152614cb58186614c27565b9050614cc46060830185613b75565b614cd16080830184613a73565b9695505050505050565b5f604082019050614cee5f830185613b75565b614cfb6020830184613938565b939250505056fea2646970667358221220c1c223cea43d7e74749c76e5de8b4b20cc39dda9dfeb2af689b52599f3fd126264736f6c63430008160033

Deployed Bytecode Sourcemap

25531:14647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8705:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25680:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11065:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26514:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29508:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9834:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11846:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32160:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29856:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9676:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12516:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25714:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26009:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39826:349;;;;;;;;;;;;;:::i;:::-;;37980:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39620:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25606:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26350;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25975:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26419:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26089:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10005:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21574:103;;;;;;;;;;;;;:::i;:::-;;32265:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29220:154;;;;;;;;;;;;;:::i;:::-;;31205:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28882:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25925:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25572:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20933:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26317:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8924:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31549:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13257:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25885:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10338:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25641:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26584:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26049:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33032:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30501:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26235:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30836:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26283:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30176:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10594:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25772:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26127:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29382:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29750:98;;;;;;;;;;;;;:::i;:::-;;32477:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25841:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21832:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39427:185;;;;;;;;;;;;;:::i;:::-;;26385:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32694:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8705:100;8759:13;8792:5;8785:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8705:100;:::o;25680:27::-;;;;;;;;;;;;;:::o;11065:201::-;11148:4;11165:13;11181:12;:10;:12::i;:::-;11165:28;;11204:32;11213:5;11220:7;11229:6;11204:8;:32::i;:::-;11254:4;11247:11;;;11065:201;;;;:::o;26514:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;29508:234::-;20819:13;:11;:13::i;:::-;29638:9:::1;29633:102;29657:7;;:14;;29653:1;:18;29633:102;;;29719:4;29693:11;:23;29705:7;;29713:1;29705:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29693:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;29673:3;;;;;;;29633:102;;;;29508:234:::0;;;:::o;9834:108::-;9895:7;9922:12;;9915:19;;9834:108;:::o;11846:261::-;11943:4;11960:15;11978:12;:10;:12::i;:::-;11960:30;;12001:38;12017:4;12023:7;12032:6;12001:15;:38::i;:::-;12050:27;12060:4;12066:2;12070:6;12050:9;:27::i;:::-;12095:4;12088:11;;;11846:261;;;;;:::o;32160:97::-;20819:13;:11;:13::i;:::-;32239:10:::1;32227:9;;:22;;;;;;;;;;;;;;;;;;32160:97:::0;:::o;29856:312::-;20819:13;:11;:13::i;:::-;29993:4:::1;29985;29980:1;29964:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29963:26;;;;:::i;:::-;29962:35;;;;:::i;:::-;29952:6;:45;;29930:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;30102:8;30092:6;:19;;;;:::i;:::-;30077:12;:34;;;;30127:33;30147:12;;30127:33;;;;;;:::i;:::-;;;;;;;;29856:312:::0;:::o;9676:93::-;9734:5;9759:2;9752:9;;9676:93;:::o;12516:238::-;12604:4;12621:13;12637:12;:10;:12::i;:::-;12621:28;;12660:64;12669:5;12676:7;12713:10;12685:25;12695:5;12702:7;12685:9;:25::i;:::-;:38;;;;:::i;:::-;12660:8;:64::i;:::-;12742:4;12735:11;;;12516:238;;;;:::o;25714:21::-;;;;;;;;;;;;;:::o;26009:33::-;;;;;;;;;;;;;:::o;39826:349::-;20819:13;:11;:13::i;:::-;39931:18:::1;;39903:24;39921:4;39903:9;:24::i;:::-;:46;;39881:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;40063:4;40052:8;;:15;;;;;;;;;;;;;;;;;;40078:10;:8;:10::i;:::-;40110:5;40099:8;;:16;;;;;;;;;;;;;;;;;;40131:36;40151:15;40131:36;;;;;;:::i;:::-;;;;;;;;39826:349::o:0;37980:121::-;38036:4;38075:18;;38060:12;:33;38053:40;;37980:121;:::o;39620:198::-;20819:13;:11;:13::i;:::-;39728:1:::1;39705:25;;:11;:25;;::::0;39697:69:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39798:11;39777:10;;:33;;;;;;;;;;;;;;;;;;39620:198:::0;:::o;25606:28::-;;;;:::o;26350:::-;;;;:::o;25975:25::-;;;;:::o;26419:27::-;;;;:::o;26089:31::-;;;;;;;;;;;;;:::o;10005:127::-;10079:7;10106:9;:18;10116:7;10106:18;;;;;;;;;;;;;;;;10099:25;;10005:127;;;:::o;21574:103::-;20819:13;:11;:13::i;:::-;21639:30:::1;21666:1;21639:18;:30::i;:::-;21574:103::o:0;32265:204::-;20819:13;:11;:13::i;:::-;32347:7:::1;32335:9;:19;;;;32380:9;;32365:12;:24;;;;32424:2;32408:12;;:18;;32400:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32265:204:::0;:::o;29220:154::-;20819:13;:11;:13::i;:::-;29291:5:::1;29274:14;;:22;;;;;;;;;;;;;;;;;;29330:5;29307:20;;:28;;;;;;;;;;;;;;;;;;29351:15;;;;;;;;;;29220:154::o:0;31205:336::-;20819:13;:11;:13::i;:::-;31327:4:::1;31322:155;;31384:6;;;;;;;;;;;31374:16;;:6;:16;;::::0;31348:117:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31322:155;31529:4;31487:31;:39;31519:6;31487:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31205:336:::0;;:::o;28882:330::-;20819:13;:11;:13::i;:::-;28964::::1;;;;;;;;;;;28963:14;28955:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;29032:4;29016:13;;:20;;;;;;;;;;;;;;;;;;29061:4;29047:11;;:18;;;;;;;;;;;;;;;;;;29097:12;29076:18;:33;;;;29162:10;29141:18;;:31;;;;:::i;:::-;29120:18;:52;;;;29188:16;;;;;;;;;;28882:330:::0;:::o;25925:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;25572:27::-;;;;:::o;20933:87::-;20979:7;21006:6;;;;;;;;;;;20999:13;;20933:87;:::o;26317:24::-;;;;:::o;8924:104::-;8980:13;9013:7;9006:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8924:104;:::o;31549:357::-;20819:13;:11;:13::i;:::-;31697:6:::1;;;;;;;;;;;31689:14;;:4;:14;;::::0;31667:121:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31801:41;31830:4;31836:5;31801:28;:41::i;:::-;31892:5;31858:40;;31886:4;31858:40;;;;;;;;;;;;31549:357:::0;;:::o;13257:436::-;13350:4;13367:13;13383:12;:10;:12::i;:::-;13367:28;;13406:24;13433:25;13443:5;13450:7;13433:9;:25::i;:::-;13406:52;;13497:15;13477:16;:35;;13469:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13590:60;13599:5;13606:7;13634:15;13615:16;:34;13590:8;:60::i;:::-;13681:4;13674:11;;;;13257:436;;;;:::o;25885:33::-;;;;:::o;10338:193::-;10417:4;10434:13;10450:12;:10;:12::i;:::-;10434:28;;10473;10483:5;10490:2;10494:6;10473:9;:28::i;:::-;10519:4;10512:11;;;10338:193;;;;:::o;25641:30::-;;;;:::o;26584:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26049:33::-;;;;;;;;;;;;;:::o;33032:182::-;20819:13;:11;:13::i;:::-;33148:8:::1;33117:19;:28;33137:7;33117:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33188:7;33172:34;;;33197:8;33172:34;;;;;;:::i;:::-;;;;;;;;33032:182:::0;;:::o;30501:327::-;20819:13;:11;:13::i;:::-;30641:4:::1;30633;30628:1;30612:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30611:26;;;;:::i;:::-;30610:35;;;;:::i;:::-;30600:6;:45;;30578:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;30756:8;30746:6;:19;;;;:::i;:::-;30728:15;:37;;;;30781:39;30804:15;;30781:39;;;;;;:::i;:::-;;;;;;;;30501:327:::0;:::o;26235:39::-;;;;;;;;;;;;;:::o;30836:121::-;20819:13;:11;:13::i;:::-;30940:9:::1;30919:18;:30;;;;30836:121:::0;:::o;26283:27::-;;;;:::o;30176:317::-;20819:13;:11;:13::i;:::-;30314:4:::1;30306;30301:1;30285:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30284:26;;;;:::i;:::-;30283:35;;;;:::i;:::-;30273:6;:45;;30251:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;30425:8;30415:6;:19;;;;:::i;:::-;30399:13;:35;;;;30450;30471:13;;30450:35;;;;;;:::i;:::-;;;;;;;;30176:317:::0;:::o;10594:151::-;10683:7;10710:11;:18;10722:5;10710:18;;;;;;;;;;;;;;;:27;10729:7;10710:27;;;;;;;;;;;;;;;;10703:34;;10594:151;;;;:::o;25772:33::-;;;;:::o;26127:28::-;;;;;;;;;;;;;:::o;29382:118::-;20819:13;:11;:13::i;:::-;29488:4:::1;29466:11;:19;29478:6;29466:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;29382:118:::0;;:::o;29750:98::-;20819:13;:11;:13::i;:::-;29835:5:::1;29812:20;;:28;;;;;;;;;;;;;;;;;;29750:98::o:0;32477:209::-;20819:13;:11;:13::i;:::-;32561:7:::1;32548:10;:20;;;;32595:10;;32579:13;:26;;;;32641:2;32624:13;;:19;;32616:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32477:209:::0;:::o;25841:37::-;;;;:::o;21832:201::-;20819:13;:11;:13::i;:::-;21941:1:::1;21921:22;;:8;:22;;::::0;21913:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21997:28;22016:8;21997:18;:28::i;:::-;21832:201:::0;:::o;39427:185::-;20819:13;:11;:13::i;:::-;39485:12:::1;39530:10;39522:24;;39554:21;39522:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39508:96;;;;;39474:138;39427:185::o:0;26385:25::-;;;;:::o;32694:330::-;20819:13;:11;:13::i;:::-;32804:10:::1;32792:9;:22;;;;32840:9;;32825:12;:24;;;;32873:11;32860:10;:24;;;;32911:10;;32895:13;:26;;;;32957:2;32940:13;;:19;;:41;;;;;32979:2;32963:12;;:18;;32940:41;32932:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;32694:330:::0;;:::o;6343:98::-;6396:7;6423:10;6416:17;;6343:98;:::o;17250:346::-;17369:1;17352:19;;:5;:19;;;17344:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17450:1;17431:21;;:7;:21;;;17423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17534:6;17504:11;:18;17516:5;17504:18;;;;;;;;;;;;;;;:27;17523:7;17504:27;;;;;;;;;;;;;;;:36;;;;17572:7;17556:32;;17565:5;17556:32;;;17581:6;17556:32;;;;;;:::i;:::-;;;;;;;;17250:346;;;:::o;21098:132::-;21173:12;:10;:12::i;:::-;21162:23;;:7;:5;:7::i;:::-;:23;;;21154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21098:132::o;17887:419::-;17988:24;18015:25;18025:5;18032:7;18015:9;:25::i;:::-;17988:52;;18075:17;18055:16;:37;18051:248;;18137:6;18117:16;:26;;18109:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18221:51;18230:5;18237:7;18265:6;18246:16;:25;18221:8;:51::i;:::-;18051:248;17977:329;17887:419;;;:::o;33222:4750::-;33370:1;33354:18;;:4;:18;;;33346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33447:1;33433:16;;:2;:16;;;33425:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33517:1;33508:6;:10;33500:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;33570:13;;;;;;;;;;;33565:183;;33626:19;:25;33646:4;33626:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33655:19;:23;33675:2;33655:23;;;;;;;;;;;;;;;;;;;;;;;;;33626:52;33600:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;33565:183;33785:1;33764:18;;:22;33760:247;;;33830:11;:17;33842:4;33830:17;;;;;;;;;;;;;;;;;;;;;;;;;33829:18;:35;;;;33857:7;:5;:7::i;:::-;33851:13;;:2;:13;;;33829:35;:60;;;;33882:6;33868:21;;:2;:21;;;33829:60;33803:192;;;;;;;;;;;;:::i;:::-;;;;;;;;;33760:247;34023:14;;;;;;;;;;;34019:2135;;;34084:7;:5;:7::i;:::-;34076:15;;:4;:15;;;;:49;;;;;34118:7;:5;:7::i;:::-;34112:13;;:2;:13;;;;34076:49;:86;;;;;34160:1;34146:16;;:2;:16;;;;34076:86;:128;;;;;34197:6;34183:21;;:2;:21;;;;34076:128;:175;;;;;34226:19;:25;34246:4;34226:25;;;;;;;;;;;;;;;;;;;;;;;;;34225:26;34076:175;:220;;;;;34273:19;:23;34293:2;34273:23;;;;;;;;;;;;;;;;;;;;;;;;;34272:24;34076:220;34054:2089;;;34335:20;;;;;;;;;;;34331:692;;;34398:9;;;;;;;;;;;34384:24;;:2;:24;;;;:49;;;;;34426:6;;;;;;;;;;;34412:21;;:2;:21;;;;34384:49;34380:624;;;34590:1;34575:12;:16;;;;:::i;:::-;34500:28;:39;34529:9;34500:39;;;;;;;;;;;;;;;;:91;:212;;;;;34711:1;34696:12;:16;;;;:::i;:::-;34628:28;:32;34657:2;34628:32;;;;;;;;;;;;;;;;:84;34500:212;34462:363;;;;;;;;;;;;:::i;:::-;;;;;;;;;34894:12;34852:28;:39;34881:9;34852:39;;;;;;;;;;;;;;;:54;;;;34968:12;34933:28;:32;34962:2;34933:32;;;;;;;;;;;;;;;:47;;;;34380:624;34331:692;35069:25;:31;35095:4;35069:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;35126:31;:35;35158:2;35126:35;;;;;;;;;;;;;;;;;;;;;;;;;35125:36;35069:92;35043:1085;;;35248:12;;35238:6;:22;;35204:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;35435:15;;35418:13;35428:2;35418:9;:13::i;:::-;35409:6;:22;;;;:::i;:::-;:41;;35375:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;35043:1085;;;35579:25;:29;35605:2;35579:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;35634:31;:37;35666:4;35634:37;;;;;;;;;;;;;;;;;;;;;;;;;35633:38;35579:92;35553:575;;;35758:13;;35748:6;:23;;35714:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;35553:575;;;35896:31;:35;35928:2;35896:35;;;;;;;;;;;;;;;;;;;;;;;;;35891:237;;36016:15;;35999:13;36009:2;35999:9;:13::i;:::-;35990:6;:22;;;;:::i;:::-;:41;;35956:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;35891:237;35553:575;35043:1085;34054:2089;34019:2135;36166:28;36197:24;36215:4;36197:9;:24::i;:::-;36166:55;;36234:12;36273:18;;36249:20;:42;;36234:57;;36322:7;:35;;;;;36346:11;;;;;;;;;;;36322:35;:61;;;;;36375:8;;;;;;;;;;;36374:9;36322:61;:110;;;;;36401:25;:31;36427:4;36401:31;;;;;;;;;;;;;;;;;;;;;;;;;36400:32;36322:110;:153;;;;;36450:19;:25;36470:4;36450:25;;;;;;;;;;;;;;;;;;;;;;;;;36449:26;36322:153;:194;;;;;36493:19;:23;36513:2;36493:23;;;;;;;;;;;;;;;;;;;;;;;;;36492:24;36322:194;36304:326;;;36554:4;36543:8;;:15;;;;;;;;;;;;;;;;;;36575:10;:8;:10::i;:::-;36613:5;36602:8;;:16;;;;;;;;;;;;;;;;;;36304:326;36642:12;36657:4;36642:19;;36676;:25;36696:4;36676:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36705:19;:23;36725:2;36705:23;;;;;;;;;;;;;;;;;;;;;;;;;36676:52;36672:100;;;36755:5;36745:15;;36672:100;36784:12;36815:7;36811:1108;;;36861:25;:23;:25::i;:::-;:77;;;;;36907:25;:31;36933:4;36907:31;;;;;;;;;;;;;;;;;;;;;;;;;36861:77;:128;;;;;36960:25;:29;36986:2;36960:29;;;;;;;;;;;;;;;;;;;;;;;;;36959:30;36861:128;:165;;;;;37025:1;37010:12;;:16;36861:165;36839:931;;;37066:11;:15;37078:2;37066:15;;;;;;;;;;;;;;;;;;;;;;;;;37061:173;;37124:4;37106:11;:15;37118:2;37106:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;37165:1;37151:10;;:15;;;;;;;:::i;:::-;;;;;;;;37194:20;37211:2;37194:20;;;;;;:::i;:::-;;;;;;;;37061:173;37277:3;37271:2;37262:6;:11;;;;:::i;:::-;37261:19;;;;:::i;:::-;37254:26;;37336:12;;37323:9;;37316:4;:16;;;;:::i;:::-;37315:33;;;;:::i;:::-;37299:12;;:49;;;;;;;:::i;:::-;;;;;;;;36839:931;;;37374:25;:29;37400:2;37374:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;37423:1;37407:13;;:17;37374:50;37370:400;;;37479:3;37462:13;;37453:6;:22;;;;:::i;:::-;37452:30;;;;:::i;:::-;37445:37;;37539:13;;37525:10;;37518:4;:17;;;;:::i;:::-;37517:35;;;;:::i;:::-;37501:12;;:51;;;;;;;:::i;:::-;;;;;;;;37370:400;;;37578:25;:31;37604:4;37578:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;37628:1;37613:12;;:16;37578:51;37574:196;;;37683:3;37667:12;;37658:6;:21;;;;:::i;:::-;37657:29;;;;:::i;:::-;37650:36;;37742:12;;37729:9;;37722:4;:16;;;;:::i;:::-;37721:33;;;;:::i;:::-;37705:12;;:49;;;;;;;:::i;:::-;;;;;;;;37574:196;37370:400;36839:931;37797:1;37790:4;:8;37786:91;;;37819:42;37835:4;37849;37856;37819:15;:42::i;:::-;37786:91;37903:4;37893:14;;;;;:::i;:::-;;;36811:1108;37931:33;37947:4;37953:2;37957:6;37931:15;:33::i;:::-;33335:4637;;;;33222:4750;;;:::o;38574:802::-;38613:23;38639:24;38657:4;38639:9;:24::i;:::-;38613:50;;38674:25;38702:12;;38674:40;;38750:1;38731:15;:20;:46;;;;38776:1;38755:17;:22;38731:46;38727:85;;;38794:7;;;;38727:85;38867:2;38846:18;;:23;;;;:::i;:::-;38828:15;:41;38824:115;;;38925:2;38904:18;;:23;;;;:::i;:::-;38886:41;;38824:115;38951:12;38980:9;;;;;;;;;;;38976:225;;;39006:33;39023:15;39006:16;:33::i;:::-;39069:1;39054:12;:16;;;;39107:10;;;;;;;;;;;39099:24;;39149:21;39099:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39085:104;;;;;38976:225;39218:9;;;;;;;;;;;39213:156;;39244:53;39262:4;39269:10;;;;;;;;;;;39281:15;39244:9;:53::i;:::-;39327:1;39312:12;:16;;;;39353:4;39343:14;;39213:156;38602:774;;;38574:802;:::o;22193:191::-;22267:16;22286:6;;;;;;;;;;;22267:25;;22312:8;22303:6;;:17;;;;;;;;;;;;;;;;;;22367:8;22336:40;;22357:8;22336:40;;;;;;;;;;;;22256:128;22193:191;:::o;31914:238::-;32031:5;31997:25;:31;32023:4;31997:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32049;32076:4;32082:5;32049:26;:39::i;:::-;32138:5;32104:40;;32132:4;32104:40;;;;;;;;;;;;31914:238;;:::o;14163:806::-;14276:1;14260:18;;:4;:18;;;14252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14353:1;14339:16;;:2;:16;;;14331:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14408:38;14429:4;14435:2;14439:6;14408:20;:38::i;:::-;14459:19;14481:9;:15;14491:4;14481:15;;;;;;;;;;;;;;;;14459:37;;14530:6;14515:11;:21;;14507:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14647:6;14633:11;:20;14615:9;:15;14625:4;14615:15;;;;;;;;;;;;;;;:38;;;;14850:6;14833:9;:13;14843:2;14833:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;14900:2;14885:26;;14894:4;14885:26;;;14904:6;14885:26;;;;;;:::i;:::-;;;;;;;;14924:37;14944:4;14950:2;14954:6;14924:19;:37::i;:::-;14241:728;14163:806;;;:::o;38109:457::-;38175:21;38213:1;38199:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38175:40;;38244:4;38226;38231:1;38226:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38270:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38260:4;38265:1;38260:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;38299:56;38316:4;38331:9;;;;;;;;;;;38343:11;38299:8;:56::i;:::-;38368:9;;;;;;;;;;;:60;;;38443:11;38469:1;38485:4;38512;38532:15;38368:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38164:402;38109:457;:::o;30965:232::-;31120:10;31078:31;:39;31110:6;31078:39;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;31146:43;31170:6;31178:10;31146:43;;;;;;;:::i;:::-;;;;;;;;30965:232;;:::o;18906:91::-;;;;:::o;19601: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;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:60::-;1509:3;1530:5;1523:12;;1481:60;;;:::o;1547:142::-;1597:9;1630:53;1648:34;1657:24;1675:5;1657:24;:::i;:::-;1648:34;:::i;:::-;1630:53;:::i;:::-;1617:66;;1547:142;;;:::o;1695:126::-;1745:9;1778:37;1809:5;1778:37;:::i;:::-;1765:50;;1695:126;;;:::o;1827:144::-;1895:9;1928:37;1959:5;1928:37;:::i;:::-;1915:50;;1827:144;;;:::o;1977:167::-;2082:55;2131:5;2082:55;:::i;:::-;2077:3;2070:68;1977:167;;:::o;2150:258::-;2261:4;2299:2;2288:9;2284:18;2276:26;;2312:89;2398:1;2387:9;2383:17;2374:6;2312:89;:::i;:::-;2150:258;;;;:::o;2495:117::-;2604:1;2601;2594:12;2618:117;2727:1;2724;2717:12;2741:96;2778:7;2807:24;2825:5;2807:24;:::i;:::-;2796:35;;2741:96;;;:::o;2843:122::-;2916:24;2934:5;2916:24;:::i;:::-;2909:5;2906:35;2896:63;;2955:1;2952;2945:12;2896:63;2843:122;:::o;2971:139::-;3017:5;3055:6;3042:20;3033:29;;3071:33;3098:5;3071:33;:::i;:::-;2971:139;;;;:::o;3116:77::-;3153:7;3182:5;3171:16;;3116:77;;;:::o;3199:122::-;3272:24;3290:5;3272:24;:::i;:::-;3265:5;3262:35;3252:63;;3311:1;3308;3301:12;3252:63;3199:122;:::o;3327:139::-;3373:5;3411:6;3398:20;3389:29;;3427:33;3454:5;3427:33;:::i;:::-;3327:139;;;;:::o;3472:474::-;3540:6;3548;3597:2;3585:9;3576:7;3572:23;3568:32;3565:119;;;3603:79;;:::i;:::-;3565:119;3723:1;3748:53;3793:7;3784:6;3773:9;3769:22;3748:53;:::i;:::-;3738:63;;3694:117;3850:2;3876:53;3921:7;3912:6;3901:9;3897:22;3876:53;:::i;:::-;3866:63;;3821:118;3472:474;;;;;:::o;3952:90::-;3986:7;4029:5;4022:13;4015:21;4004:32;;3952:90;;;:::o;4048:109::-;4129:21;4144:5;4129:21;:::i;:::-;4124:3;4117:34;4048:109;;:::o;4163:210::-;4250:4;4288:2;4277:9;4273:18;4265:26;;4301:65;4363:1;4352:9;4348:17;4339:6;4301:65;:::i;:::-;4163:210;;;;:::o;4379:329::-;4438:6;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4379:329;;;;:::o;4714:117::-;4823:1;4820;4813:12;4837:117;4946:1;4943;4936:12;4960:117;5069:1;5066;5059:12;5100:568;5173:8;5183:6;5233:3;5226:4;5218:6;5214:17;5210:27;5200:122;;5241:79;;:::i;:::-;5200:122;5354:6;5341:20;5331:30;;5384:18;5376:6;5373:30;5370:117;;;5406:79;;:::i;:::-;5370:117;5520:4;5512:6;5508:17;5496:29;;5574:3;5566:4;5558:6;5554:17;5544:8;5540:32;5537:41;5534:128;;;5581:79;;:::i;:::-;5534:128;5100:568;;;;;:::o;5674:116::-;5744:21;5759:5;5744:21;:::i;:::-;5737:5;5734:32;5724:60;;5780:1;5777;5770:12;5724:60;5674:116;:::o;5796:133::-;5839:5;5877:6;5864:20;5855:29;;5893:30;5917:5;5893:30;:::i;:::-;5796:133;;;;:::o;5935:698::-;6027:6;6035;6043;6092:2;6080:9;6071:7;6067:23;6063:32;6060:119;;;6098:79;;:::i;:::-;6060:119;6246:1;6235:9;6231:17;6218:31;6276:18;6268:6;6265:30;6262:117;;;6298:79;;:::i;:::-;6262:117;6411:80;6483:7;6474:6;6463:9;6459:22;6411:80;:::i;:::-;6393:98;;;;6189:312;6540:2;6566:50;6608:7;6599:6;6588:9;6584:22;6566:50;:::i;:::-;6556:60;;6511:115;5935:698;;;;;:::o;6639:118::-;6726:24;6744:5;6726:24;:::i;:::-;6721:3;6714:37;6639:118;;:::o;6763:222::-;6856:4;6894:2;6883:9;6879:18;6871:26;;6907:71;6975:1;6964:9;6960:17;6951:6;6907:71;:::i;:::-;6763:222;;;;:::o;6991:619::-;7068:6;7076;7084;7133:2;7121:9;7112:7;7108:23;7104:32;7101:119;;;7139:79;;:::i;:::-;7101:119;7259:1;7284:53;7329:7;7320:6;7309:9;7305:22;7284:53;:::i;:::-;7274:63;;7230:117;7386:2;7412:53;7457:7;7448:6;7437:9;7433:22;7412:53;:::i;:::-;7402:63;;7357:118;7514:2;7540:53;7585:7;7576:6;7565:9;7561:22;7540:53;:::i;:::-;7530:63;;7485:118;6991:619;;;;;:::o;7616:323::-;7672:6;7721:2;7709:9;7700:7;7696:23;7692:32;7689:119;;;7727:79;;:::i;:::-;7689:119;7847:1;7872:50;7914:7;7905:6;7894:9;7890:22;7872:50;:::i;:::-;7862:60;;7818:114;7616:323;;;;:::o;7945:329::-;8004:6;8053:2;8041:9;8032:7;8028:23;8024:32;8021:119;;;8059:79;;:::i;:::-;8021:119;8179:1;8204:53;8249:7;8240:6;8229:9;8225:22;8204:53;:::i;:::-;8194:63;;8150:117;7945:329;;;;:::o;8280:86::-;8315:7;8355:4;8348:5;8344:16;8333:27;;8280:86;;;:::o;8372:112::-;8455:22;8471:5;8455:22;:::i;:::-;8450:3;8443:35;8372:112;;:::o;8490:214::-;8579:4;8617:2;8606:9;8602:18;8594:26;;8630:67;8694:1;8683:9;8679:17;8670:6;8630:67;:::i;:::-;8490:214;;;;:::o;8710:118::-;8797:24;8815:5;8797:24;:::i;:::-;8792:3;8785:37;8710:118;;:::o;8834:222::-;8927:4;8965:2;8954:9;8950:18;8942:26;;8978:71;9046:1;9035:9;9031:17;9022:6;8978:71;:::i;:::-;8834:222;;;;:::o;9062:468::-;9127:6;9135;9184:2;9172:9;9163:7;9159:23;9155:32;9152:119;;;9190:79;;:::i;:::-;9152:119;9310:1;9335:53;9380:7;9371:6;9360:9;9356:22;9335:53;:::i;:::-;9325:63;;9281:117;9437:2;9463:50;9505:7;9496:6;9485:9;9481:22;9463:50;:::i;:::-;9453:60;;9408:115;9062:468;;;;;:::o;9536:474::-;9604:6;9612;9661:2;9649:9;9640:7;9636:23;9632:32;9629:119;;;9667:79;;:::i;:::-;9629:119;9787:1;9812:53;9857:7;9848:6;9837:9;9833:22;9812:53;:::i;:::-;9802:63;;9758:117;9914:2;9940:53;9985:7;9976:6;9965:9;9961:22;9940:53;:::i;:::-;9930:63;;9885:118;9536:474;;;;;:::o;10016:::-;10084:6;10092;10141:2;10129:9;10120:7;10116:23;10112:32;10109:119;;;10147:79;;:::i;:::-;10109:119;10267:1;10292:53;10337:7;10328:6;10317:9;10313:22;10292:53;:::i;:::-;10282:63;;10238:117;10394:2;10420:53;10465:7;10456:6;10445:9;10441:22;10420:53;:::i;:::-;10410:63;;10365:118;10016:474;;;;;:::o;10496:180::-;10544:77;10541:1;10534:88;10641:4;10638:1;10631:15;10665:4;10662:1;10655:15;10682:320;10726:6;10763:1;10757:4;10753:12;10743:22;;10810:1;10804:4;10800:12;10831:18;10821:81;;10887:4;10879:6;10875:17;10865:27;;10821:81;10949:2;10941:6;10938:14;10918:18;10915:38;10912:84;;10968:18;;:::i;:::-;10912:84;10733:269;10682:320;;;:::o;11008:180::-;11056:77;11053:1;11046:88;11153:4;11150:1;11143:15;11177:4;11174:1;11167:15;11194:180;11242:77;11239:1;11232:88;11339:4;11336:1;11329:15;11363:4;11360:1;11353:15;11380:410;11420:7;11443:20;11461:1;11443:20;:::i;:::-;11438:25;;11477:20;11495:1;11477:20;:::i;:::-;11472:25;;11532:1;11529;11525:9;11554:30;11572:11;11554:30;:::i;:::-;11543:41;;11733:1;11724:7;11720:15;11717:1;11714:22;11694:1;11687:9;11667:83;11644:139;;11763:18;;:::i;:::-;11644:139;11428:362;11380:410;;;;:::o;11796:180::-;11844:77;11841:1;11834:88;11941:4;11938:1;11931:15;11965:4;11962:1;11955:15;11982:185;12022:1;12039:20;12057:1;12039:20;:::i;:::-;12034:25;;12073:20;12091:1;12073:20;:::i;:::-;12068:25;;12112:1;12102:35;;12117:18;;:::i;:::-;12102:35;12159:1;12156;12152:9;12147:14;;11982:185;;;;:::o;12173:228::-;12313:34;12309:1;12301:6;12297:14;12290:58;12382:11;12377:2;12369:6;12365:15;12358:36;12173:228;:::o;12407:366::-;12549:3;12570:67;12634:2;12629:3;12570:67;:::i;:::-;12563:74;;12646:93;12735:3;12646:93;:::i;:::-;12764:2;12759:3;12755:12;12748:19;;12407:366;;;:::o;12779:419::-;12945:4;12983:2;12972:9;12968:18;12960:26;;13032:9;13026:4;13022:20;13018:1;13007:9;13003:17;12996:47;13060:131;13186:4;13060:131;:::i;:::-;13052:139;;12779:419;;;:::o;13204:191::-;13244:3;13263:20;13281:1;13263:20;:::i;:::-;13258:25;;13297:20;13315:1;13297:20;:::i;:::-;13292:25;;13340:1;13337;13333:9;13326:16;;13361:3;13358:1;13355:10;13352:36;;;13368:18;;:::i;:::-;13352:36;13204:191;;;;:::o;13401:251::-;13541:34;13537:1;13529:6;13525:14;13518:58;13610:34;13605:2;13597:6;13593:15;13586:59;13401:251;:::o;13658:366::-;13800:3;13821:67;13885:2;13880:3;13821:67;:::i;:::-;13814:74;;13897:93;13986:3;13897:93;:::i;:::-;14015:2;14010:3;14006:12;13999:19;;13658:366;;;:::o;14030:419::-;14196:4;14234:2;14223:9;14219:18;14211:26;;14283:9;14277:4;14273:20;14269:1;14258:9;14254:17;14247:47;14311:131;14437:4;14311:131;:::i;:::-;14303:139;;14030:419;;;:::o;14455:181::-;14595:33;14591:1;14583:6;14579:14;14572:57;14455:181;:::o;14642:366::-;14784:3;14805:67;14869:2;14864:3;14805:67;:::i;:::-;14798:74;;14881:93;14970:3;14881:93;:::i;:::-;14999:2;14994:3;14990:12;14983:19;;14642:366;;;:::o;15014:419::-;15180:4;15218:2;15207:9;15203:18;15195:26;;15267:9;15261:4;15257:20;15253:1;15242:9;15238:17;15231:47;15295:131;15421:4;15295:131;:::i;:::-;15287:139;;15014:419;;;:::o;15439:180::-;15579:32;15575:1;15567:6;15563:14;15556:56;15439:180;:::o;15625:366::-;15767:3;15788:67;15852:2;15847:3;15788:67;:::i;:::-;15781:74;;15864:93;15953:3;15864:93;:::i;:::-;15982:2;15977:3;15973:12;15966:19;;15625:366;;;:::o;15997:419::-;16163:4;16201:2;16190:9;16186:18;16178:26;;16250:9;16244:4;16240:20;16236:1;16225:9;16221:17;16214:47;16278:131;16404:4;16278:131;:::i;:::-;16270:139;;15997:419;;;:::o;16422:226::-;16562:34;16558:1;16550:6;16546:14;16539:58;16631:9;16626:2;16618:6;16614:15;16607:34;16422:226;:::o;16654:366::-;16796:3;16817:67;16881:2;16876:3;16817:67;:::i;:::-;16810:74;;16893:93;16982:3;16893:93;:::i;:::-;17011:2;17006:3;17002:12;16995:19;;16654:366;;;:::o;17026:419::-;17192:4;17230:2;17219:9;17215:18;17207:26;;17279:9;17273:4;17269:20;17265:1;17254:9;17250:17;17243:47;17307:131;17433:4;17307:131;:::i;:::-;17299:139;;17026:419;;;:::o;17451:173::-;17591:25;17587:1;17579:6;17575:14;17568:49;17451:173;:::o;17630:366::-;17772:3;17793:67;17857:2;17852:3;17793:67;:::i;:::-;17786:74;;17869:93;17958:3;17869:93;:::i;:::-;17987:2;17982:3;17978:12;17971:19;;17630:366;;;:::o;18002:419::-;18168:4;18206:2;18195:9;18191:18;18183:26;;18255:9;18249:4;18245:20;18241:1;18230:9;18226:17;18219:47;18283:131;18409:4;18283:131;:::i;:::-;18275:139;;18002:419;;;:::o;18427:244::-;18567:34;18563:1;18555:6;18551:14;18544:58;18636:27;18631:2;18623:6;18619:15;18612:52;18427:244;:::o;18677:366::-;18819:3;18840:67;18904:2;18899:3;18840:67;:::i;:::-;18833:74;;18916:93;19005:3;18916:93;:::i;:::-;19034:2;19029:3;19025:12;19018:19;;18677:366;;;:::o;19049:419::-;19215:4;19253:2;19242:9;19238:18;19230:26;;19302:9;19296:4;19292:20;19288:1;19277:9;19273:17;19266:47;19330:131;19456:4;19330:131;:::i;:::-;19322:139;;19049:419;;;:::o;19474:224::-;19614:34;19610:1;19602:6;19598:14;19591:58;19683:7;19678:2;19670:6;19666:15;19659:32;19474:224;:::o;19704:366::-;19846:3;19867:67;19931:2;19926:3;19867:67;:::i;:::-;19860:74;;19943:93;20032:3;19943:93;:::i;:::-;20061:2;20056:3;20052:12;20045:19;;19704:366;;;:::o;20076:419::-;20242:4;20280:2;20269:9;20265:18;20257:26;;20329:9;20323:4;20319:20;20315:1;20304:9;20300:17;20293:47;20357:131;20483:4;20357:131;:::i;:::-;20349:139;;20076:419;;;:::o;20501:231::-;20641:34;20637:1;20629:6;20625:14;20618:58;20710:14;20705:2;20697:6;20693:15;20686:39;20501:231;:::o;20738:366::-;20880:3;20901:67;20965:2;20960:3;20901:67;:::i;:::-;20894:74;;20977:93;21066:3;20977:93;:::i;:::-;21095:2;21090:3;21086:12;21079:19;;20738:366;;;:::o;21110:419::-;21276:4;21314:2;21303:9;21299:18;21291:26;;21363:9;21357:4;21353:20;21349:1;21338:9;21334:17;21327:47;21391:131;21517:4;21391:131;:::i;:::-;21383:139;;21110:419;;;:::o;21535:229::-;21675:34;21671:1;21663:6;21659:14;21652:58;21744:12;21739:2;21731:6;21727:15;21720:37;21535:229;:::o;21770:366::-;21912:3;21933:67;21997:2;21992:3;21933:67;:::i;:::-;21926:74;;22009:93;22098:3;22009:93;:::i;:::-;22127:2;22122:3;22118:12;22111:19;;21770:366;;;:::o;22142:419::-;22308:4;22346:2;22335:9;22331:18;22323:26;;22395:9;22389:4;22385:20;22381:1;22370:9;22366:17;22359:47;22423:131;22549:4;22423:131;:::i;:::-;22415:139;;22142:419;;;:::o;22567:225::-;22707:34;22703:1;22695:6;22691:14;22684:58;22776:8;22771:2;22763:6;22759:15;22752:33;22567:225;:::o;22798:366::-;22940:3;22961:67;23025:2;23020:3;22961:67;:::i;:::-;22954:74;;23037:93;23126:3;23037:93;:::i;:::-;23155:2;23150:3;23146:12;23139:19;;22798:366;;;:::o;23170:419::-;23336:4;23374:2;23363:9;23359:18;23351:26;;23423:9;23417:4;23413:20;23409:1;23398:9;23394:17;23387:47;23451:131;23577:4;23451:131;:::i;:::-;23443:139;;23170:419;;;:::o;23595:147::-;23696:11;23733:3;23718:18;;23595:147;;;;:::o;23748:114::-;;:::o;23868:398::-;24027:3;24048:83;24129:1;24124:3;24048:83;:::i;:::-;24041:90;;24140:93;24229:3;24140:93;:::i;:::-;24258:1;24253:3;24249:11;24242:18;;23868:398;;;:::o;24272:379::-;24456:3;24478:147;24621:3;24478:147;:::i;:::-;24471:154;;24642:3;24635:10;;24272:379;;;:::o;24657:223::-;24797:34;24793:1;24785:6;24781:14;24774:58;24866:6;24861:2;24853:6;24849:15;24842:31;24657:223;:::o;24886:366::-;25028:3;25049:67;25113:2;25108:3;25049:67;:::i;:::-;25042:74;;25125:93;25214:3;25125:93;:::i;:::-;25243:2;25238:3;25234:12;25227:19;;24886:366;;;:::o;25258:419::-;25424:4;25462:2;25451:9;25447:18;25439:26;;25511:9;25505:4;25501:20;25497:1;25486:9;25482:17;25475:47;25539:131;25665:4;25539:131;:::i;:::-;25531:139;;25258:419;;;:::o;25683:221::-;25823:34;25819:1;25811:6;25807:14;25800:58;25892:4;25887:2;25879:6;25875:15;25868:29;25683:221;:::o;25910:366::-;26052:3;26073:67;26137:2;26132:3;26073:67;:::i;:::-;26066:74;;26149:93;26238:3;26149:93;:::i;:::-;26267:2;26262:3;26258:12;26251:19;;25910:366;;;:::o;26282:419::-;26448:4;26486:2;26475:9;26471:18;26463:26;;26535:9;26529:4;26525:20;26521:1;26510:9;26506:17;26499:47;26563:131;26689:4;26563:131;:::i;:::-;26555:139;;26282:419;;;:::o;26707:182::-;26847:34;26843:1;26835:6;26831:14;26824:58;26707:182;:::o;26895:366::-;27037:3;27058:67;27122:2;27117:3;27058:67;:::i;:::-;27051:74;;27134:93;27223:3;27134:93;:::i;:::-;27252:2;27247:3;27243:12;27236:19;;26895:366;;;:::o;27267:419::-;27433:4;27471:2;27460:9;27456:18;27448:26;;27520:9;27514:4;27510:20;27506:1;27495:9;27491:17;27484:47;27548:131;27674:4;27548:131;:::i;:::-;27540:139;;27267:419;;;:::o;27692:179::-;27832:31;27828:1;27820:6;27816:14;27809:55;27692:179;:::o;27877:366::-;28019:3;28040:67;28104:2;28099:3;28040:67;:::i;:::-;28033:74;;28116:93;28205:3;28116:93;:::i;:::-;28234:2;28229:3;28225:12;28218:19;;27877:366;;;:::o;28249:419::-;28415:4;28453:2;28442:9;28438:18;28430:26;;28502:9;28496:4;28492:20;28488:1;28477:9;28473:17;28466:47;28530:131;28656:4;28530:131;:::i;:::-;28522:139;;28249:419;;;:::o;28674:224::-;28814:34;28810:1;28802:6;28798:14;28791:58;28883:7;28878:2;28870:6;28866:15;28859:32;28674:224;:::o;28904:366::-;29046:3;29067:67;29131:2;29126:3;29067:67;:::i;:::-;29060:74;;29143:93;29232:3;29143:93;:::i;:::-;29261:2;29256:3;29252:12;29245:19;;28904:366;;;:::o;29276:419::-;29442:4;29480:2;29469:9;29465:18;29457:26;;29529:9;29523:4;29519:20;29515:1;29504:9;29500:17;29493:47;29557:131;29683:4;29557:131;:::i;:::-;29549:139;;29276:419;;;:::o;29701:222::-;29841:34;29837:1;29829:6;29825:14;29818:58;29910:5;29905:2;29897:6;29893:15;29886:30;29701:222;:::o;29929:366::-;30071:3;30092:67;30156:2;30151:3;30092:67;:::i;:::-;30085:74;;30168:93;30257:3;30168:93;:::i;:::-;30286:2;30281:3;30277:12;30270:19;;29929:366;;;:::o;30301:419::-;30467:4;30505:2;30494:9;30490:18;30482:26;;30554:9;30548:4;30544:20;30540:1;30529:9;30525:17;30518:47;30582:131;30708:4;30582:131;:::i;:::-;30574:139;;30301:419;;;:::o;30726:179::-;30866:31;30862:1;30854:6;30850:14;30843:55;30726:179;:::o;30911:366::-;31053:3;31074:67;31138:2;31133:3;31074:67;:::i;:::-;31067:74;;31150:93;31239:3;31150:93;:::i;:::-;31268:2;31263:3;31259:12;31252:19;;30911:366;;;:::o;31283:419::-;31449:4;31487:2;31476:9;31472:18;31464:26;;31536:9;31530:4;31526:20;31522:1;31511:9;31507:17;31500:47;31564:131;31690:4;31564:131;:::i;:::-;31556:139;;31283:419;;;:::o;31708:172::-;31848:24;31844:1;31836:6;31832:14;31825:48;31708:172;:::o;31886:366::-;32028:3;32049:67;32113:2;32108:3;32049:67;:::i;:::-;32042:74;;32125:93;32214:3;32125:93;:::i;:::-;32243:2;32238:3;32234:12;32227:19;;31886:366;;;:::o;32258:419::-;32424:4;32462:2;32451:9;32447:18;32439:26;;32511:9;32505:4;32501:20;32497:1;32486:9;32482:17;32475:47;32539:131;32665:4;32539:131;:::i;:::-;32531:139;;32258:419;;;:::o;32683:294::-;32823:34;32819:1;32811:6;32807:14;32800:58;32892:34;32887:2;32879:6;32875:15;32868:59;32961:8;32956:2;32948:6;32944:15;32937:33;32683:294;:::o;32983:366::-;33125:3;33146:67;33210:2;33205:3;33146:67;:::i;:::-;33139:74;;33222:93;33311:3;33222:93;:::i;:::-;33340:2;33335:3;33331:12;33324:19;;32983:366;;;:::o;33355:419::-;33521:4;33559:2;33548:9;33544:18;33536:26;;33608:9;33602:4;33598:20;33594:1;33583:9;33579:17;33572:47;33636:131;33762:4;33636:131;:::i;:::-;33628:139;;33355:419;;;:::o;33780:194::-;33820:4;33840:20;33858:1;33840:20;:::i;:::-;33835:25;;33874:20;33892:1;33874:20;:::i;:::-;33869:25;;33918:1;33915;33911:9;33903:17;;33942:1;33936:4;33933:11;33930:37;;;33947:18;;:::i;:::-;33930:37;33780:194;;;;:::o;33980:240::-;34120:34;34116:1;34108:6;34104:14;34097:58;34189:23;34184:2;34176:6;34172:15;34165:48;33980:240;:::o;34226:366::-;34368:3;34389:67;34453:2;34448:3;34389:67;:::i;:::-;34382:74;;34465:93;34554:3;34465:93;:::i;:::-;34583:2;34578:3;34574:12;34567:19;;34226:366;;;:::o;34598:419::-;34764:4;34802:2;34791:9;34787:18;34779:26;;34851:9;34845:4;34841:20;34837:1;34826:9;34822:17;34815:47;34879:131;35005:4;34879:131;:::i;:::-;34871:139;;34598:419;;;:::o;35023:227::-;35163:34;35159:1;35151:6;35147:14;35140:58;35232:10;35227:2;35219:6;35215:15;35208:35;35023:227;:::o;35256:366::-;35398:3;35419:67;35483:2;35478:3;35419:67;:::i;:::-;35412:74;;35495:93;35584:3;35495:93;:::i;:::-;35613:2;35608:3;35604:12;35597:19;;35256:366;;;:::o;35628:419::-;35794:4;35832:2;35821:9;35817:18;35809:26;;35881:9;35875:4;35871:20;35867:1;35856:9;35852:17;35845:47;35909:131;36035:4;35909:131;:::i;:::-;35901:139;;35628:419;;;:::o;36053:175::-;36193:27;36189:1;36181:6;36177:14;36170:51;36053:175;:::o;36234:366::-;36376:3;36397:67;36461:2;36456:3;36397:67;:::i;:::-;36390:74;;36473:93;36562:3;36473:93;:::i;:::-;36591:2;36586:3;36582:12;36575:19;;36234:366;;;:::o;36606:419::-;36772:4;36810:2;36799:9;36795:18;36787:26;;36859:9;36853:4;36849:20;36845:1;36834:9;36830:17;36823:47;36887:131;37013:4;36887:131;:::i;:::-;36879:139;;36606:419;;;:::o;37031:229::-;37171:34;37167:1;37159:6;37155:14;37148:58;37240:12;37235:2;37227:6;37223:15;37216:37;37031:229;:::o;37266:366::-;37408:3;37429:67;37493:2;37488:3;37429:67;:::i;:::-;37422:74;;37505:93;37594:3;37505:93;:::i;:::-;37623:2;37618:3;37614:12;37607:19;;37266:366;;;:::o;37638:419::-;37804:4;37842:2;37831:9;37827:18;37819:26;;37891:9;37885:4;37881:20;37877:1;37866:9;37862:17;37855:47;37919:131;38045:4;37919:131;:::i;:::-;37911:139;;37638:419;;;:::o;38063:225::-;38203:34;38199:1;38191:6;38187:14;38180:58;38272:8;38267:2;38259:6;38255:15;38248:33;38063:225;:::o;38294:366::-;38436:3;38457:67;38521:2;38516:3;38457:67;:::i;:::-;38450:74;;38533:93;38622:3;38533:93;:::i;:::-;38651:2;38646:3;38642:12;38635:19;;38294:366;;;:::o;38666:419::-;38832:4;38870:2;38859:9;38855:18;38847:26;;38919:9;38913:4;38909:20;38905:1;38894:9;38890:17;38883:47;38947:131;39073:4;38947:131;:::i;:::-;38939:139;;38666:419;;;:::o;39091:180::-;39139:77;39136:1;39129:88;39236:4;39233:1;39226:15;39260:4;39257:1;39250:15;39277:143;39334:5;39365:6;39359:13;39350:22;;39381:33;39408:5;39381:33;:::i;:::-;39277:143;;;;:::o;39426:351::-;39496:6;39545:2;39533:9;39524:7;39520:23;39516:32;39513:119;;;39551:79;;:::i;:::-;39513:119;39671:1;39696:64;39752:7;39743:6;39732:9;39728:22;39696:64;:::i;:::-;39686:74;;39642:128;39426:351;;;;:::o;39783:85::-;39828:7;39857:5;39846:16;;39783:85;;;:::o;39874:158::-;39932:9;39965:61;39983:42;39992:32;40018:5;39992:32;:::i;:::-;39983:42;:::i;:::-;39965:61;:::i;:::-;39952:74;;39874:158;;;:::o;40038:147::-;40133:45;40172:5;40133:45;:::i;:::-;40128:3;40121:58;40038:147;;:::o;40191:114::-;40258:6;40292:5;40286:12;40276:22;;40191:114;;;:::o;40311:184::-;40410:11;40444:6;40439:3;40432:19;40484:4;40479:3;40475:14;40460:29;;40311:184;;;;:::o;40501:132::-;40568:4;40591:3;40583:11;;40621:4;40616:3;40612:14;40604:22;;40501:132;;;:::o;40639:108::-;40716:24;40734:5;40716:24;:::i;:::-;40711:3;40704:37;40639:108;;:::o;40753:179::-;40822:10;40843:46;40885:3;40877:6;40843:46;:::i;:::-;40921:4;40916:3;40912:14;40898:28;;40753:179;;;;:::o;40938:113::-;41008:4;41040;41035:3;41031:14;41023:22;;40938:113;;;:::o;41087:732::-;41206:3;41235:54;41283:5;41235:54;:::i;:::-;41305:86;41384:6;41379:3;41305:86;:::i;:::-;41298:93;;41415:56;41465:5;41415:56;:::i;:::-;41494:7;41525:1;41510:284;41535:6;41532:1;41529:13;41510:284;;;41611:6;41605:13;41638:63;41697:3;41682:13;41638:63;:::i;:::-;41631:70;;41724:60;41777:6;41724:60;:::i;:::-;41714:70;;41570:224;41557:1;41554;41550:9;41545:14;;41510:284;;;41514:14;41810:3;41803:10;;41211:608;;;41087:732;;;;:::o;41825:831::-;42088:4;42126:3;42115:9;42111:19;42103:27;;42140:71;42208:1;42197:9;42193:17;42184:6;42140:71;:::i;:::-;42221:80;42297:2;42286:9;42282:18;42273:6;42221:80;:::i;:::-;42348:9;42342:4;42338:20;42333:2;42322:9;42318:18;42311:48;42376:108;42479:4;42470:6;42376:108;:::i;:::-;42368:116;;42494:72;42562:2;42551:9;42547:18;42538:6;42494:72;:::i;:::-;42576:73;42644:3;42633:9;42629:19;42620:6;42576:73;:::i;:::-;41825:831;;;;;;;;:::o;42662:320::-;42777:4;42815:2;42804:9;42800:18;42792:26;;42828:71;42896:1;42885:9;42881:17;42872:6;42828:71;:::i;:::-;42909:66;42971:2;42960:9;42956:18;42947:6;42909:66;:::i;:::-;42662:320;;;;;:::o

Swarm Source

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