ETH Price: $2,987.29 (+3.62%)
Gas: 3 Gwei

Token

INNOVA ($INNOVA)
 

Overview

Max Total Supply

160,000,000 $INNOVA

Holders

683

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.820852717696300016 $INNOVA

Value
$0.00
0xa21ec4a450821b1368e49123546292e09fc78791
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:
INNOVA

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT  

/*
INNOVA
Telegram: @InnovaPortal
*/

pragma solidity 0.8.9;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
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);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    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}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to 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 {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract INNOVA is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;

    address public immutable uniswapV2Pair;
  
    bool private swapping;

    address public Reciever;
    
    uint256 public maxBuyTransactionAmount;

    uint256 public maxSellTransactionAmount;

    uint256 public swapTokensAtAmount;

    uint256 public maxWallet;
 
    bool public limitsInEffect = true;

    bool public tradingActive = false;

    bool public swapEnabled = false;
 
    uint256 public buyTotalFees;

    uint256 public buyRecieverFeeLow;

    uint256 public buyRecieverFeeMed;

    uint256 public buyRecieverFeeHigh;
  
    uint256 public sellTotalFees;

    uint256 public sellRecieverFeeLow;

    uint256 public sellRecieverFeeMed;

    uint256 public sellRecieverFeeHigh;

    uint256 public tokensForDev;

    uint256 public lowThreshold;

    uint256 public medThreshold;

    uint256 public highThreshold;
 

 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event RecieverUpdated(address indexed newWallet, address indexed oldWallet);


    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
 
    constructor() ERC20("INNOVA", "$INNOVA") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);

        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyRecieverFeeLow = 7;

        uint256 _buyRecieverFeeMed = 7;

        uint256 _buyRecieverFeeHigh = 7;

        
        uint256 _sellRecieverFeeLow = 10;

        uint256 _sellRecieverFeeMed = 15;

        uint256 _sellRecieverFeeHigh = 20;


        uint256 totalSupply = 160000000 * 10**18;

        uint256 _lowThreshold = 200000 * 10**18;

        uint256 _highThreshold =  400000 * 10**18;
 
        maxBuyTransactionAmount = 250000 * 10**18;

        maxSellTransactionAmount = 440000 * 10**18;

        maxWallet =  2000000 * 10**18; 

        swapTokensAtAmount = totalSupply * 5 / 10000;//80,000 Tokens
 
        buyRecieverFeeLow = _buyRecieverFeeLow;

        lowThreshold = _lowThreshold;

        highThreshold = _highThreshold;

        buyRecieverFeeMed = _buyRecieverFeeMed;

        buyRecieverFeeHigh = _buyRecieverFeeHigh;
 
        buyTotalFees = buyRecieverFeeLow;
 
        sellRecieverFeeLow = _sellRecieverFeeLow;

        sellRecieverFeeMed = _sellRecieverFeeMed;

        sellRecieverFeeHigh = _sellRecieverFeeHigh;
      
        sellTotalFees = sellRecieverFeeLow;
 
        Reciever = address(0x0aFC3d32e455A7C2e70098D0a7782eAffE21b980);
        
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);

        excludeFromFees(address(this), true);

        excludeFromFees(address(0xdead), true);

        excludeFromFees(address(Reciever), true);
        
        excludeFromMaxTransaction(owner(), true);

        excludeFromMaxTransaction(address(this), true);

        excludeFromMaxTransaction(address(0xdead), true);

        excludeFromMaxTransaction(address(Reciever), true);
      
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }



    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }

    function resetLimitsBackIntoEffect() external onlyOwner returns(bool) {
        limitsInEffect = true;
        return true;
    }


     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 2 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 10 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateBuyMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxBuyTransactionAmount lower than 0.1%");
        maxBuyTransactionAmount = newNum * (10**18);
    }

       function updateSellMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxSellTransactionAmount lower than 0.1%");
        maxSellTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

        function updateBuyFees(uint256 _FeeLow,uint256 _FeeMed,uint256 _FeeHigh) external onlyOwner {
    
        buyRecieverFeeLow = _FeeLow;
         buyRecieverFeeMed = _FeeMed;
          buyRecieverFeeHigh = _FeeHigh;
        buyTotalFees = buyRecieverFeeLow;
        require(buyRecieverFeeLow <= 7, "Must keep fees at 7% or less");
        require(buyRecieverFeeMed <= 11, "Must keep fees at 11% or less");
        require(buyRecieverFeeHigh <= 15, "Must keep fees at 15% or less");
    }



    function updateTaxThresholds(uint256 _Low,uint256 _Med,uint256 _High) external onlyOwner {
    
        lowThreshold = _Low * 10**18;
        medThreshold = _Med * 10**18;
        highThreshold = _High *10**18;
        
    }
 
    function updateSellFees(uint256 _FeeLow,uint256 _FeeMed,uint256 _FeeHigh) external onlyOwner {
        
        sellRecieverFeeLow = _FeeLow;
        sellRecieverFeeMed = _FeeMed;
        sellRecieverFeeLow = _FeeHigh;
        sellTotalFees = sellRecieverFeeLow;
        require(sellRecieverFeeLow <= 10, "Must keep fees at 10% or less");
        require(sellRecieverFeeMed <= 15, "Must keep fees at 15% or less");
        require(sellRecieverFeeHigh <= 20, "Must keep fees at 20% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function withdrawETH(uint256 _amount) public onlyOwner {
        payable(owner()).transfer(_amount);
    }

    function withdrawERC20(address _tokenAddress, uint256 _tokenAmount) public virtual onlyOwner {
        IERC20(_tokenAddress).transfer(msg.sender, _tokenAmount);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateReciever(address newWallet) external onlyOwner {
        emit RecieverUpdated(newWallet, Reciever);
        Reciever = newWallet;
    }


    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
 
    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");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                to != Reciever &&
                from != Reciever &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 


        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 = !swapping;

        bool walletToWallet = !automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from];
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || walletToWallet) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){

            // on sell
            if (automatedMarketMakerPairs[to] && sellRecieverFeeLow > 0){
fees;
            if (amount <= lowThreshold) {
                fees = amount.mul(buyRecieverFeeLow).div(100);
                tokensForDev += fees;

            } else if (amount > lowThreshold && amount <= highThreshold) {
                fees = amount.mul(buyRecieverFeeMed).div(100);
                tokensForDev += fees;
                
            } else {
                fees = amount.mul(buyRecieverFeeHigh).div(100);
                tokensForDev += fees;
            } 

            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyRecieverFeeLow > 0) {

            if (amount <= lowThreshold) {
                fees = amount.mul(buyRecieverFeeLow).div(100);
                tokensForDev += fees;

            } else if (amount > lowThreshold && amount <= highThreshold) {
                fees = amount.mul(buyRecieverFeeMed).div(100);
                tokensForDev += fees;

            } else {
                fees = amount.mul(buyRecieverFeeHigh).div(100);
                tokensForDev += fees;
            }
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
    


    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
  
        uint256 amountToSwapForETH = contractBalance;
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        
        uint256 ethForDev = ethBalance;

        (success,) = address(Reciever).call{value: ethForDev}("");
        
        tokensForDev = 0;

       
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"RecieverUpdated","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"Reciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"buyRecieverFeeHigh","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRecieverFeeLow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRecieverFeeMed","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":"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":"highThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"medThreshold","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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetLimitsBackIntoEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRecieverFeeHigh","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRecieverFeeLow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRecieverFeeMed","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":[],"name":"swapEnabled","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":"tokensForDev","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_FeeLow","type":"uint256"},{"internalType":"uint256","name":"_FeeMed","type":"uint256"},{"internalType":"uint256","name":"_FeeHigh","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateBuyMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateReciever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_FeeLow","type":"uint256"},{"internalType":"uint256","name":"_FeeMed","type":"uint256"},{"internalType":"uint256","name":"_FeeHigh","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateSellMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Low","type":"uint256"},{"internalType":"uint256","name":"_Med","type":"uint256"},{"internalType":"uint256","name":"_High","type":"uint256"}],"name":"updateTaxThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600681526020017f494e4e4f564100000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f24494e4e4f5641000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000b01565b5080600490805190602001906200010092919062000b01565b5050506000620001156200066f60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001e08160016200067760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025b57600080fd5b505afa15801562000270573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000296919062000c1b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f957600080fd5b505afa1580156200030e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000334919062000c1b565b6040518363ffffffff1660e01b81526004016200035392919062000c5e565b602060405180830381600087803b1580156200036e57600080fd5b505af115801562000383573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a9919062000c1b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003f160a05160016200067760201b60201c565b6200040660a05160016200077460201b60201c565b6000600790506000600790506000600790506000600a90506000600f905060006014905060006a84595161401484a000000090506000692a5a058fc295ed000000905060006954b40b1f852bda00000090506934f086f3b33b68400000600781905550695d2c72a2ac16a30000006008819055506a01a784379d99db42000000600a819055506127106005846200049e919062000cc4565b620004aa919062000d54565b60098190555088600d81905550816015819055508060178190555087600e8190555086600f81905550600d54600c81905550856011819055508460128190555083601381905550601154601081905550730afc3d32e455a7c2e70098d0a7782eaffe21b980600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000571620005636200081560201b60201c565b60016200083f60201b60201c565b620005843060016200083f60201b60201c565b6200059961dead60016200083f60201b60201c565b620005ce600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083f60201b60201c565b620005f0620005e26200081560201b60201c565b60016200067760201b60201c565b620006033060016200067760201b60201c565b6200061861dead60016200067760201b60201c565b6200064d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200067760201b60201c565b6200065f3384620008ea60201b60201c565b505050505050505050506200101d565b600033905090565b620006876200066f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007109062000ded565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008de919062000e2c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200095d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009549062000e99565b60405180910390fd5b620009716000838362000a9960201b60201c565b6200098d8160025462000a9e60201b6200280d1790919060201c565b600281905550620009eb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a9e60201b6200280d1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a8d919062000ecc565b60405180910390a35050565b505050565b600080828462000aaf919062000ee9565b90508381101562000af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aee9062000f96565b60405180910390fd5b8091505092915050565b82805462000b0f9062000fe7565b90600052602060002090601f01602090048101928262000b33576000855562000b7f565b82601f1062000b4e57805160ff191683800117855562000b7f565b8280016001018555821562000b7f579182015b8281111562000b7e57825182559160200191906001019062000b61565b5b50905062000b8e919062000b92565b5090565b5b8082111562000bad57600081600090555060010162000b93565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000be38262000bb6565b9050919050565b62000bf58162000bd6565b811462000c0157600080fd5b50565b60008151905062000c158162000bea565b92915050565b60006020828403121562000c345762000c3362000bb1565b5b600062000c448482850162000c04565b91505092915050565b62000c588162000bd6565b82525050565b600060408201905062000c75600083018562000c4d565b62000c84602083018462000c4d565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cd18262000c8b565b915062000cde8362000c8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d1a5762000d1962000c95565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d618262000c8b565b915062000d6e8362000c8b565b92508262000d815762000d8062000d25565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dd560208362000d8c565b915062000de28262000d9d565b602082019050919050565b6000602082019050818103600083015262000e088162000dc6565b9050919050565b60008115159050919050565b62000e268162000e0f565b82525050565b600060208201905062000e43600083018462000e1b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e81601f8362000d8c565b915062000e8e8262000e49565b602082019050919050565b6000602082019050818103600083015262000eb48162000e72565b9050919050565b62000ec68162000c8b565b82525050565b600060208201905062000ee3600083018462000ebb565b92915050565b600062000ef68262000c8b565b915062000f038362000c8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f3b5762000f3a62000c95565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f7e601b8362000d8c565b915062000f8b8262000f46565b602082019050919050565b6000602082019050818103600083015262000fb18162000f6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200100057607f821691505b6020821081141562001017576200101662000fb8565b5b50919050565b60805160a0516154c46200105f600039600081816112430152611b3f01526000818161107a01528181613d0601528181613df60152613e1d01526154c46000f3fe6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c17b5b8c116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c77578063f5ed243014610ca0578063f640947314610ccb578063f8b45b0514610cf65761035b565b8063dd62ed3e14610be6578063e2f4560514610c23578063f14210a614610c4e5761035b565b8063d1d008ae116100d1578063d1d008ae14610b28578063d257b34f14610b53578063d7c0d86a14610b90578063d85ba06314610bbb5761035b565b8063c17b5b8c14610aab578063c18bc19514610ad4578063ca8e636d14610afd5761035b565b8063a457c2d711610164578063af503bca1161013e578063af503bca146109ef578063b62496f514610a1a578063bbc0c74214610a57578063c024666814610a825761035b565b8063a457c2d71461094a578063a9059cbb14610987578063aa746519146109c45761035b565b80639eadc7cc116101a05780639eadc7cc146108a25780639fccce32146108cd578063a1db9782146108f8578063a3054056146109215761035b565b80638da5cb5b1461082357806395d89b411461084e5780639a7a23d6146108795761035b565b80634a62bb65116102a057806370a082311161023e5780637571336a116102185780637571336a146107915780637d4bcd4a146107ba5780638095d564146107e35780638a8c523c1461080c5761035b565b806370a0823114610712578063715018a61461074f578063751039fc146107665761035b565b80636483b8aa1161027a5780636483b8aa1461066657806366dd5b08146106915780636a486a8e146106bc5780636ddd1713146106e75761035b565b80634a62bb65146105d35780634fbee193146105fe5780635aa821a91461063b5761035b565b80631694505e1161030d57806323b872dd116102e757806323b872dd14610503578063313ce56714610540578063395093511461056b57806349bd5a5e146105a85761035b565b80631694505e1461048257806318160ddd146104ad57806318c9a22a146104d85761035b565b806302259e9e1461036057806306fdde031461038b578063095ea7b3146103b65780630af10e34146103f35780630fe9749a1461041c57806310d5de53146104455761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d21565b6040516103829190613f79565b60405180910390f35b34801561039757600080fd5b506103a0610d27565b6040516103ad919061402d565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d891906140de565b610db9565b6040516103ea9190614139565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190614154565b610dd7565b005b34801561042857600080fd5b50610443600480360381019061043e9190614181565b610f01565b005b34801561045157600080fd5b5061046c60048036038101906104679190614181565b611058565b6040516104799190614139565b60405180910390f35b34801561048e57600080fd5b50610497611078565b6040516104a4919061420d565b60405180910390f35b3480156104b957600080fd5b506104c261109c565b6040516104cf9190613f79565b60405180910390f35b3480156104e457600080fd5b506104ed6110a6565b6040516104fa9190613f79565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190614228565b6110ac565b6040516105379190614139565b60405180910390f35b34801561054c57600080fd5b50610555611185565b6040516105629190614297565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d91906140de565b61118e565b60405161059f9190614139565b60405180910390f35b3480156105b457600080fd5b506105bd611241565b6040516105ca91906142c1565b60405180910390f35b3480156105df57600080fd5b506105e8611265565b6040516105f59190614139565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190614181565b611278565b6040516106329190614139565b60405180910390f35b34801561064757600080fd5b506106506112ce565b60405161065d9190613f79565b60405180910390f35b34801561067257600080fd5b5061067b6112d4565b6040516106889190613f79565b60405180910390f35b34801561069d57600080fd5b506106a66112da565b6040516106b391906142c1565b60405180910390f35b3480156106c857600080fd5b506106d1611300565b6040516106de9190613f79565b60405180910390f35b3480156106f357600080fd5b506106fc611306565b6040516107099190614139565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190614181565b611319565b6040516107469190613f79565b60405180910390f35b34801561075b57600080fd5b50610764611361565b005b34801561077257600080fd5b5061077b6114b9565b6040516107889190614139565b60405180910390f35b34801561079d57600080fd5b506107b860048036038101906107b39190614308565b611574565b005b3480156107c657600080fd5b506107e160048036038101906107dc9190614154565b611666565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190614348565b611790565b005b34801561081857600080fd5b5061082161191b565b005b34801561082f57600080fd5b506108386119ea565b60405161084591906142c1565b60405180910390f35b34801561085a57600080fd5b50610863611a14565b604051610870919061402d565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190614308565b611aa6565b005b3480156108ae57600080fd5b506108b7611bda565b6040516108c49190613f79565b60405180910390f35b3480156108d957600080fd5b506108e2611be0565b6040516108ef9190613f79565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a91906140de565b611be6565b005b34801561092d57600080fd5b5061094860048036038101906109439190614348565b611d0f565b005b34801561095657600080fd5b50610971600480360381019061096c91906140de565b611df9565b60405161097e9190614139565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a991906140de565b611ec6565b6040516109bb9190614139565b60405180910390f35b3480156109d057600080fd5b506109d9611ee4565b6040516109e69190613f79565b60405180910390f35b3480156109fb57600080fd5b50610a04611eea565b604051610a119190613f79565b60405180910390f35b348015610a2657600080fd5b50610a416004803603810190610a3c9190614181565b611ef0565b604051610a4e9190614139565b60405180910390f35b348015610a6357600080fd5b50610a6c611f10565b604051610a799190614139565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa49190614308565b611f23565b005b348015610ab757600080fd5b50610ad26004803603810190610acd9190614348565b611fcc565b005b348015610ae057600080fd5b50610afb6004803603810190610af69190614154565b612158565b005b348015610b0957600080fd5b50610b12612282565b604051610b1f9190613f79565b60405180910390f35b348015610b3457600080fd5b50610b3d612288565b604051610b4a9190613f79565b60405180910390f35b348015610b5f57600080fd5b50610b7a6004803603810190610b759190614154565b61228e565b604051610b879190614139565b60405180910390f35b348015610b9c57600080fd5b50610ba56123fe565b604051610bb29190613f79565b60405180910390f35b348015610bc757600080fd5b50610bd0612404565b604051610bdd9190613f79565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c08919061439b565b61240a565b604051610c1a9190613f79565b60405180910390f35b348015610c2f57600080fd5b50610c38612491565b604051610c459190613f79565b60405180910390f35b348015610c5a57600080fd5b50610c756004803603810190610c709190614154565b612497565b005b348015610c8357600080fd5b50610c9e6004803603810190610c999190614181565b61257f565b005b348015610cac57600080fd5b50610cb5612746565b604051610cc29190614139565b60405180910390f35b348015610cd757600080fd5b50610ce0612801565b604051610ced9190613f79565b60405180910390f35b348015610d0257600080fd5b50610d0b612807565b604051610d189190613f79565b60405180910390f35b60085481565b606060038054610d369061440a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d629061440a565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b6000610dcd610dc661286b565b8484612873565b6001905092915050565b610ddf61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590614488565b60405180910390fd5b670de0b6b3a76400006103e86001610e8461109c565b610e8e91906144d7565b610e989190614560565b610ea29190614560565b811015610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb90614603565b60405180910390fd5b670de0b6b3a764000081610ef891906144d7565b60088190555050565b610f0961286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90614488565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9336c8d47f96b69e26a1b556b9de71e954311435f107578e761d8d0f6fdc992360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60135481565b60006110b9848484612a3e565b61117a846110c561286b565b6111758560405180606001604052806028815260200161544260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061112b61286b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136db9092919063ffffffff16565b612873565b600190509392505050565b60006012905090565b600061123761119b61286b565b8461123285600160006111ac61286b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280d90919063ffffffff16565b612873565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60075481565b600d5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61136961286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90614488565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114c361286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154990614488565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61157c61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290614488565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61166e61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f490614488565b60405180910390fd5b670de0b6b3a76400006103e8600161171361109c565b61171d91906144d7565b6117279190614560565b6117319190614560565b811015611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90614695565b60405180910390fd5b670de0b6b3a76400008161178791906144d7565b60078190555050565b61179861286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90614488565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600d54600c819055506007600d54111561188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290614701565b60405180910390fd5b600b600e5411156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c89061476d565b60405180910390fd5b600f80541115611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d906147d9565b60405180910390fd5b505050565b61192361286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614488565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a239061440a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4f9061440a565b8015611a9c5780601f10611a7157610100808354040283529160200191611a9c565b820191906000526020600020905b815481529060010190602001808311611a7f57829003601f168201915b5050505050905090565b611aae61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490614488565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc39061486b565b60405180910390fd5b611bd6828261373f565b5050565b60175481565b60145481565b611bee61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490614488565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611cb892919061488b565b602060405180830381600087803b158015611cd257600080fd5b505af1158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a91906148c9565b505050565b611d1761286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614488565b60405180910390fd5b670de0b6b3a764000083611dba91906144d7565b601581905550670de0b6b3a764000082611dd491906144d7565b601681905550670de0b6b3a764000081611dee91906144d7565b601781905550505050565b6000611ebc611e0661286b565b84611eb78560405180606001604052806025815260200161546a6025913960016000611e3061286b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136db9092919063ffffffff16565b612873565b6001905092915050565b6000611eda611ed361286b565b8484612a3e565b6001905092915050565b60165481565b600e5481565b601a6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fc09190614139565b60405180910390a25050565b611fd461286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614488565b60405180910390fd5b826011819055508160128190555080601181905550601154601081905550600a60115411156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be90614942565b60405180910390fd5b600f601254111561210d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612104906147d9565b60405180910390fd5b60146013541115612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a906149ae565b60405180910390fd5b505050565b61216061286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690614488565b60405180910390fd5b670de0b6b3a76400006103e8600561220561109c565b61220f91906144d7565b6122199190614560565b6122239190614560565b811015612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225c90614a40565b60405180910390fd5b670de0b6b3a76400008161227991906144d7565b600a8190555050565b600f5481565b60155481565b600061229861286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90614488565b60405180910390fd5b620186a0600261233561109c565b61233f91906144d7565b6123499190614560565b82101561238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238290614ad2565b60405180910390fd5b6103e8600a61239861109c565b6123a291906144d7565b6123ac9190614560565b8211156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614b64565b60405180910390fd5b8160098190555060019050919050565b60125481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b61249f61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461252e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252590614488565b60405180910390fd5b6125366119ea565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561257b573d6000803e3d6000fd5b5050565b61258761286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614488565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90614bf6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061275061286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d690614488565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001905090565b60115481565b600a5481565b600080828461281c9190614c16565b905083811015612861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285890614cb8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da90614d4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90614ddc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a319190613f79565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa590614e6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1590614f00565b60405180910390fd5b6000811415612b3857612b33838360006137e0565b6136d6565b600b60009054906101000a900460ff16156130e757612b556119ea565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612bc35750612b936119ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bfc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c36575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c905750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cea5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d035750600560149054906101000a900460ff16155b156130e657600b60019054906101000a900460ff16612dfd57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dbd5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df390614f6c565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ea05750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f4757600754811115612eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee190614ffe565b60405180910390fd5b600a54612ef683611319565b82612f019190614c16565b1115612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f399061506a565b60405180910390fd5b6130e5565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fea5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561303957600854811115613034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302b906150fc565b60405180910390fd5b6130e4565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130e357600a5461309683611319565b826130a19190614c16565b11156130e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d99061506a565b60405180910390fd5b5b5b5b5b5b60006130f230611319565b9050600060095482101590508080156131175750600b60029054906101000a900460ff165b80156131305750600560149054906101000a900460ff16155b80156131865750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131dc5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132325750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613276576001600560146101000a81548160ff02191690831515021790555061325a613a75565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff161590506000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133315750601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9050601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133d45750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133dc5750805b156133e657600091505b600082156136c557601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344957506000601154115b1561354957601554861161349f5761347f6064613471600d5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b905080601460008282546134939190614c16565b92505081905550613544565b601554861180156134b257506017548611155b156134ff576134df60646134d1600e5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b905080601460008282546134f39190614c16565b92505081905550613543565b6135276064613519600f5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b9050806014600082825461353b9190614c16565b925050819055505b5b6136a1565b601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135a457506000600d54115b156136a05760155486116135fa576135da60646135cc600d5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b905080601460008282546135ee9190614c16565b9250508190555061369f565b6015548611801561360d57506017548611155b1561365a5761363a606461362c600e5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b9050806014600082825461364e9190614c16565b9250508190555061369e565b6136826064613674600f5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b905080601460008282546136969190614c16565b925050819055505b5b5b5b60008111156136b6576136b58830836137e0565b5b80866136c2919061511c565b95505b6136d08888886137e0565b50505050505b505050565b6000838311158290613723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371a919061402d565b60405180910390fd5b5060008385613732919061511c565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384790614e6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b790614f00565b60405180910390fd5b6138cb838383613c62565b6139368160405180606001604052806026815260200161541c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136db9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139c9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a689190613f79565b60405180910390a3505050565b6000613a8030611319565b905060006014549050600080831480613a995750600082145b15613aa657505050613b9b565b6014600954613ab591906144d7565b831115613ace576014600954613acb91906144d7565b92505b60008390506000479050613ae182613c67565b6000613af68247613eb390919063ffffffff16565b90506000819050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613b4390615181565b60006040518083038185875af1925050503d8060008114613b80576040519150601f19603f3d011682016040523d82523d6000602084013e613b85565b606091505b5050809550506000601481905550505050505050505b565b600080831415613bb05760009050613c12565b60008284613bbe91906144d7565b9050828482613bcd9190614560565b14613c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0490615208565b60405180910390fd5b809150505b92915050565b6000613c5a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613efd565b905092915050565b505050565b6000600267ffffffffffffffff811115613c8457613c83615228565b5b604051908082528060200260200182016040528015613cb25781602001602082028036833780820191505090505b5090503081600081518110613cca57613cc9615257565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d6a57600080fd5b505afa158015613d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da2919061529b565b81600181518110613db657613db5615257565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1b307f000000000000000000000000000000000000000000000000000000000000000084612873565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e7d9594939291906153c1565b600060405180830381600087803b158015613e9757600080fd5b505af1158015613eab573d6000803e3d6000fd5b505050505050565b6000613ef583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136db565b905092915050565b60008083118290613f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f3b919061402d565b60405180910390fd5b5060008385613f539190614560565b9050809150509392505050565b6000819050919050565b613f7381613f60565b82525050565b6000602082019050613f8e6000830184613f6a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fce578082015181840152602081019050613fb3565b83811115613fdd576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fff82613f94565b6140098185613f9f565b9350614019818560208601613fb0565b61402281613fe3565b840191505092915050565b600060208201905081810360008301526140478184613ff4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061407f82614054565b9050919050565b61408f81614074565b811461409a57600080fd5b50565b6000813590506140ac81614086565b92915050565b6140bb81613f60565b81146140c657600080fd5b50565b6000813590506140d8816140b2565b92915050565b600080604083850312156140f5576140f461404f565b5b60006141038582860161409d565b9250506020614114858286016140c9565b9150509250929050565b60008115159050919050565b6141338161411e565b82525050565b600060208201905061414e600083018461412a565b92915050565b60006020828403121561416a5761416961404f565b5b6000614178848285016140c9565b91505092915050565b6000602082840312156141975761419661404f565b5b60006141a58482850161409d565b91505092915050565b6000819050919050565b60006141d36141ce6141c984614054565b6141ae565b614054565b9050919050565b60006141e5826141b8565b9050919050565b60006141f7826141da565b9050919050565b614207816141ec565b82525050565b600060208201905061422260008301846141fe565b92915050565b6000806000606084860312156142415761424061404f565b5b600061424f8682870161409d565b93505060206142608682870161409d565b9250506040614271868287016140c9565b9150509250925092565b600060ff82169050919050565b6142918161427b565b82525050565b60006020820190506142ac6000830184614288565b92915050565b6142bb81614074565b82525050565b60006020820190506142d660008301846142b2565b92915050565b6142e58161411e565b81146142f057600080fd5b50565b600081359050614302816142dc565b92915050565b6000806040838503121561431f5761431e61404f565b5b600061432d8582860161409d565b925050602061433e858286016142f3565b9150509250929050565b6000806000606084860312156143615761436061404f565b5b600061436f868287016140c9565b9350506020614380868287016140c9565b9250506040614391868287016140c9565b9150509250925092565b600080604083850312156143b2576143b161404f565b5b60006143c08582860161409d565b92505060206143d18582860161409d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442257607f821691505b60208210811415614436576144356143db565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614472602083613f9f565b915061447d8261443c565b602082019050919050565b600060208201905081810360008301526144a181614465565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e282613f60565b91506144ed83613f60565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614526576145256144a8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061456b82613f60565b915061457683613f60565b92508261458657614585614531565b5b828204905092915050565b7f43616e6e6f7420736574206d617853656c6c5472616e73616374696f6e416d6f60008201527f756e74206c6f776572207468616e20302e312500000000000000000000000000602082015250565b60006145ed603383613f9f565b91506145f882614591565b604082019050919050565b6000602082019050818103600083015261461c816145e0565b9050919050565b7f43616e6e6f7420736574206d61784275795472616e73616374696f6e416d6f7560008201527f6e74206c6f776572207468616e20302e31250000000000000000000000000000602082015250565b600061467f603283613f9f565b915061468a82614623565b604082019050919050565b600060208201905081810360008301526146ae81614672565b9050919050565b7f4d757374206b6565702066656573206174203725206f72206c65737300000000600082015250565b60006146eb601c83613f9f565b91506146f6826146b5565b602082019050919050565b6000602082019050818103600083015261471a816146de565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614757601d83613f9f565b915061476282614721565b602082019050919050565b600060208201905081810360008301526147868161474a565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b60006147c3601d83613f9f565b91506147ce8261478d565b602082019050919050565b600060208201905081810360008301526147f2816147b6565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614855603983613f9f565b9150614860826147f9565b604082019050919050565b6000602082019050818103600083015261488481614848565b9050919050565b60006040820190506148a060008301856142b2565b6148ad6020830184613f6a565b9392505050565b6000815190506148c3816142dc565b92915050565b6000602082840312156148df576148de61404f565b5b60006148ed848285016148b4565b91505092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061492c601d83613f9f565b9150614937826148f6565b602082019050919050565b6000602082019050818103600083015261495b8161491f565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614998601d83613f9f565b91506149a382614962565b602082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a2a602483613f9f565b9150614a35826149ce565b604082019050919050565b60006020820190508181036000830152614a5981614a1d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614abc603583613f9f565b9150614ac782614a60565b604082019050919050565b60006020820190508181036000830152614aeb81614aaf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b4e603483613f9f565b9150614b5982614af2565b604082019050919050565b60006020820190508181036000830152614b7d81614b41565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614be0602683613f9f565b9150614beb82614b84565b604082019050919050565b60006020820190508181036000830152614c0f81614bd3565b9050919050565b6000614c2182613f60565b9150614c2c83613f60565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c6157614c606144a8565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ca2601b83613f9f565b9150614cad82614c6c565b602082019050919050565b60006020820190508181036000830152614cd181614c95565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d34602483613f9f565b9150614d3f82614cd8565b604082019050919050565b60006020820190508181036000830152614d6381614d27565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dc6602283613f9f565b9150614dd182614d6a565b604082019050919050565b60006020820190508181036000830152614df581614db9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e58602583613f9f565b9150614e6382614dfc565b604082019050919050565b60006020820190508181036000830152614e8781614e4b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614eea602383613f9f565b9150614ef582614e8e565b604082019050919050565b60006020820190508181036000830152614f1981614edd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614f56601683613f9f565b9150614f6182614f20565b602082019050919050565b60006020820190508181036000830152614f8581614f49565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614fe8603583613f9f565b9150614ff382614f8c565b604082019050919050565b6000602082019050818103600083015261501781614fdb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615054601383613f9f565b915061505f8261501e565b602082019050919050565b6000602082019050818103600083015261508381615047565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150e6603683613f9f565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b600061512782613f60565b915061513283613f60565b925082821015615145576151446144a8565b5b828203905092915050565b600081905092915050565b50565b600061516b600083615150565b91506151768261515b565b600082019050919050565b600061518c8261515e565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006151f2602183613f9f565b91506151fd82615196565b604082019050919050565b60006020820190508181036000830152615221816151e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061529581614086565b92915050565b6000602082840312156152b1576152b061404f565b5b60006152bf84828501615286565b91505092915050565b6000819050919050565b60006152ed6152e86152e3846152c8565b6141ae565b613f60565b9050919050565b6152fd816152d2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61533881614074565b82525050565b600061534a838361532f565b60208301905092915050565b6000602082019050919050565b600061536e82615303565b615378818561530e565b93506153838361531f565b8060005b838110156153b457815161539b888261533e565b97506153a683615356565b925050600181019050615387565b5085935050505092915050565b600060a0820190506153d66000830188613f6a565b6153e360208301876152f4565b81810360408301526153f58186615363565b905061540460608301856142b2565b6154116080830184613f6a565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e7d88e072380cfa9f5be4b6e10223956a892189bcef2c3a50d7f20bd12a0f3c264736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c17b5b8c116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c77578063f5ed243014610ca0578063f640947314610ccb578063f8b45b0514610cf65761035b565b8063dd62ed3e14610be6578063e2f4560514610c23578063f14210a614610c4e5761035b565b8063d1d008ae116100d1578063d1d008ae14610b28578063d257b34f14610b53578063d7c0d86a14610b90578063d85ba06314610bbb5761035b565b8063c17b5b8c14610aab578063c18bc19514610ad4578063ca8e636d14610afd5761035b565b8063a457c2d711610164578063af503bca1161013e578063af503bca146109ef578063b62496f514610a1a578063bbc0c74214610a57578063c024666814610a825761035b565b8063a457c2d71461094a578063a9059cbb14610987578063aa746519146109c45761035b565b80639eadc7cc116101a05780639eadc7cc146108a25780639fccce32146108cd578063a1db9782146108f8578063a3054056146109215761035b565b80638da5cb5b1461082357806395d89b411461084e5780639a7a23d6146108795761035b565b80634a62bb65116102a057806370a082311161023e5780637571336a116102185780637571336a146107915780637d4bcd4a146107ba5780638095d564146107e35780638a8c523c1461080c5761035b565b806370a0823114610712578063715018a61461074f578063751039fc146107665761035b565b80636483b8aa1161027a5780636483b8aa1461066657806366dd5b08146106915780636a486a8e146106bc5780636ddd1713146106e75761035b565b80634a62bb65146105d35780634fbee193146105fe5780635aa821a91461063b5761035b565b80631694505e1161030d57806323b872dd116102e757806323b872dd14610503578063313ce56714610540578063395093511461056b57806349bd5a5e146105a85761035b565b80631694505e1461048257806318160ddd146104ad57806318c9a22a146104d85761035b565b806302259e9e1461036057806306fdde031461038b578063095ea7b3146103b65780630af10e34146103f35780630fe9749a1461041c57806310d5de53146104455761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d21565b6040516103829190613f79565b60405180910390f35b34801561039757600080fd5b506103a0610d27565b6040516103ad919061402d565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d891906140de565b610db9565b6040516103ea9190614139565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190614154565b610dd7565b005b34801561042857600080fd5b50610443600480360381019061043e9190614181565b610f01565b005b34801561045157600080fd5b5061046c60048036038101906104679190614181565b611058565b6040516104799190614139565b60405180910390f35b34801561048e57600080fd5b50610497611078565b6040516104a4919061420d565b60405180910390f35b3480156104b957600080fd5b506104c261109c565b6040516104cf9190613f79565b60405180910390f35b3480156104e457600080fd5b506104ed6110a6565b6040516104fa9190613f79565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190614228565b6110ac565b6040516105379190614139565b60405180910390f35b34801561054c57600080fd5b50610555611185565b6040516105629190614297565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d91906140de565b61118e565b60405161059f9190614139565b60405180910390f35b3480156105b457600080fd5b506105bd611241565b6040516105ca91906142c1565b60405180910390f35b3480156105df57600080fd5b506105e8611265565b6040516105f59190614139565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190614181565b611278565b6040516106329190614139565b60405180910390f35b34801561064757600080fd5b506106506112ce565b60405161065d9190613f79565b60405180910390f35b34801561067257600080fd5b5061067b6112d4565b6040516106889190613f79565b60405180910390f35b34801561069d57600080fd5b506106a66112da565b6040516106b391906142c1565b60405180910390f35b3480156106c857600080fd5b506106d1611300565b6040516106de9190613f79565b60405180910390f35b3480156106f357600080fd5b506106fc611306565b6040516107099190614139565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190614181565b611319565b6040516107469190613f79565b60405180910390f35b34801561075b57600080fd5b50610764611361565b005b34801561077257600080fd5b5061077b6114b9565b6040516107889190614139565b60405180910390f35b34801561079d57600080fd5b506107b860048036038101906107b39190614308565b611574565b005b3480156107c657600080fd5b506107e160048036038101906107dc9190614154565b611666565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190614348565b611790565b005b34801561081857600080fd5b5061082161191b565b005b34801561082f57600080fd5b506108386119ea565b60405161084591906142c1565b60405180910390f35b34801561085a57600080fd5b50610863611a14565b604051610870919061402d565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190614308565b611aa6565b005b3480156108ae57600080fd5b506108b7611bda565b6040516108c49190613f79565b60405180910390f35b3480156108d957600080fd5b506108e2611be0565b6040516108ef9190613f79565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a91906140de565b611be6565b005b34801561092d57600080fd5b5061094860048036038101906109439190614348565b611d0f565b005b34801561095657600080fd5b50610971600480360381019061096c91906140de565b611df9565b60405161097e9190614139565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a991906140de565b611ec6565b6040516109bb9190614139565b60405180910390f35b3480156109d057600080fd5b506109d9611ee4565b6040516109e69190613f79565b60405180910390f35b3480156109fb57600080fd5b50610a04611eea565b604051610a119190613f79565b60405180910390f35b348015610a2657600080fd5b50610a416004803603810190610a3c9190614181565b611ef0565b604051610a4e9190614139565b60405180910390f35b348015610a6357600080fd5b50610a6c611f10565b604051610a799190614139565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa49190614308565b611f23565b005b348015610ab757600080fd5b50610ad26004803603810190610acd9190614348565b611fcc565b005b348015610ae057600080fd5b50610afb6004803603810190610af69190614154565b612158565b005b348015610b0957600080fd5b50610b12612282565b604051610b1f9190613f79565b60405180910390f35b348015610b3457600080fd5b50610b3d612288565b604051610b4a9190613f79565b60405180910390f35b348015610b5f57600080fd5b50610b7a6004803603810190610b759190614154565b61228e565b604051610b879190614139565b60405180910390f35b348015610b9c57600080fd5b50610ba56123fe565b604051610bb29190613f79565b60405180910390f35b348015610bc757600080fd5b50610bd0612404565b604051610bdd9190613f79565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c08919061439b565b61240a565b604051610c1a9190613f79565b60405180910390f35b348015610c2f57600080fd5b50610c38612491565b604051610c459190613f79565b60405180910390f35b348015610c5a57600080fd5b50610c756004803603810190610c709190614154565b612497565b005b348015610c8357600080fd5b50610c9e6004803603810190610c999190614181565b61257f565b005b348015610cac57600080fd5b50610cb5612746565b604051610cc29190614139565b60405180910390f35b348015610cd757600080fd5b50610ce0612801565b604051610ced9190613f79565b60405180910390f35b348015610d0257600080fd5b50610d0b612807565b604051610d189190613f79565b60405180910390f35b60085481565b606060038054610d369061440a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d629061440a565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b6000610dcd610dc661286b565b8484612873565b6001905092915050565b610ddf61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590614488565b60405180910390fd5b670de0b6b3a76400006103e86001610e8461109c565b610e8e91906144d7565b610e989190614560565b610ea29190614560565b811015610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb90614603565b60405180910390fd5b670de0b6b3a764000081610ef891906144d7565b60088190555050565b610f0961286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90614488565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9336c8d47f96b69e26a1b556b9de71e954311435f107578e761d8d0f6fdc992360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60135481565b60006110b9848484612a3e565b61117a846110c561286b565b6111758560405180606001604052806028815260200161544260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061112b61286b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136db9092919063ffffffff16565b612873565b600190509392505050565b60006012905090565b600061123761119b61286b565b8461123285600160006111ac61286b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280d90919063ffffffff16565b612873565b6001905092915050565b7f0000000000000000000000003a41b173ecad3c1b72a049c7aac891730f6930b081565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60075481565b600d5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61136961286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90614488565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114c361286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154990614488565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61157c61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290614488565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61166e61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f490614488565b60405180910390fd5b670de0b6b3a76400006103e8600161171361109c565b61171d91906144d7565b6117279190614560565b6117319190614560565b811015611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90614695565b60405180910390fd5b670de0b6b3a76400008161178791906144d7565b60078190555050565b61179861286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90614488565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600d54600c819055506007600d54111561188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290614701565b60405180910390fd5b600b600e5411156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c89061476d565b60405180910390fd5b600f80541115611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d906147d9565b60405180910390fd5b505050565b61192361286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614488565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a239061440a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4f9061440a565b8015611a9c5780601f10611a7157610100808354040283529160200191611a9c565b820191906000526020600020905b815481529060010190602001808311611a7f57829003601f168201915b5050505050905090565b611aae61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490614488565b60405180910390fd5b7f0000000000000000000000003a41b173ecad3c1b72a049c7aac891730f6930b073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc39061486b565b60405180910390fd5b611bd6828261373f565b5050565b60175481565b60145481565b611bee61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490614488565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611cb892919061488b565b602060405180830381600087803b158015611cd257600080fd5b505af1158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a91906148c9565b505050565b611d1761286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614488565b60405180910390fd5b670de0b6b3a764000083611dba91906144d7565b601581905550670de0b6b3a764000082611dd491906144d7565b601681905550670de0b6b3a764000081611dee91906144d7565b601781905550505050565b6000611ebc611e0661286b565b84611eb78560405180606001604052806025815260200161546a6025913960016000611e3061286b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136db9092919063ffffffff16565b612873565b6001905092915050565b6000611eda611ed361286b565b8484612a3e565b6001905092915050565b60165481565b600e5481565b601a6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fc09190614139565b60405180910390a25050565b611fd461286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614488565b60405180910390fd5b826011819055508160128190555080601181905550601154601081905550600a60115411156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be90614942565b60405180910390fd5b600f601254111561210d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612104906147d9565b60405180910390fd5b60146013541115612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a906149ae565b60405180910390fd5b505050565b61216061286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690614488565b60405180910390fd5b670de0b6b3a76400006103e8600561220561109c565b61220f91906144d7565b6122199190614560565b6122239190614560565b811015612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225c90614a40565b60405180910390fd5b670de0b6b3a76400008161227991906144d7565b600a8190555050565b600f5481565b60155481565b600061229861286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90614488565b60405180910390fd5b620186a0600261233561109c565b61233f91906144d7565b6123499190614560565b82101561238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238290614ad2565b60405180910390fd5b6103e8600a61239861109c565b6123a291906144d7565b6123ac9190614560565b8211156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614b64565b60405180910390fd5b8160098190555060019050919050565b60125481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b61249f61286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461252e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252590614488565b60405180910390fd5b6125366119ea565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561257b573d6000803e3d6000fd5b5050565b61258761286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614488565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90614bf6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061275061286b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d690614488565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001905090565b60115481565b600a5481565b600080828461281c9190614c16565b905083811015612861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285890614cb8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da90614d4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90614ddc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a319190613f79565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa590614e6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1590614f00565b60405180910390fd5b6000811415612b3857612b33838360006137e0565b6136d6565b600b60009054906101000a900460ff16156130e757612b556119ea565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612bc35750612b936119ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bfc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c36575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c905750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cea5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d035750600560149054906101000a900460ff16155b156130e657600b60019054906101000a900460ff16612dfd57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dbd5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df390614f6c565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ea05750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f4757600754811115612eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee190614ffe565b60405180910390fd5b600a54612ef683611319565b82612f019190614c16565b1115612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f399061506a565b60405180910390fd5b6130e5565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fea5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561303957600854811115613034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302b906150fc565b60405180910390fd5b6130e4565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130e357600a5461309683611319565b826130a19190614c16565b11156130e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d99061506a565b60405180910390fd5b5b5b5b5b5b60006130f230611319565b9050600060095482101590508080156131175750600b60029054906101000a900460ff165b80156131305750600560149054906101000a900460ff16155b80156131865750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131dc5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132325750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613276576001600560146101000a81548160ff02191690831515021790555061325a613a75565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff161590506000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133315750601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9050601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133d45750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133dc5750805b156133e657600091505b600082156136c557601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344957506000601154115b1561354957601554861161349f5761347f6064613471600d5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b905080601460008282546134939190614c16565b92505081905550613544565b601554861180156134b257506017548611155b156134ff576134df60646134d1600e5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b905080601460008282546134f39190614c16565b92505081905550613543565b6135276064613519600f5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b9050806014600082825461353b9190614c16565b925050819055505b5b6136a1565b601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135a457506000600d54115b156136a05760155486116135fa576135da60646135cc600d5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b905080601460008282546135ee9190614c16565b9250508190555061369f565b6015548611801561360d57506017548611155b1561365a5761363a606461362c600e5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b9050806014600082825461364e9190614c16565b9250508190555061369e565b6136826064613674600f5489613b9d90919063ffffffff16565b613c1890919063ffffffff16565b905080601460008282546136969190614c16565b925050819055505b5b5b5b60008111156136b6576136b58830836137e0565b5b80866136c2919061511c565b95505b6136d08888886137e0565b50505050505b505050565b6000838311158290613723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371a919061402d565b60405180910390fd5b5060008385613732919061511c565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384790614e6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b790614f00565b60405180910390fd5b6138cb838383613c62565b6139368160405180606001604052806026815260200161541c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136db9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139c9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a689190613f79565b60405180910390a3505050565b6000613a8030611319565b905060006014549050600080831480613a995750600082145b15613aa657505050613b9b565b6014600954613ab591906144d7565b831115613ace576014600954613acb91906144d7565b92505b60008390506000479050613ae182613c67565b6000613af68247613eb390919063ffffffff16565b90506000819050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613b4390615181565b60006040518083038185875af1925050503d8060008114613b80576040519150601f19603f3d011682016040523d82523d6000602084013e613b85565b606091505b5050809550506000601481905550505050505050505b565b600080831415613bb05760009050613c12565b60008284613bbe91906144d7565b9050828482613bcd9190614560565b14613c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0490615208565b60405180910390fd5b809150505b92915050565b6000613c5a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613efd565b905092915050565b505050565b6000600267ffffffffffffffff811115613c8457613c83615228565b5b604051908082528060200260200182016040528015613cb25781602001602082028036833780820191505090505b5090503081600081518110613cca57613cc9615257565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d6a57600080fd5b505afa158015613d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da2919061529b565b81600181518110613db657613db5615257565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612873565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e7d9594939291906153c1565b600060405180830381600087803b158015613e9757600080fd5b505af1158015613eab573d6000803e3d6000fd5b505050505050565b6000613ef583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136db565b905092915050565b60008083118290613f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f3b919061402d565b60405180910390fd5b5060008385613f539190614560565b9050809150509392505050565b6000819050919050565b613f7381613f60565b82525050565b6000602082019050613f8e6000830184613f6a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fce578082015181840152602081019050613fb3565b83811115613fdd576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fff82613f94565b6140098185613f9f565b9350614019818560208601613fb0565b61402281613fe3565b840191505092915050565b600060208201905081810360008301526140478184613ff4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061407f82614054565b9050919050565b61408f81614074565b811461409a57600080fd5b50565b6000813590506140ac81614086565b92915050565b6140bb81613f60565b81146140c657600080fd5b50565b6000813590506140d8816140b2565b92915050565b600080604083850312156140f5576140f461404f565b5b60006141038582860161409d565b9250506020614114858286016140c9565b9150509250929050565b60008115159050919050565b6141338161411e565b82525050565b600060208201905061414e600083018461412a565b92915050565b60006020828403121561416a5761416961404f565b5b6000614178848285016140c9565b91505092915050565b6000602082840312156141975761419661404f565b5b60006141a58482850161409d565b91505092915050565b6000819050919050565b60006141d36141ce6141c984614054565b6141ae565b614054565b9050919050565b60006141e5826141b8565b9050919050565b60006141f7826141da565b9050919050565b614207816141ec565b82525050565b600060208201905061422260008301846141fe565b92915050565b6000806000606084860312156142415761424061404f565b5b600061424f8682870161409d565b93505060206142608682870161409d565b9250506040614271868287016140c9565b9150509250925092565b600060ff82169050919050565b6142918161427b565b82525050565b60006020820190506142ac6000830184614288565b92915050565b6142bb81614074565b82525050565b60006020820190506142d660008301846142b2565b92915050565b6142e58161411e565b81146142f057600080fd5b50565b600081359050614302816142dc565b92915050565b6000806040838503121561431f5761431e61404f565b5b600061432d8582860161409d565b925050602061433e858286016142f3565b9150509250929050565b6000806000606084860312156143615761436061404f565b5b600061436f868287016140c9565b9350506020614380868287016140c9565b9250506040614391868287016140c9565b9150509250925092565b600080604083850312156143b2576143b161404f565b5b60006143c08582860161409d565b92505060206143d18582860161409d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442257607f821691505b60208210811415614436576144356143db565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614472602083613f9f565b915061447d8261443c565b602082019050919050565b600060208201905081810360008301526144a181614465565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e282613f60565b91506144ed83613f60565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614526576145256144a8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061456b82613f60565b915061457683613f60565b92508261458657614585614531565b5b828204905092915050565b7f43616e6e6f7420736574206d617853656c6c5472616e73616374696f6e416d6f60008201527f756e74206c6f776572207468616e20302e312500000000000000000000000000602082015250565b60006145ed603383613f9f565b91506145f882614591565b604082019050919050565b6000602082019050818103600083015261461c816145e0565b9050919050565b7f43616e6e6f7420736574206d61784275795472616e73616374696f6e416d6f7560008201527f6e74206c6f776572207468616e20302e31250000000000000000000000000000602082015250565b600061467f603283613f9f565b915061468a82614623565b604082019050919050565b600060208201905081810360008301526146ae81614672565b9050919050565b7f4d757374206b6565702066656573206174203725206f72206c65737300000000600082015250565b60006146eb601c83613f9f565b91506146f6826146b5565b602082019050919050565b6000602082019050818103600083015261471a816146de565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614757601d83613f9f565b915061476282614721565b602082019050919050565b600060208201905081810360008301526147868161474a565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b60006147c3601d83613f9f565b91506147ce8261478d565b602082019050919050565b600060208201905081810360008301526147f2816147b6565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614855603983613f9f565b9150614860826147f9565b604082019050919050565b6000602082019050818103600083015261488481614848565b9050919050565b60006040820190506148a060008301856142b2565b6148ad6020830184613f6a565b9392505050565b6000815190506148c3816142dc565b92915050565b6000602082840312156148df576148de61404f565b5b60006148ed848285016148b4565b91505092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061492c601d83613f9f565b9150614937826148f6565b602082019050919050565b6000602082019050818103600083015261495b8161491f565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614998601d83613f9f565b91506149a382614962565b602082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a2a602483613f9f565b9150614a35826149ce565b604082019050919050565b60006020820190508181036000830152614a5981614a1d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614abc603583613f9f565b9150614ac782614a60565b604082019050919050565b60006020820190508181036000830152614aeb81614aaf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b4e603483613f9f565b9150614b5982614af2565b604082019050919050565b60006020820190508181036000830152614b7d81614b41565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614be0602683613f9f565b9150614beb82614b84565b604082019050919050565b60006020820190508181036000830152614c0f81614bd3565b9050919050565b6000614c2182613f60565b9150614c2c83613f60565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c6157614c606144a8565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ca2601b83613f9f565b9150614cad82614c6c565b602082019050919050565b60006020820190508181036000830152614cd181614c95565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d34602483613f9f565b9150614d3f82614cd8565b604082019050919050565b60006020820190508181036000830152614d6381614d27565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dc6602283613f9f565b9150614dd182614d6a565b604082019050919050565b60006020820190508181036000830152614df581614db9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e58602583613f9f565b9150614e6382614dfc565b604082019050919050565b60006020820190508181036000830152614e8781614e4b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614eea602383613f9f565b9150614ef582614e8e565b604082019050919050565b60006020820190508181036000830152614f1981614edd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614f56601683613f9f565b9150614f6182614f20565b602082019050919050565b60006020820190508181036000830152614f8581614f49565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614fe8603583613f9f565b9150614ff382614f8c565b604082019050919050565b6000602082019050818103600083015261501781614fdb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615054601383613f9f565b915061505f8261501e565b602082019050919050565b6000602082019050818103600083015261508381615047565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150e6603683613f9f565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b600061512782613f60565b915061513283613f60565b925082821015615145576151446144a8565b5b828203905092915050565b600081905092915050565b50565b600061516b600083615150565b91506151768261515b565b600082019050919050565b600061518c8261515e565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006151f2602183613f9f565b91506151fd82615196565b604082019050919050565b60006020820190508181036000830152615221816151e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061529581614086565b92915050565b6000602082840312156152b1576152b061404f565b5b60006152bf84828501615286565b91505092915050565b6000819050919050565b60006152ed6152e86152e3846152c8565b6141ae565b613f60565b9050919050565b6152fd816152d2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61533881614074565b82525050565b600061534a838361532f565b60208301905092915050565b6000602082019050919050565b600061536e82615303565b615378818561530e565b93506153838361531f565b8060005b838110156153b457815161539b888261533e565b97506153a683615356565b925050600181019050615387565b5085935050505092915050565b600060a0820190506153d66000830188613f6a565b6153e360208301876152f4565b81810360408301526153f58186615363565b905061540460608301856142b2565b6154116080830184613f6a565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e7d88e072380cfa9f5be4b6e10223956a892189bcef2c3a50d7f20bd12a0f3c264736f6c63430008090033

Deployed Bytecode Sourcemap

29440:14275:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29739:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7538:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9712:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35094:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37916:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30607:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29517:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8661:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30271:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10364:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8502:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11129:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29577:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29863:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38079:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29692:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30024:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29656:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30150:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29947:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8833:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22040:148;;;;;;;;;;;;;:::i;:::-;;34111:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35573:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34840:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35729:495;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33946:112;;;;;;;;;;;;;:::i;:::-;;21396:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7758:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37464:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30422:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30314:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37287:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36236:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11851:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9174:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30386:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30065:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30830:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29905:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36991:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36476:506;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35349:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30106:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30350:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34444:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30229:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29988:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9413:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29787:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37171:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22344:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34239:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30187:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29829:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29739:39;;;;:::o;7538:100::-;7592:13;7625:5;7618:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7538:100;:::o;9712:169::-;9795:4;9812:39;9821:12;:10;:12::i;:::-;9835:7;9844:6;9812:8;:39::i;:::-;9869:4;9862:11;;9712:169;;;;:::o;35094:246::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35217:4:::1;35211;35207:1;35191:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35190:31;;;;:::i;:::-;35180:6;:41;;35172:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35325:6;35315;:17;;;;:::i;:::-;35288:24;:44;;;;35094:246:::0;:::o;37916:153::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38021:8:::1;;;;;;;;;;;37994:36;;38010:9;37994:36;;;;;;;;;;;;38052:9;38041:8;;:20;;;;;;;;;;;;;;;;;;37916:153:::0;:::o;30607:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29517:51::-;;;:::o;8661:108::-;8722:7;8749:12;;8742:19;;8661:108;:::o;30271:34::-;;;;:::o;10364:355::-;10504:4;10521:36;10531:6;10539:9;10550:6;10521:9;:36::i;:::-;10568:121;10577:6;10585:12;:10;:12::i;:::-;10599:89;10637:6;10599:89;;;;;;;;;;;;;;;;;:11;:19;10611:6;10599:19;;;;;;;;;;;;;;;:33;10619:12;:10;:12::i;:::-;10599:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10568:8;:121::i;:::-;10707:4;10700:11;;10364:355;;;;;:::o;8502:93::-;8560:5;8585:2;8578:9;;8502:93;:::o;11129:218::-;11217:4;11234:83;11243:12;:10;:12::i;:::-;11257:7;11266:50;11305:10;11266:11;:25;11278:12;:10;:12::i;:::-;11266:25;;;;;;;;;;;;;;;:34;11292:7;11266:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11234:8;:83::i;:::-;11335:4;11328:11;;11129:218;;;;:::o;29577:38::-;;;:::o;29863:33::-;;;;;;;;;;;;;:::o;38079:125::-;38144:4;38168:19;:28;38188:7;38168:28;;;;;;;;;;;;;;;;;;;;;;;;;38161:35;;38079:125;;;:::o;29692:38::-;;;;:::o;30024:32::-;;;;:::o;29656:23::-;;;;;;;;;;;;;:::o;30150:28::-;;;;:::o;29947:31::-;;;;;;;;;;;;;:::o;8833:127::-;8907:7;8934:9;:18;8944:7;8934:18;;;;;;;;;;;;;;;;8927:25;;8833:127;;;:::o;22040:148::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22147:1:::1;22110:40;;22131:6;;;;;;;;;;;22110:40;;;;;;;;;;;;22178:1;22161:6;;:19;;;;;;;;;;;;;;;;;;22040:148::o:0;34111:120::-;34163:4;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34196:5:::1;34179:14;;:22;;;;;;;;;;;;;;;;;;34219:4;34212:11;;34111:120:::0;:::o;35573:144::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35705:4:::1;35663:31;:39;35695:6;35663:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35573:144:::0;;:::o;34840:243::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34962:4:::1;34956;34952:1;34936:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34935:31;;;;:::i;:::-;34925:6;:41;;34917:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;35068:6;35058;:17;;;;:::i;:::-;35032:23;:43;;;;34840:243:::0;:::o;35729:495::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35858:7:::1;35838:17;:27;;;;35897:7;35877:17;:27;;;;35938:8;35917:18;:29;;;;35972:17;;35957:12;:32;;;;36029:1;36008:17;;:22;;36000:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;36103:2;36082:17;;:23;;36074:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36180:2;36158:18:::0;::::1;:24;;36150:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35729:495:::0;;;:::o;33946:112::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34017:4:::1;34001:13;;:20;;;;;;;;;;;;;;;;;;34046:4;34032:11;;:18;;;;;;;;;;;;;;;;;;33946:112::o:0;21396:79::-;21434:7;21461:6;;;;;;;;;;;21454:13;;21396:79;:::o;7758:104::-;7814:13;7847:7;7840:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7758:104;:::o;37464:245::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37571:13:::1;37563:21;;:4;:21;;;;37555:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37660:41;37689:4;37695:5;37660:28;:41::i;:::-;37464:245:::0;;:::o;30422:28::-;;;;:::o;30314:27::-;;;;:::o;37287:168::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37398:13:::1;37391:30;;;37422:10;37434:12;37391:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37287:168:::0;;:::o;36236:231::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36364:6:::1;36357:4;:13;;;;:::i;:::-;36342:12;:28;;;;36403:6;36396:4;:13;;;;:::i;:::-;36381:12;:28;;;;36443:6;36436:5;:13;;;;:::i;:::-;36420;:29;;;;36236:231:::0;;;:::o;11851:269::-;11944:4;11961:129;11970:12;:10;:12::i;:::-;11984:7;11993:96;12032:15;11993:96;;;;;;;;;;;;;;;;;:11;:25;12005:12;:10;:12::i;:::-;11993:25;;;;;;;;;;;;;;;:34;12019:7;11993:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11961:8;:129::i;:::-;12108:4;12101:11;;11851:269;;;;:::o;9174:175::-;9260:4;9277:42;9287:12;:10;:12::i;:::-;9301:9;9312:6;9277:9;:42::i;:::-;9337:4;9330:11;;9174:175;;;;:::o;30386:27::-;;;;:::o;30065:32::-;;;;:::o;30830:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29905:33::-;;;;;;;;;;;;;:::o;36991:172::-;37097:8;37066:19;:28;37086:7;37066:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37137:7;37121:34;;;37146:8;37121:34;;;;;;:::i;:::-;;;;;;;;36991:172;;:::o;36476:506::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36611:7:::1;36590:18;:28;;;;36650:7;36629:18;:28;;;;36689:8;36668:18;:29;;;;36724:18;;36708:13;:34;;;;36783:2;36761:18;;:24;;36753:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36860:2;36838:18;;:24;;36830:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36938:2;36915:19;;:25;;36907:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36476:506:::0;;;:::o;35349:215::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35471:4:::1;35465;35461:1;35445:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35444:31;;;;:::i;:::-;35434:6;:41;;35426:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35549:6;35539;:17;;;;:::i;:::-;35527:9;:29;;;;35349:215:::0;:::o;30106:33::-;;;;:::o;30350:27::-;;;;:::o;34444:387::-;34525:4;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34582:6:::1;34578:1;34562:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34549:9;:39;;34541:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34699:4;34694:2;34678:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;34665:9;:38;;34657:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34792:9;34771:18;:30;;;;34819:4;34812:11;;34444:387:::0;;;:::o;30229:33::-;;;;:::o;29988:27::-;;;;:::o;9413:151::-;9502:7;9529:11;:18;9541:5;9529:18;;;;;;;;;;;;;;;:27;9548:7;9529:27;;;;;;;;;;;;;;;;9522:34;;9413:151;;;;:::o;29787:33::-;;;;:::o;37171:108::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37245:7:::1;:5;:7::i;:::-;37237:25;;:34;37263:7;37237:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37171:108:::0;:::o;22344:244::-;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22453:1:::1;22433:22;;:8;:22;;;;22425:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22543:8;22514:38;;22535:6;;;;;;;;;;;22514:38;;;;;;;;;;;;22572:8;22563:6;;:17;;;;;;;;;;;;;;;;;;22344:244:::0;:::o;34239:132::-;34303:4;21619:12;:10;:12::i;:::-;21609:22;;:6;;;;;;;;;;;:22;;;21601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34337:4:::1;34320:14;;:21;;;;;;;;;;;;;;;;;;34359:4;34352:11;;34239:132:::0;:::o;30187:33::-;;;;:::o;29829:24::-;;;;:::o;16428:182::-;16486:7;16506:9;16522:1;16518;:5;;;;:::i;:::-;16506:17;;16547:1;16542;:6;;16534:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16601:1;16594:8;;;16428:182;;;;:::o;140:98::-;193:7;220:10;213:17;;140:98;:::o;15047:381::-;15200:1;15183:19;;:5;:19;;;;15175:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15281:1;15262:21;;:7;:21;;;;15254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15366:6;15336:11;:18;15348:5;15336:18;;;;;;;;;;;;;;;:27;15355:7;15336:27;;;;;;;;;;;;;;;:36;;;;15404:7;15388:32;;15397:5;15388:32;;;15413:6;15388:32;;;;;;:::i;:::-;;;;;;;;15047:381;;;:::o;38216:4073::-;38364:1;38348:18;;:4;:18;;;;38340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38441:1;38427:16;;:2;:16;;;;38419:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38508:1;38498:6;:11;38495:92;;;38526:28;38542:4;38548:2;38552:1;38526:15;:28::i;:::-;38569:7;;38495:92;38603:14;;;;;;;;;;;38600:1315;;;38663:7;:5;:7::i;:::-;38655:15;;:4;:15;;;;:49;;;;;38697:7;:5;:7::i;:::-;38691:13;;:2;:13;;;;38655:49;:86;;;;;38739:1;38725:16;;:2;:16;;;;38655:86;:128;;;;;38776:6;38762:21;;:2;:21;;;;38655:128;:163;;;;;38810:8;;;;;;;;;;;38804:14;;:2;:14;;;;38655:163;:200;;;;;38847:8;;;;;;;;;;;38839:16;;:4;:16;;;;38655:200;:230;;;;;38877:8;;;;;;;;;;;38876:9;38655:230;38633:1271;;;38923:13;;;;;;;;;;;38919:148;;38968:19;:25;38988:4;38968:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38997:19;:23;39017:2;38997:23;;;;;;;;;;;;;;;;;;;;;;;;;38968:52;38960:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38919:148;39123:25;:31;39149:4;39123:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39159:31;:35;39191:2;39159:35;;;;;;;;;;;;;;;;;;;;;;;;;39158:36;39123:71;39119:770;;;39241:23;;39231:6;:33;;39223:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;39383:9;;39366:13;39376:2;39366:9;:13::i;:::-;39357:6;:22;;;;:::i;:::-;:35;;39349:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39119:770;;;39495:25;:29;39521:2;39495:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39529:31;:37;39561:4;39529:37;;;;;;;;;;;;;;;;;;;;;;;;;39528:38;39495:71;39491:398;;;39613:24;;39603:6;:34;;39595:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;39491:398;;;39743:31;:35;39775:2;39743:35;;;;;;;;;;;;;;;;;;;;;;;;;39739:150;;39836:9;;39819:13;39829:2;39819:9;:13::i;:::-;39810:6;:22;;;;:::i;:::-;:35;;39802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39739:150;39491:398;39119:770;38633:1271;38600:1315;39932:28;39963:24;39981:4;39963:9;:24::i;:::-;39932:55;;40001:12;40040:18;;40016:20;:42;;40001:57;;40090:7;:35;;;;;40114:11;;;;;;;;;;;40090:35;:61;;;;;40143:8;;;;;;;;;;;40142:9;40090:61;:110;;;;;40169:25;:31;40195:4;40169:31;;;;;;;;;;;;;;;;;;;;;;;;;40168:32;40090:110;:153;;;;;40218:19;:25;40238:4;40218:25;;;;;;;;;;;;;;;;;;;;;;;;;40217:26;40090:153;:194;;;;;40261:19;:23;40281:2;40261:23;;;;;;;;;;;;;;;;;;;;;;;;;40260:24;40090:194;40072:328;;;40322:4;40311:8;;:15;;;;;;;;;;;;;;;;;;40344:10;:8;:10::i;:::-;40383:5;40372:8;;:16;;;;;;;;;;;;;;;;;;40072:328;40413:12;40429:8;;;;;;;;;;;40428:9;40413:24;;40450:19;40473:25;:29;40499:2;40473:29;;;;;;;;;;;;;;;;;;;;;;;;;40472:30;:66;;;;;40507:25;:31;40533:4;40507:31;;;;;;;;;;;;;;;;;;;;;;;;;40506:32;40472:66;40450:88;;40637:19;:25;40657:4;40637:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40666:19;:23;40686:2;40666:23;;;;;;;;;;;;;;;;;;;;;;;;;40637:52;:70;;;;40693:14;40637:70;40634:117;;;40734:5;40724:15;;40634:117;40764:12;40868:7;40865:1370;;;40921:25;:29;40947:2;40921:29;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;40975:1;40954:18;;:22;40921:55;40917:1165;;;41013:12;;41003:6;:22;40999:472;;41053:38;41087:3;41053:29;41064:17;;41053:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;41046:45;;41126:4;41110:12;;:20;;;;;;;:::i;:::-;;;;;;;;40999:472;;;41167:12;;41158:6;:21;:48;;;;;41193:13;;41183:6;:23;;41158:48;41154:317;;;41234:38;41268:3;41234:29;41245:17;;41234:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;41227:45;;41307:4;41291:12;;:20;;;;;;;:::i;:::-;;;;;;;;41154:317;;;41377:39;41412:3;41377:30;41388:18;;41377:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;41370:46;;41451:4;41435:12;;:20;;;;;;;:::i;:::-;;;;;;;;41154:317;40999:472;40917:1165;;;41536:25;:31;41562:4;41536:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;41591:1;41571:17;;:21;41536:56;41533:549;;;41625:12;;41615:6;:22;41611:456;;41665:38;41699:3;41665:29;41676:17;;41665:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;41658:45;;41738:4;41722:12;;:20;;;;;;;:::i;:::-;;;;;;;;41611:456;;;41779:12;;41770:6;:21;:48;;;;;41805:13;;41795:6;:23;;41770:48;41766:301;;;41846:38;41880:3;41846:29;41857:17;;41846:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;41839:45;;41919:4;41903:12;;:20;;;;;;;:::i;:::-;;;;;;;;41766:301;;;41973:39;42008:3;41973:30;41984:18;;41973:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;41966:46;;42047:4;42031:12;;:20;;;;;;;:::i;:::-;;;;;;;;41766:301;41611:456;41533:549;40917:1165;42109:1;42102:4;:8;42099:93;;;42134:42;42150:4;42164;42171;42134:15;:42::i;:::-;42099:93;42219:4;42209:14;;;;;:::i;:::-;;;40865:1370;42248:33;42264:4;42270:2;42274:6;42248:15;:33::i;:::-;38329:3960;;;;;38216:4073;;;;:::o;17334:193::-;17420:7;17453:1;17448;:6;;17456:12;17440:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17480:9;17496:1;17492;:5;;;;:::i;:::-;17480:17;;17518:1;17511:8;;;17334:193;;;;;:::o;37718:189::-;37835:5;37801:25;:31;37827:4;37801:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37893:5;37859:40;;37887:4;37859:40;;;;;;;;;;;;37718:189;;:::o;12611:575::-;12769:1;12751:20;;:6;:20;;;;12743:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12853:1;12832:23;;:9;:23;;;;12824:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12909:47;12930:6;12938:9;12949:6;12909:20;:47::i;:::-;12990:71;13012:6;12990:71;;;;;;;;;;;;;;;;;:9;:17;13000:6;12990:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12970:9;:17;12980:6;12970:17;;;;;;;;;;;;;;;:91;;;;13095:32;13120:6;13095:9;:20;13105:9;13095:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13072:9;:20;13082:9;13072:20;;;;;;;;;;;;;;;:55;;;;13160:9;13143:35;;13152:6;13143:35;;;13171:6;13143:35;;;;;;:::i;:::-;;;;;;;;12611:575;;;:::o;42918:792::-;42957:23;42983:24;43001:4;42983:9;:24::i;:::-;42957:50;;43018:25;43046:12;;43018:40;;43069:12;43117:1;43098:15;:20;:46;;;;43143:1;43122:17;:22;43098:46;43095:60;;;43147:7;;;;;43095:60;43210:2;43189:18;;:23;;;;:::i;:::-;43171:15;:41;43168:111;;;43265:2;43244:18;;:23;;;;:::i;:::-;43226:41;;43168:111;43293:26;43322:15;43293:44;;43351:25;43379:21;43351:49;;43414:36;43431:18;43414:16;:36::i;:::-;43465:18;43486:44;43512:17;43486:21;:25;;:44;;;;:::i;:::-;43465:65;;43554:17;43574:10;43554:30;;43618:8;;;;;;;;;;;43610:22;;43640:9;43610:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43597:57;;;;;43690:1;43675:12;:16;;;;42946:764;;;;;;;42918:792;:::o;17787:473::-;17845:7;18095:1;18090;:6;18086:47;;;18120:1;18113:8;;;;18086:47;18146:9;18162:1;18158;:5;;;;:::i;:::-;18146:17;;18191:1;18186;18182;:5;;;;:::i;:::-;:10;18174:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18251:1;18244:8;;;17787:473;;;;;:::o;18737:132::-;18795:7;18822:39;18826:1;18829;18822:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18815:46;;18737:132;;;;:::o;16032:125::-;;;;:::o;42305:604::-;42434:21;42472:1;42458:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42434:40;;42503:4;42485;42490:1;42485:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42529:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42519:4;42524:1;42519:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42565:62;42582:4;42597:15;42615:11;42565:8;:62::i;:::-;42667:15;:66;;;42748:11;42774:1;42818:4;42845;42865:15;42667:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42360:549;42305:604;:::o;16894:136::-;16952:7;16979:43;16983:1;16986;16979:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16972:50;;16894:136;;;;:::o;19366:279::-;19452:7;19484:1;19480;:5;19487:12;19472:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19511:9;19527:1;19523;:5;;;;:::i;:::-;19511:17;;19636:1;19629:8;;;19366:279;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:60::-;4544:3;4565:5;4558:12;;4516:60;;;:::o;4582:142::-;4632:9;4665:53;4683:34;4692:24;4710:5;4692:24;:::i;:::-;4683:34;:::i;:::-;4665:53;:::i;:::-;4652:66;;4582:142;;;:::o;4730:126::-;4780:9;4813:37;4844:5;4813:37;:::i;:::-;4800:50;;4730:126;;;:::o;4862:153::-;4939:9;4972:37;5003:5;4972:37;:::i;:::-;4959:50;;4862:153;;;:::o;5021:185::-;5135:64;5193:5;5135:64;:::i;:::-;5130:3;5123:77;5021:185;;:::o;5212:276::-;5332:4;5370:2;5359:9;5355:18;5347:26;;5383:98;5478:1;5467:9;5463:17;5454:6;5383:98;:::i;:::-;5212:276;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:474::-;8329:6;8337;8386:2;8374:9;8365:7;8361:23;8357:32;8354:119;;;8392:79;;:::i;:::-;8354:119;8512:1;8537:53;8582:7;8573:6;8562:9;8558:22;8537:53;:::i;:::-;8527:63;;8483:117;8639:2;8665:53;8710:7;8701:6;8690:9;8686:22;8665:53;:::i;:::-;8655:63;;8610:118;8261:474;;;;;:::o;8741:180::-;8789:77;8786:1;8779:88;8886:4;8883:1;8876:15;8910:4;8907:1;8900:15;8927:320;8971:6;9008:1;9002:4;8998:12;8988:22;;9055:1;9049:4;9045:12;9076:18;9066:81;;9132:4;9124:6;9120:17;9110:27;;9066:81;9194:2;9186:6;9183:14;9163:18;9160:38;9157:84;;;9213:18;;:::i;:::-;9157:84;8978:269;8927:320;;;:::o;9253:182::-;9393:34;9389:1;9381:6;9377:14;9370:58;9253:182;:::o;9441:366::-;9583:3;9604:67;9668:2;9663:3;9604:67;:::i;:::-;9597:74;;9680:93;9769:3;9680:93;:::i;:::-;9798:2;9793:3;9789:12;9782:19;;9441:366;;;:::o;9813:419::-;9979:4;10017:2;10006:9;10002:18;9994:26;;10066:9;10060:4;10056:20;10052:1;10041:9;10037:17;10030:47;10094:131;10220:4;10094:131;:::i;:::-;10086:139;;9813:419;;;:::o;10238:180::-;10286:77;10283:1;10276:88;10383:4;10380:1;10373:15;10407:4;10404:1;10397:15;10424:348;10464:7;10487:20;10505:1;10487:20;:::i;:::-;10482:25;;10521:20;10539:1;10521:20;:::i;:::-;10516:25;;10709:1;10641:66;10637:74;10634:1;10631:81;10626:1;10619:9;10612:17;10608:105;10605:131;;;10716:18;;:::i;:::-;10605:131;10764:1;10761;10757:9;10746:20;;10424:348;;;;:::o;10778:180::-;10826:77;10823:1;10816:88;10923:4;10920:1;10913:15;10947:4;10944:1;10937:15;10964:185;11004:1;11021:20;11039:1;11021:20;:::i;:::-;11016:25;;11055:20;11073:1;11055:20;:::i;:::-;11050:25;;11094:1;11084:35;;11099:18;;:::i;:::-;11084:35;11141:1;11138;11134:9;11129:14;;10964:185;;;;:::o;11155:238::-;11295:34;11291:1;11283:6;11279:14;11272:58;11364:21;11359:2;11351:6;11347:15;11340:46;11155:238;:::o;11399:366::-;11541:3;11562:67;11626:2;11621:3;11562:67;:::i;:::-;11555:74;;11638:93;11727:3;11638:93;:::i;:::-;11756:2;11751:3;11747:12;11740:19;;11399:366;;;:::o;11771:419::-;11937:4;11975:2;11964:9;11960:18;11952:26;;12024:9;12018:4;12014:20;12010:1;11999:9;11995:17;11988:47;12052:131;12178:4;12052:131;:::i;:::-;12044:139;;11771:419;;;:::o;12196:237::-;12336:34;12332:1;12324:6;12320:14;12313:58;12405:20;12400:2;12392:6;12388:15;12381:45;12196:237;:::o;12439:366::-;12581:3;12602:67;12666:2;12661:3;12602:67;:::i;:::-;12595:74;;12678:93;12767:3;12678:93;:::i;:::-;12796:2;12791:3;12787:12;12780:19;;12439:366;;;:::o;12811:419::-;12977:4;13015:2;13004:9;13000:18;12992:26;;13064:9;13058:4;13054:20;13050:1;13039:9;13035:17;13028:47;13092:131;13218:4;13092:131;:::i;:::-;13084:139;;12811:419;;;:::o;13236:178::-;13376:30;13372:1;13364:6;13360:14;13353:54;13236:178;:::o;13420:366::-;13562:3;13583:67;13647:2;13642:3;13583:67;:::i;:::-;13576:74;;13659:93;13748:3;13659:93;:::i;:::-;13777:2;13772:3;13768:12;13761:19;;13420:366;;;:::o;13792:419::-;13958:4;13996:2;13985:9;13981:18;13973:26;;14045:9;14039:4;14035:20;14031:1;14020:9;14016:17;14009:47;14073:131;14199:4;14073:131;:::i;:::-;14065:139;;13792:419;;;:::o;14217:179::-;14357:31;14353:1;14345:6;14341:14;14334:55;14217:179;:::o;14402:366::-;14544:3;14565:67;14629:2;14624:3;14565:67;:::i;:::-;14558:74;;14641:93;14730:3;14641:93;:::i;:::-;14759:2;14754:3;14750:12;14743:19;;14402:366;;;:::o;14774:419::-;14940:4;14978:2;14967:9;14963:18;14955:26;;15027:9;15021:4;15017:20;15013:1;15002:9;14998:17;14991:47;15055:131;15181:4;15055:131;:::i;:::-;15047:139;;14774:419;;;:::o;15199:179::-;15339:31;15335:1;15327:6;15323:14;15316:55;15199:179;:::o;15384:366::-;15526:3;15547:67;15611:2;15606:3;15547:67;:::i;:::-;15540:74;;15623:93;15712:3;15623:93;:::i;:::-;15741:2;15736:3;15732:12;15725:19;;15384:366;;;:::o;15756:419::-;15922:4;15960:2;15949:9;15945:18;15937:26;;16009:9;16003:4;15999:20;15995:1;15984:9;15980:17;15973:47;16037:131;16163:4;16037:131;:::i;:::-;16029:139;;15756:419;;;:::o;16181:244::-;16321:34;16317:1;16309:6;16305:14;16298:58;16390:27;16385:2;16377:6;16373:15;16366:52;16181:244;:::o;16431:366::-;16573:3;16594:67;16658:2;16653:3;16594:67;:::i;:::-;16587:74;;16670:93;16759:3;16670:93;:::i;:::-;16788:2;16783:3;16779:12;16772:19;;16431:366;;;:::o;16803:419::-;16969:4;17007:2;16996:9;16992:18;16984:26;;17056:9;17050:4;17046:20;17042:1;17031:9;17027:17;17020:47;17084:131;17210:4;17084:131;:::i;:::-;17076:139;;16803:419;;;:::o;17228:332::-;17349:4;17387:2;17376:9;17372:18;17364:26;;17400:71;17468:1;17457:9;17453:17;17444:6;17400:71;:::i;:::-;17481:72;17549:2;17538:9;17534:18;17525:6;17481:72;:::i;:::-;17228:332;;;;;:::o;17566:137::-;17620:5;17651:6;17645:13;17636:22;;17667:30;17691:5;17667:30;:::i;:::-;17566:137;;;;:::o;17709:345::-;17776:6;17825:2;17813:9;17804:7;17800:23;17796:32;17793:119;;;17831:79;;:::i;:::-;17793:119;17951:1;17976:61;18029:7;18020:6;18009:9;18005:22;17976:61;:::i;:::-;17966:71;;17922:125;17709:345;;;;:::o;18060:179::-;18200:31;18196:1;18188:6;18184:14;18177:55;18060:179;:::o;18245:366::-;18387:3;18408:67;18472:2;18467:3;18408:67;:::i;:::-;18401:74;;18484:93;18573:3;18484:93;:::i;:::-;18602:2;18597:3;18593:12;18586:19;;18245:366;;;:::o;18617:419::-;18783:4;18821:2;18810:9;18806:18;18798:26;;18870:9;18864:4;18860:20;18856:1;18845:9;18841:17;18834:47;18898:131;19024:4;18898:131;:::i;:::-;18890:139;;18617:419;;;:::o;19042:179::-;19182:31;19178:1;19170:6;19166:14;19159:55;19042:179;:::o;19227:366::-;19369:3;19390:67;19454:2;19449:3;19390:67;:::i;:::-;19383:74;;19466:93;19555:3;19466:93;:::i;:::-;19584:2;19579:3;19575:12;19568:19;;19227:366;;;:::o;19599:419::-;19765:4;19803:2;19792:9;19788:18;19780:26;;19852:9;19846:4;19842:20;19838:1;19827:9;19823:17;19816:47;19880:131;20006:4;19880:131;:::i;:::-;19872:139;;19599:419;;;:::o;20024:223::-;20164:34;20160:1;20152:6;20148:14;20141:58;20233:6;20228:2;20220:6;20216:15;20209:31;20024:223;:::o;20253:366::-;20395:3;20416:67;20480:2;20475:3;20416:67;:::i;:::-;20409:74;;20492:93;20581:3;20492:93;:::i;:::-;20610:2;20605:3;20601:12;20594:19;;20253:366;;;:::o;20625:419::-;20791:4;20829:2;20818:9;20814:18;20806:26;;20878:9;20872:4;20868:20;20864:1;20853:9;20849:17;20842:47;20906:131;21032:4;20906:131;:::i;:::-;20898:139;;20625:419;;;:::o;21050:240::-;21190:34;21186:1;21178:6;21174:14;21167:58;21259:23;21254:2;21246:6;21242:15;21235:48;21050:240;:::o;21296:366::-;21438:3;21459:67;21523:2;21518:3;21459:67;:::i;:::-;21452:74;;21535:93;21624:3;21535:93;:::i;:::-;21653:2;21648:3;21644:12;21637:19;;21296:366;;;:::o;21668:419::-;21834:4;21872:2;21861:9;21857:18;21849:26;;21921:9;21915:4;21911:20;21907:1;21896:9;21892:17;21885:47;21949:131;22075:4;21949:131;:::i;:::-;21941:139;;21668:419;;;:::o;22093:239::-;22233:34;22229:1;22221:6;22217:14;22210:58;22302:22;22297:2;22289:6;22285:15;22278:47;22093:239;:::o;22338:366::-;22480:3;22501:67;22565:2;22560:3;22501:67;:::i;:::-;22494:74;;22577:93;22666:3;22577:93;:::i;:::-;22695:2;22690:3;22686:12;22679:19;;22338:366;;;:::o;22710:419::-;22876:4;22914:2;22903:9;22899:18;22891:26;;22963:9;22957:4;22953:20;22949:1;22938:9;22934:17;22927:47;22991:131;23117:4;22991:131;:::i;:::-;22983:139;;22710:419;;;:::o;23135:225::-;23275:34;23271:1;23263:6;23259:14;23252:58;23344:8;23339:2;23331:6;23327:15;23320:33;23135:225;:::o;23366:366::-;23508:3;23529:67;23593:2;23588:3;23529:67;:::i;:::-;23522:74;;23605:93;23694:3;23605:93;:::i;:::-;23723:2;23718:3;23714:12;23707:19;;23366:366;;;:::o;23738:419::-;23904:4;23942:2;23931:9;23927:18;23919:26;;23991:9;23985:4;23981:20;23977:1;23966:9;23962:17;23955:47;24019:131;24145:4;24019:131;:::i;:::-;24011:139;;23738:419;;;:::o;24163:305::-;24203:3;24222:20;24240:1;24222:20;:::i;:::-;24217:25;;24256:20;24274:1;24256:20;:::i;:::-;24251:25;;24410:1;24342:66;24338:74;24335:1;24332:81;24329:107;;;24416:18;;:::i;:::-;24329:107;24460:1;24457;24453:9;24446:16;;24163:305;;;;:::o;24474:177::-;24614:29;24610:1;24602:6;24598:14;24591:53;24474:177;:::o;24657:366::-;24799:3;24820:67;24884:2;24879:3;24820:67;:::i;:::-;24813:74;;24896:93;24985:3;24896:93;:::i;:::-;25014:2;25009:3;25005:12;24998:19;;24657:366;;;:::o;25029:419::-;25195:4;25233:2;25222:9;25218:18;25210:26;;25282:9;25276:4;25272:20;25268:1;25257:9;25253:17;25246:47;25310:131;25436:4;25310:131;:::i;:::-;25302:139;;25029:419;;;:::o;25454:223::-;25594:34;25590:1;25582:6;25578:14;25571:58;25663:6;25658:2;25650:6;25646:15;25639:31;25454:223;:::o;25683:366::-;25825:3;25846:67;25910:2;25905:3;25846:67;:::i;:::-;25839:74;;25922:93;26011:3;25922:93;:::i;:::-;26040:2;26035:3;26031:12;26024:19;;25683:366;;;:::o;26055:419::-;26221:4;26259:2;26248:9;26244:18;26236:26;;26308:9;26302:4;26298:20;26294:1;26283:9;26279:17;26272:47;26336:131;26462:4;26336:131;:::i;:::-;26328:139;;26055:419;;;:::o;26480:221::-;26620:34;26616:1;26608:6;26604:14;26597:58;26689:4;26684:2;26676:6;26672:15;26665:29;26480:221;:::o;26707:366::-;26849:3;26870:67;26934:2;26929:3;26870:67;:::i;:::-;26863:74;;26946:93;27035:3;26946:93;:::i;:::-;27064:2;27059:3;27055:12;27048:19;;26707:366;;;:::o;27079:419::-;27245:4;27283:2;27272:9;27268:18;27260:26;;27332:9;27326:4;27322:20;27318:1;27307:9;27303:17;27296:47;27360:131;27486:4;27360:131;:::i;:::-;27352:139;;27079:419;;;:::o;27504:224::-;27644:34;27640:1;27632:6;27628:14;27621:58;27713:7;27708:2;27700:6;27696:15;27689:32;27504:224;:::o;27734:366::-;27876:3;27897:67;27961:2;27956:3;27897:67;:::i;:::-;27890:74;;27973:93;28062:3;27973:93;:::i;:::-;28091:2;28086:3;28082:12;28075:19;;27734:366;;;:::o;28106:419::-;28272:4;28310:2;28299:9;28295:18;28287:26;;28359:9;28353:4;28349:20;28345:1;28334:9;28330:17;28323:47;28387:131;28513:4;28387:131;:::i;:::-;28379:139;;28106:419;;;:::o;28531:222::-;28671:34;28667:1;28659:6;28655:14;28648:58;28740:5;28735:2;28727:6;28723:15;28716:30;28531:222;:::o;28759:366::-;28901:3;28922:67;28986:2;28981:3;28922:67;:::i;:::-;28915:74;;28998:93;29087:3;28998:93;:::i;:::-;29116:2;29111:3;29107:12;29100:19;;28759:366;;;:::o;29131:419::-;29297:4;29335:2;29324:9;29320:18;29312:26;;29384:9;29378:4;29374:20;29370:1;29359:9;29355:17;29348:47;29412:131;29538:4;29412:131;:::i;:::-;29404:139;;29131:419;;;:::o;29556:172::-;29696:24;29692:1;29684:6;29680:14;29673:48;29556:172;:::o;29734:366::-;29876:3;29897:67;29961:2;29956:3;29897:67;:::i;:::-;29890:74;;29973:93;30062:3;29973:93;:::i;:::-;30091:2;30086:3;30082:12;30075:19;;29734:366;;;:::o;30106:419::-;30272:4;30310:2;30299:9;30295:18;30287:26;;30359:9;30353:4;30349:20;30345:1;30334:9;30330:17;30323:47;30387:131;30513:4;30387:131;:::i;:::-;30379:139;;30106:419;;;:::o;30531:240::-;30671:34;30667:1;30659:6;30655:14;30648:58;30740:23;30735:2;30727:6;30723:15;30716:48;30531:240;:::o;30777:366::-;30919:3;30940:67;31004:2;30999:3;30940:67;:::i;:::-;30933:74;;31016:93;31105:3;31016:93;:::i;:::-;31134:2;31129:3;31125:12;31118:19;;30777:366;;;:::o;31149:419::-;31315:4;31353:2;31342:9;31338:18;31330:26;;31402:9;31396:4;31392:20;31388:1;31377:9;31373:17;31366:47;31430:131;31556:4;31430:131;:::i;:::-;31422:139;;31149:419;;;:::o;31574:169::-;31714:21;31710:1;31702:6;31698:14;31691:45;31574:169;:::o;31749:366::-;31891:3;31912:67;31976:2;31971:3;31912:67;:::i;:::-;31905:74;;31988:93;32077:3;31988:93;:::i;:::-;32106:2;32101:3;32097:12;32090:19;;31749:366;;;:::o;32121:419::-;32287:4;32325:2;32314:9;32310:18;32302:26;;32374:9;32368:4;32364:20;32360:1;32349:9;32345:17;32338:47;32402:131;32528:4;32402:131;:::i;:::-;32394:139;;32121:419;;;:::o;32546:241::-;32686:34;32682:1;32674:6;32670:14;32663:58;32755:24;32750:2;32742:6;32738:15;32731:49;32546:241;:::o;32793:366::-;32935:3;32956:67;33020:2;33015:3;32956:67;:::i;:::-;32949:74;;33032:93;33121:3;33032:93;:::i;:::-;33150:2;33145:3;33141:12;33134:19;;32793:366;;;:::o;33165:419::-;33331:4;33369:2;33358:9;33354:18;33346:26;;33418:9;33412:4;33408:20;33404:1;33393:9;33389:17;33382:47;33446:131;33572:4;33446:131;:::i;:::-;33438:139;;33165:419;;;:::o;33590:191::-;33630:4;33650:20;33668:1;33650:20;:::i;:::-;33645:25;;33684:20;33702:1;33684:20;:::i;:::-;33679:25;;33723:1;33720;33717:8;33714:34;;;33728:18;;:::i;:::-;33714:34;33773:1;33770;33766:9;33758:17;;33590:191;;;;:::o;33787:147::-;33888:11;33925:3;33910:18;;33787:147;;;;:::o;33940:114::-;;:::o;34060:398::-;34219:3;34240:83;34321:1;34316:3;34240:83;:::i;:::-;34233:90;;34332:93;34421:3;34332:93;:::i;:::-;34450:1;34445:3;34441:11;34434:18;;34060:398;;;:::o;34464:379::-;34648:3;34670:147;34813:3;34670:147;:::i;:::-;34663:154;;34834:3;34827:10;;34464:379;;;:::o;34849:220::-;34989:34;34985:1;34977:6;34973:14;34966:58;35058:3;35053:2;35045:6;35041:15;35034:28;34849:220;:::o;35075:366::-;35217:3;35238:67;35302:2;35297:3;35238:67;:::i;:::-;35231:74;;35314:93;35403:3;35314:93;:::i;:::-;35432:2;35427:3;35423:12;35416:19;;35075:366;;;:::o;35447:419::-;35613:4;35651:2;35640:9;35636:18;35628:26;;35700:9;35694:4;35690:20;35686:1;35675:9;35671:17;35664:47;35728:131;35854:4;35728:131;:::i;:::-;35720:139;;35447:419;;;:::o;35872:180::-;35920:77;35917:1;35910:88;36017:4;36014:1;36007:15;36041:4;36038:1;36031:15;36058:180;36106:77;36103:1;36096:88;36203:4;36200:1;36193:15;36227:4;36224:1;36217:15;36244:143;36301:5;36332:6;36326:13;36317:22;;36348:33;36375:5;36348:33;:::i;:::-;36244:143;;;;:::o;36393:351::-;36463:6;36512:2;36500:9;36491:7;36487:23;36483:32;36480:119;;;36518:79;;:::i;:::-;36480:119;36638:1;36663:64;36719:7;36710:6;36699:9;36695:22;36663:64;:::i;:::-;36653:74;;36609:128;36393:351;;;;:::o;36750:85::-;36795:7;36824:5;36813:16;;36750:85;;;:::o;36841:158::-;36899:9;36932:61;36950:42;36959:32;36985:5;36959:32;:::i;:::-;36950:42;:::i;:::-;36932:61;:::i;:::-;36919:74;;36841:158;;;:::o;37005:147::-;37100:45;37139:5;37100:45;:::i;:::-;37095:3;37088:58;37005:147;;:::o;37158:114::-;37225:6;37259:5;37253:12;37243:22;;37158:114;;;:::o;37278:184::-;37377:11;37411:6;37406:3;37399:19;37451:4;37446:3;37442:14;37427:29;;37278:184;;;;:::o;37468:132::-;37535:4;37558:3;37550:11;;37588:4;37583:3;37579:14;37571:22;;37468:132;;;:::o;37606:108::-;37683:24;37701:5;37683:24;:::i;:::-;37678:3;37671:37;37606:108;;:::o;37720:179::-;37789:10;37810:46;37852:3;37844:6;37810:46;:::i;:::-;37888:4;37883:3;37879:14;37865:28;;37720:179;;;;:::o;37905:113::-;37975:4;38007;38002:3;37998:14;37990:22;;37905:113;;;:::o;38054:732::-;38173:3;38202:54;38250:5;38202:54;:::i;:::-;38272:86;38351:6;38346:3;38272:86;:::i;:::-;38265:93;;38382:56;38432:5;38382:56;:::i;:::-;38461:7;38492:1;38477:284;38502:6;38499:1;38496:13;38477:284;;;38578:6;38572:13;38605:63;38664:3;38649:13;38605:63;:::i;:::-;38598:70;;38691:60;38744:6;38691:60;:::i;:::-;38681:70;;38537:224;38524:1;38521;38517:9;38512:14;;38477:284;;;38481:14;38777:3;38770:10;;38178:608;;;38054:732;;;;:::o;38792:831::-;39055:4;39093:3;39082:9;39078:19;39070:27;;39107:71;39175:1;39164:9;39160:17;39151:6;39107:71;:::i;:::-;39188:80;39264:2;39253:9;39249:18;39240:6;39188:80;:::i;:::-;39315:9;39309:4;39305:20;39300:2;39289:9;39285:18;39278:48;39343:108;39446:4;39437:6;39343:108;:::i;:::-;39335:116;;39461:72;39529:2;39518:9;39514:18;39505:6;39461:72;:::i;:::-;39543:73;39611:3;39600:9;39596:19;39587:6;39543:73;:::i;:::-;38792:831;;;;;;;;:::o

Swarm Source

ipfs://e7d88e072380cfa9f5be4b6e10223956a892189bcef2c3a50d7f20bd12a0f3c2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.