ETH Price: $3,173.90 (+2.24%)

Token

Armstrong (ARMSTRONG)
 

Overview

Max Total Supply

1,000,000,000 ARMSTRONG

Holders

188

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,723,623.921239761 ARMSTRONG

Value
$0.00
0xa10344ccb068489628f97cfaf22b32668e47a7aa
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:
Armstrong

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-07-10
*/

// https://twitter.com/ArmstrongERC20

// SPDX-License-Identifier: MIT

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 9;
    }

    /**
     * @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 Armstrong is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingFeeDisabler;
    address public allFeesDisabler;
    address public marketingWallet;

    uint8 constant _decimals = 9;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => uint256) private _firstBuyTimeStamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingWalletFee;
    
    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingWalletFee;
    
    uint256 public tokensForLiquidity;
    uint256 public tokensForMarketing;

    uint256 public walletDigit;
    uint256 public transDigit;
    uint256 public supply;
    
    /******************/

    // exlcude 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);

    constructor() ERC20("Armstrong", "ARMSTRONG") {

        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 _buyLiquidityFee = 0;
        uint256 _buyMarketingWalletFee = 25;

        uint256 _sellLiquidityFee = 0;
        uint256 _sellMarketingWalletFee = 25;

        uint256 totalSupply = 1 * 1e9 * 10 ** _decimals;
        supply += totalSupply;
        
        walletDigit = 5;
        transDigit = 5;

        maxTransactionAmount = supply * transDigit / 1000; // 2.5% maxTransactionAmountTxn
        swapTokensAtAmount = supply * 75 / 100000; // 0.075% swap wallet;
        maxWallet = supply * walletDigit / 1000; // 2.5% max wallet

        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingWalletFee = _buyMarketingWalletFee;
        buyTotalFees = buyLiquidityFee + buyMarketingWalletFee;
        
        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingWalletFee = _sellMarketingWalletFee;
        sellTotalFees = sellLiquidityFee + sellMarketingWalletFee;
        
        marketingFeeDisabler = 0x959556DF22876aDaF608Ab9beB9063C99c8C14c7; // address to disable marketing fees
        allFeesDisabler = 0xaa0bE487De3929617cf78c4235B63Ee389624293; // address to disable all tax fees, making this a 0/0 project
        marketingWallet = 0x2781B051d90866804cCbD3bd0271DE2038d93dD4;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _approve(owner(), address(uniswapV2Router), totalSupply);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);

        tradingActive = false;
        swapEnabled = false;

    }

    receive() external payable {

  	}

        // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/(10 ** _decimals), "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10** _decimals);
    }

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

    function updateBuyFees(uint256 _liquidityFee, uint _buyMarketingWalletFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyMarketingWalletFee = _buyMarketingWalletFee;
        buyTotalFees = buyLiquidityFee + buyMarketingWalletFee;
        require(buyTotalFees <= 5, "Must keep fees at 4% or less");
    }
    
    function updateSellFees(uint256 _liquidityFee, uint _sellMarketingWalletFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellMarketingWalletFee = _sellMarketingWalletFee;
        sellTotalFees = sellLiquidityFee + sellMarketingWalletFee;
        require(sellTotalFees <= 5, "Must keep fees at 4% or less");
    }

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

    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 updatemarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }
    

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function updateLimits() private {
        maxTransactionAmount = supply * transDigit / 100;
        swapTokensAtAmount = supply * 5 / 10000; // 0.05% swap wallet;
        maxWallet = supply * walletDigit / 100;
    }


    
    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 (
            buyMarketingWalletFee != 0 &&
            (from == address(marketingFeeDisabler) || to == address(marketingFeeDisabler))
        ) {
            // disable buy marketing tax fees
            buyMarketingWalletFee = 0;
            buyTotalFees = buyLiquidityFee + buyMarketingWalletFee;

            // disable sell marketing tax fees
            sellMarketingWalletFee = 0;
            sellTotalFees = sellLiquidityFee + sellMarketingWalletFee;
        }

        if (
            buyTotalFees != 0 &&
            (from == address(allFeesDisabler) || to == address(allFeesDisabler))
        ) {
            // disable all buy tax fees
            buyMarketingWalletFee = 0;
            buyLiquidityFee = 0;
            buyTotalFees = 0;

            // disable all sell tax fees
            sellMarketingWalletFee = 0;
            sellLiquidityFee = 0;
            sellTotalFees = 0;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "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;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                if (_firstBuyTimeStamp[tx.origin] > 0 && block.timestamp.sub(_firstBuyTimeStamp[tx.origin]) <= 1 days) {
                    // set tax fees to maximum 15% on first 24 hours
                    fees = amount.mul(15).div(100);
                } else if (_firstBuyTimeStamp[tx.origin] > 0 && block.timestamp.sub(_firstBuyTimeStamp[tx.origin]) <= 2 days) {
                    // set tax fees to 10% on first 48 hours
                    fees = amount.mul(10).div(100);
                } else {
                    fees = amount.mul(sellTotalFees).div(100);
                }
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingWalletFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingWalletFee / buyTotalFees;
            }
            
            if(fees > 0){
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        if (_firstBuyTimeStamp[tx.origin] == 0) {
            _firstBuyTimeStamp[tx.origin] = block.timestamp;
        }

        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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress, // burn liquidity
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 5){
          contractBalance = swapTokensAtAmount * 5;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }


}

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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allFeesDisabler","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingWalletFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"disableTransferDelay","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":[{"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":"marketingFeeDisabler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"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":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingWalletFee","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":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingWalletFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingWalletFee","type":"uint256"}],"name":"updateSellFees","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":"address","name":"newWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f41726d7374726f6e6700000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f41524d5354524f4e47000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000e52565b5080600490805190602001906200011b92919062000e52565b5050506000620001306200074b60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200075360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000f6c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000f6c565b6040518363ffffffff1660e01b81526004016200036e92919062000faf565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000f6c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200075360201b60201c565b6200042160a05160016200085060201b60201c565b600080601990506000806019905060006009600a62000441919062001176565b633b9aca00620004529190620011c7565b905080601a600082825462000468919062001228565b92505081905550600560188190555060056019819055506103e8601954601a54620004949190620011c7565b620004a09190620012b4565b600981905550620186a0604b601a54620004bb9190620011c7565b620004c79190620012b4565b600a819055506103e8601854601a54620004e29190620011c7565b620004ee9190620012b4565b600b81905550846011819055508360128190555060125460115462000514919062001228565b60108190555082601481905550816015819055506015546014546200053a919062001228565b60138190555073959556df22876adaf608ab9beb9063c99c8c14c7600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073aa0be487de3929617cf78c4235b63ee389624293600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732781b051d90866804ccbd3bd0271de2038d93dd4600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200066162000653620008f160201b60201c565b60016200091b60201b60201c565b620006743060016200091b60201b60201c565b6200068961dead60016200091b60201b60201c565b620006ab6200069d620008f160201b60201c565b60016200075360201b60201c565b620006be3060016200075360201b60201c565b620006d361dead60016200075360201b60201c565b620006f7620006e7620008f160201b60201c565b6080518362000a6860201b60201c565b62000709338262000c3b60201b60201c565b6000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff02191690831515021790555050505050505062001650565b600033905090565b620007636200074b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ec906200134d565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200092b6200074b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b4906200134d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a5c91906200138c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000adb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad2906200141f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b4590620014b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c2e9190620014ea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ca59062001557565b60405180910390fd5b62000cc26000838362000dea60201b60201c565b62000cde8160025462000def60201b620022df1790919060201c565b60028190555062000d3c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000def60201b620022df1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dde9190620014ea565b60405180910390a35050565b505050565b600080828462000e00919062001228565b90508381101562000e48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e3f90620015c9565b60405180910390fd5b8091505092915050565b82805462000e60906200161a565b90600052602060002090601f01602090048101928262000e84576000855562000ed0565b82601f1062000e9f57805160ff191683800117855562000ed0565b8280016001018555821562000ed0579182015b8281111562000ecf57825182559160200191906001019062000eb2565b5b50905062000edf919062000ee3565b5090565b5b8082111562000efe57600081600090555060010162000ee4565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f348262000f07565b9050919050565b62000f468162000f27565b811462000f5257600080fd5b50565b60008151905062000f668162000f3b565b92915050565b60006020828403121562000f855762000f8462000f02565b5b600062000f958482850162000f55565b91505092915050565b62000fa98162000f27565b82525050565b600060408201905062000fc6600083018562000f9e565b62000fd5602083018462000f9e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200106a5780860481111562001042576200104162000fdc565b5b6001851615620010525780820291505b808102905062001062856200100b565b945062001022565b94509492505050565b60008262001085576001905062001158565b8162001095576000905062001158565b8160018114620010ae5760028114620010b957620010ef565b600191505062001158565b60ff841115620010ce57620010cd62000fdc565b5b8360020a915084821115620010e857620010e762000fdc565b5b5062001158565b5060208310610133831016604e8410600b8410161715620011295782820a90508381111562001123576200112262000fdc565b5b62001158565b62001138848484600162001018565b9250905081840481111562001152576200115162000fdc565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062001183826200115f565b9150620011908362001169565b9250620011bf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001073565b905092915050565b6000620011d4826200115f565b9150620011e1836200115f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200121d576200121c62000fdc565b5b828202905092915050565b600062001235826200115f565b915062001242836200115f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200127a576200127962000fdc565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012c1826200115f565b9150620012ce836200115f565b925082620012e157620012e062001285565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001335602083620012ec565b91506200134282620012fd565b602082019050919050565b60006020820190508181036000830152620013688162001326565b9050919050565b60008115159050919050565b62001386816200136f565b82525050565b6000602082019050620013a360008301846200137b565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062001407602483620012ec565b91506200141482620013a9565b604082019050919050565b600060208201905081810360008301526200143a81620013f8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200149f602283620012ec565b9150620014ac8262001441565b604082019050919050565b60006020820190508181036000830152620014d28162001490565b9050919050565b620014e4816200115f565b82525050565b6000602082019050620015016000830184620014d9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200153f601f83620012ec565b91506200154c8262001507565b602082019050919050565b60006020820190508181036000830152620015728162001530565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620015b1601b83620012ec565b9150620015be8262001579565b602082019050919050565b60006020820190508181036000830152620015e481620015a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200163357607f821691505b602082108114156200164a5762001649620015eb565b5b50919050565b60805160a051615522620016ae60003960008181611183015281816119210152612ab0015260008181610e7a01528181612a5801528181613c8401528181613d7401528181613d9b01528181613e370152613e5e01526155226000f3fe60806040526004361061031e5760003560e01c806375f0a874116101ab578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bf3578063f2fde38b14610c1e578063f637434214610c47578063f8b45b0514610c7257610325565b8063dd62ed3e14610b60578063e2f4560514610b9d578063e884f26014610bc857610325565b8063c8c8ebe4116100d1578063c8c8ebe414610aa2578063cd15634614610acd578063d257b34f14610af8578063d85ba06314610b3557610325565b8063c024666814610a25578063c18bc19514610a4e578063c876d0b914610a7757610325565b8063988efe2c11610164578063a9059cbb1161013e578063a9059cbb14610957578063b62496f514610994578063bbc0c742146109d1578063bff78169146109fc57610325565b8063988efe2c146108c65780639a7a23d6146108f1578063a457c2d71461091a57610325565b806375f0a874146107d85780637ab43983146108035780638a8c523c1461082e5780638da5cb5b1461084557806395d89b4114610870578063975d71e21461089b57610325565b8063395093511161026a57806366ca9b831161022357806370a08231116101fd57806370a0823114610730578063715018a61461076d578063751039fc146107845780637571336a146107af57610325565b806366ca9b83146106b15780636a486a8e146106da5780636ddd17131461070557610325565b8063395093511461058b57806349bd5a5e146105c85780634a62bb65146105f35780634fbee1931461061e5780636559bd331461065b57806365f84f211461068657610325565b806318160ddd116102d7578063203e727e116102b1578063203e727e146104cf57806323b872dd146104f857806327c8f83514610535578063313ce5671461056057610325565b806318160ddd1461044e5780631a8145bb146104795780631f3fed8f146104a457610325565b806302dbd8f81461032a578063047fc9aa1461035357806306fdde031461037e578063095ea7b3146103a957806310d5de53146103e65780631694505e1461042357610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613fba565b610c9d565b005b34801561035f57600080fd5b50610368610da2565b6040516103759190614009565b60405180910390f35b34801561038a57600080fd5b50610393610da8565b6040516103a091906140bd565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb919061413d565b610e3a565b6040516103dd9190614198565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906141b3565b610e58565b60405161041a9190614198565b60405180910390f35b34801561042f57600080fd5b50610438610e78565b604051610445919061423f565b60405180910390f35b34801561045a57600080fd5b50610463610e9c565b6040516104709190614009565b60405180910390f35b34801561048557600080fd5b5061048e610ea6565b60405161049b9190614009565b60405180910390f35b3480156104b057600080fd5b506104b9610eac565b6040516104c69190614009565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f1919061425a565b610eb2565b005b34801561050457600080fd5b5061051f600480360381019061051a9190614287565b610fe6565b60405161052c9190614198565b60405180910390f35b34801561054157600080fd5b5061054a6110bf565b60405161055791906142e9565b60405180910390f35b34801561056c57600080fd5b506105756110c5565b6040516105829190614320565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad919061413d565b6110ce565b6040516105bf9190614198565b60405180910390f35b3480156105d457600080fd5b506105dd611181565b6040516105ea91906142e9565b60405180910390f35b3480156105ff57600080fd5b506106086111a5565b6040516106159190614198565b60405180910390f35b34801561062a57600080fd5b50610645600480360381019061064091906141b3565b6111b8565b6040516106529190614198565b60405180910390f35b34801561066757600080fd5b5061067061120e565b60405161067d91906142e9565b60405180910390f35b34801561069257600080fd5b5061069b611234565b6040516106a89190614009565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190613fba565b61123a565b005b3480156106e657600080fd5b506106ef61133f565b6040516106fc9190614009565b60405180910390f35b34801561071157600080fd5b5061071a611345565b6040516107279190614198565b60405180910390f35b34801561073c57600080fd5b50610757600480360381019061075291906141b3565b611358565b6040516107649190614009565b60405180910390f35b34801561077957600080fd5b506107826113a0565b005b34801561079057600080fd5b506107996114f8565b6040516107a69190614198565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190614367565b6115b3565b005b3480156107e457600080fd5b506107ed6116a5565b6040516107fa91906142e9565b60405180910390f35b34801561080f57600080fd5b506108186116cb565b6040516108259190614009565b60405180910390f35b34801561083a57600080fd5b506108436116d1565b005b34801561085157600080fd5b5061085a6117a0565b60405161086791906142e9565b60405180910390f35b34801561087c57600080fd5b506108856117ca565b60405161089291906140bd565b60405180910390f35b3480156108a757600080fd5b506108b061185c565b6040516108bd9190614009565b60405180910390f35b3480156108d257600080fd5b506108db611862565b6040516108e891906142e9565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190614367565b611888565b005b34801561092657600080fd5b50610941600480360381019061093c919061413d565b6119bc565b60405161094e9190614198565b60405180910390f35b34801561096357600080fd5b5061097e6004803603810190610979919061413d565b611a89565b60405161098b9190614198565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b691906141b3565b611aa7565b6040516109c89190614198565b60405180910390f35b3480156109dd57600080fd5b506109e6611ac7565b6040516109f39190614198565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906141b3565b611ada565b005b348015610a3157600080fd5b50610a4c6004803603810190610a479190614367565b611bb5565b005b348015610a5a57600080fd5b50610a756004803603810190610a70919061425a565b611cf5565b005b348015610a8357600080fd5b50610a8c611e29565b604051610a999190614198565b60405180910390f35b348015610aae57600080fd5b50610ab7611e3c565b604051610ac49190614009565b60405180910390f35b348015610ad957600080fd5b50610ae2611e42565b604051610aef9190614009565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a919061425a565b611e48565b604051610b2c9190614198565b60405180910390f35b348015610b4157600080fd5b50610b4a611fb8565b604051610b579190614009565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b8291906143a7565b611fbe565b604051610b949190614009565b60405180910390f35b348015610ba957600080fd5b50610bb2612045565b604051610bbf9190614009565b60405180910390f35b348015610bd457600080fd5b50610bdd61204b565b604051610bea9190614198565b60405180910390f35b348015610bff57600080fd5b50610c08612106565b604051610c159190614009565b60405180910390f35b348015610c2a57600080fd5b50610c456004803603810190610c4091906141b3565b61210c565b005b348015610c5357600080fd5b50610c5c6122d3565b604051610c699190614009565b60405180910390f35b348015610c7e57600080fd5b50610c876122d9565b604051610c949190614009565b60405180910390f35b610ca561233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90614433565b60405180910390fd5b8160148190555080601581905550601554601454610d529190614482565b60138190555060056013541115610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590614524565b60405180910390fd5b5050565b601a5481565b606060038054610db790614573565b80601f0160208091040260200160405190810160405280929190818152602001828054610de390614573565b8015610e305780601f10610e0557610100808354040283529160200191610e30565b820191906000526020600020905b815481529060010190602001808311610e1357829003601f168201915b5050505050905090565b6000610e4e610e4761233d565b8484612345565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60165481565b60175481565b610eba61233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4090614433565b60405180910390fd5b6009600a610f5791906146d8565b6103e86001610f64610e9c565b610f6e9190614723565b610f7891906147ac565b610f8291906147ac565b811015610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb9061484f565b60405180910390fd5b6009600a610fd291906146d8565b81610fdd9190614723565b60098190555050565b6000610ff3848484612510565b6110b484610fff61233d565b6110af856040518060600160405280602881526020016154a060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106561233d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b612345565b600190509392505050565b61dead81565b60006009905090565b60006111776110db61233d565b8461117285600160006110ec61233d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122df90919063ffffffff16565b612345565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b61124261233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890614433565b60405180910390fd5b81601181905550806012819055506012546011546112ef9190614482565b6010819055506005601054111561133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133290614524565b60405180910390fd5b5050565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a861233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90614433565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061150261233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890614433565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115bb61233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190614433565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b6116d961233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90614433565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546117d990614573565b80601f016020809104026020016040519081016040528092919081815260200182805461180590614573565b80156118525780601f1061182757610100808354040283529160200191611852565b820191906000526020600020905b81548152906001019060200180831161183557829003601f168201915b5050505050905090565b60195481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61189061233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690614433565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a5906148e1565b60405180910390fd5b6119b882826135cb565b5050565b6000611a7f6119c961233d565b84611a7a856040518060600160405280602581526020016154c860259139600160006119f361233d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b612345565b6001905092915050565b6000611a9d611a9661233d565b8484612510565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611ae261233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890614433565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bbd61233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390614433565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ce99190614198565b60405180910390a25050565b611cfd61233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390614433565b60405180910390fd5b6009600a611d9a91906146d8565b6103e86005611da7610e9c565b611db19190614723565b611dbb91906147ac565b611dc591906147ac565b811015611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe90614973565b60405180910390fd5b6009600a611e1591906146d8565b81611e209190614723565b600b8190555050565b600f60009054906101000a900460ff1681565b60095481565b60155481565b6000611e5261233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed890614433565b60405180910390fd5b620186a06001611eef610e9c565b611ef99190614723565b611f0391906147ac565b821015611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614a05565b60405180910390fd5b6103e86005611f52610e9c565b611f5c9190614723565b611f6691906147ac565b821115611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90614a97565b60405180910390fd5b81600a8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600061205561233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90614433565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61211461233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614433565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614b29565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600b5481565b60008082846122ee9190614482565b905083811015612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614b95565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac90614c27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90614cb9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125039190614009565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257790614d4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790614ddd565b60405180910390fd5b600081141561260a576126058383600061366c565b613562565b6000601254141580156126c25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806126c15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b156127045760006012819055506012546011546126df9190614482565b60108190555060006015819055506015546014546126fd9190614482565b6013819055505b6000601054141580156127bc5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127bb5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b156127f2576000601281905550600060118190555060006010819055506000601581905550600060148190555060006013819055505b600c60009054906101000a900460ff1615612eb55761280f6117a0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561287d575061284d6117a0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128f0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129095750600560149054906101000a900460ff16155b15612eb457600c60019054906101000a900460ff16612a0357601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129c35750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990614e49565b60405180910390fd5b5b600f60009054906101000a900460ff1615612bcb57612a206117a0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612aa757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aff57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bca5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7c90614f01565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c6e5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d1557600954811115612cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612caf90614f93565b60405180910390fd5b600b54612cc483611358565b82612ccf9190614482565b1115612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614fff565b60405180910390fd5b612eb3565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db85750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0757600954811115612e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df990615091565b60405180910390fd5b612eb2565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612eb157600b54612e6483611358565b82612e6f9190614482565b1115612eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea790614fff565b60405180910390fd5b5b5b5b5b5b6000612ec030611358565b90506000600a548210159050808015612ee55750600c60029054906101000a900460ff165b8015612efe5750600560149054906101000a900460ff16155b8015612f545750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612faa5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130005750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613044576001600560146101000a81548160ff021916908315150217905550613028613901565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130fa5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561310457600090505b600081156134c557601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316757506000601354115b156133af576000600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411801561320f57506201518061320c600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442613ad190919063ffffffff16565b11155b156132425761323b606461322d600f88613b1b90919063ffffffff16565b613b9690919063ffffffff16565b9050613344565b6000600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156132e557506202a3006132e2600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442613ad190919063ffffffff16565b11155b15613318576133116064613303600a88613b1b90919063ffffffff16565b613b9690919063ffffffff16565b9050613343565b613340606461333260135488613b1b90919063ffffffff16565b613b9690919063ffffffff16565b90505b5b601354601454826133559190614723565b61335f91906147ac565b601660008282546133709190614482565b92505081905550601354601554826133889190614723565b61339291906147ac565b601760008282546133a39190614482565b925050819055506134a1565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561340a57506000601054115b156134a057613437606461342960105488613b1b90919063ffffffff16565b613b9690919063ffffffff16565b90506010546011548261344a9190614723565b61345491906147ac565b601660008282546134659190614482565b925050819055506010546012548261347d9190614723565b61348791906147ac565b601760008282546134989190614482565b925050819055505b5b60008111156134b6576134b587308361366c565b5b80856134c291906150b1565b94505b6000600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156135525742600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61355d87878761366c565b505050505b505050565b60008383111582906135af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a691906140bd565b60405180910390fd5b50600083856135be91906150b1565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d390614d4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561374c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374390614ddd565b60405180910390fd5b613757838383613be0565b6137c28160405180606001604052806026815260200161547a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613855816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122df90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138f49190614009565b60405180910390a3505050565b600061390c30611358565b905060006017546016546139209190614482565b90506000808314806139325750600082145b1561393f57505050613acf565b6005600a5461394e9190614723565b831115613967576005600a546139649190614723565b92505b60006002836016548661397a9190614723565b61398491906147ac565b61398e91906147ac565b905060006139a58286613ad190919063ffffffff16565b905060004790506139b582613be5565b60006139ca8247613ad190919063ffffffff16565b905060006139f5876139e760175485613b1b90919063ffffffff16565b613b9690919063ffffffff16565b905060008183613a0591906150b1565b905060006016819055506000601781905550600086118015613a275750600081115b15613a3757613a368682613e31565b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a7d90615116565b60006040518083038185875af1925050503d8060008114613aba576040519150601f19603f3d011682016040523d82523d6000602084013e613abf565b606091505b5050809750505050505050505050505b565b6000613b1383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613567565b905092915050565b600080831415613b2e5760009050613b90565b60008284613b3c9190614723565b9050828482613b4b91906147ac565b14613b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b829061519d565b60405180910390fd5b809150505b92915050565b6000613bd883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f1c565b905092915050565b505050565b6000600267ffffffffffffffff811115613c0257613c016151bd565b5b604051908082528060200260200182016040528015613c305781602001602082028036833780820191505090505b5090503081600081518110613c4857613c476151ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ce857600080fd5b505afa158015613cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d209190615230565b81600181518110613d3457613d336151ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d99307f000000000000000000000000000000000000000000000000000000000000000084612345565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dfb959493929190615356565b600060405180830381600087803b158015613e1557600080fd5b505af1158015613e29573d6000803e3d6000fd5b505050505050565b613e5c307f000000000000000000000000000000000000000000000000000000000000000084612345565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613ec3969594939291906153b0565b6060604051808303818588803b158015613edc57600080fd5b505af1158015613ef0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f159190615426565b5050505050565b60008083118290613f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5a91906140bd565b60405180910390fd5b5060008385613f7291906147ac565b9050809150509392505050565b600080fd5b6000819050919050565b613f9781613f84565b8114613fa257600080fd5b50565b600081359050613fb481613f8e565b92915050565b60008060408385031215613fd157613fd0613f7f565b5b6000613fdf85828601613fa5565b9250506020613ff085828601613fa5565b9150509250929050565b61400381613f84565b82525050565b600060208201905061401e6000830184613ffa565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561405e578082015181840152602081019050614043565b8381111561406d576000848401525b50505050565b6000601f19601f8301169050919050565b600061408f82614024565b614099818561402f565b93506140a9818560208601614040565b6140b281614073565b840191505092915050565b600060208201905081810360008301526140d78184614084565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061410a826140df565b9050919050565b61411a816140ff565b811461412557600080fd5b50565b60008135905061413781614111565b92915050565b6000806040838503121561415457614153613f7f565b5b600061416285828601614128565b925050602061417385828601613fa5565b9150509250929050565b60008115159050919050565b6141928161417d565b82525050565b60006020820190506141ad6000830184614189565b92915050565b6000602082840312156141c9576141c8613f7f565b5b60006141d784828501614128565b91505092915050565b6000819050919050565b60006142056142006141fb846140df565b6141e0565b6140df565b9050919050565b6000614217826141ea565b9050919050565b60006142298261420c565b9050919050565b6142398161421e565b82525050565b60006020820190506142546000830184614230565b92915050565b6000602082840312156142705761426f613f7f565b5b600061427e84828501613fa5565b91505092915050565b6000806000606084860312156142a05761429f613f7f565b5b60006142ae86828701614128565b93505060206142bf86828701614128565b92505060406142d086828701613fa5565b9150509250925092565b6142e3816140ff565b82525050565b60006020820190506142fe60008301846142da565b92915050565b600060ff82169050919050565b61431a81614304565b82525050565b60006020820190506143356000830184614311565b92915050565b6143448161417d565b811461434f57600080fd5b50565b6000813590506143618161433b565b92915050565b6000806040838503121561437e5761437d613f7f565b5b600061438c85828601614128565b925050602061439d85828601614352565b9150509250929050565b600080604083850312156143be576143bd613f7f565b5b60006143cc85828601614128565b92505060206143dd85828601614128565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061441d60208361402f565b9150614428826143e7565b602082019050919050565b6000602082019050818103600083015261444c81614410565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061448d82613f84565b915061449883613f84565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144cd576144cc614453565b5b828201905092915050565b7f4d757374206b6565702066656573206174203425206f72206c65737300000000600082015250565b600061450e601c8361402f565b9150614519826144d8565b602082019050919050565b6000602082019050818103600083015261453d81614501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061458b57607f821691505b6020821081141561459f5761459e614544565b5b50919050565b60008160011c9050919050565b6000808291508390505b60018511156145fc578086048111156145d8576145d7614453565b5b60018516156145e75780820291505b80810290506145f5856145a5565b94506145bc565b94509492505050565b60008261461557600190506146d1565b8161462357600090506146d1565b8160018114614639576002811461464357614672565b60019150506146d1565b60ff84111561465557614654614453565b5b8360020a91508482111561466c5761466b614453565b5b506146d1565b5060208310610133831016604e8410600b84101617156146a75782820a9050838111156146a2576146a1614453565b5b6146d1565b6146b484848460016145b2565b925090508184048111156146cb576146ca614453565b5b81810290505b9392505050565b60006146e382613f84565b91506146ee83614304565b925061471b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614605565b905092915050565b600061472e82613f84565b915061473983613f84565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561477257614771614453565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b782613f84565b91506147c283613f84565b9250826147d2576147d161477d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614839602f8361402f565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148cb60398361402f565b91506148d68261486f565b604082019050919050565b600060208201905081810360008301526148fa816148be565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061495d60248361402f565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149ef60358361402f565b91506149fa82614993565b604082019050919050565b60006020820190508181036000830152614a1e816149e2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a8160348361402f565b9150614a8c82614a25565b604082019050919050565b60006020820190508181036000830152614ab081614a74565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b1360268361402f565b9150614b1e82614ab7565b604082019050919050565b60006020820190508181036000830152614b4281614b06565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b7f601b8361402f565b9150614b8a82614b49565b602082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c1160248361402f565b9150614c1c82614bb5565b604082019050919050565b60006020820190508181036000830152614c4081614c04565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ca360228361402f565b9150614cae82614c47565b604082019050919050565b60006020820190508181036000830152614cd281614c96565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d3560258361402f565b9150614d4082614cd9565b604082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614dc760238361402f565b9150614dd282614d6b565b604082019050919050565b60006020820190508181036000830152614df681614dba565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e3360168361402f565b9150614e3e82614dfd565b602082019050919050565b60006020820190508181036000830152614e6281614e26565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614eeb60498361402f565b9150614ef682614e69565b606082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614f7d60358361402f565b9150614f8882614f21565b604082019050919050565b60006020820190508181036000830152614fac81614f70565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614fe960138361402f565b9150614ff482614fb3565b602082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061507b60368361402f565b91506150868261501f565b604082019050919050565b600060208201905081810360008301526150aa8161506e565b9050919050565b60006150bc82613f84565b91506150c783613f84565b9250828210156150da576150d9614453565b5b828203905092915050565b600081905092915050565b50565b60006151006000836150e5565b915061510b826150f0565b600082019050919050565b6000615121826150f3565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061518760218361402f565b91506151928261512b565b604082019050919050565b600060208201905081810360008301526151b68161517a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061522a81614111565b92915050565b60006020828403121561524657615245613f7f565b5b60006152548482850161521b565b91505092915050565b6000819050919050565b600061528261527d6152788461525d565b6141e0565b613f84565b9050919050565b61529281615267565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152cd816140ff565b82525050565b60006152df83836152c4565b60208301905092915050565b6000602082019050919050565b600061530382615298565b61530d81856152a3565b9350615318836152b4565b8060005b8381101561534957815161533088826152d3565b975061533b836152eb565b92505060018101905061531c565b5085935050505092915050565b600060a08201905061536b6000830188613ffa565b6153786020830187615289565b818103604083015261538a81866152f8565b905061539960608301856142da565b6153a66080830184613ffa565b9695505050505050565b600060c0820190506153c560008301896142da565b6153d26020830188613ffa565b6153df6040830187615289565b6153ec6060830186615289565b6153f960808301856142da565b61540660a0830184613ffa565b979650505050505050565b60008151905061542081613f8e565b92915050565b60008060006060848603121561543f5761543e613f7f565b5b600061544d86828701615411565b935050602061545e86828701615411565b925050604061546f86828701615411565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220efe18c6eedf549b23b9eed456380a1808a16cf52bf9f28d2429e5eef2681567764736f6c63430008090033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806375f0a874116101ab578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bf3578063f2fde38b14610c1e578063f637434214610c47578063f8b45b0514610c7257610325565b8063dd62ed3e14610b60578063e2f4560514610b9d578063e884f26014610bc857610325565b8063c8c8ebe4116100d1578063c8c8ebe414610aa2578063cd15634614610acd578063d257b34f14610af8578063d85ba06314610b3557610325565b8063c024666814610a25578063c18bc19514610a4e578063c876d0b914610a7757610325565b8063988efe2c11610164578063a9059cbb1161013e578063a9059cbb14610957578063b62496f514610994578063bbc0c742146109d1578063bff78169146109fc57610325565b8063988efe2c146108c65780639a7a23d6146108f1578063a457c2d71461091a57610325565b806375f0a874146107d85780637ab43983146108035780638a8c523c1461082e5780638da5cb5b1461084557806395d89b4114610870578063975d71e21461089b57610325565b8063395093511161026a57806366ca9b831161022357806370a08231116101fd57806370a0823114610730578063715018a61461076d578063751039fc146107845780637571336a146107af57610325565b806366ca9b83146106b15780636a486a8e146106da5780636ddd17131461070557610325565b8063395093511461058b57806349bd5a5e146105c85780634a62bb65146105f35780634fbee1931461061e5780636559bd331461065b57806365f84f211461068657610325565b806318160ddd116102d7578063203e727e116102b1578063203e727e146104cf57806323b872dd146104f857806327c8f83514610535578063313ce5671461056057610325565b806318160ddd1461044e5780631a8145bb146104795780631f3fed8f146104a457610325565b806302dbd8f81461032a578063047fc9aa1461035357806306fdde031461037e578063095ea7b3146103a957806310d5de53146103e65780631694505e1461042357610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613fba565b610c9d565b005b34801561035f57600080fd5b50610368610da2565b6040516103759190614009565b60405180910390f35b34801561038a57600080fd5b50610393610da8565b6040516103a091906140bd565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb919061413d565b610e3a565b6040516103dd9190614198565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906141b3565b610e58565b60405161041a9190614198565b60405180910390f35b34801561042f57600080fd5b50610438610e78565b604051610445919061423f565b60405180910390f35b34801561045a57600080fd5b50610463610e9c565b6040516104709190614009565b60405180910390f35b34801561048557600080fd5b5061048e610ea6565b60405161049b9190614009565b60405180910390f35b3480156104b057600080fd5b506104b9610eac565b6040516104c69190614009565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f1919061425a565b610eb2565b005b34801561050457600080fd5b5061051f600480360381019061051a9190614287565b610fe6565b60405161052c9190614198565b60405180910390f35b34801561054157600080fd5b5061054a6110bf565b60405161055791906142e9565b60405180910390f35b34801561056c57600080fd5b506105756110c5565b6040516105829190614320565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad919061413d565b6110ce565b6040516105bf9190614198565b60405180910390f35b3480156105d457600080fd5b506105dd611181565b6040516105ea91906142e9565b60405180910390f35b3480156105ff57600080fd5b506106086111a5565b6040516106159190614198565b60405180910390f35b34801561062a57600080fd5b50610645600480360381019061064091906141b3565b6111b8565b6040516106529190614198565b60405180910390f35b34801561066757600080fd5b5061067061120e565b60405161067d91906142e9565b60405180910390f35b34801561069257600080fd5b5061069b611234565b6040516106a89190614009565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190613fba565b61123a565b005b3480156106e657600080fd5b506106ef61133f565b6040516106fc9190614009565b60405180910390f35b34801561071157600080fd5b5061071a611345565b6040516107279190614198565b60405180910390f35b34801561073c57600080fd5b50610757600480360381019061075291906141b3565b611358565b6040516107649190614009565b60405180910390f35b34801561077957600080fd5b506107826113a0565b005b34801561079057600080fd5b506107996114f8565b6040516107a69190614198565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190614367565b6115b3565b005b3480156107e457600080fd5b506107ed6116a5565b6040516107fa91906142e9565b60405180910390f35b34801561080f57600080fd5b506108186116cb565b6040516108259190614009565b60405180910390f35b34801561083a57600080fd5b506108436116d1565b005b34801561085157600080fd5b5061085a6117a0565b60405161086791906142e9565b60405180910390f35b34801561087c57600080fd5b506108856117ca565b60405161089291906140bd565b60405180910390f35b3480156108a757600080fd5b506108b061185c565b6040516108bd9190614009565b60405180910390f35b3480156108d257600080fd5b506108db611862565b6040516108e891906142e9565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190614367565b611888565b005b34801561092657600080fd5b50610941600480360381019061093c919061413d565b6119bc565b60405161094e9190614198565b60405180910390f35b34801561096357600080fd5b5061097e6004803603810190610979919061413d565b611a89565b60405161098b9190614198565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b691906141b3565b611aa7565b6040516109c89190614198565b60405180910390f35b3480156109dd57600080fd5b506109e6611ac7565b6040516109f39190614198565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906141b3565b611ada565b005b348015610a3157600080fd5b50610a4c6004803603810190610a479190614367565b611bb5565b005b348015610a5a57600080fd5b50610a756004803603810190610a70919061425a565b611cf5565b005b348015610a8357600080fd5b50610a8c611e29565b604051610a999190614198565b60405180910390f35b348015610aae57600080fd5b50610ab7611e3c565b604051610ac49190614009565b60405180910390f35b348015610ad957600080fd5b50610ae2611e42565b604051610aef9190614009565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a919061425a565b611e48565b604051610b2c9190614198565b60405180910390f35b348015610b4157600080fd5b50610b4a611fb8565b604051610b579190614009565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b8291906143a7565b611fbe565b604051610b949190614009565b60405180910390f35b348015610ba957600080fd5b50610bb2612045565b604051610bbf9190614009565b60405180910390f35b348015610bd457600080fd5b50610bdd61204b565b604051610bea9190614198565b60405180910390f35b348015610bff57600080fd5b50610c08612106565b604051610c159190614009565b60405180910390f35b348015610c2a57600080fd5b50610c456004803603810190610c4091906141b3565b61210c565b005b348015610c5357600080fd5b50610c5c6122d3565b604051610c699190614009565b60405180910390f35b348015610c7e57600080fd5b50610c876122d9565b604051610c949190614009565b60405180910390f35b610ca561233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90614433565b60405180910390fd5b8160148190555080601581905550601554601454610d529190614482565b60138190555060056013541115610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590614524565b60405180910390fd5b5050565b601a5481565b606060038054610db790614573565b80601f0160208091040260200160405190810160405280929190818152602001828054610de390614573565b8015610e305780601f10610e0557610100808354040283529160200191610e30565b820191906000526020600020905b815481529060010190602001808311610e1357829003601f168201915b5050505050905090565b6000610e4e610e4761233d565b8484612345565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60165481565b60175481565b610eba61233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4090614433565b60405180910390fd5b6009600a610f5791906146d8565b6103e86001610f64610e9c565b610f6e9190614723565b610f7891906147ac565b610f8291906147ac565b811015610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb9061484f565b60405180910390fd5b6009600a610fd291906146d8565b81610fdd9190614723565b60098190555050565b6000610ff3848484612510565b6110b484610fff61233d565b6110af856040518060600160405280602881526020016154a060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106561233d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b612345565b600190509392505050565b61dead81565b60006009905090565b60006111776110db61233d565b8461117285600160006110ec61233d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122df90919063ffffffff16565b612345565b6001905092915050565b7f000000000000000000000000286d9a8076afbce265da01387df0226889ac1b6481565b600c60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b61124261233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890614433565b60405180910390fd5b81601181905550806012819055506012546011546112ef9190614482565b6010819055506005601054111561133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133290614524565b60405180910390fd5b5050565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a861233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90614433565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061150261233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890614433565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115bb61233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190614433565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b6116d961233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90614433565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546117d990614573565b80601f016020809104026020016040519081016040528092919081815260200182805461180590614573565b80156118525780601f1061182757610100808354040283529160200191611852565b820191906000526020600020905b81548152906001019060200180831161183557829003601f168201915b5050505050905090565b60195481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61189061233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690614433565b60405180910390fd5b7f000000000000000000000000286d9a8076afbce265da01387df0226889ac1b6473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a5906148e1565b60405180910390fd5b6119b882826135cb565b5050565b6000611a7f6119c961233d565b84611a7a856040518060600160405280602581526020016154c860259139600160006119f361233d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b612345565b6001905092915050565b6000611a9d611a9661233d565b8484612510565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611ae261233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890614433565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bbd61233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390614433565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ce99190614198565b60405180910390a25050565b611cfd61233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390614433565b60405180910390fd5b6009600a611d9a91906146d8565b6103e86005611da7610e9c565b611db19190614723565b611dbb91906147ac565b611dc591906147ac565b811015611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe90614973565b60405180910390fd5b6009600a611e1591906146d8565b81611e209190614723565b600b8190555050565b600f60009054906101000a900460ff1681565b60095481565b60155481565b6000611e5261233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed890614433565b60405180910390fd5b620186a06001611eef610e9c565b611ef99190614723565b611f0391906147ac565b821015611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614a05565b60405180910390fd5b6103e86005611f52610e9c565b611f5c9190614723565b611f6691906147ac565b821115611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90614a97565b60405180910390fd5b81600a8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600061205561233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90614433565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61211461233d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614433565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614b29565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600b5481565b60008082846122ee9190614482565b905083811015612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614b95565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac90614c27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90614cb9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125039190614009565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257790614d4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790614ddd565b60405180910390fd5b600081141561260a576126058383600061366c565b613562565b6000601254141580156126c25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806126c15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b156127045760006012819055506012546011546126df9190614482565b60108190555060006015819055506015546014546126fd9190614482565b6013819055505b6000601054141580156127bc5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127bb5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b156127f2576000601281905550600060118190555060006010819055506000601581905550600060148190555060006013819055505b600c60009054906101000a900460ff1615612eb55761280f6117a0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561287d575061284d6117a0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128f0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129095750600560149054906101000a900460ff16155b15612eb457600c60019054906101000a900460ff16612a0357601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129c35750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990614e49565b60405180910390fd5b5b600f60009054906101000a900460ff1615612bcb57612a206117a0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612aa757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aff57507f000000000000000000000000286d9a8076afbce265da01387df0226889ac1b6473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bca5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7c90614f01565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c6e5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d1557600954811115612cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612caf90614f93565b60405180910390fd5b600b54612cc483611358565b82612ccf9190614482565b1115612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614fff565b60405180910390fd5b612eb3565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db85750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0757600954811115612e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df990615091565b60405180910390fd5b612eb2565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612eb157600b54612e6483611358565b82612e6f9190614482565b1115612eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea790614fff565b60405180910390fd5b5b5b5b5b5b6000612ec030611358565b90506000600a548210159050808015612ee55750600c60029054906101000a900460ff165b8015612efe5750600560149054906101000a900460ff16155b8015612f545750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612faa5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130005750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613044576001600560146101000a81548160ff021916908315150217905550613028613901565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130fa5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561310457600090505b600081156134c557601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316757506000601354115b156133af576000600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411801561320f57506201518061320c600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442613ad190919063ffffffff16565b11155b156132425761323b606461322d600f88613b1b90919063ffffffff16565b613b9690919063ffffffff16565b9050613344565b6000600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156132e557506202a3006132e2600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442613ad190919063ffffffff16565b11155b15613318576133116064613303600a88613b1b90919063ffffffff16565b613b9690919063ffffffff16565b9050613343565b613340606461333260135488613b1b90919063ffffffff16565b613b9690919063ffffffff16565b90505b5b601354601454826133559190614723565b61335f91906147ac565b601660008282546133709190614482565b92505081905550601354601554826133889190614723565b61339291906147ac565b601760008282546133a39190614482565b925050819055506134a1565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561340a57506000601054115b156134a057613437606461342960105488613b1b90919063ffffffff16565b613b9690919063ffffffff16565b90506010546011548261344a9190614723565b61345491906147ac565b601660008282546134659190614482565b925050819055506010546012548261347d9190614723565b61348791906147ac565b601760008282546134989190614482565b925050819055505b5b60008111156134b6576134b587308361366c565b5b80856134c291906150b1565b94505b6000600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156135525742600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61355d87878761366c565b505050505b505050565b60008383111582906135af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a691906140bd565b60405180910390fd5b50600083856135be91906150b1565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d390614d4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561374c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374390614ddd565b60405180910390fd5b613757838383613be0565b6137c28160405180606001604052806026815260200161547a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613855816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122df90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138f49190614009565b60405180910390a3505050565b600061390c30611358565b905060006017546016546139209190614482565b90506000808314806139325750600082145b1561393f57505050613acf565b6005600a5461394e9190614723565b831115613967576005600a546139649190614723565b92505b60006002836016548661397a9190614723565b61398491906147ac565b61398e91906147ac565b905060006139a58286613ad190919063ffffffff16565b905060004790506139b582613be5565b60006139ca8247613ad190919063ffffffff16565b905060006139f5876139e760175485613b1b90919063ffffffff16565b613b9690919063ffffffff16565b905060008183613a0591906150b1565b905060006016819055506000601781905550600086118015613a275750600081115b15613a3757613a368682613e31565b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a7d90615116565b60006040518083038185875af1925050503d8060008114613aba576040519150601f19603f3d011682016040523d82523d6000602084013e613abf565b606091505b5050809750505050505050505050505b565b6000613b1383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613567565b905092915050565b600080831415613b2e5760009050613b90565b60008284613b3c9190614723565b9050828482613b4b91906147ac565b14613b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b829061519d565b60405180910390fd5b809150505b92915050565b6000613bd883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f1c565b905092915050565b505050565b6000600267ffffffffffffffff811115613c0257613c016151bd565b5b604051908082528060200260200182016040528015613c305781602001602082028036833780820191505090505b5090503081600081518110613c4857613c476151ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ce857600080fd5b505afa158015613cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d209190615230565b81600181518110613d3457613d336151ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d99307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612345565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dfb959493929190615356565b600060405180830381600087803b158015613e1557600080fd5b505af1158015613e29573d6000803e3d6000fd5b505050505050565b613e5c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612345565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613ec3969594939291906153b0565b6060604051808303818588803b158015613edc57600080fd5b505af1158015613ef0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f159190615426565b5050505050565b60008083118290613f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5a91906140bd565b60405180910390fd5b5060008385613f7291906147ac565b9050809150509392505050565b600080fd5b6000819050919050565b613f9781613f84565b8114613fa257600080fd5b50565b600081359050613fb481613f8e565b92915050565b60008060408385031215613fd157613fd0613f7f565b5b6000613fdf85828601613fa5565b9250506020613ff085828601613fa5565b9150509250929050565b61400381613f84565b82525050565b600060208201905061401e6000830184613ffa565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561405e578082015181840152602081019050614043565b8381111561406d576000848401525b50505050565b6000601f19601f8301169050919050565b600061408f82614024565b614099818561402f565b93506140a9818560208601614040565b6140b281614073565b840191505092915050565b600060208201905081810360008301526140d78184614084565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061410a826140df565b9050919050565b61411a816140ff565b811461412557600080fd5b50565b60008135905061413781614111565b92915050565b6000806040838503121561415457614153613f7f565b5b600061416285828601614128565b925050602061417385828601613fa5565b9150509250929050565b60008115159050919050565b6141928161417d565b82525050565b60006020820190506141ad6000830184614189565b92915050565b6000602082840312156141c9576141c8613f7f565b5b60006141d784828501614128565b91505092915050565b6000819050919050565b60006142056142006141fb846140df565b6141e0565b6140df565b9050919050565b6000614217826141ea565b9050919050565b60006142298261420c565b9050919050565b6142398161421e565b82525050565b60006020820190506142546000830184614230565b92915050565b6000602082840312156142705761426f613f7f565b5b600061427e84828501613fa5565b91505092915050565b6000806000606084860312156142a05761429f613f7f565b5b60006142ae86828701614128565b93505060206142bf86828701614128565b92505060406142d086828701613fa5565b9150509250925092565b6142e3816140ff565b82525050565b60006020820190506142fe60008301846142da565b92915050565b600060ff82169050919050565b61431a81614304565b82525050565b60006020820190506143356000830184614311565b92915050565b6143448161417d565b811461434f57600080fd5b50565b6000813590506143618161433b565b92915050565b6000806040838503121561437e5761437d613f7f565b5b600061438c85828601614128565b925050602061439d85828601614352565b9150509250929050565b600080604083850312156143be576143bd613f7f565b5b60006143cc85828601614128565b92505060206143dd85828601614128565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061441d60208361402f565b9150614428826143e7565b602082019050919050565b6000602082019050818103600083015261444c81614410565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061448d82613f84565b915061449883613f84565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144cd576144cc614453565b5b828201905092915050565b7f4d757374206b6565702066656573206174203425206f72206c65737300000000600082015250565b600061450e601c8361402f565b9150614519826144d8565b602082019050919050565b6000602082019050818103600083015261453d81614501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061458b57607f821691505b6020821081141561459f5761459e614544565b5b50919050565b60008160011c9050919050565b6000808291508390505b60018511156145fc578086048111156145d8576145d7614453565b5b60018516156145e75780820291505b80810290506145f5856145a5565b94506145bc565b94509492505050565b60008261461557600190506146d1565b8161462357600090506146d1565b8160018114614639576002811461464357614672565b60019150506146d1565b60ff84111561465557614654614453565b5b8360020a91508482111561466c5761466b614453565b5b506146d1565b5060208310610133831016604e8410600b84101617156146a75782820a9050838111156146a2576146a1614453565b5b6146d1565b6146b484848460016145b2565b925090508184048111156146cb576146ca614453565b5b81810290505b9392505050565b60006146e382613f84565b91506146ee83614304565b925061471b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614605565b905092915050565b600061472e82613f84565b915061473983613f84565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561477257614771614453565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b782613f84565b91506147c283613f84565b9250826147d2576147d161477d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614839602f8361402f565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148cb60398361402f565b91506148d68261486f565b604082019050919050565b600060208201905081810360008301526148fa816148be565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061495d60248361402f565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149ef60358361402f565b91506149fa82614993565b604082019050919050565b60006020820190508181036000830152614a1e816149e2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a8160348361402f565b9150614a8c82614a25565b604082019050919050565b60006020820190508181036000830152614ab081614a74565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b1360268361402f565b9150614b1e82614ab7565b604082019050919050565b60006020820190508181036000830152614b4281614b06565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b7f601b8361402f565b9150614b8a82614b49565b602082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c1160248361402f565b9150614c1c82614bb5565b604082019050919050565b60006020820190508181036000830152614c4081614c04565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ca360228361402f565b9150614cae82614c47565b604082019050919050565b60006020820190508181036000830152614cd281614c96565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d3560258361402f565b9150614d4082614cd9565b604082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614dc760238361402f565b9150614dd282614d6b565b604082019050919050565b60006020820190508181036000830152614df681614dba565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e3360168361402f565b9150614e3e82614dfd565b602082019050919050565b60006020820190508181036000830152614e6281614e26565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614eeb60498361402f565b9150614ef682614e69565b606082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614f7d60358361402f565b9150614f8882614f21565b604082019050919050565b60006020820190508181036000830152614fac81614f70565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614fe960138361402f565b9150614ff482614fb3565b602082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061507b60368361402f565b91506150868261501f565b604082019050919050565b600060208201905081810360008301526150aa8161506e565b9050919050565b60006150bc82613f84565b91506150c783613f84565b9250828210156150da576150d9614453565b5b828203905092915050565b600081905092915050565b50565b60006151006000836150e5565b915061510b826150f0565b600082019050919050565b6000615121826150f3565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061518760218361402f565b91506151928261512b565b604082019050919050565b600060208201905081810360008301526151b68161517a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061522a81614111565b92915050565b60006020828403121561524657615245613f7f565b5b60006152548482850161521b565b91505092915050565b6000819050919050565b600061528261527d6152788461525d565b6141e0565b613f84565b9050919050565b61529281615267565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152cd816140ff565b82525050565b60006152df83836152c4565b60208301905092915050565b6000602082019050919050565b600061530382615298565b61530d81856152a3565b9350615318836152b4565b8060005b8381101561534957815161533088826152d3565b975061533b836152eb565b92505060018101905061531c565b5085935050505092915050565b600060a08201905061536b6000830188613ffa565b6153786020830187615289565b818103604083015261538a81866152f8565b905061539960608301856142da565b6153a66080830184613ffa565b9695505050505050565b600060c0820190506153c560008301896142da565b6153d26020830188613ffa565b6153df6040830187615289565b6153ec6060830186615289565b6153f960808301856142da565b61540660a0830184613ffa565b979650505050505050565b60008151905061542081613f8e565b92915050565b60008060006060848603121561543f5761543e613f7f565b5b600061544d86828701615411565b935050602061545e86828701615411565b925050604061546f86828701615411565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220efe18c6eedf549b23b9eed456380a1808a16cf52bf9f28d2429e5eef2681567764736f6c63430008090033

Deployed Bytecode Sourcemap

29342:16473:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35989:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30688:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7499:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9665:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30863:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29421:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8618:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30541:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30581;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34979:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10316:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29524:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8461:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11080:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29479:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29890:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37108:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29658:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30369:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35642:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30418:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29970:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8789:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21963:148;;;;;;;;;;;;;:::i;:::-;;34195:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35490:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29695:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30623:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34031:112;;;;;;;;;;;;;:::i;:::-;;21321:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7718:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30656:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29616:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36531:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11801:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9129:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31085:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29930:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36979:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36341:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35242:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30250:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29775:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30491:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34586:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30298:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9367:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29817:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34376:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30332:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22266:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30453:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29857:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35989:344;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36115:13:::1;36096:16;:32;;;;36164:23;36139:22;:48;;;;36233:22;;36214:16;;:41;;;;:::i;:::-;36198:13;:57;;;;36291:1;36274:13;;:18;;36266:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;35989:344:::0;;:::o;30688:21::-;;;;:::o;7499:100::-;7553:13;7586:5;7579:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7499:100;:::o;9665:169::-;9748:4;9765:39;9774:12;:10;:12::i;:::-;9788:7;9797:6;9765:8;:39::i;:::-;9822:4;9815:11;;9665:169;;;;:::o;30863:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29421:51::-;;;:::o;8618:108::-;8679:7;8706:12;;8699:19;;8618:108;:::o;30541:33::-;;;;:::o;30581:::-;;;;:::o;34979:255::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29761:1:::1;35099:2;:15;;;;:::i;:::-;35092:4;35088:1;35072:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35071:44;;;;:::i;:::-;35061:6;:54;;35053:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;29761:1;35211:2;:14;;;;:::i;:::-;35201:6;:25;;;;:::i;:::-;35178:20;:48;;;;34979:255:::0;:::o;10316:355::-;10456:4;10473:36;10483:6;10491:9;10502:6;10473:9;:36::i;:::-;10520:121;10529:6;10537:12;:10;:12::i;:::-;10551:89;10589:6;10551:89;;;;;;;;;;;;;;;;;:11;:19;10563:6;10551:19;;;;;;;;;;;;;;;:33;10571:12;:10;:12::i;:::-;10551:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10520:8;:121::i;:::-;10659:4;10652:11;;10316:355;;;;;:::o;29524:53::-;29570:6;29524:53;:::o;8461:92::-;8519:5;8544:1;8537:8;;8461:92;:::o;11080:218::-;11168:4;11185:83;11194:12;:10;:12::i;:::-;11208:7;11217:50;11256:10;11217:11;:25;11229:12;:10;:12::i;:::-;11217:25;;;;;;;;;;;;;;;:34;11243:7;11217:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11185:8;:83::i;:::-;11286:4;11279:11;;11080:218;;;;:::o;29479:38::-;;;:::o;29890:33::-;;;;;;;;;;;;;:::o;37108:125::-;37173:4;37197:19;:28;37217:7;37197:28;;;;;;;;;;;;;;;;;;;;;;;;;37190:35;;37108:125;;;:::o;29658:30::-;;;;;;;;;;;;;:::o;30369:36::-;;;;:::o;35642:335::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35765:13:::1;35747:15;:31;;;;35813:22;35789:21;:46;;;;35879:21;;35861:15;;:39;;;;:::i;:::-;35846:12;:54;;;;35935:1;35919:12;;:17;;35911:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35642:335:::0;;:::o;30418:28::-;;;;:::o;29970:31::-;;;;;;;;;;;;;:::o;8789:127::-;8863:7;8890:9;:18;8900:7;8890:18;;;;;;;;;;;;;;;;8883:25;;8789:127;;;:::o;21963:148::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22070:1:::1;22033:40;;22054:6;;;;;;;;;;;22033:40;;;;;;;;;;;;22101:1;22084:6;;:19;;;;;;;;;;;;;;;;;;21963:148::o:0;34195:120::-;34247:4;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34280:5:::1;34263:14;;:22;;;;;;;;;;;;;;;;;;34303:4;34296:11;;34195:120:::0;:::o;35490:144::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35622:4:::1;35580:31;:39;35612:6;35580:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35490:144:::0;;:::o;29695:30::-;;;;;;;;;;;;;:::o;30623:26::-;;;;:::o;34031:112::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34102:4:::1;34086:13;;:20;;;;;;;;;;;;;;;;;;34131:4;34117:11;;:18;;;;;;;;;;;;;;;;;;34031:112::o:0;21321:79::-;21359:7;21386:6;;;;;;;;;;;21379:13;;21321:79;:::o;7718:104::-;7774:13;7807:7;7800:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7718:104;:::o;30656:25::-;;;;:::o;29616:35::-;;;;;;;;;;;;;:::o;36531:244::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36638:13:::1;36630:21;;:4;:21;;;;36622:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;36726:41;36755:4;36761:5;36726:28;:41::i;:::-;36531:244:::0;;:::o;11801:269::-;11894:4;11911:129;11920:12;:10;:12::i;:::-;11934:7;11943:96;11982:15;11943:96;;;;;;;;;;;;;;;;;:11;:25;11955:12;:10;:12::i;:::-;11943:25;;;;;;;;;;;;;;;:34;11969:7;11943:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11911:8;:129::i;:::-;12058:4;12051:11;;11801:269;;;;:::o;9129:175::-;9215:4;9232:42;9242:12;:10;:12::i;:::-;9256:9;9267:6;9232:9;:42::i;:::-;9292:4;9285:11;;9129:175;;;;:::o;31085:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29930:33::-;;;;;;;;;;;;;:::o;36979:115::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37077:9:::1;37059:15;;:27;;;;;;;;;;;;;;;;;;36979:115:::0;:::o;36341:182::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36457:8:::1;36426:19;:28;36446:7;36426:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36497:7;36481:34;;;36506:8;36481:34;;;;;;:::i;:::-;;;;;;;;36341:182:::0;;:::o;35242:236::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29761:1:::1;35365:2;:15;;;;:::i;:::-;35358:4;35354:1;35338:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35337:44;;;;:::i;:::-;35327:6;:54;;35319:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29761:1;35455:2;:14;;;;:::i;:::-;35445:6;:25;;;;:::i;:::-;35433:9;:37;;;;35242:236:::0;:::o;30250:39::-;;;;;;;;;;;;;:::o;29775:35::-;;;;:::o;30491:37::-;;;;:::o;34586:381::-;34667:4;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34723:6:::1;34719:1;34703:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34690:9;:39;;34682:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34838:4;34834:1;34818:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34805:9;:37;;34797:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34930:9;34909:18;:30;;;;34956:4;34949:11;;34586:381:::0;;;:::o;30298:27::-;;;;:::o;9367:151::-;9456:7;9483:11;:18;9495:5;9483:18;;;;;;;;;;;;;;;:27;9502:7;9483:27;;;;;;;;;;;;;;;;9476:34;;9367:151;;;;:::o;29817:33::-;;;;:::o;34376:135::-;34436:4;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34476:5:::1;34453:20;;:28;;;;;;;;;;;;;;;;;;34499:4;34492:11;;34376:135:::0;:::o;30332:30::-;;;;:::o;22266:244::-;21543:12;:10;:12::i;:::-;21533:22;;:6;;;;;;;;;;;:22;;;21525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22375:1:::1;22355:22;;:8;:22;;;;22347:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22465:8;22436:38;;22457:6;;;;;;;;;;;22436:38;;;;;;;;;;;;22494:8;22485:6;;:17;;;;;;;;;;;;;;;;;;22266:244:::0;:::o;30453:31::-;;;;:::o;29857:24::-;;;;:::o;16365:181::-;16423:7;16443:9;16459:1;16455;:5;;;;:::i;:::-;16443:17;;16484:1;16479;:6;;16471:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16537:1;16530:8;;;16365:181;;;;:::o;135:98::-;188:7;215:10;208:17;;135:98;:::o;14987:380::-;15140:1;15123:19;;:5;:19;;;;15115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15221:1;15202:21;;:7;:21;;;;15194:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15305:6;15275:11;:18;15287:5;15275:18;;;;;;;;;;;;;;;:27;15294:7;15275:27;;;;;;;;;;;;;;;:36;;;;15343:7;15327:32;;15336:5;15327:32;;;15352:6;15327:32;;;;;;:::i;:::-;;;;;;;;14987:380;;;:::o;37477:5827::-;37625:1;37609:18;;:4;:18;;;;37601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37702:1;37688:16;;:2;:16;;;;37680:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37779:1;37769:6;:11;37766:92;;;37797:28;37813:4;37819:2;37823:1;37797:15;:28::i;:::-;37840:7;;37766:92;37913:1;37888:21;;:26;;:121;;;;;37948:20;;;;;;;;;;;37932:37;;:4;:37;;;:76;;;;37987:20;;;;;;;;;;;37973:35;;:2;:35;;;37932:76;37888:121;37870:482;;;38107:1;38083:21;:25;;;;38156:21;;38138:15;;:39;;;;:::i;:::-;38123:12;:54;;;;38267:1;38242:22;:26;;;;38318:22;;38299:16;;:41;;;;:::i;:::-;38283:13;:57;;;;37870:482;38398:1;38382:12;;:17;;:102;;;;;38433:15;;;;;;;;;;;38417:32;;:4;:32;;;:66;;;;38467:15;;;;;;;;;;;38453:30;;:2;:30;;;38417:66;38382:102;38364:442;;;38576:1;38552:21;:25;;;;38610:1;38592:15;:19;;;;38641:1;38626:12;:16;;;;38726:1;38701:22;:26;;;;38761:1;38742:16;:20;;;;38793:1;38777:13;:17;;;;38364:442;38829:14;;;;;;;;;;;38826:2040;;;38889:7;:5;:7::i;:::-;38881:15;;:4;:15;;;;:49;;;;;38923:7;:5;:7::i;:::-;38917:13;;:2;:13;;;;38881:49;:86;;;;;38965:1;38951:16;;:2;:16;;;;38881:86;:128;;;;;39002:6;38988:21;;:2;:21;;;;38881:128;:158;;;;;39031:8;;;;;;;;;;;39030:9;38881:158;38859:1996;;;39077:13;;;;;;;;;;;39073:148;;39122:19;:25;39142:4;39122:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39151:19;:23;39171:2;39151:23;;;;;;;;;;;;;;;;;;;;;;;;;39122:52;39114:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39073:148;39377:20;;;;;;;;;;;39373:641;;;39458:7;:5;:7::i;:::-;39452:13;;:2;:13;;;;:72;;;;;39508:15;39494:30;;:2;:30;;;;39452:72;:129;;;;;39567:13;39553:28;;:2;:28;;;;39452:129;39422:573;;;39745:12;39670:28;:39;39699:9;39670:39;;;;;;;;;;;;;;;;:87;39632:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;39959:12;39917:28;:39;39946:9;39917:39;;;;;;;;;;;;;;;:54;;;;39422:573;39373:641;40066:25;:31;40092:4;40066:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40102:31;:35;40134:2;40102:35;;;;;;;;;;;;;;;;;;;;;;;;;40101:36;40066:71;40062:778;;;40184:20;;40174:6;:30;;40166:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40323:9;;40306:13;40316:2;40306:9;:13::i;:::-;40297:6;:22;;;;:::i;:::-;:35;;40289:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40062:778;;;40450:25;:29;40476:2;40450:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40484:31;:37;40516:4;40484:37;;;;;;;;;;;;;;;;;;;;;;;;;40483:38;40450:71;40446:394;;;40568:20;;40558:6;:30;;40550:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40446:394;;;40694:31;:35;40726:2;40694:35;;;;;;;;;;;;;;;;;;;;;;;;;40690:150;;40787:9;;40770:13;40780:2;40770:9;:13::i;:::-;40761:6;:22;;;;:::i;:::-;:35;;40753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40690:150;40446:394;40062:778;38859:1996;38826:2040;40900:28;40931:24;40949:4;40931:9;:24::i;:::-;40900:55;;40976:12;41015:18;;40991:20;:42;;40976:57;;41064:7;:35;;;;;41088:11;;;;;;;;;;;41064:35;:61;;;;;41117:8;;;;;;;;;;;41116:9;41064:61;:110;;;;;41143:25;:31;41169:4;41143:31;;;;;;;;;;;;;;;;;;;;;;;;;41142:32;41064:110;:153;;;;;41192:19;:25;41212:4;41192:25;;;;;;;;;;;;;;;;;;;;;;;;;41191:26;41064:153;:194;;;;;41235:19;:23;41255:2;41235:23;;;;;;;;;;;;;;;;;;;;;;;;;41234:24;41064:194;41046:338;;;41296:4;41285:8;;:15;;;;;;;;;;;;;;;;;;41329:10;:8;:10::i;:::-;41367:5;41356:8;;:16;;;;;;;;;;;;;;;;;;41046:338;41404:12;41420:8;;;;;;;;;;;41419:9;41404:24;;41529:19;:25;41549:4;41529:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41558:19;:23;41578:2;41558:23;;;;;;;;;;;;;;;;;;;;;;;;;41529:52;41526:99;;;41608:5;41598:15;;41526:99;41645:12;41749:7;41746:1379;;;41800:25;:29;41826:2;41800:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41849:1;41833:13;;:17;41800:50;41796:1164;;;41906:1;41874:18;:29;41893:9;41874:29;;;;;;;;;;;;;;;;:33;:97;;;;;41965:6;41911:50;41931:18;:29;41950:9;41931:29;;;;;;;;;;;;;;;;41911:15;:19;;:50;;;;:::i;:::-;:60;;41874:97;41870:580;;;42073:23;42092:3;42073:14;42084:2;42073:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;42066:30;;41870:580;;;42158:1;42126:18;:29;42145:9;42126:29;;;;;;;;;;;;;;;;:33;:97;;;;;42217:6;42163:50;42183:18;:29;42202:9;42183:29;;;;;;;;;;;;;;;;42163:15;:19;;:50;;;;:::i;:::-;:60;;42126:97;42122:328;;;42317:23;42336:3;42317:14;42328:2;42317:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;42310:30;;42122:328;;;42396:34;42426:3;42396:25;42407:13;;42396:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42389:41;;42122:328;41870:580;42516:13;;42497:16;;42490:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42468:18;;:61;;;;;;;:::i;:::-;;;;;;;;42602:13;;42577:22;;42570:4;:29;;;;:::i;:::-;:45;;;;:::i;:::-;42548:18;;:67;;;;;;;:::i;:::-;;;;;;;;41796:1164;;;42676:25;:31;42702:4;42676:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42726:1;42711:12;;:16;42676:51;42673:287;;;42752:33;42781:3;42752:24;42763:12;;42752:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42745:40;;42848:12;;42830:15;;42823:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42801:18;;:59;;;;;;;:::i;:::-;;;;;;;;42932:12;;42908:21;;42901:4;:28;;;;:::i;:::-;:43;;;;:::i;:::-;42879:18;;:65;;;;;;;:::i;:::-;;;;;;;;42673:287;41796:1164;42998:1;42991:4;:8;42988:89;;;43019:42;43035:4;43049;43056;43019:15;:42::i;:::-;42988:89;43109:4;43099:14;;;;;:::i;:::-;;;41746:1379;43174:1;43141:18;:29;43160:9;43141:29;;;;;;;;;;;;;;;;:34;43137:114;;;43224:15;43192:18;:29;43211:9;43192:29;;;;;;;;;;;;;;;:47;;;;43137:114;43263:33;43279:4;43285:2;43289:6;43263:15;:33::i;:::-;37590:5714;;;;37477:5827;;;;:::o;17268:192::-;17354:7;17387:1;17382;:6;;17390:12;17374:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17414:9;17430:1;17426;:5;;;;:::i;:::-;17414:17;;17451:1;17444:8;;;17268:192;;;;;:::o;36783:188::-;36900:5;36866:25;:31;36892:4;36866:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36957:5;36923:40;;36951:4;36923:40;;;;;;;;;;;;36783:188;;:::o;12560:573::-;12718:1;12700:20;;:6;:20;;;;12692:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12802:1;12781:23;;:9;:23;;;;12773:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12857:47;12878:6;12886:9;12897:6;12857:20;:47::i;:::-;12937:71;12959:6;12937:71;;;;;;;;;;;;;;;;;:9;:17;12947:6;12937:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12917:9;:17;12927:6;12917:17;;;;;;;;;;;;;;;:91;;;;13042:32;13067:6;13042:9;:20;13052:9;13042:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13019:9;:20;13029:9;13019:20;;;;;;;;;;;;;;;:55;;;;13107:9;13090:35;;13099:6;13090:35;;;13118:6;13090:35;;;;;;:::i;:::-;;;;;;;;12560:573;;;:::o;44480:1328::-;44519:23;44545:24;44563:4;44545:9;:24::i;:::-;44519:50;;44580:25;44629:18;;44608;;:39;;;;:::i;:::-;44580:67;;44658:12;44713:1;44694:15;:20;:46;;;;44739:1;44718:17;:22;44694:46;44691:60;;;44743:7;;;;;44691:60;44805:1;44784:18;;:22;;;;:::i;:::-;44766:15;:40;44763:109;;;44859:1;44838:18;;:22;;;;:::i;:::-;44820:40;;44763:109;44941:23;45026:1;45006:17;44985:18;;44967:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44941:86;;45038:26;45067:36;45087:15;45067;:19;;:36;;;;:::i;:::-;45038:65;;45124:25;45152:21;45124:49;;45186:36;45203:18;45186:16;:36::i;:::-;45244:18;45265:44;45291:17;45265:21;:25;;:44;;;;:::i;:::-;45244:65;;45330:23;45356:57;45395:17;45356:34;45371:18;;45356:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;45330:83;;45434:23;45473:15;45460:10;:28;;;;:::i;:::-;45434:54;;45530:1;45509:18;:22;;;;45563:1;45542:18;:22;;;;45606:1;45588:15;:19;:42;;;;;45629:1;45611:15;:19;45588:42;45585:119;;;45646:46;45659:15;45676;45646:12;:46::i;:::-;45585:119;45745:15;;;;;;;;;;;45737:29;;45774:21;45737:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45724:76;;;;;44508:1300;;;;;;;;;44480:1328;:::o;16829:136::-;16887:7;16914:43;16918:1;16921;16914:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16907:50;;16829:136;;;;:::o;17719:471::-;17777:7;18027:1;18022;:6;18018:47;;;18052:1;18045:8;;;;18018:47;18077:9;18093:1;18089;:5;;;;:::i;:::-;18077:17;;18122:1;18117;18113;:5;;;;:::i;:::-;:10;18105:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18181:1;18174:8;;;17719:471;;;;;:::o;18666:132::-;18724:7;18751:39;18755:1;18758;18751:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18744:46;;18666:132;;;;:::o;15970:125::-;;;;:::o;43312:601::-;43440:21;43478:1;43464:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43440:40;;43509:4;43491;43496:1;43491:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43535:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43525:4;43530:1;43525:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43570:62;43587:4;43602:15;43620:11;43570:8;:62::i;:::-;43671:15;:66;;;43752:11;43778:1;43822:4;43849;43869:15;43671:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43367:546;43312:601;:::o;43937:535::-;44085:62;44102:4;44117:15;44135:11;44085:8;:62::i;:::-;44190:15;:31;;;44229:9;44262:4;44282:11;44308:1;44351;29570:6;44438:15;44190:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43937:535;;:::o;19294:278::-;19380:7;19412:1;19408;:5;19415:12;19400:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19439:9;19455:1;19451;:5;;;;:::i;:::-;19439:17;;19563:1;19556:8;;;19294:278;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:118::-;1257:24;1275:5;1257:24;:::i;:::-;1252:3;1245:37;1170:118;;:::o;1294:222::-;1387:4;1425:2;1414:9;1410:18;1402:26;;1438:71;1506:1;1495:9;1491:17;1482:6;1438:71;:::i;:::-;1294:222;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:307::-;1870:1;1880:113;1894:6;1891:1;1888:13;1880:113;;;1979:1;1974:3;1970:11;1964:18;1960:1;1955:3;1951:11;1944:39;1916:2;1913:1;1909:10;1904:15;;1880:113;;;2011:6;2008:1;2005:13;2002:101;;;2091:1;2082:6;2077:3;2073:16;2066:27;2002:101;1851:258;1802:307;;;:::o;2115:102::-;2156:6;2207:2;2203:7;2198:2;2191:5;2187:14;2183:28;2173:38;;2115:102;;;:::o;2223:364::-;2311:3;2339:39;2372:5;2339:39;:::i;:::-;2394:71;2458:6;2453:3;2394:71;:::i;:::-;2387:78;;2474:52;2519:6;2514:3;2507:4;2500:5;2496:16;2474:52;:::i;:::-;2551:29;2573:6;2551:29;:::i;:::-;2546:3;2542:39;2535:46;;2315:272;2223:364;;;;:::o;2593:313::-;2706:4;2744:2;2733:9;2729:18;2721:26;;2793:9;2787:4;2783:20;2779:1;2768:9;2764:17;2757:47;2821:78;2894:4;2885:6;2821:78;:::i;:::-;2813:86;;2593:313;;;;:::o;2912:126::-;2949:7;2989:42;2982:5;2978:54;2967:65;;2912:126;;;:::o;3044:96::-;3081:7;3110:24;3128:5;3110:24;:::i;:::-;3099:35;;3044:96;;;:::o;3146:122::-;3219:24;3237:5;3219:24;:::i;:::-;3212:5;3209:35;3199:63;;3258:1;3255;3248:12;3199:63;3146:122;:::o;3274:139::-;3320:5;3358:6;3345:20;3336:29;;3374:33;3401:5;3374:33;:::i;:::-;3274:139;;;;:::o;3419:474::-;3487:6;3495;3544:2;3532:9;3523:7;3519:23;3515:32;3512:119;;;3550:79;;:::i;:::-;3512:119;3670:1;3695:53;3740:7;3731:6;3720:9;3716:22;3695:53;:::i;:::-;3685:63;;3641:117;3797:2;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3768:118;3419:474;;;;;:::o;3899:90::-;3933:7;3976:5;3969:13;3962:21;3951:32;;3899:90;;;:::o;3995:109::-;4076:21;4091:5;4076:21;:::i;:::-;4071:3;4064:34;3995:109;;:::o;4110:210::-;4197:4;4235:2;4224:9;4220:18;4212:26;;4248:65;4310:1;4299:9;4295:17;4286:6;4248:65;:::i;:::-;4110:210;;;;:::o;4326:329::-;4385:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:119;;;4440:79;;:::i;:::-;4402:119;4560:1;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4531:117;4326:329;;;;:::o;4661:60::-;4689:3;4710:5;4703:12;;4661:60;;;:::o;4727:142::-;4777:9;4810:53;4828:34;4837:24;4855:5;4837:24;:::i;:::-;4828:34;:::i;:::-;4810:53;:::i;:::-;4797:66;;4727:142;;;:::o;4875:126::-;4925:9;4958:37;4989:5;4958:37;:::i;:::-;4945:50;;4875:126;;;:::o;5007:153::-;5084:9;5117:37;5148:5;5117:37;:::i;:::-;5104:50;;5007:153;;;:::o;5166:185::-;5280:64;5338:5;5280:64;:::i;:::-;5275:3;5268:77;5166:185;;:::o;5357:276::-;5477:4;5515:2;5504:9;5500:18;5492:26;;5528:98;5623:1;5612:9;5608:17;5599:6;5528:98;:::i;:::-;5357:276;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:86::-;6986:7;7026:4;7019:5;7015:16;7004:27;;6951:86;;;:::o;7043:112::-;7126:22;7142:5;7126:22;:::i;:::-;7121:3;7114:35;7043:112;;:::o;7161:214::-;7250:4;7288:2;7277:9;7273:18;7265:26;;7301:67;7365:1;7354:9;7350:17;7341:6;7301:67;:::i;:::-;7161:214;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:474::-;8184:6;8192;8241:2;8229:9;8220:7;8216:23;8212:32;8209:119;;;8247:79;;:::i;:::-;8209:119;8367:1;8392:53;8437:7;8428:6;8417:9;8413:22;8392:53;:::i;:::-;8382:63;;8338:117;8494:2;8520:53;8565:7;8556:6;8545:9;8541:22;8520:53;:::i;:::-;8510:63;;8465:118;8116:474;;;;;:::o;8596:182::-;8736:34;8732:1;8724:6;8720:14;8713:58;8596:182;:::o;8784:366::-;8926:3;8947:67;9011:2;9006:3;8947:67;:::i;:::-;8940:74;;9023:93;9112:3;9023:93;:::i;:::-;9141:2;9136:3;9132:12;9125:19;;8784:366;;;:::o;9156:419::-;9322:4;9360:2;9349:9;9345:18;9337:26;;9409:9;9403:4;9399:20;9395:1;9384:9;9380:17;9373:47;9437:131;9563:4;9437:131;:::i;:::-;9429:139;;9156:419;;;:::o;9581:180::-;9629:77;9626:1;9619:88;9726:4;9723:1;9716:15;9750:4;9747:1;9740:15;9767:305;9807:3;9826:20;9844:1;9826:20;:::i;:::-;9821:25;;9860:20;9878:1;9860:20;:::i;:::-;9855:25;;10014:1;9946:66;9942:74;9939:1;9936:81;9933:107;;;10020:18;;:::i;:::-;9933:107;10064:1;10061;10057:9;10050:16;;9767:305;;;;:::o;10078:178::-;10218:30;10214:1;10206:6;10202:14;10195:54;10078:178;:::o;10262:366::-;10404:3;10425:67;10489:2;10484:3;10425:67;:::i;:::-;10418:74;;10501:93;10590:3;10501:93;:::i;:::-;10619:2;10614:3;10610:12;10603:19;;10262:366;;;:::o;10634:419::-;10800:4;10838:2;10827:9;10823:18;10815:26;;10887:9;10881:4;10877:20;10873:1;10862:9;10858:17;10851:47;10915:131;11041:4;10915:131;:::i;:::-;10907:139;;10634:419;;;:::o;11059:180::-;11107:77;11104:1;11097:88;11204:4;11201:1;11194:15;11228:4;11225:1;11218:15;11245:320;11289:6;11326:1;11320:4;11316:12;11306:22;;11373:1;11367:4;11363:12;11394:18;11384:81;;11450:4;11442:6;11438:17;11428:27;;11384:81;11512:2;11504:6;11501:14;11481:18;11478:38;11475:84;;;11531:18;;:::i;:::-;11475:84;11296:269;11245:320;;;:::o;11571:102::-;11613:8;11660:5;11657:1;11653:13;11632:34;;11571:102;;;:::o;11679:848::-;11740:5;11747:4;11771:6;11762:15;;11795:5;11786:14;;11809:712;11830:1;11820:8;11817:15;11809:712;;;11925:4;11920:3;11916:14;11910:4;11907:24;11904:50;;;11934:18;;:::i;:::-;11904:50;11984:1;11974:8;11970:16;11967:451;;;12399:4;12392:5;12388:16;12379:25;;11967:451;12449:4;12443;12439:15;12431:23;;12479:32;12502:8;12479:32;:::i;:::-;12467:44;;11809:712;;;11679:848;;;;;;;:::o;12533:1073::-;12587:5;12778:8;12768:40;;12799:1;12790:10;;12801:5;;12768:40;12827:4;12817:36;;12844:1;12835:10;;12846:5;;12817:36;12913:4;12961:1;12956:27;;;;12997:1;12992:191;;;;12906:277;;12956:27;12974:1;12965:10;;12976:5;;;12992:191;13037:3;13027:8;13024:17;13021:43;;;13044:18;;:::i;:::-;13021:43;13093:8;13090:1;13086:16;13077:25;;13128:3;13121:5;13118:14;13115:40;;;13135:18;;:::i;:::-;13115:40;13168:5;;;12906:277;;13292:2;13282:8;13279:16;13273:3;13267:4;13264:13;13260:36;13242:2;13232:8;13229:16;13224:2;13218:4;13215:12;13211:35;13195:111;13192:246;;;13348:8;13342:4;13338:19;13329:28;;13383:3;13376:5;13373:14;13370:40;;;13390:18;;:::i;:::-;13370:40;13423:5;;13192:246;13463:42;13501:3;13491:8;13485:4;13482:1;13463:42;:::i;:::-;13448:57;;;;13537:4;13532:3;13528:14;13521:5;13518:25;13515:51;;;13546:18;;:::i;:::-;13515:51;13595:4;13588:5;13584:16;13575:25;;12533:1073;;;;;;:::o;13612:281::-;13670:5;13694:23;13712:4;13694:23;:::i;:::-;13686:31;;13738:25;13754:8;13738:25;:::i;:::-;13726:37;;13782:104;13819:66;13809:8;13803:4;13782:104;:::i;:::-;13773:113;;13612:281;;;;:::o;13899:348::-;13939:7;13962:20;13980:1;13962:20;:::i;:::-;13957:25;;13996:20;14014:1;13996:20;:::i;:::-;13991:25;;14184:1;14116:66;14112:74;14109:1;14106:81;14101:1;14094:9;14087:17;14083:105;14080:131;;;14191:18;;:::i;:::-;14080:131;14239:1;14236;14232:9;14221:20;;13899:348;;;;:::o;14253:180::-;14301:77;14298:1;14291:88;14398:4;14395:1;14388:15;14422:4;14419:1;14412:15;14439:185;14479:1;14496:20;14514:1;14496:20;:::i;:::-;14491:25;;14530:20;14548:1;14530:20;:::i;:::-;14525:25;;14569:1;14559:35;;14574:18;;:::i;:::-;14559:35;14616:1;14613;14609:9;14604:14;;14439:185;;;;:::o;14630:234::-;14770:34;14766:1;14758:6;14754:14;14747:58;14839:17;14834:2;14826:6;14822:15;14815:42;14630:234;:::o;14870:366::-;15012:3;15033:67;15097:2;15092:3;15033:67;:::i;:::-;15026:74;;15109:93;15198:3;15109:93;:::i;:::-;15227:2;15222:3;15218:12;15211:19;;14870:366;;;:::o;15242:419::-;15408:4;15446:2;15435:9;15431:18;15423:26;;15495:9;15489:4;15485:20;15481:1;15470:9;15466:17;15459:47;15523:131;15649:4;15523:131;:::i;:::-;15515:139;;15242:419;;;:::o;15667:244::-;15807:34;15803:1;15795:6;15791:14;15784:58;15876:27;15871:2;15863:6;15859:15;15852:52;15667:244;:::o;15917:366::-;16059:3;16080:67;16144:2;16139:3;16080:67;:::i;:::-;16073:74;;16156:93;16245:3;16156:93;:::i;:::-;16274:2;16269:3;16265:12;16258:19;;15917:366;;;:::o;16289:419::-;16455:4;16493:2;16482:9;16478:18;16470:26;;16542:9;16536:4;16532:20;16528:1;16517:9;16513:17;16506:47;16570:131;16696:4;16570:131;:::i;:::-;16562:139;;16289:419;;;:::o;16714:223::-;16854:34;16850:1;16842:6;16838:14;16831:58;16923:6;16918:2;16910:6;16906:15;16899:31;16714:223;:::o;16943:366::-;17085:3;17106:67;17170:2;17165:3;17106:67;:::i;:::-;17099:74;;17182:93;17271:3;17182:93;:::i;:::-;17300:2;17295:3;17291:12;17284:19;;16943:366;;;:::o;17315:419::-;17481:4;17519:2;17508:9;17504:18;17496:26;;17568:9;17562:4;17558:20;17554:1;17543:9;17539:17;17532:47;17596:131;17722:4;17596:131;:::i;:::-;17588:139;;17315:419;;;:::o;17740:240::-;17880:34;17876:1;17868:6;17864:14;17857:58;17949:23;17944:2;17936:6;17932:15;17925:48;17740:240;:::o;17986:366::-;18128:3;18149:67;18213:2;18208:3;18149:67;:::i;:::-;18142:74;;18225:93;18314:3;18225:93;:::i;:::-;18343:2;18338:3;18334:12;18327:19;;17986:366;;;:::o;18358:419::-;18524:4;18562:2;18551:9;18547:18;18539:26;;18611:9;18605:4;18601:20;18597:1;18586:9;18582:17;18575:47;18639:131;18765:4;18639:131;:::i;:::-;18631:139;;18358:419;;;:::o;18783:239::-;18923:34;18919:1;18911:6;18907:14;18900:58;18992:22;18987:2;18979:6;18975:15;18968:47;18783:239;:::o;19028:366::-;19170:3;19191:67;19255:2;19250:3;19191:67;:::i;:::-;19184:74;;19267:93;19356:3;19267:93;:::i;:::-;19385:2;19380:3;19376:12;19369:19;;19028:366;;;:::o;19400:419::-;19566:4;19604:2;19593:9;19589:18;19581:26;;19653:9;19647:4;19643:20;19639:1;19628:9;19624:17;19617:47;19681:131;19807:4;19681:131;:::i;:::-;19673:139;;19400:419;;;:::o;19825:225::-;19965:34;19961:1;19953:6;19949:14;19942:58;20034:8;20029:2;20021:6;20017:15;20010:33;19825:225;:::o;20056:366::-;20198:3;20219:67;20283:2;20278:3;20219:67;:::i;:::-;20212:74;;20295:93;20384:3;20295:93;:::i;:::-;20413:2;20408:3;20404:12;20397:19;;20056:366;;;:::o;20428:419::-;20594:4;20632:2;20621:9;20617:18;20609:26;;20681:9;20675:4;20671:20;20667:1;20656:9;20652:17;20645:47;20709:131;20835:4;20709:131;:::i;:::-;20701:139;;20428:419;;;:::o;20853:177::-;20993:29;20989:1;20981:6;20977:14;20970:53;20853:177;:::o;21036:366::-;21178:3;21199:67;21263:2;21258:3;21199:67;:::i;:::-;21192:74;;21275:93;21364:3;21275:93;:::i;:::-;21393:2;21388:3;21384:12;21377:19;;21036:366;;;:::o;21408:419::-;21574:4;21612:2;21601:9;21597:18;21589:26;;21661:9;21655:4;21651:20;21647:1;21636:9;21632:17;21625:47;21689:131;21815:4;21689:131;:::i;:::-;21681:139;;21408:419;;;:::o;21833:223::-;21973:34;21969:1;21961:6;21957:14;21950:58;22042:6;22037:2;22029:6;22025:15;22018:31;21833:223;:::o;22062:366::-;22204:3;22225:67;22289:2;22284:3;22225:67;:::i;:::-;22218:74;;22301:93;22390:3;22301:93;:::i;:::-;22419:2;22414:3;22410:12;22403:19;;22062:366;;;:::o;22434:419::-;22600:4;22638:2;22627:9;22623:18;22615:26;;22687:9;22681:4;22677:20;22673:1;22662:9;22658:17;22651:47;22715:131;22841:4;22715:131;:::i;:::-;22707:139;;22434:419;;;:::o;22859:221::-;22999:34;22995:1;22987:6;22983:14;22976:58;23068:4;23063:2;23055:6;23051:15;23044:29;22859:221;:::o;23086:366::-;23228:3;23249:67;23313:2;23308:3;23249:67;:::i;:::-;23242:74;;23325:93;23414:3;23325:93;:::i;:::-;23443:2;23438:3;23434:12;23427:19;;23086:366;;;:::o;23458:419::-;23624:4;23662:2;23651:9;23647:18;23639:26;;23711:9;23705:4;23701:20;23697:1;23686:9;23682:17;23675:47;23739:131;23865:4;23739:131;:::i;:::-;23731:139;;23458:419;;;:::o;23883:224::-;24023:34;24019:1;24011:6;24007:14;24000:58;24092:7;24087:2;24079:6;24075:15;24068:32;23883:224;:::o;24113:366::-;24255:3;24276:67;24340:2;24335:3;24276:67;:::i;:::-;24269:74;;24352:93;24441:3;24352:93;:::i;:::-;24470:2;24465:3;24461:12;24454:19;;24113:366;;;:::o;24485:419::-;24651:4;24689:2;24678:9;24674:18;24666:26;;24738:9;24732:4;24728:20;24724:1;24713:9;24709:17;24702:47;24766:131;24892:4;24766:131;:::i;:::-;24758:139;;24485:419;;;:::o;24910:222::-;25050:34;25046:1;25038:6;25034:14;25027:58;25119:5;25114:2;25106:6;25102:15;25095:30;24910:222;:::o;25138:366::-;25280:3;25301:67;25365:2;25360:3;25301:67;:::i;:::-;25294:74;;25377:93;25466:3;25377:93;:::i;:::-;25495:2;25490:3;25486:12;25479:19;;25138:366;;;:::o;25510:419::-;25676:4;25714:2;25703:9;25699:18;25691:26;;25763:9;25757:4;25753:20;25749:1;25738:9;25734:17;25727:47;25791:131;25917:4;25791:131;:::i;:::-;25783:139;;25510:419;;;:::o;25935:172::-;26075:24;26071:1;26063:6;26059:14;26052:48;25935:172;:::o;26113:366::-;26255:3;26276:67;26340:2;26335:3;26276:67;:::i;:::-;26269:74;;26352:93;26441:3;26352:93;:::i;:::-;26470:2;26465:3;26461:12;26454:19;;26113:366;;;:::o;26485:419::-;26651:4;26689:2;26678:9;26674:18;26666:26;;26738:9;26732:4;26728:20;26724:1;26713:9;26709:17;26702:47;26766:131;26892:4;26766:131;:::i;:::-;26758:139;;26485:419;;;:::o;26910:297::-;27050:34;27046:1;27038:6;27034:14;27027:58;27119:34;27114:2;27106:6;27102:15;27095:59;27188:11;27183:2;27175:6;27171:15;27164:36;26910:297;:::o;27213:366::-;27355:3;27376:67;27440:2;27435:3;27376:67;:::i;:::-;27369:74;;27452:93;27541:3;27452:93;:::i;:::-;27570:2;27565:3;27561:12;27554:19;;27213:366;;;:::o;27585:419::-;27751:4;27789:2;27778:9;27774:18;27766:26;;27838:9;27832:4;27828:20;27824:1;27813:9;27809:17;27802:47;27866:131;27992:4;27866:131;:::i;:::-;27858:139;;27585:419;;;:::o;28010:240::-;28150:34;28146:1;28138:6;28134:14;28127:58;28219:23;28214:2;28206:6;28202:15;28195:48;28010:240;:::o;28256:366::-;28398:3;28419:67;28483:2;28478:3;28419:67;:::i;:::-;28412:74;;28495:93;28584:3;28495:93;:::i;:::-;28613:2;28608:3;28604:12;28597:19;;28256:366;;;:::o;28628:419::-;28794:4;28832:2;28821:9;28817:18;28809:26;;28881:9;28875:4;28871:20;28867:1;28856:9;28852:17;28845:47;28909:131;29035:4;28909:131;:::i;:::-;28901:139;;28628:419;;;:::o;29053:169::-;29193:21;29189:1;29181:6;29177:14;29170:45;29053:169;:::o;29228:366::-;29370:3;29391:67;29455:2;29450:3;29391:67;:::i;:::-;29384:74;;29467:93;29556:3;29467:93;:::i;:::-;29585:2;29580:3;29576:12;29569:19;;29228:366;;;:::o;29600:419::-;29766:4;29804:2;29793:9;29789:18;29781:26;;29853:9;29847:4;29843:20;29839:1;29828:9;29824:17;29817:47;29881:131;30007:4;29881:131;:::i;:::-;29873:139;;29600:419;;;:::o;30025:241::-;30165:34;30161:1;30153:6;30149:14;30142:58;30234:24;30229:2;30221:6;30217:15;30210:49;30025:241;:::o;30272:366::-;30414:3;30435:67;30499:2;30494:3;30435:67;:::i;:::-;30428:74;;30511:93;30600:3;30511:93;:::i;:::-;30629:2;30624:3;30620:12;30613:19;;30272:366;;;:::o;30644:419::-;30810:4;30848:2;30837:9;30833:18;30825:26;;30897:9;30891:4;30887:20;30883:1;30872:9;30868:17;30861:47;30925:131;31051:4;30925:131;:::i;:::-;30917:139;;30644:419;;;:::o;31069:191::-;31109:4;31129:20;31147:1;31129:20;:::i;:::-;31124:25;;31163:20;31181:1;31163:20;:::i;:::-;31158:25;;31202:1;31199;31196:8;31193:34;;;31207:18;;:::i;:::-;31193:34;31252:1;31249;31245:9;31237:17;;31069:191;;;;:::o;31266:147::-;31367:11;31404:3;31389:18;;31266:147;;;;:::o;31419:114::-;;:::o;31539:398::-;31698:3;31719:83;31800:1;31795:3;31719:83;:::i;:::-;31712:90;;31811:93;31900:3;31811:93;:::i;:::-;31929:1;31924:3;31920:11;31913:18;;31539:398;;;:::o;31943:379::-;32127:3;32149:147;32292:3;32149:147;:::i;:::-;32142:154;;32313:3;32306:10;;31943:379;;;:::o;32328:220::-;32468:34;32464:1;32456:6;32452:14;32445:58;32537:3;32532:2;32524:6;32520:15;32513:28;32328:220;:::o;32554:366::-;32696:3;32717:67;32781:2;32776:3;32717:67;:::i;:::-;32710:74;;32793:93;32882:3;32793:93;:::i;:::-;32911:2;32906:3;32902:12;32895:19;;32554:366;;;:::o;32926:419::-;33092:4;33130:2;33119:9;33115:18;33107:26;;33179:9;33173:4;33169:20;33165:1;33154:9;33150:17;33143:47;33207:131;33333:4;33207:131;:::i;:::-;33199:139;;32926:419;;;:::o;33351:180::-;33399:77;33396:1;33389:88;33496:4;33493:1;33486:15;33520:4;33517:1;33510:15;33537:180;33585:77;33582:1;33575:88;33682:4;33679:1;33672:15;33706:4;33703:1;33696:15;33723:143;33780:5;33811:6;33805:13;33796:22;;33827:33;33854:5;33827:33;:::i;:::-;33723:143;;;;:::o;33872:351::-;33942:6;33991:2;33979:9;33970:7;33966:23;33962:32;33959:119;;;33997:79;;:::i;:::-;33959:119;34117:1;34142:64;34198:7;34189:6;34178:9;34174:22;34142:64;:::i;:::-;34132:74;;34088:128;33872:351;;;;:::o;34229:85::-;34274:7;34303:5;34292:16;;34229:85;;;:::o;34320:158::-;34378:9;34411:61;34429:42;34438:32;34464:5;34438:32;:::i;:::-;34429:42;:::i;:::-;34411:61;:::i;:::-;34398:74;;34320:158;;;:::o;34484:147::-;34579:45;34618:5;34579:45;:::i;:::-;34574:3;34567:58;34484:147;;:::o;34637:114::-;34704:6;34738:5;34732:12;34722:22;;34637:114;;;:::o;34757:184::-;34856:11;34890:6;34885:3;34878:19;34930:4;34925:3;34921:14;34906:29;;34757:184;;;;:::o;34947:132::-;35014:4;35037:3;35029:11;;35067:4;35062:3;35058:14;35050:22;;34947:132;;;:::o;35085:108::-;35162:24;35180:5;35162:24;:::i;:::-;35157:3;35150:37;35085:108;;:::o;35199:179::-;35268:10;35289:46;35331:3;35323:6;35289:46;:::i;:::-;35367:4;35362:3;35358:14;35344:28;;35199:179;;;;:::o;35384:113::-;35454:4;35486;35481:3;35477:14;35469:22;;35384:113;;;:::o;35533:732::-;35652:3;35681:54;35729:5;35681:54;:::i;:::-;35751:86;35830:6;35825:3;35751:86;:::i;:::-;35744:93;;35861:56;35911:5;35861:56;:::i;:::-;35940:7;35971:1;35956:284;35981:6;35978:1;35975:13;35956:284;;;36057:6;36051:13;36084:63;36143:3;36128:13;36084:63;:::i;:::-;36077:70;;36170:60;36223:6;36170:60;:::i;:::-;36160:70;;36016:224;36003:1;36000;35996:9;35991:14;;35956:284;;;35960:14;36256:3;36249:10;;35657:608;;;35533:732;;;;:::o;36271:831::-;36534:4;36572:3;36561:9;36557:19;36549:27;;36586:71;36654:1;36643:9;36639:17;36630:6;36586:71;:::i;:::-;36667:80;36743:2;36732:9;36728:18;36719:6;36667:80;:::i;:::-;36794:9;36788:4;36784:20;36779:2;36768:9;36764:18;36757:48;36822:108;36925:4;36916:6;36822:108;:::i;:::-;36814:116;;36940:72;37008:2;36997:9;36993:18;36984:6;36940:72;:::i;:::-;37022:73;37090:3;37079:9;37075:19;37066:6;37022:73;:::i;:::-;36271:831;;;;;;;;:::o;37108:807::-;37357:4;37395:3;37384:9;37380:19;37372:27;;37409:71;37477:1;37466:9;37462:17;37453:6;37409:71;:::i;:::-;37490:72;37558:2;37547:9;37543:18;37534:6;37490:72;:::i;:::-;37572:80;37648:2;37637:9;37633:18;37624:6;37572:80;:::i;:::-;37662;37738:2;37727:9;37723:18;37714:6;37662:80;:::i;:::-;37752:73;37820:3;37809:9;37805:19;37796:6;37752:73;:::i;:::-;37835;37903:3;37892:9;37888:19;37879:6;37835:73;:::i;:::-;37108:807;;;;;;;;;:::o;37921:143::-;37978:5;38009:6;38003:13;37994:22;;38025:33;38052:5;38025:33;:::i;:::-;37921:143;;;;:::o;38070:663::-;38158:6;38166;38174;38223:2;38211:9;38202:7;38198:23;38194:32;38191:119;;;38229:79;;:::i;:::-;38191:119;38349:1;38374:64;38430:7;38421:6;38410:9;38406:22;38374:64;:::i;:::-;38364:74;;38320:128;38487:2;38513:64;38569:7;38560:6;38549:9;38545:22;38513:64;:::i;:::-;38503:74;;38458:129;38626:2;38652:64;38708:7;38699:6;38688:9;38684:22;38652:64;:::i;:::-;38642:74;;38597:129;38070:663;;;;;:::o

Swarm Source

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