ETH Price: $3,287.43 (+0.24%)
Gas: 5 Gwei

Token

Ishi Inu (ISHI)
 

Overview

Max Total Supply

1,000,000,000 ISHI

Holders

33

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,818,707.783326941535508759 ISHI

Value
$0.00
0x3f328e127a96d9df109654e103e561d416bcefe7
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:
ISHI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed


// ISHI Token website: www.ishitoken.com


pragma solidity 0.8.17;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
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;
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

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


// pragma solidity >=0.5.0;

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 Marketing(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function ttbcurn(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;
}

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 ISHI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Ishi Inu";
    string private _symbol = "ISHI";
    uint8 private _decimals = 18;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    address payable public marketingWallet = payable(0x1cae9E3b88CcDa3fe0fAd5eA413Eb5947E25fa94);
        
    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 0;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _marketingFee = 0;
    uint256 private _previousMarketingFee = _marketingFee;
    
    //Sale fees
    uint256 public _saleTaxFee = 1;
    uint256 public _saleLiquidityFee = 1;
    uint256 public _saleMarketingFee = 1;

    event SwapAndLiquify(
        uint256 tokensIntoLiqudity,
        uint256 ethReceived
    );
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public minimumTokensBeforeSwap = 20000000 * 10**18;
    uint256 public _maxTxAmount = 10000000000 * 10**18;
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {
        _rOwned[owner()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // uniswap v2 router address
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), owner(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function removeAllFee() private 
    {
        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
    }
    
    function restoreAllFee() private {
       _taxFee = _previousTaxFee;
       _liquidityFee = _previousLiquidityFee;
       _marketingFee = _previousMarketingFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

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

        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = minimumTokensBeforeSwap;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the Liquidity token balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); 

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance);
    }

    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();

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        
    }

    //this method is responsible for taking all fee where fee is require to be deducted.
    function _tokenTransfer(address sender, address recipient, uint256 amount) private 
    {
        if(recipient==uniswapV2Pair)
        {
            setAllFees(_saleTaxFee, _saleLiquidityFee,  _saleMarketingFee);
        }
        
        
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {   
           removeAllFee(); 
        }
        else  
        {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        
        

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private 
    {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        (tTransferAmount, rTransferAmount) = takeMarketing(sender, tTransferAmount, rTransferAmount, tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function takeMarketing(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private
    returns (uint256, uint256)
    {
        if(_marketingFee==0) {  return(tTransferAmount, rTransferAmount); }
        uint256 tMarketing = tAmount.div(100).mul(_marketingFee);
        uint256 rMarketing = tMarketing.mul(_getRate());
        rTransferAmount = rTransferAmount.sub(rMarketing);
        tTransferAmount = tTransferAmount.sub(tMarketing);
        _rOwned[marketingWallet] = _rOwned[marketingWallet].add(rMarketing);
        emit Transfer(sender, marketingWallet, tMarketing);
        return(tTransferAmount, rTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setMarketingWallet(address payable newWallet) external onlyOwner() {
        marketingWallet = newWallet;
    }
    
    function setAllFees(uint256 taxFee, uint256 liquidityFee,  uint256 marketingFee) private {
        require(taxFee.add(liquidityFee).add(marketingFee) <= 5, "tax too high");
        _taxFee = taxFee;
        _liquidityFee = liquidityFee;
        _marketingFee = marketingFee;
    }
    
    
    function setBuyFees(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee) 
    external onlyOwner() {
        require(taxFee.add(liquidityFee).add(marketingFee) <= 5, "tax too high");
        setAllFees(taxFee, liquidityFee, marketingFee);
        _previousTaxFee = taxFee;
        _previousLiquidityFee = liquidityFee;
        _previousMarketingFee = marketingFee;
    }
    
    
    function setSaleFees(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee) 
    external onlyOwner() {
        require(taxFee.add(liquidityFee).add(marketingFee) <= 5, "tax too high");
        _saleTaxFee = taxFee;
        _saleLiquidityFee = liquidityFee;
        _saleMarketingFee = marketingFee;
    } 

     function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
        require(_maxTxAmount > totalSupply().div(400), "value too low");
    }    
    
    function setMinimumTokensBeforeSwap(uint256 newAmt) external onlyOwner() {
        minimumTokensBeforeSwap = newAmt;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setSaleFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526b033b2e3c9fd0803ce8000000600555600554600019620000269190620006d6565b6000196200003591906200073d565b6006556040518060400160405280600881526020017f4973686920496e75000000000000000000000000000000000000000000000000815250600890816200007e9190620009e8565b506040518060400160405280600481526020017f495348490000000000000000000000000000000000000000000000000000000081525060099081620000c59190620009e8565b506012600a60006101000a81548160ff021916908360ff160217905550731cae9e3b88ccda3fe0fad5ea413eb5947e25fa94601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060125560125460135560006014556014546015556000601655601654601755600160185560016019556001601a556001601b60016101000a81548160ff0219169083151502179055506a108b2a2c28029094000000601c556b204fce5e3e25026110000000601d55348015620001ae57600080fd5b506000620001c16200066c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600654600b6000620002766200067460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f919062000b39565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cd919062000b39565b6040518363ffffffff1660e01b8152600401620003ec92919062000b7c565b6020604051808303816000875af11580156200040c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000432919062000b39565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000620004c96200067460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005fc6200067460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6005546040516200065d919062000bba565b60405180910390a35062000bd7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620006e3826200069d565b9150620006f0836200069d565b925082620007035762000702620006a7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200074a826200069d565b915062000757836200069d565b92508282039050818111156200077257620007716200070e565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007fa57607f821691505b60208210810362000810576200080f620007b2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200087a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200083b565b6200088686836200083b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008c9620008c3620008bd846200069d565b6200089e565b6200069d565b9050919050565b6000819050919050565b620008e583620008a8565b620008fd620008f482620008d0565b84845462000848565b825550505050565b600090565b6200091462000905565b62000921818484620008da565b505050565b5b8181101562000949576200093d6000826200090a565b60018101905062000927565b5050565b601f8211156200099857620009628162000816565b6200096d846200082b565b810160208510156200097d578190505b620009956200098c856200082b565b83018262000926565b50505b505050565b600082821c905092915050565b6000620009bd600019846008026200099d565b1980831691505092915050565b6000620009d88383620009aa565b9150826002028217905092915050565b620009f38262000778565b67ffffffffffffffff81111562000a0f5762000a0e62000783565b5b62000a1b8254620007e1565b62000a288282856200094d565b600060209050601f83116001811462000a60576000841562000a4b578287015190505b62000a578582620009ca565b86555062000ac7565b601f19841662000a708662000816565b60005b8281101562000a9a5784890151825560018201915060208501945060208101905062000a73565b8683101562000aba578489015162000ab6601f891682620009aa565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b018262000ad4565b9050919050565b62000b138162000af4565b811462000b1f57600080fd5b50565b60008151905062000b338162000b08565b92915050565b60006020828403121562000b525762000b5162000acf565b5b600062000b628482850162000b22565b91505092915050565b62000b768162000af4565b82525050565b600060408201905062000b93600083018562000b6b565b62000ba2602083018462000b6b565b9392505050565b62000bb4816200069d565b82525050565b600060208201905062000bd1600083018462000ba9565b92915050565b615bb18062000be76000396000f3fe60806040526004361061026b5760003560e01c80635d098b3811610144578063a9059cbb116100b6578063dcc1a0911161007a578063dcc1a09114610955578063dd4670641461097e578063dd62ed3e146109a7578063ea2f0b37146109e4578063ec28438a14610a0d578063f2fde38b14610a3657610272565b8063a9059cbb14610870578063aee50b1e146108ad578063b6c52324146108d6578063c49b9a8014610901578063d2d7ad831461092a57610272565b80637d1db4a5116101085780637d1db4a51461075e57806388f82020146107895780638da5cb5b146107c657806395d89b41146107f1578063a457c2d71461081c578063a69df4b51461085957610272565b80635d098b381461068b5780636bc87c3a146106b457806370a08231146106df578063715018a61461071c57806375f0a8741461073357610272565b80633685d419116101dd578063437823ec116101a1578063437823ec146105695780634549b0391461059257806349bd5a5e146105cf5780634a74bb02146105fa57806352390c02146106255780635342acb41461064e57610272565b80633685d4191461048457806339509351146104ad5780633b124fe7146104ea5780633bd5d1731461051557806340615b8b1461053e57610272565b8063170dde6a1161022f578063170dde6a1461035e57806318160ddd1461038957806322976e0d146103b457806323b872dd146103df5780632d8381191461041c578063313ce5671461045957610272565b806306fdde0314610277578063095ea7b3146102a25780630971c53f146102df5780630d075d9c1461030a5780631694505e1461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a5f565b60405161029991906148ed565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c491906149a8565b610af1565b6040516102d69190614a03565b60405180910390f35b3480156102eb57600080fd5b506102f4610b0f565b6040516103019190614a2d565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190614a48565b610b15565b005b34801561033f57600080fd5b50610348610c37565b6040516103559190614afa565b60405180910390f35b34801561036a57600080fd5b50610373610c5d565b6040516103809190614a2d565b60405180910390f35b34801561039557600080fd5b5061039e610c63565b6040516103ab9190614a2d565b60405180910390f35b3480156103c057600080fd5b506103c9610c6d565b6040516103d69190614a2d565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190614b15565b610c73565b6040516104139190614a03565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190614b68565b610d4c565b6040516104509190614a2d565b60405180910390f35b34801561046557600080fd5b5061046e610dba565b60405161047b9190614bb1565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190614bcc565b610dd1565b005b3480156104b957600080fd5b506104d460048036038101906104cf91906149a8565b61111f565b6040516104e19190614a03565b60405180910390f35b3480156104f657600080fd5b506104ff6111d2565b60405161050c9190614a2d565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190614b68565b6111d8565b005b34801561054a57600080fd5b50610553611353565b6040516105609190614a2d565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190614bcc565b611359565b005b34801561059e57600080fd5b506105b960048036038101906105b49190614c25565b611449565b6040516105c69190614a2d565b60405180910390f35b3480156105db57600080fd5b506105e46114cd565b6040516105f19190614c74565b60405180910390f35b34801561060657600080fd5b5061060f6114f3565b60405161061c9190614a03565b60405180910390f35b34801561063157600080fd5b5061064c60048036038101906106479190614bcc565b611506565b005b34801561065a57600080fd5b5061067560048036038101906106709190614bcc565b6117ba565b6040516106829190614a03565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190614ccd565b611810565b005b3480156106c057600080fd5b506106c96118e9565b6040516106d69190614a2d565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190614bcc565b6118ef565b6040516107139190614a2d565b60405180910390f35b34801561072857600080fd5b506107316119da565b005b34801561073f57600080fd5b50610748611b2d565b6040516107559190614d09565b60405180910390f35b34801561076a57600080fd5b50610773611b53565b6040516107809190614a2d565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190614bcc565b611b59565b6040516107bd9190614a03565b60405180910390f35b3480156107d257600080fd5b506107db611baf565b6040516107e89190614c74565b60405180910390f35b3480156107fd57600080fd5b50610806611bd8565b60405161081391906148ed565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e91906149a8565b611c6a565b6040516108509190614a03565b60405180910390f35b34801561086557600080fd5b5061086e611d37565b005b34801561087c57600080fd5b50610897600480360381019061089291906149a8565b611f0b565b6040516108a49190614a03565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190614b68565b611f29565b005b3480156108e257600080fd5b506108eb611fc8565b6040516108f89190614a2d565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190614d24565b611fd2565b005b34801561093657600080fd5b5061093f6120bb565b60405161094c9190614a2d565b60405180910390f35b34801561096157600080fd5b5061097c60048036038101906109779190614a48565b6120c1565b005b34801561098a57600080fd5b506109a560048036038101906109a09190614b68565b6121d8565b005b3480156109b357600080fd5b506109ce60048036038101906109c99190614d51565b61239f565b6040516109db9190614a2d565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a069190614bcc565b612426565b005b348015610a1957600080fd5b50610a346004803603810190610a2f9190614b68565b612516565b005b348015610a4257600080fd5b50610a5d6004803603810190610a589190614bcc565b612614565b005b606060088054610a6e90614dc0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9a90614dc0565b8015610ae75780601f10610abc57610100808354040283529160200191610ae7565b820191906000526020600020905b815481529060010190602001808311610aca57829003601f168201915b5050505050905090565b6000610b05610afe6127d5565b84846127dd565b6001905092915050565b60185481565b610b1d6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190614e3d565b60405180910390fd5b6005610bd182610bc385876129a690919063ffffffff16565b6129a690919063ffffffff16565b1115610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990614ea9565b60405180910390fd5b610c1d838383612a04565b826013819055508160158190555080601781905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6000600554905090565b60165481565b6000610c80848484612a86565b610d4184610c8c6127d5565b610d3c85604051806060016040528060288152602001615b2f60289139600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cf26127d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c009092919063ffffffff16565b6127dd565b600190509392505050565b6000600654821115610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90614f3b565b60405180910390fd5b6000610d9d612c64565b9050610db28184612c8f90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b610dd96127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90614e3d565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee990614fa7565b60405180910390fd5b60005b60108054905081101561111b578173ffffffffffffffffffffffffffffffffffffffff1660108281548110610f2d57610f2c614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111085760106001601080549050610f879190615025565b81548110610f9857610f97614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660108281548110610fd757610fd6614fc7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060108054806110ce576110cd615059565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561111b565b808061111390615088565b915050610ef5565b5050565b60006111c861112c6127d5565b846111c385600d600061113d6127d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b6127dd565b6001905092915050565b60125481565b60006111e26127d5565b9050600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890615142565b60405180910390fd5b600061127c83612cd9565b505050505090506112d581600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061132d81600654612d3590919063ffffffff16565b600681905550611348836007546129a690919063ffffffff16565b600781905550505050565b601a5481565b6113616127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590614e3d565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600554831115611490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611487906151ae565b60405180910390fd5b816114b05760006114a084612cd9565b50505050509050809150506114c7565b60006114bb84612cd9565b50505050915050809150505b92915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60019054906101000a900460ff1681565b61150e6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290614e3d565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90614fa7565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116fc576116b8600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4c565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506010819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118186127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c90614e3d565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198a57600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119d5565b6119d2600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4c565b90505b919050565b6119e26127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614e3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611be790614dc0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1390614dc0565b8015611c605780601f10611c3557610100808354040283529160200191611c60565b820191906000526020600020905b815481529060010190602001808311611c4357829003601f168201915b5050505050905090565b6000611d2d611c776127d5565b84611d2885604051806060016040528060258152602001615b5760259139600d6000611ca16127d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c009092919063ffffffff16565b6127dd565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90615240565b60405180910390fd5b6002544211611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e02906152ac565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611f1f611f186127d5565b8484612a86565b6001905092915050565b611f316127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590614e3d565b60405180910390fd5b80601c8190555050565b6000600254905090565b611fda6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90614e3d565b60405180910390fd5b80601b60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120b09190614a03565b60405180910390a150565b601c5481565b6120c96127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90614e3d565b60405180910390fd5b600561217d8261216f85876129a690919063ffffffff16565b6129a690919063ffffffff16565b11156121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590614ea9565b60405180910390fd5b826018819055508160198190555080601a81905550505050565b6121e06127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614e3d565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261231b91906152cc565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61242e6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290614e3d565b60405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61251e6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a290614e3d565b60405180910390fd5b80601d819055506125ce6101906125c0610c63565b612c8f90919063ffffffff16565b601d5411612611576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126089061534c565b60405180910390fd5b50565b61261c6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a090614e3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270f906153de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390615470565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290615502565b60405180910390fd5b80600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129999190614a2d565b60405180910390a3505050565b60008082846129b591906152cc565b9050838110156129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f19061556e565b60405180910390fd5b8091505092915050565b6005612a2b82612a1d85876129a690919063ffffffff16565b6129a690919063ffffffff16565b1115612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614ea9565b60405180910390fd5b826012819055508160148190555080601681905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aec90615600565b60405180910390fd5b60008111612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f90615692565b60405180910390fd5b6000612b43306118ef565b90506000601c548210159050808015612b695750601b60009054906101000a900460ff16155b8015612bc25750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612bda5750601b60019054906101000a900460ff165b15612bee57601c549150612bed82612d7f565b5b612bf9858585612e53565b5050505050565b6000838311158290612c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3f91906148ed565b60405180910390fd5b5060008385612c579190615025565b9050809150509392505050565b6000806000612c716132af565b91509150612c888183612c8f90919063ffffffff16565b9250505090565b6000612cd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613562565b905092915050565b6000806000806000806000806000612cf08a6135c5565b9250925092506000806000612d0e8d8686612d09612c64565b61361f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612d7783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c00565b905092915050565b6001601b60006101000a81548160ff0219169083151502179055506000612db0600283612c8f90919063ffffffff16565b90506000612dc78284612d3590919063ffffffff16565b90506000479050612dd7836136a8565b6000612dec8247612d3590919063ffffffff16565b9050612df88382613921565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612e299291906156b2565b60405180910390a1505050506000601b60006101000a81548160ff02191690831515021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eba57612eb9601854601954601a54612a04565b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f5b5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f6d57612f686139d9565b612fb3565b601d54811115612fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa99061574d565b60405180910390fd5b5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130565750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306b576130668383836139f3565b6132a2565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561310e5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131235761311e838383613c53565b6132a1565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131c75750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131dc576131d7838383613eb3565b6132a0565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327e5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132935761328e838383614092565b61329f565b61329e838383613eb3565b5b5b5b5b6132aa614387565b505050565b600080600060065490506000600554905060005b6010805490508110156135255782600b6000601084815481106132e9576132e8614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806133d7575081600c60006010848154811061336f5761336e614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156133ee576006546005549450945050505061355e565b61347e600b60006010848154811061340957613408614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612d3590919063ffffffff16565b9250613510600c60006010848154811061349b5761349a614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612d3590919063ffffffff16565b9150808061351d90615088565b9150506132c3565b5061353d600554600654612c8f90919063ffffffff16565b8210156135555760065460055493509350505061355e565b81819350935050505b9091565b600080831182906135a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a091906148ed565b60405180910390fd5b50600083856135b8919061579c565b9050809150509392505050565b6000806000806135d4856143a4565b905060006135e1866143d5565b9050600061360a826135fc858a612d3590919063ffffffff16565b612d3590919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613638858961440690919063ffffffff16565b9050600061364f868961440690919063ffffffff16565b90506000613666878961440690919063ffffffff16565b9050600061368f826136818587612d3590919063ffffffff16565b612d3590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156136c5576136c46157cd565b5b6040519080825280602002602001820160405280156136f35781602001602082028036833780820191505090505b509050308160008151811061370b5761370a614fc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d69190615811565b816001815181106137ea576137e9614fc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161385130600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661239f565b10156138875761388630600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196127dd565b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138eb959493929190615937565b600060405180830381600087803b15801561390557600080fd5b505af1158015613919573d6000803e3d6000fd5b505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061396d611baf565b426040518863ffffffff1660e01b815260040161398f96959493929190615991565b60606040518083038185885af11580156139ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139d29190615a07565b5050505050565b600060128190555060006014819055506000601681905550565b600080600080600080613a0587612cd9565b955095509550955095509550613a6387600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613af886600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b8d85600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bd981614480565b613be38483614625565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c409190614a2d565b60405180910390a3505050505050505050565b600080600080600080613c6587612cd9565b955095509550955095509550613cc386600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d5883600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ded85600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e3981614480565b613e438483614625565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ea09190614a2d565b60405180910390a3505050505050505050565b600080600080600080613ec587612cd9565b955095509550955095509550613edd8984878a61465f565b8096508194505050613f3786600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fcc85600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061401881614480565b6140228483614625565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161407f9190614a2d565b60405180910390a3505050505050505050565b6000806000806000806140a487612cd9565b95509550955095509550955061410287600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061419786600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061422c83600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c185600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061430d81614480565b6143178483614625565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143749190614a2d565b60405180910390a3505050505050505050565b601354601281905550601554601481905550601754601681905550565b60006143ce60646143c06012548561440690919063ffffffff16565b612c8f90919063ffffffff16565b9050919050565b60006143ff60646143f16014548561440690919063ffffffff16565b612c8f90919063ffffffff16565b9050919050565b6000808303614418576000905061447a565b600082846144269190615a5a565b9050828482614435919061579c565b14614475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161446c90615b0e565b60405180910390fd5b809150505b92915050565b600061448a612c64565b905060006144a1828461440690919063ffffffff16565b90506144f581600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614620576145dc83600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61463a82600654612d3590919063ffffffff16565b600681905550614655816007546129a690919063ffffffff16565b6007819055505050565b60008060006016540361467757848491509150614854565b60006146a1601654614693606487612c8f90919063ffffffff16565b61440690919063ffffffff16565b905060006146bf6146b0612c64565b8361440690919063ffffffff16565b90506146d48187612d3590919063ffffffff16565b95506146e98288612d3590919063ffffffff16565b965061475f81600b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516148439190614a2d565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561489757808201518184015260208101905061487c565b60008484015250505050565b6000601f19601f8301169050919050565b60006148bf8261485d565b6148c98185614868565b93506148d9818560208601614879565b6148e2816148a3565b840191505092915050565b6000602082019050818103600083015261490781846148b4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061493f82614914565b9050919050565b61494f81614934565b811461495a57600080fd5b50565b60008135905061496c81614946565b92915050565b6000819050919050565b61498581614972565b811461499057600080fd5b50565b6000813590506149a28161497c565b92915050565b600080604083850312156149bf576149be61490f565b5b60006149cd8582860161495d565b92505060206149de85828601614993565b9150509250929050565b60008115159050919050565b6149fd816149e8565b82525050565b6000602082019050614a1860008301846149f4565b92915050565b614a2781614972565b82525050565b6000602082019050614a426000830184614a1e565b92915050565b600080600060608486031215614a6157614a6061490f565b5b6000614a6f86828701614993565b9350506020614a8086828701614993565b9250506040614a9186828701614993565b9150509250925092565b6000819050919050565b6000614ac0614abb614ab684614914565b614a9b565b614914565b9050919050565b6000614ad282614aa5565b9050919050565b6000614ae482614ac7565b9050919050565b614af481614ad9565b82525050565b6000602082019050614b0f6000830184614aeb565b92915050565b600080600060608486031215614b2e57614b2d61490f565b5b6000614b3c8682870161495d565b9350506020614b4d8682870161495d565b9250506040614b5e86828701614993565b9150509250925092565b600060208284031215614b7e57614b7d61490f565b5b6000614b8c84828501614993565b91505092915050565b600060ff82169050919050565b614bab81614b95565b82525050565b6000602082019050614bc66000830184614ba2565b92915050565b600060208284031215614be257614be161490f565b5b6000614bf08482850161495d565b91505092915050565b614c02816149e8565b8114614c0d57600080fd5b50565b600081359050614c1f81614bf9565b92915050565b60008060408385031215614c3c57614c3b61490f565b5b6000614c4a85828601614993565b9250506020614c5b85828601614c10565b9150509250929050565b614c6e81614934565b82525050565b6000602082019050614c896000830184614c65565b92915050565b6000614c9a82614914565b9050919050565b614caa81614c8f565b8114614cb557600080fd5b50565b600081359050614cc781614ca1565b92915050565b600060208284031215614ce357614ce261490f565b5b6000614cf184828501614cb8565b91505092915050565b614d0381614c8f565b82525050565b6000602082019050614d1e6000830184614cfa565b92915050565b600060208284031215614d3a57614d3961490f565b5b6000614d4884828501614c10565b91505092915050565b60008060408385031215614d6857614d6761490f565b5b6000614d768582860161495d565b9250506020614d878582860161495d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614dd857607f821691505b602082108103614deb57614dea614d91565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e27602083614868565b9150614e3282614df1565b602082019050919050565b60006020820190508181036000830152614e5681614e1a565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000614e93600c83614868565b9150614e9e82614e5d565b602082019050919050565b60006020820190508181036000830152614ec281614e86565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614f25602a83614868565b9150614f3082614ec9565b604082019050919050565b60006020820190508181036000830152614f5481614f18565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614f91601b83614868565b9150614f9c82614f5b565b602082019050919050565b60006020820190508181036000830152614fc081614f84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061503082614972565b915061503b83614972565b925082820390508181111561505357615052614ff6565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061509382614972565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150c5576150c4614ff6565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061512c602c83614868565b9150615137826150d0565b604082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615198601f83614868565b91506151a382615162565b602082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061522a602383614868565b9150615235826151ce565b604082019050919050565b600060208201905081810360008301526152598161521d565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615296601f83614868565b91506152a182615260565b602082019050919050565b600060208201905081810360008301526152c581615289565b9050919050565b60006152d782614972565b91506152e283614972565b92508282019050808211156152fa576152f9614ff6565b5b92915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000615336600d83614868565b915061534182615300565b602082019050919050565b6000602082019050818103600083015261536581615329565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153c8602683614868565b91506153d38261536c565b604082019050919050565b600060208201905081810360008301526153f7816153bb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061545a602483614868565b9150615465826153fe565b604082019050919050565b600060208201905081810360008301526154898161544d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154ec602283614868565b91506154f782615490565b604082019050919050565b6000602082019050818103600083015261551b816154df565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615558601b83614868565b915061556382615522565b602082019050919050565b600060208201905081810360008301526155878161554b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155ea602583614868565b91506155f58261558e565b604082019050919050565b60006020820190508181036000830152615619816155dd565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061567c602983614868565b915061568782615620565b604082019050919050565b600060208201905081810360008301526156ab8161566f565b9050919050565b60006040820190506156c76000830185614a1e565b6156d46020830184614a1e565b9392505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615737602883614868565b9150615742826156db565b604082019050919050565b600060208201905081810360008301526157668161572a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006157a782614972565b91506157b283614972565b9250826157c2576157c161576d565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061580b81614946565b92915050565b6000602082840312156158275761582661490f565b5b6000615835848285016157fc565b91505092915050565b6000819050919050565b600061586361585e6158598461583e565b614a9b565b614972565b9050919050565b61587381615848565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6158ae81614934565b82525050565b60006158c083836158a5565b60208301905092915050565b6000602082019050919050565b60006158e482615879565b6158ee8185615884565b93506158f983615895565b8060005b8381101561592a57815161591188826158b4565b975061591c836158cc565b9250506001810190506158fd565b5085935050505092915050565b600060a08201905061594c6000830188614a1e565b615959602083018761586a565b818103604083015261596b81866158d9565b905061597a6060830185614c65565b6159876080830184614a1e565b9695505050505050565b600060c0820190506159a66000830189614c65565b6159b36020830188614a1e565b6159c0604083018761586a565b6159cd606083018661586a565b6159da6080830185614c65565b6159e760a0830184614a1e565b979650505050505050565b600081519050615a018161497c565b92915050565b600080600060608486031215615a2057615a1f61490f565b5b6000615a2e868287016159f2565b9350506020615a3f868287016159f2565b9250506040615a50868287016159f2565b9150509250925092565b6000615a6582614972565b9150615a7083614972565b9250828202615a7e81614972565b91508282048414831517615a9557615a94614ff6565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615af8602183614868565b9150615b0382615a9c565b604082019050919050565b60006020820190508181036000830152615b2781615aeb565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f4922f6bbde653078b90129dc0c3257968c084e0cb0197065a3414f8cff752064736f6c63430008110033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80635d098b3811610144578063a9059cbb116100b6578063dcc1a0911161007a578063dcc1a09114610955578063dd4670641461097e578063dd62ed3e146109a7578063ea2f0b37146109e4578063ec28438a14610a0d578063f2fde38b14610a3657610272565b8063a9059cbb14610870578063aee50b1e146108ad578063b6c52324146108d6578063c49b9a8014610901578063d2d7ad831461092a57610272565b80637d1db4a5116101085780637d1db4a51461075e57806388f82020146107895780638da5cb5b146107c657806395d89b41146107f1578063a457c2d71461081c578063a69df4b51461085957610272565b80635d098b381461068b5780636bc87c3a146106b457806370a08231146106df578063715018a61461071c57806375f0a8741461073357610272565b80633685d419116101dd578063437823ec116101a1578063437823ec146105695780634549b0391461059257806349bd5a5e146105cf5780634a74bb02146105fa57806352390c02146106255780635342acb41461064e57610272565b80633685d4191461048457806339509351146104ad5780633b124fe7146104ea5780633bd5d1731461051557806340615b8b1461053e57610272565b8063170dde6a1161022f578063170dde6a1461035e57806318160ddd1461038957806322976e0d146103b457806323b872dd146103df5780632d8381191461041c578063313ce5671461045957610272565b806306fdde0314610277578063095ea7b3146102a25780630971c53f146102df5780630d075d9c1461030a5780631694505e1461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a5f565b60405161029991906148ed565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c491906149a8565b610af1565b6040516102d69190614a03565b60405180910390f35b3480156102eb57600080fd5b506102f4610b0f565b6040516103019190614a2d565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190614a48565b610b15565b005b34801561033f57600080fd5b50610348610c37565b6040516103559190614afa565b60405180910390f35b34801561036a57600080fd5b50610373610c5d565b6040516103809190614a2d565b60405180910390f35b34801561039557600080fd5b5061039e610c63565b6040516103ab9190614a2d565b60405180910390f35b3480156103c057600080fd5b506103c9610c6d565b6040516103d69190614a2d565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190614b15565b610c73565b6040516104139190614a03565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190614b68565b610d4c565b6040516104509190614a2d565b60405180910390f35b34801561046557600080fd5b5061046e610dba565b60405161047b9190614bb1565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190614bcc565b610dd1565b005b3480156104b957600080fd5b506104d460048036038101906104cf91906149a8565b61111f565b6040516104e19190614a03565b60405180910390f35b3480156104f657600080fd5b506104ff6111d2565b60405161050c9190614a2d565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190614b68565b6111d8565b005b34801561054a57600080fd5b50610553611353565b6040516105609190614a2d565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190614bcc565b611359565b005b34801561059e57600080fd5b506105b960048036038101906105b49190614c25565b611449565b6040516105c69190614a2d565b60405180910390f35b3480156105db57600080fd5b506105e46114cd565b6040516105f19190614c74565b60405180910390f35b34801561060657600080fd5b5061060f6114f3565b60405161061c9190614a03565b60405180910390f35b34801561063157600080fd5b5061064c60048036038101906106479190614bcc565b611506565b005b34801561065a57600080fd5b5061067560048036038101906106709190614bcc565b6117ba565b6040516106829190614a03565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190614ccd565b611810565b005b3480156106c057600080fd5b506106c96118e9565b6040516106d69190614a2d565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190614bcc565b6118ef565b6040516107139190614a2d565b60405180910390f35b34801561072857600080fd5b506107316119da565b005b34801561073f57600080fd5b50610748611b2d565b6040516107559190614d09565b60405180910390f35b34801561076a57600080fd5b50610773611b53565b6040516107809190614a2d565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190614bcc565b611b59565b6040516107bd9190614a03565b60405180910390f35b3480156107d257600080fd5b506107db611baf565b6040516107e89190614c74565b60405180910390f35b3480156107fd57600080fd5b50610806611bd8565b60405161081391906148ed565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e91906149a8565b611c6a565b6040516108509190614a03565b60405180910390f35b34801561086557600080fd5b5061086e611d37565b005b34801561087c57600080fd5b50610897600480360381019061089291906149a8565b611f0b565b6040516108a49190614a03565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190614b68565b611f29565b005b3480156108e257600080fd5b506108eb611fc8565b6040516108f89190614a2d565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190614d24565b611fd2565b005b34801561093657600080fd5b5061093f6120bb565b60405161094c9190614a2d565b60405180910390f35b34801561096157600080fd5b5061097c60048036038101906109779190614a48565b6120c1565b005b34801561098a57600080fd5b506109a560048036038101906109a09190614b68565b6121d8565b005b3480156109b357600080fd5b506109ce60048036038101906109c99190614d51565b61239f565b6040516109db9190614a2d565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a069190614bcc565b612426565b005b348015610a1957600080fd5b50610a346004803603810190610a2f9190614b68565b612516565b005b348015610a4257600080fd5b50610a5d6004803603810190610a589190614bcc565b612614565b005b606060088054610a6e90614dc0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9a90614dc0565b8015610ae75780601f10610abc57610100808354040283529160200191610ae7565b820191906000526020600020905b815481529060010190602001808311610aca57829003601f168201915b5050505050905090565b6000610b05610afe6127d5565b84846127dd565b6001905092915050565b60185481565b610b1d6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190614e3d565b60405180910390fd5b6005610bd182610bc385876129a690919063ffffffff16565b6129a690919063ffffffff16565b1115610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990614ea9565b60405180910390fd5b610c1d838383612a04565b826013819055508160158190555080601781905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6000600554905090565b60165481565b6000610c80848484612a86565b610d4184610c8c6127d5565b610d3c85604051806060016040528060288152602001615b2f60289139600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cf26127d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c009092919063ffffffff16565b6127dd565b600190509392505050565b6000600654821115610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90614f3b565b60405180910390fd5b6000610d9d612c64565b9050610db28184612c8f90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b610dd96127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90614e3d565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee990614fa7565b60405180910390fd5b60005b60108054905081101561111b578173ffffffffffffffffffffffffffffffffffffffff1660108281548110610f2d57610f2c614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111085760106001601080549050610f879190615025565b81548110610f9857610f97614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660108281548110610fd757610fd6614fc7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060108054806110ce576110cd615059565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561111b565b808061111390615088565b915050610ef5565b5050565b60006111c861112c6127d5565b846111c385600d600061113d6127d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b6127dd565b6001905092915050565b60125481565b60006111e26127d5565b9050600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890615142565b60405180910390fd5b600061127c83612cd9565b505050505090506112d581600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061132d81600654612d3590919063ffffffff16565b600681905550611348836007546129a690919063ffffffff16565b600781905550505050565b601a5481565b6113616127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590614e3d565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600554831115611490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611487906151ae565b60405180910390fd5b816114b05760006114a084612cd9565b50505050509050809150506114c7565b60006114bb84612cd9565b50505050915050809150505b92915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60019054906101000a900460ff1681565b61150e6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290614e3d565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90614fa7565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116fc576116b8600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4c565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506010819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118186127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c90614e3d565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198a57600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119d5565b6119d2600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4c565b90505b919050565b6119e26127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614e3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611be790614dc0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1390614dc0565b8015611c605780601f10611c3557610100808354040283529160200191611c60565b820191906000526020600020905b815481529060010190602001808311611c4357829003601f168201915b5050505050905090565b6000611d2d611c776127d5565b84611d2885604051806060016040528060258152602001615b5760259139600d6000611ca16127d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c009092919063ffffffff16565b6127dd565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90615240565b60405180910390fd5b6002544211611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e02906152ac565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611f1f611f186127d5565b8484612a86565b6001905092915050565b611f316127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590614e3d565b60405180910390fd5b80601c8190555050565b6000600254905090565b611fda6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90614e3d565b60405180910390fd5b80601b60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120b09190614a03565b60405180910390a150565b601c5481565b6120c96127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90614e3d565b60405180910390fd5b600561217d8261216f85876129a690919063ffffffff16565b6129a690919063ffffffff16565b11156121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590614ea9565b60405180910390fd5b826018819055508160198190555080601a81905550505050565b6121e06127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614e3d565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261231b91906152cc565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61242e6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290614e3d565b60405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61251e6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a290614e3d565b60405180910390fd5b80601d819055506125ce6101906125c0610c63565b612c8f90919063ffffffff16565b601d5411612611576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126089061534c565b60405180910390fd5b50565b61261c6127d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a090614e3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270f906153de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390615470565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290615502565b60405180910390fd5b80600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129999190614a2d565b60405180910390a3505050565b60008082846129b591906152cc565b9050838110156129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f19061556e565b60405180910390fd5b8091505092915050565b6005612a2b82612a1d85876129a690919063ffffffff16565b6129a690919063ffffffff16565b1115612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614ea9565b60405180910390fd5b826012819055508160148190555080601681905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aec90615600565b60405180910390fd5b60008111612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f90615692565b60405180910390fd5b6000612b43306118ef565b90506000601c548210159050808015612b695750601b60009054906101000a900460ff16155b8015612bc25750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612bda5750601b60019054906101000a900460ff165b15612bee57601c549150612bed82612d7f565b5b612bf9858585612e53565b5050505050565b6000838311158290612c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3f91906148ed565b60405180910390fd5b5060008385612c579190615025565b9050809150509392505050565b6000806000612c716132af565b91509150612c888183612c8f90919063ffffffff16565b9250505090565b6000612cd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613562565b905092915050565b6000806000806000806000806000612cf08a6135c5565b9250925092506000806000612d0e8d8686612d09612c64565b61361f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612d7783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c00565b905092915050565b6001601b60006101000a81548160ff0219169083151502179055506000612db0600283612c8f90919063ffffffff16565b90506000612dc78284612d3590919063ffffffff16565b90506000479050612dd7836136a8565b6000612dec8247612d3590919063ffffffff16565b9050612df88382613921565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612e299291906156b2565b60405180910390a1505050506000601b60006101000a81548160ff02191690831515021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eba57612eb9601854601954601a54612a04565b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f5b5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f6d57612f686139d9565b612fb3565b601d54811115612fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa99061574d565b60405180910390fd5b5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130565750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306b576130668383836139f3565b6132a2565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561310e5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131235761311e838383613c53565b6132a1565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131c75750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131dc576131d7838383613eb3565b6132a0565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327e5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132935761328e838383614092565b61329f565b61329e838383613eb3565b5b5b5b5b6132aa614387565b505050565b600080600060065490506000600554905060005b6010805490508110156135255782600b6000601084815481106132e9576132e8614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806133d7575081600c60006010848154811061336f5761336e614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156133ee576006546005549450945050505061355e565b61347e600b60006010848154811061340957613408614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612d3590919063ffffffff16565b9250613510600c60006010848154811061349b5761349a614fc7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612d3590919063ffffffff16565b9150808061351d90615088565b9150506132c3565b5061353d600554600654612c8f90919063ffffffff16565b8210156135555760065460055493509350505061355e565b81819350935050505b9091565b600080831182906135a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a091906148ed565b60405180910390fd5b50600083856135b8919061579c565b9050809150509392505050565b6000806000806135d4856143a4565b905060006135e1866143d5565b9050600061360a826135fc858a612d3590919063ffffffff16565b612d3590919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613638858961440690919063ffffffff16565b9050600061364f868961440690919063ffffffff16565b90506000613666878961440690919063ffffffff16565b9050600061368f826136818587612d3590919063ffffffff16565b612d3590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156136c5576136c46157cd565b5b6040519080825280602002602001820160405280156136f35781602001602082028036833780820191505090505b509050308160008151811061370b5761370a614fc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d69190615811565b816001815181106137ea576137e9614fc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161385130600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661239f565b10156138875761388630600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196127dd565b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138eb959493929190615937565b600060405180830381600087803b15801561390557600080fd5b505af1158015613919573d6000803e3d6000fd5b505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061396d611baf565b426040518863ffffffff1660e01b815260040161398f96959493929190615991565b60606040518083038185885af11580156139ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139d29190615a07565b5050505050565b600060128190555060006014819055506000601681905550565b600080600080600080613a0587612cd9565b955095509550955095509550613a6387600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613af886600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b8d85600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bd981614480565b613be38483614625565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c409190614a2d565b60405180910390a3505050505050505050565b600080600080600080613c6587612cd9565b955095509550955095509550613cc386600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d5883600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ded85600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e3981614480565b613e438483614625565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ea09190614a2d565b60405180910390a3505050505050505050565b600080600080600080613ec587612cd9565b955095509550955095509550613edd8984878a61465f565b8096508194505050613f3786600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fcc85600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061401881614480565b6140228483614625565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161407f9190614a2d565b60405180910390a3505050505050505050565b6000806000806000806140a487612cd9565b95509550955095509550955061410287600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061419786600b60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3590919063ffffffff16565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061422c83600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c185600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061430d81614480565b6143178483614625565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143749190614a2d565b60405180910390a3505050505050505050565b601354601281905550601554601481905550601754601681905550565b60006143ce60646143c06012548561440690919063ffffffff16565b612c8f90919063ffffffff16565b9050919050565b60006143ff60646143f16014548561440690919063ffffffff16565b612c8f90919063ffffffff16565b9050919050565b6000808303614418576000905061447a565b600082846144269190615a5a565b9050828482614435919061579c565b14614475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161446c90615b0e565b60405180910390fd5b809150505b92915050565b600061448a612c64565b905060006144a1828461440690919063ffffffff16565b90506144f581600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614620576145dc83600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61463a82600654612d3590919063ffffffff16565b600681905550614655816007546129a690919063ffffffff16565b6007819055505050565b60008060006016540361467757848491509150614854565b60006146a1601654614693606487612c8f90919063ffffffff16565b61440690919063ffffffff16565b905060006146bf6146b0612c64565b8361440690919063ffffffff16565b90506146d48187612d3590919063ffffffff16565b95506146e98288612d3590919063ffffffff16565b965061475f81600b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129a690919063ffffffff16565b600b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516148439190614a2d565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561489757808201518184015260208101905061487c565b60008484015250505050565b6000601f19601f8301169050919050565b60006148bf8261485d565b6148c98185614868565b93506148d9818560208601614879565b6148e2816148a3565b840191505092915050565b6000602082019050818103600083015261490781846148b4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061493f82614914565b9050919050565b61494f81614934565b811461495a57600080fd5b50565b60008135905061496c81614946565b92915050565b6000819050919050565b61498581614972565b811461499057600080fd5b50565b6000813590506149a28161497c565b92915050565b600080604083850312156149bf576149be61490f565b5b60006149cd8582860161495d565b92505060206149de85828601614993565b9150509250929050565b60008115159050919050565b6149fd816149e8565b82525050565b6000602082019050614a1860008301846149f4565b92915050565b614a2781614972565b82525050565b6000602082019050614a426000830184614a1e565b92915050565b600080600060608486031215614a6157614a6061490f565b5b6000614a6f86828701614993565b9350506020614a8086828701614993565b9250506040614a9186828701614993565b9150509250925092565b6000819050919050565b6000614ac0614abb614ab684614914565b614a9b565b614914565b9050919050565b6000614ad282614aa5565b9050919050565b6000614ae482614ac7565b9050919050565b614af481614ad9565b82525050565b6000602082019050614b0f6000830184614aeb565b92915050565b600080600060608486031215614b2e57614b2d61490f565b5b6000614b3c8682870161495d565b9350506020614b4d8682870161495d565b9250506040614b5e86828701614993565b9150509250925092565b600060208284031215614b7e57614b7d61490f565b5b6000614b8c84828501614993565b91505092915050565b600060ff82169050919050565b614bab81614b95565b82525050565b6000602082019050614bc66000830184614ba2565b92915050565b600060208284031215614be257614be161490f565b5b6000614bf08482850161495d565b91505092915050565b614c02816149e8565b8114614c0d57600080fd5b50565b600081359050614c1f81614bf9565b92915050565b60008060408385031215614c3c57614c3b61490f565b5b6000614c4a85828601614993565b9250506020614c5b85828601614c10565b9150509250929050565b614c6e81614934565b82525050565b6000602082019050614c896000830184614c65565b92915050565b6000614c9a82614914565b9050919050565b614caa81614c8f565b8114614cb557600080fd5b50565b600081359050614cc781614ca1565b92915050565b600060208284031215614ce357614ce261490f565b5b6000614cf184828501614cb8565b91505092915050565b614d0381614c8f565b82525050565b6000602082019050614d1e6000830184614cfa565b92915050565b600060208284031215614d3a57614d3961490f565b5b6000614d4884828501614c10565b91505092915050565b60008060408385031215614d6857614d6761490f565b5b6000614d768582860161495d565b9250506020614d878582860161495d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614dd857607f821691505b602082108103614deb57614dea614d91565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e27602083614868565b9150614e3282614df1565b602082019050919050565b60006020820190508181036000830152614e5681614e1a565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000614e93600c83614868565b9150614e9e82614e5d565b602082019050919050565b60006020820190508181036000830152614ec281614e86565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614f25602a83614868565b9150614f3082614ec9565b604082019050919050565b60006020820190508181036000830152614f5481614f18565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614f91601b83614868565b9150614f9c82614f5b565b602082019050919050565b60006020820190508181036000830152614fc081614f84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061503082614972565b915061503b83614972565b925082820390508181111561505357615052614ff6565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061509382614972565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150c5576150c4614ff6565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061512c602c83614868565b9150615137826150d0565b604082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615198601f83614868565b91506151a382615162565b602082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061522a602383614868565b9150615235826151ce565b604082019050919050565b600060208201905081810360008301526152598161521d565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615296601f83614868565b91506152a182615260565b602082019050919050565b600060208201905081810360008301526152c581615289565b9050919050565b60006152d782614972565b91506152e283614972565b92508282019050808211156152fa576152f9614ff6565b5b92915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000615336600d83614868565b915061534182615300565b602082019050919050565b6000602082019050818103600083015261536581615329565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153c8602683614868565b91506153d38261536c565b604082019050919050565b600060208201905081810360008301526153f7816153bb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061545a602483614868565b9150615465826153fe565b604082019050919050565b600060208201905081810360008301526154898161544d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154ec602283614868565b91506154f782615490565b604082019050919050565b6000602082019050818103600083015261551b816154df565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615558601b83614868565b915061556382615522565b602082019050919050565b600060208201905081810360008301526155878161554b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155ea602583614868565b91506155f58261558e565b604082019050919050565b60006020820190508181036000830152615619816155dd565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061567c602983614868565b915061568782615620565b604082019050919050565b600060208201905081810360008301526156ab8161566f565b9050919050565b60006040820190506156c76000830185614a1e565b6156d46020830184614a1e565b9392505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615737602883614868565b9150615742826156db565b604082019050919050565b600060208201905081810360008301526157668161572a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006157a782614972565b91506157b283614972565b9250826157c2576157c161576d565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061580b81614946565b92915050565b6000602082840312156158275761582661490f565b5b6000615835848285016157fc565b91505092915050565b6000819050919050565b600061586361585e6158598461583e565b614a9b565b614972565b9050919050565b61587381615848565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6158ae81614934565b82525050565b60006158c083836158a5565b60208301905092915050565b6000602082019050919050565b60006158e482615879565b6158ee8185615884565b93506158f983615895565b8060005b8381101561592a57815161591188826158b4565b975061591c836158cc565b9250506001810190506158fd565b5085935050505092915050565b600060a08201905061594c6000830188614a1e565b615959602083018761586a565b818103604083015261596b81866158d9565b905061597a6060830185614c65565b6159876080830184614a1e565b9695505050505050565b600060c0820190506159a66000830189614c65565b6159b36020830188614a1e565b6159c0604083018761586a565b6159cd606083018661586a565b6159da6080830185614c65565b6159e760a0830184614a1e565b979650505050505050565b600081519050615a018161497c565b92915050565b600080600060608486031215615a2057615a1f61490f565b5b6000615a2e868287016159f2565b9350506020615a3f868287016159f2565b9250506040615a50868287016159f2565b9150509250925092565b6000615a6582614972565b9150615a7083614972565b9250828202615a7e81614972565b91508282048414831517615a9557615a94614ff6565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615af8602183614868565b9150615b0382615a9c565b604082019050919050565b60006020820190508181036000830152615b2781615aeb565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f4922f6bbde653078b90129dc0c3257968c084e0cb0197065a3414f8cff752064736f6c63430008110033

Deployed Bytecode Sourcemap

25558:19546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28348:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29260:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26812:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43770:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25674:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26849:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28625:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26690:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29429:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31210:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28534:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31812:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29750:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26502:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30381:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26892:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43088:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30766:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25723:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27072:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31471:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36083:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43333:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26589:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28728:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16258:148;;;;;;;;;;;;;:::i;:::-;;26393:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27190:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30253:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15615:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28439:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29976:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17280:305;;;;;;;;;;;;;:::i;:::-;;28934:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44699:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16813:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44831:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27125:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44172:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16978:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29109:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43211:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44498:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16561:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28348:83;28385:13;28418:5;28411:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28348:83;:::o;29260:161::-;29335:4;29352:39;29361:12;:10;:12::i;:::-;29375:7;29384:6;29352:8;:39::i;:::-;29409:4;29402:11;;29260:161;;;;:::o;26812:30::-;;;;:::o;43770:384::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43942:1:::1;43896:42;43925:12;43896:24;43907:12;43896:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;:47;;43888:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;43971:46;43982:6;43990:12;44004;43971:10;:46::i;:::-;44046:6;44028:15;:24;;;;44087:12;44063:21;:36;;;;44134:12;44110:21;:36;;;;43770:384:::0;;;:::o;25674:42::-;;;;;;;;;;;;;:::o;26849:36::-;;;;:::o;28625:95::-;28678:7;28705;;28698:14;;28625:95;:::o;26690:32::-;;;;:::o;29429:313::-;29527:4;29544:36;29554:6;29562:9;29573:6;29544:9;:36::i;:::-;29591:121;29600:6;29608:12;:10;:12::i;:::-;29622:89;29660:6;29622:89;;;;;;;;;;;;;;;;;:11;:19;29634:6;29622:19;;;;;;;;;;;;;;;:33;29642:12;:10;:12::i;:::-;29622:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29591:8;:121::i;:::-;29730:4;29723:11;;29429:313;;;;;:::o;31210:253::-;31276:7;31315;;31304;:18;;31296:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31380:19;31403:10;:8;:10::i;:::-;31380:33;;31431:24;31443:11;31431:7;:11;;:24;;;;:::i;:::-;31424:31;;;31210:253;;;:::o;28534:83::-;28575:5;28600:9;;;;;;;;;;;28593:16;;28534:83;:::o;31812:479::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:11:::1;:20;31906:7;31894:20;;;;;;;;;;;;;;;;;;;;;;;;;31886:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31962:9;31957:327;31981:9;:16;;;;31977:1;:20;31957:327;;;32039:7;32023:23;;:9;32033:1;32023:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;32019:254:::1;;32082:9;32111:1;32092:9;:16;;;;:20;;;;:::i;:::-;32082:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32067:9;32077:1;32067:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32151:1;32132:7;:16;32140:7;32132:16;;;;;;;;;;;;;;;:20;;;;32194:5;32171:11;:20;32183:7;32171:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32218:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32252:5;;32019:254;31999:3;;;;;:::i;:::-;;;;31957:327;;;;31812:479:::0;:::o;29750:218::-;29838:4;29855:83;29864:12;:10;:12::i;:::-;29878:7;29887:50;29926:10;29887:11;:25;29899:12;:10;:12::i;:::-;29887:25;;;;;;;;;;;;;;;:34;29913:7;29887:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29855:8;:83::i;:::-;29956:4;29949:11;;29750:218;;;;:::o;26502:26::-;;;;:::o;30381:377::-;30433:14;30450:12;:10;:12::i;:::-;30433:29;;30482:11;:19;30494:6;30482:19;;;;;;;;;;;;;;;;;;;;;;;;;30481:20;30473:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30562:15;30586:19;30597:7;30586:10;:19::i;:::-;30561:44;;;;;;;30634:28;30654:7;30634;:15;30642:6;30634:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30616:7;:15;30624:6;30616:15;;;;;;;;;;;;;;;:46;;;;30683:20;30695:7;30683;;:11;;:20;;;;:::i;:::-;30673:7;:30;;;;30727:23;30742:7;30727:10;;:14;;:23;;;;:::i;:::-;30714:10;:36;;;;30422:336;;30381:377;:::o;26892:36::-;;;;:::o;43088:111::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43187:4:::1;43157:18;:27;43176:7;43157:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43088:111:::0;:::o;30766:436::-;30856:7;30895;;30884;:18;;30876:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30954:17;30949:246;;30989:15;31013:19;31024:7;31013:10;:19::i;:::-;30988:44;;;;;;;31054:7;31047:14;;;;;30949:246;31096:23;31127:19;31138:7;31127:10;:19::i;:::-;31094:52;;;;;;;31168:15;31161:22;;;30766:436;;;;;:::o;25723:29::-;;;;;;;;;;;;;:::o;27072:40::-;;;;;;;;;;;;;:::o;31471:333::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31554:11:::1;:20;31566:7;31554:20;;;;;;;;;;;;;;;;;;;;;;;;;31553:21;31545:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31639:1;31620:7;:16;31628:7;31620:16;;;;;;;;;;;;;;;;:20;31617:108;;;31676:37;31696:7;:16;31704:7;31696:16;;;;;;;;;;;;;;;;31676:19;:37::i;:::-;31657:7;:16;31665:7;31657:16;;;;;;;;;;;;;;;:56;;;;31617:108;31758:4;31735:11;:20;31747:7;31735:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31773:9;31788:7;31773:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31471:333:::0;:::o;36083:123::-;36147:4;36171:18;:27;36190:7;36171:27;;;;;;;;;;;;;;;;;;;;;;;;;36164:34;;36083:123;;;:::o;43333:122::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43438:9:::1;43420:15;;:27;;;;;;;;;;;;;;;;;;43333:122:::0;:::o;26589:32::-;;;;:::o;28728:198::-;28794:7;28818:11;:20;28830:7;28818:20;;;;;;;;;;;;;;;;;;;;;;;;;28814:49;;;28847:7;:16;28855:7;28847:16;;;;;;;;;;;;;;;;28840:23;;;;28814:49;28881:37;28901:7;:16;28909:7;28901:16;;;;;;;;;;;;;;;;28881:19;:37::i;:::-;28874:44;;28728:198;;;;:::o;16258:148::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16365:1:::1;16328:40;;16349:6;::::0;::::1;;;;;;;;16328:40;;;;;;;;;;;;16396:1;16379:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16258:148::o:0;26393:92::-;;;;;;;;;;;;;:::o;27190:50::-;;;;:::o;30253:120::-;30321:4;30345:11;:20;30357:7;30345:20;;;;;;;;;;;;;;;;;;;;;;;;;30338:27;;30253:120;;;:::o;15615:79::-;15653:7;15680:6;;;;;;;;;;;15673:13;;15615:79;:::o;28439:87::-;28478:13;28511:7;28504:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28439:87;:::o;29976:269::-;30069:4;30086:129;30095:12;:10;:12::i;:::-;30109:7;30118:96;30157:15;30118:96;;;;;;;;;;;;;;;;;:11;:25;30130:12;:10;:12::i;:::-;30118:25;;;;;;;;;;;;;;;:34;30144:7;30118:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;30086:8;:129::i;:::-;30233:4;30226:11;;29976:269;;;;:::o;17280:305::-;17350:10;17332:28;;:14;;;;;;;;;;;:28;;;17324:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17437:9;;17419:15;:27;17411:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17528:14;;;;;;;;;;;17499:44;;17520:6;;;;;;;;;;17499:44;;;;;;;;;;;;17563:14;;;;;;;;;;;17554:6;;:23;;;;;;;;;;;;;;;;;;17280:305::o;28934:167::-;29012:4;29029:42;29039:12;:10;:12::i;:::-;29053:9;29064:6;29029:9;:42::i;:::-;29089:4;29082:11;;28934:167;;;;:::o;44699:124::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44809:6:::1;44783:23;:32;;;;44699:124:::0;:::o;16813:89::-;16858:7;16885:9;;16878:16;;16813:89;:::o;44831:171::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44932:8:::1;44908:21;;:32;;;;;;;;;;;;;;;;;;44956:38;44985:8;44956:38;;;;;;:::i;:::-;;;;;;;;44831:171:::0;:::o;27125:58::-;;;;:::o;44172:316::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44345:1:::1;44299:42;44328:12;44299:24;44310:12;44299:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;:47;;44291:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;44388:6;44374:11;:20;;;;44425:12;44405:17;:32;;;;44468:12;44448:17;:32;;;;44172:316:::0;;;:::o;16978:226::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17059:6:::1;::::0;::::1;;;;;;;;17042:14;;:23;;;;;;;;;;;;;;;;;;17093:1;17076:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17136:4;17118:15;:22;;;;:::i;:::-;17106:9;:34;;;;17193:1;17156:40;;17177:6;::::0;::::1;;;;;;;;17156:40;;;;;;;;;;;;16978:226:::0;:::o;29109:143::-;29190:7;29217:11;:18;29229:5;29217:18;;;;;;;;;;;;;;;:27;29236:7;29217:27;;;;;;;;;;;;;;;;29210:34;;29109:143;;;;:::o;43211:110::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43308:5:::1;43278:18;:27;43297:7;43278:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;43211:110:::0;:::o;44498:185::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44590:11:::1;44575:12;:26;;;;44635:22;44653:3;44635:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;44620:12;;:37;44612:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44498:185:::0;:::o;16561:244::-;15837:12;:10;:12::i;:::-;15827:22;;:6;;;;;;;;;;:22;;;15819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16670:1:::1;16650:22;;:8;:22;;::::0;16642:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16760:8;16731:38;;16752:6;::::0;::::1;;;;;;;;16731:38;;;;;;;;;;;;16789:8;16780:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16561:244:::0;:::o;150:115::-;203:15;246:10;231:26;;150:115;:::o;36214:337::-;36324:1;36307:19;;:5;:19;;;36299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36405:1;36386:21;;:7;:21;;;36378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36489:6;36459:11;:18;36471:5;36459:18;;;;;;;;;;;;;;;:27;36478:7;36459:27;;;;;;;;;;;;;;;:36;;;;36527:7;36511:32;;36520:5;36511:32;;;36536:6;36511:32;;;;;;:::i;:::-;;;;;;;;36214:337;;;:::o;3927:181::-;3985:7;4005:9;4021:1;4017;:5;;;;:::i;:::-;4005:17;;4046:1;4041;:6;;4033:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4099:1;4092:8;;;3927:181;;;;:::o;43467:285::-;43621:1;43575:42;43604:12;43575:24;43586:12;43575:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;:47;;43567:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;43660:6;43650:7;:16;;;;43693:12;43677:13;:28;;;;43732:12;43716:13;:28;;;;43467:285;;;:::o;36559:769::-;36669:1;36653:18;;:4;:18;;;36645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36741:1;36732:6;:10;36724:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36801:28;36832:24;36850:4;36832:9;:24::i;:::-;36801:55;;36875:24;36926:23;;36902:20;:47;;36875:74;;36978:19;:53;;;;;37015:16;;;;;;;;;;;37014:17;36978:53;:89;;;;;37054:13;;;;;;;;;;;37048:19;;:2;:19;;;36978:89;:127;;;;;37084:21;;;;;;;;;;;36978:127;36960:310;;;37155:23;;37132:46;;37222:36;37237:20;37222:14;:36::i;:::-;36960:310;37290:30;37305:4;37310:2;37313:6;37290:14;:30::i;:::-;36634:694;;36559:769;;;:::o;4830:192::-;4916:7;4949:1;4944;:6;;4952:12;4936:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4976:9;4992:1;4988;:5;;;;:::i;:::-;4976:17;;5013:1;5006:8;;;4830:192;;;;;:::o;34310:163::-;34351:7;34372:15;34389;34408:19;:17;:19::i;:::-;34371:56;;;;34445:20;34457:7;34445;:11;;:20;;;;:::i;:::-;34438:27;;;;34310:163;:::o;6228:132::-;6286:7;6313:39;6317:1;6320;6313:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6306:46;;6228:132;;;;:::o;33108:419::-;33167:7;33176;33185;33194;33203;33212;33233:23;33258:12;33272:18;33294:20;33306:7;33294:11;:20::i;:::-;33232:82;;;;;;33326:15;33343:23;33368:12;33384:50;33396:7;33405:4;33411:10;33423;:8;:10::i;:::-;33384:11;:50::i;:::-;33325:109;;;;;;33453:7;33462:15;33479:4;33485:15;33502:4;33508:10;33445:74;;;;;;;;;;;;;;;;;;33108:419;;;;;;;:::o;4391:136::-;4449:7;4476:43;4480:1;4483;4476:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4469:50;;4391:136;;;;:::o;37336:904::-;27527:4;27508:16;;:23;;;;;;;;;;;;;;;;;;37479:12:::1;37494:27;37519:1;37494:20;:24;;:27;;;;:::i;:::-;37479:42;;37532:17;37552:30;37577:4;37552:20;:24;;:30;;;;:::i;:::-;37532:50;;37860:22;37885:21;37860:46;;37951:22;37968:4;37951:16;:22::i;:::-;38035:18;38056:41;38082:14;38056:21;:25;;:41;;;;:::i;:::-;38035:62;;38147:35;38160:9;38171:10;38147:12;:35::i;:::-;38200:32;38215:4;38221:10;38200:32;;;;;;;:::i;:::-;;;;;;;;37410:830;;;;27573:5:::0;27554:16;;:24;;;;;;;;;;;;;;;;;;37336:904;:::o;39429:1166::-;39543:13;;;;;;;;;;;39532:24;;:9;:24;;;39529:127;;39582:62;39593:11;;39606:17;;39626;;39582:10;:62::i;:::-;39529:127;39689:18;:26;39708:6;39689:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;39719:18;:29;39738:9;39719:29;;;;;;;;;;;;;;;;;;;;;;;;;39689:59;39686:245;;;39776:14;:12;:14::i;:::-;39686:245;;;39862:12;;39852:6;:22;;39844:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39686:245;39967:11;:19;39979:6;39967:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;39991:11;:22;40003:9;39991:22;;;;;;;;;;;;;;;;;;;;;;;;;39990:23;39967:46;39963:597;;;40030:48;40052:6;40060:9;40071:6;40030:21;:48::i;:::-;39963:597;;;40101:11;:19;40113:6;40101:19;;;;;;;;;;;;;;;;;;;;;;;;;40100:20;:46;;;;;40124:11;:22;40136:9;40124:22;;;;;;;;;;;;;;;;;;;;;;;;;40100:46;40096:464;;;40163:46;40183:6;40191:9;40202:6;40163:19;:46::i;:::-;40096:464;;;40232:11;:19;40244:6;40232:19;;;;;;;;;;;;;;;;;;;;;;;;;40231:20;:47;;;;;40256:11;:22;40268:9;40256:22;;;;;;;;;;;;;;;;;;;;;;;;;40255:23;40231:47;40227:333;;;40295:44;40313:6;40321:9;40332:6;40295:17;:44::i;:::-;40227:333;;;40361:11;:19;40373:6;40361:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40384:11;:22;40396:9;40384:22;;;;;;;;;;;;;;;;;;;;;;;;;40361:45;40357:203;;;40423:48;40445:6;40453:9;40464:6;40423:21;:48::i;:::-;40357:203;;;40504:44;40522:6;40530:9;40541:6;40504:17;:44::i;:::-;40357:203;40227:333;40096:464;39963:597;40572:15;:13;:15::i;:::-;39429:1166;;;:::o;34481:561::-;34531:7;34540;34560:15;34578:7;;34560:25;;34596:15;34614:7;;34596:25;;34643:9;34638:289;34662:9;:16;;;;34658:1;:20;34638:289;;;34728:7;34704;:21;34712:9;34722:1;34712:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34704:21;;;;;;;;;;;;;;;;:31;:66;;;;34763:7;34739;:21;34747:9;34757:1;34747:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34739:21;;;;;;;;;;;;;;;;:31;34704:66;34700:97;;;34780:7;;34789;;34772:25;;;;;;;;;34700:97;34822:34;34834:7;:21;34842:9;34852:1;34842:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34834:21;;;;;;;;;;;;;;;;34822:7;:11;;:34;;;;:::i;:::-;34812:44;;34881:34;34893:7;:21;34901:9;34911:1;34901:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34893:21;;;;;;;;;;;;;;;;34881:7;:11;;:34;;;;:::i;:::-;34871:44;;34680:3;;;;;:::i;:::-;;;;34638:289;;;;34951:20;34963:7;;34951;;:11;;:20;;;;:::i;:::-;34941:7;:30;34937:61;;;34981:7;;34990;;34973:25;;;;;;;;34937:61;35017:7;35026;35009:25;;;;;;34481:561;;;:::o;6856:278::-;6942:7;6974:1;6970;:5;6977:12;6962:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7001:9;7017:1;7013;:5;;;;:::i;:::-;7001:17;;7125:1;7118:8;;;6856:278;;;;;:::o;33535:330::-;33595:7;33604;33613;33633:12;33648:24;33664:7;33648:15;:24::i;:::-;33633:39;;33683:18;33704:30;33726:7;33704:21;:30::i;:::-;33683:51;;33745:23;33771:33;33793:10;33771:17;33783:4;33771:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33745:59;;33823:15;33840:4;33846:10;33815:42;;;;;;;;;33535:330;;;;;:::o;33873:429::-;33988:7;33997;34006;34026:15;34044:24;34056:11;34044:7;:11;;:24;;;;:::i;:::-;34026:42;;34079:12;34094:21;34103:11;34094:4;:8;;:21;;;;:::i;:::-;34079:36;;34126:18;34147:27;34162:11;34147:10;:14;;:27;;;;:::i;:::-;34126:48;;34185:23;34211:33;34233:10;34211:17;34223:4;34211:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34185:59;;34263:7;34272:15;34289:4;34255:39;;;;;;;;;;33873:429;;;;;;;;:::o;38248:694::-;38376:21;38414:1;38400:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38376:40;;38445:4;38427;38432:1;38427:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38471:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38461:4;38466:1;38461:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38562:11;38509:50;38527:4;38542:15;;;;;;;;;;;38509:9;:50::i;:::-;:64;38506:156;;;38588:62;38605:4;38620:15;;;;;;;;;;;38647:1;38638:11;38588:8;:62::i;:::-;38506:156;38700:15;;;;;;;;;;;:66;;;38781:11;38807:1;38851:4;38878;38898:15;38700:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38303:639;38248:694;:::o;38950:381::-;39061:15;;;;;;;;;;;:31;;;39100:9;39133:4;39153:11;39179:1;39222;39265:7;:5;:7::i;:::-;39287:15;39061:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38950:381;;:::o;35765:124::-;35824:1;35814:7;:11;;;;35852:1;35836:13;:17;;;;35880:1;35864:13;:17;;;;35765:124::o;42508:566::-;42611:15;42628:23;42653:12;42667:23;42692:12;42706:18;42728:19;42739:7;42728:10;:19::i;:::-;42610:137;;;;;;;;;;;;42776:28;42796:7;42776;:15;42784:6;42776:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42758:7;:15;42766:6;42758:15;;;;;;;;;;;;;;;:46;;;;42833:28;42853:7;42833;:15;42841:6;42833:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42815:7;:15;42823:6;42815:15;;;;;;;;;;;;;;;:46;;;;42893:39;42916:15;42893:7;:18;42901:9;42893:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42872:7;:18;42880:9;42872:18;;;;;;;;;;;;;;;:60;;;;42946:26;42961:10;42946:14;:26::i;:::-;42983:23;42995:4;43001;42983:11;:23::i;:::-;43039:9;43022:44;;43031:6;43022:44;;;43050:15;43022:44;;;;;;:::i;:::-;;;;;;;;42599:475;;;;;;42508:566;;;:::o;41914:586::-;42015:15;42032:23;42057:12;42071:23;42096:12;42110:18;42132:19;42143:7;42132:10;:19::i;:::-;42014:137;;;;;;;;;;;;42180:28;42200:7;42180;:15;42188:6;42180:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42162:7;:15;42170:6;42162:15;;;;;;;;;;;;;;;:46;;;;42240:39;42263:15;42240:7;:18;42248:9;42240:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42219:7;:18;42227:9;42219:18;;;;;;;;;;;;;;;:60;;;;42311:39;42334:15;42311:7;:18;42319:9;42311:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42290:7;:18;42298:9;42290:18;;;;;;;;;;;;;;;:60;;;;42372:26;42387:10;42372:14;:26::i;:::-;42409:23;42421:4;42427;42409:11;:23::i;:::-;42465:9;42448:44;;42457:6;42448:44;;;42476:15;42448:44;;;;;;:::i;:::-;;;;;;;;42003:497;;;;;;41914:586;;;:::o;40603:620::-;40708:15;40725:23;40750:12;40764:23;40789:12;40803:18;40825:19;40836:7;40825:10;:19::i;:::-;40707:137;;;;;;;;;;;;40892:64;40906:6;40914:15;40931;40948:7;40892:13;:64::i;:::-;40855:101;;;;;;;;40985:28;41005:7;40985;:15;40993:6;40985:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40967:7;:15;40975:6;40967:15;;;;;;;;;;;;;;;:46;;;;41045:39;41068:15;41045:7;:18;41053:9;41045:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41024:7;:18;41032:9;41024:18;;;;;;;;;;;;;;;:60;;;;41095:26;41110:10;41095:14;:26::i;:::-;41132:23;41144:4;41150;41132:11;:23::i;:::-;41188:9;41171:44;;41180:6;41171:44;;;41199:15;41171:44;;;;;;:::i;:::-;;;;;;;;40696:527;;;;;;40603:620;;;:::o;32299:642::-;32402:15;32419:23;32444:12;32458:23;32483:12;32497:18;32519:19;32530:7;32519:10;:19::i;:::-;32401:137;;;;;;;;;;;;32567:28;32587:7;32567;:15;32575:6;32567:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32549:7;:15;32557:6;32549:15;;;;;;;;;;;;;;;:46;;;;32624:28;32644:7;32624;:15;32632:6;32624:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32606:7;:15;32614:6;32606:15;;;;;;;;;;;;;;;:46;;;;32684:39;32707:15;32684:7;:18;32692:9;32684:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32663:7;:18;32671:9;32663:18;;;;;;;;;;;;;;;:60;;;;32755:39;32778:15;32755:7;:18;32763:9;32755:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32734:7;:18;32742:9;32734:18;;;;;;;;;;;;;;;:60;;;;32813:26;32828:10;32813:14;:26::i;:::-;32850:23;32862:4;32868;32850:11;:23::i;:::-;32906:9;32889:44;;32898:6;32889:44;;;32917:15;32889:44;;;;;;:::i;:::-;;;;;;;;32390:551;;;;;;32299:642;;;:::o;35901:170::-;35954:15;;35944:7;:25;;;;35995:21;;35979:13;:37;;;;36042:21;;36026:13;:37;;;;35901:170::o;35599:154::-;35663:7;35690:55;35729:5;35690:20;35702:7;;35690;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;35683:62;;35599:154;;;:::o;35421:166::-;35491:7;35518:61;35563:5;35518:26;35530:13;;35518:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;35511:68;;35421:166;;;:::o;5281:471::-;5339:7;5589:1;5584;:6;5580:47;;5614:1;5607:8;;;;5580:47;5639:9;5655:1;5651;:5;;;;:::i;:::-;5639:17;;5684:1;5679;5675;:5;;;;:::i;:::-;:10;5667:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5743:1;5736:8;;;5281:471;;;;;:::o;35054:355::-;35117:19;35140:10;:8;:10::i;:::-;35117:33;;35161:18;35182:27;35197:11;35182:10;:14;;:27;;;;:::i;:::-;35161:48;;35245:38;35272:10;35245:7;:22;35261:4;35245:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35220:7;:22;35236:4;35220:22;;;;;;;;;;;;;;;:63;;;;35297:11;:26;35317:4;35297:26;;;;;;;;;;;;;;;;;;;;;;;;;35294:107;;;35363:38;35390:10;35363:7;:22;35379:4;35363:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35338:7;:22;35354:4;35338:22;;;;;;;;;;;;;;;:63;;;;35294:107;35106:303;;35054:355;:::o;32953:147::-;33031:17;33043:4;33031:7;;:11;;:17;;;;:::i;:::-;33021:7;:27;;;;33072:20;33087:4;33072:10;;:14;;:20;;;;:::i;:::-;33059:10;:33;;;;32953:147;;:::o;41235:671::-;41363:7;41372;41415:1;41400:13;;:16;41397:67;;41428:15;41445;41421:40;;;;;;41397:67;41474:18;41495:35;41516:13;;41495:16;41507:3;41495:7;:11;;:16;;;;:::i;:::-;:20;;:35;;;;:::i;:::-;41474:56;;41541:18;41562:26;41577:10;:8;:10::i;:::-;41562;:14;;:26;;;;:::i;:::-;41541:47;;41617:31;41637:10;41617:15;:19;;:31;;;;:::i;:::-;41599:49;;41677:31;41697:10;41677:15;:19;;:31;;;;:::i;:::-;41659:49;;41746:40;41775:10;41746:7;:24;41754:15;;;;;;;;;;;41746:24;;;;;;;;;;;;;;;;:28;;:40;;;;:::i;:::-;41719:7;:24;41727:15;;;;;;;;;;;41719:24;;;;;;;;;;;;;;;:67;;;;41819:15;;;;;;;;;;;41802:45;;41811:6;41802:45;;;41836:10;41802:45;;;;;;:::i;:::-;;;;;;;;41865:15;41882;41858:40;;;;;;41235:671;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:60::-;4451:3;4472:5;4465:12;;4423:60;;;:::o;4489:142::-;4539:9;4572:53;4590:34;4599:24;4617:5;4599:24;:::i;:::-;4590:34;:::i;:::-;4572:53;:::i;:::-;4559:66;;4489:142;;;:::o;4637:126::-;4687:9;4720:37;4751:5;4720:37;:::i;:::-;4707:50;;4637:126;;;:::o;4769:153::-;4846:9;4879:37;4910:5;4879:37;:::i;:::-;4866:50;;4769:153;;;:::o;4928:185::-;5042:64;5100:5;5042:64;:::i;:::-;5037:3;5030:77;4928:185;;:::o;5119:276::-;5239:4;5277:2;5266:9;5262:18;5254:26;;5290:98;5385:1;5374:9;5370:17;5361:6;5290:98;:::i;:::-;5119:276;;;;:::o;5401:619::-;5478:6;5486;5494;5543:2;5531:9;5522:7;5518:23;5514:32;5511:119;;;5549:79;;:::i;:::-;5511:119;5669:1;5694:53;5739:7;5730:6;5719:9;5715:22;5694:53;:::i;:::-;5684:63;;5640:117;5796:2;5822:53;5867:7;5858:6;5847:9;5843:22;5822:53;:::i;:::-;5812:63;;5767:118;5924:2;5950:53;5995:7;5986:6;5975:9;5971:22;5950:53;:::i;:::-;5940:63;;5895:118;5401:619;;;;;:::o;6026:329::-;6085:6;6134:2;6122:9;6113:7;6109:23;6105:32;6102:119;;;6140:79;;:::i;:::-;6102:119;6260:1;6285:53;6330:7;6321:6;6310:9;6306:22;6285:53;:::i;:::-;6275:63;;6231:117;6026:329;;;;:::o;6361:86::-;6396:7;6436:4;6429:5;6425:16;6414:27;;6361:86;;;:::o;6453:112::-;6536:22;6552:5;6536:22;:::i;:::-;6531:3;6524:35;6453:112;;:::o;6571:214::-;6660:4;6698:2;6687:9;6683:18;6675:26;;6711:67;6775:1;6764:9;6760:17;6751:6;6711:67;:::i;:::-;6571:214;;;;:::o;6791:329::-;6850:6;6899:2;6887:9;6878:7;6874:23;6870:32;6867:119;;;6905:79;;:::i;:::-;6867:119;7025:1;7050:53;7095:7;7086:6;7075:9;7071:22;7050:53;:::i;:::-;7040:63;;6996:117;6791:329;;;;:::o;7126:116::-;7196:21;7211:5;7196:21;:::i;:::-;7189:5;7186:32;7176:60;;7232:1;7229;7222:12;7176:60;7126:116;:::o;7248:133::-;7291:5;7329:6;7316:20;7307:29;;7345:30;7369:5;7345:30;:::i;:::-;7248:133;;;;:::o;7387:468::-;7452:6;7460;7509:2;7497:9;7488:7;7484:23;7480:32;7477:119;;;7515:79;;:::i;:::-;7477:119;7635:1;7660:53;7705:7;7696:6;7685:9;7681:22;7660:53;:::i;:::-;7650:63;;7606:117;7762:2;7788:50;7830:7;7821:6;7810:9;7806:22;7788:50;:::i;:::-;7778:60;;7733:115;7387:468;;;;;:::o;7861:118::-;7948:24;7966:5;7948:24;:::i;:::-;7943:3;7936:37;7861:118;;:::o;7985:222::-;8078:4;8116:2;8105:9;8101:18;8093:26;;8129:71;8197:1;8186:9;8182:17;8173:6;8129:71;:::i;:::-;7985:222;;;;:::o;8213:104::-;8258:7;8287:24;8305:5;8287:24;:::i;:::-;8276:35;;8213:104;;;:::o;8323:138::-;8404:32;8430:5;8404:32;:::i;:::-;8397:5;8394:43;8384:71;;8451:1;8448;8441:12;8384:71;8323:138;:::o;8467:155::-;8521:5;8559:6;8546:20;8537:29;;8575:41;8610:5;8575:41;:::i;:::-;8467:155;;;;:::o;8628:345::-;8695:6;8744:2;8732:9;8723:7;8719:23;8715:32;8712:119;;;8750:79;;:::i;:::-;8712:119;8870:1;8895:61;8948:7;8939:6;8928:9;8924:22;8895:61;:::i;:::-;8885:71;;8841:125;8628:345;;;;:::o;8979:142::-;9082:32;9108:5;9082:32;:::i;:::-;9077:3;9070:45;8979:142;;:::o;9127:254::-;9236:4;9274:2;9263:9;9259:18;9251:26;;9287:87;9371:1;9360:9;9356:17;9347:6;9287:87;:::i;:::-;9127:254;;;;:::o;9387:323::-;9443:6;9492:2;9480:9;9471:7;9467:23;9463:32;9460:119;;;9498:79;;:::i;:::-;9460:119;9618:1;9643:50;9685:7;9676:6;9665:9;9661:22;9643:50;:::i;:::-;9633:60;;9589:114;9387:323;;;;:::o;9716:474::-;9784:6;9792;9841:2;9829:9;9820:7;9816:23;9812:32;9809:119;;;9847:79;;:::i;:::-;9809:119;9967:1;9992:53;10037:7;10028:6;10017:9;10013:22;9992:53;:::i;:::-;9982:63;;9938:117;10094:2;10120:53;10165:7;10156:6;10145:9;10141:22;10120:53;:::i;:::-;10110:63;;10065:118;9716:474;;;;;:::o;10196:180::-;10244:77;10241:1;10234:88;10341:4;10338:1;10331:15;10365:4;10362:1;10355:15;10382:320;10426:6;10463:1;10457:4;10453:12;10443:22;;10510:1;10504:4;10500:12;10531:18;10521:81;;10587:4;10579:6;10575:17;10565:27;;10521:81;10649:2;10641:6;10638:14;10618:18;10615:38;10612:84;;10668:18;;:::i;:::-;10612:84;10433:269;10382:320;;;:::o;10708:182::-;10848:34;10844:1;10836:6;10832:14;10825:58;10708:182;:::o;10896:366::-;11038:3;11059:67;11123:2;11118:3;11059:67;:::i;:::-;11052:74;;11135:93;11224:3;11135:93;:::i;:::-;11253:2;11248:3;11244:12;11237:19;;10896:366;;;:::o;11268:419::-;11434:4;11472:2;11461:9;11457:18;11449:26;;11521:9;11515:4;11511:20;11507:1;11496:9;11492:17;11485:47;11549:131;11675:4;11549:131;:::i;:::-;11541:139;;11268:419;;;:::o;11693:162::-;11833:14;11829:1;11821:6;11817:14;11810:38;11693:162;:::o;11861:366::-;12003:3;12024:67;12088:2;12083:3;12024:67;:::i;:::-;12017:74;;12100:93;12189:3;12100:93;:::i;:::-;12218:2;12213:3;12209:12;12202:19;;11861:366;;;:::o;12233:419::-;12399:4;12437:2;12426:9;12422:18;12414:26;;12486:9;12480:4;12476:20;12472:1;12461:9;12457:17;12450:47;12514:131;12640:4;12514:131;:::i;:::-;12506:139;;12233:419;;;:::o;12658:229::-;12798:34;12794:1;12786:6;12782:14;12775:58;12867:12;12862:2;12854:6;12850:15;12843:37;12658:229;:::o;12893:366::-;13035:3;13056:67;13120:2;13115:3;13056:67;:::i;:::-;13049:74;;13132:93;13221:3;13132:93;:::i;:::-;13250:2;13245:3;13241:12;13234:19;;12893:366;;;:::o;13265:419::-;13431:4;13469:2;13458:9;13454:18;13446:26;;13518:9;13512:4;13508:20;13504:1;13493:9;13489:17;13482:47;13546:131;13672:4;13546:131;:::i;:::-;13538:139;;13265:419;;;:::o;13690:177::-;13830:29;13826:1;13818:6;13814:14;13807:53;13690:177;:::o;13873:366::-;14015:3;14036:67;14100:2;14095:3;14036:67;:::i;:::-;14029:74;;14112:93;14201:3;14112:93;:::i;:::-;14230:2;14225:3;14221:12;14214:19;;13873:366;;;:::o;14245:419::-;14411:4;14449:2;14438:9;14434:18;14426:26;;14498:9;14492:4;14488:20;14484:1;14473:9;14469:17;14462:47;14526:131;14652:4;14526:131;:::i;:::-;14518:139;;14245:419;;;:::o;14670:180::-;14718:77;14715:1;14708:88;14815:4;14812:1;14805:15;14839:4;14836:1;14829:15;14856:180;14904:77;14901:1;14894:88;15001:4;14998:1;14991:15;15025:4;15022:1;15015:15;15042:194;15082:4;15102:20;15120:1;15102:20;:::i;:::-;15097:25;;15136:20;15154:1;15136:20;:::i;:::-;15131:25;;15180:1;15177;15173:9;15165:17;;15204:1;15198:4;15195:11;15192:37;;;15209:18;;:::i;:::-;15192:37;15042:194;;;;:::o;15242:180::-;15290:77;15287:1;15280:88;15387:4;15384:1;15377:15;15411:4;15408:1;15401:15;15428:233;15467:3;15490:24;15508:5;15490:24;:::i;:::-;15481:33;;15536:66;15529:5;15526:77;15523:103;;15606:18;;:::i;:::-;15523:103;15653:1;15646:5;15642:13;15635:20;;15428:233;;;:::o;15667:231::-;15807:34;15803:1;15795:6;15791:14;15784:58;15876:14;15871:2;15863:6;15859:15;15852:39;15667:231;:::o;15904:366::-;16046:3;16067:67;16131:2;16126:3;16067:67;:::i;:::-;16060:74;;16143:93;16232:3;16143:93;:::i;:::-;16261:2;16256:3;16252:12;16245:19;;15904:366;;;:::o;16276:419::-;16442:4;16480:2;16469:9;16465:18;16457:26;;16529:9;16523:4;16519:20;16515:1;16504:9;16500:17;16493:47;16557:131;16683:4;16557:131;:::i;:::-;16549:139;;16276:419;;;:::o;16701:181::-;16841:33;16837:1;16829:6;16825:14;16818:57;16701:181;:::o;16888:366::-;17030:3;17051:67;17115:2;17110:3;17051:67;:::i;:::-;17044:74;;17127:93;17216:3;17127:93;:::i;:::-;17245:2;17240:3;17236:12;17229:19;;16888:366;;;:::o;17260:419::-;17426:4;17464:2;17453:9;17449:18;17441:26;;17513:9;17507:4;17503:20;17499:1;17488:9;17484:17;17477:47;17541:131;17667:4;17541:131;:::i;:::-;17533:139;;17260:419;;;:::o;17685:222::-;17825:34;17821:1;17813:6;17809:14;17802:58;17894:5;17889:2;17881:6;17877:15;17870:30;17685:222;:::o;17913:366::-;18055:3;18076:67;18140:2;18135:3;18076:67;:::i;:::-;18069:74;;18152:93;18241:3;18152:93;:::i;:::-;18270:2;18265:3;18261:12;18254:19;;17913:366;;;:::o;18285:419::-;18451:4;18489:2;18478:9;18474:18;18466:26;;18538:9;18532:4;18528:20;18524:1;18513:9;18509:17;18502:47;18566:131;18692:4;18566:131;:::i;:::-;18558:139;;18285:419;;;:::o;18710:181::-;18850:33;18846:1;18838:6;18834:14;18827:57;18710:181;:::o;18897:366::-;19039:3;19060:67;19124:2;19119:3;19060:67;:::i;:::-;19053:74;;19136:93;19225:3;19136:93;:::i;:::-;19254:2;19249:3;19245:12;19238:19;;18897:366;;;:::o;19269:419::-;19435:4;19473:2;19462:9;19458:18;19450:26;;19522:9;19516:4;19512:20;19508:1;19497:9;19493:17;19486:47;19550:131;19676:4;19550:131;:::i;:::-;19542:139;;19269:419;;;:::o;19694:191::-;19734:3;19753:20;19771:1;19753:20;:::i;:::-;19748:25;;19787:20;19805:1;19787:20;:::i;:::-;19782:25;;19830:1;19827;19823:9;19816:16;;19851:3;19848:1;19845:10;19842:36;;;19858:18;;:::i;:::-;19842:36;19694:191;;;;:::o;19891:163::-;20031:15;20027:1;20019:6;20015:14;20008:39;19891:163;:::o;20060:366::-;20202:3;20223:67;20287:2;20282:3;20223:67;:::i;:::-;20216:74;;20299:93;20388:3;20299:93;:::i;:::-;20417:2;20412:3;20408:12;20401:19;;20060:366;;;:::o;20432:419::-;20598:4;20636:2;20625:9;20621:18;20613:26;;20685:9;20679:4;20675:20;20671:1;20660:9;20656:17;20649:47;20713:131;20839:4;20713:131;:::i;:::-;20705:139;;20432:419;;;:::o;20857:225::-;20997:34;20993:1;20985:6;20981:14;20974:58;21066:8;21061:2;21053:6;21049:15;21042:33;20857:225;:::o;21088:366::-;21230:3;21251:67;21315:2;21310:3;21251:67;:::i;:::-;21244:74;;21327:93;21416:3;21327:93;:::i;:::-;21445:2;21440:3;21436:12;21429:19;;21088:366;;;:::o;21460:419::-;21626:4;21664:2;21653:9;21649:18;21641:26;;21713:9;21707:4;21703:20;21699:1;21688:9;21684:17;21677:47;21741:131;21867:4;21741:131;:::i;:::-;21733:139;;21460:419;;;:::o;21885:223::-;22025:34;22021:1;22013:6;22009:14;22002:58;22094:6;22089:2;22081:6;22077:15;22070:31;21885:223;:::o;22114:366::-;22256:3;22277:67;22341:2;22336:3;22277:67;:::i;:::-;22270:74;;22353:93;22442:3;22353:93;:::i;:::-;22471:2;22466:3;22462:12;22455:19;;22114:366;;;:::o;22486:419::-;22652:4;22690:2;22679:9;22675:18;22667:26;;22739:9;22733:4;22729:20;22725:1;22714:9;22710:17;22703:47;22767:131;22893:4;22767:131;:::i;:::-;22759:139;;22486:419;;;:::o;22911:221::-;23051:34;23047:1;23039:6;23035:14;23028:58;23120:4;23115:2;23107:6;23103:15;23096:29;22911:221;:::o;23138:366::-;23280:3;23301:67;23365:2;23360:3;23301:67;:::i;:::-;23294:74;;23377:93;23466:3;23377:93;:::i;:::-;23495:2;23490:3;23486:12;23479:19;;23138:366;;;:::o;23510:419::-;23676:4;23714:2;23703:9;23699:18;23691:26;;23763:9;23757:4;23753:20;23749:1;23738:9;23734:17;23727:47;23791:131;23917:4;23791:131;:::i;:::-;23783:139;;23510:419;;;:::o;23935:177::-;24075:29;24071:1;24063:6;24059:14;24052:53;23935:177;:::o;24118:366::-;24260:3;24281:67;24345:2;24340:3;24281:67;:::i;:::-;24274:74;;24357:93;24446:3;24357:93;:::i;:::-;24475:2;24470:3;24466:12;24459:19;;24118:366;;;:::o;24490:419::-;24656:4;24694:2;24683:9;24679:18;24671:26;;24743:9;24737:4;24733:20;24729:1;24718:9;24714:17;24707:47;24771:131;24897:4;24771:131;:::i;:::-;24763:139;;24490:419;;;:::o;24915:224::-;25055:34;25051:1;25043:6;25039:14;25032:58;25124:7;25119:2;25111:6;25107:15;25100:32;24915:224;:::o;25145:366::-;25287:3;25308:67;25372:2;25367:3;25308:67;:::i;:::-;25301:74;;25384:93;25473:3;25384:93;:::i;:::-;25502:2;25497:3;25493:12;25486:19;;25145:366;;;:::o;25517:419::-;25683:4;25721:2;25710:9;25706:18;25698:26;;25770:9;25764:4;25760:20;25756:1;25745:9;25741:17;25734:47;25798:131;25924:4;25798:131;:::i;:::-;25790:139;;25517:419;;;:::o;25942:228::-;26082:34;26078:1;26070:6;26066:14;26059:58;26151:11;26146:2;26138:6;26134:15;26127:36;25942:228;:::o;26176:366::-;26318:3;26339:67;26403:2;26398:3;26339:67;:::i;:::-;26332:74;;26415:93;26504:3;26415:93;:::i;:::-;26533:2;26528:3;26524:12;26517:19;;26176:366;;;:::o;26548:419::-;26714:4;26752:2;26741:9;26737:18;26729:26;;26801:9;26795:4;26791:20;26787:1;26776:9;26772:17;26765:47;26829:131;26955:4;26829:131;:::i;:::-;26821:139;;26548:419;;;:::o;26973:332::-;27094:4;27132:2;27121:9;27117:18;27109:26;;27145:71;27213:1;27202:9;27198:17;27189:6;27145:71;:::i;:::-;27226:72;27294:2;27283:9;27279:18;27270:6;27226:72;:::i;:::-;26973:332;;;;;:::o;27311:227::-;27451:34;27447:1;27439:6;27435:14;27428:58;27520:10;27515:2;27507:6;27503:15;27496:35;27311:227;:::o;27544:366::-;27686:3;27707:67;27771:2;27766:3;27707:67;:::i;:::-;27700:74;;27783:93;27872:3;27783:93;:::i;:::-;27901:2;27896:3;27892:12;27885:19;;27544:366;;;:::o;27916:419::-;28082:4;28120:2;28109:9;28105:18;28097:26;;28169:9;28163:4;28159:20;28155:1;28144:9;28140:17;28133:47;28197:131;28323:4;28197:131;:::i;:::-;28189:139;;27916:419;;;:::o;28341:180::-;28389:77;28386:1;28379:88;28486:4;28483:1;28476:15;28510:4;28507:1;28500:15;28527:185;28567:1;28584:20;28602:1;28584:20;:::i;:::-;28579:25;;28618:20;28636:1;28618:20;:::i;:::-;28613:25;;28657:1;28647:35;;28662:18;;:::i;:::-;28647:35;28704:1;28701;28697:9;28692:14;;28527:185;;;;:::o;28718:180::-;28766:77;28763:1;28756:88;28863:4;28860:1;28853:15;28887:4;28884:1;28877:15;28904:143;28961:5;28992:6;28986:13;28977:22;;29008:33;29035:5;29008:33;:::i;:::-;28904:143;;;;:::o;29053:351::-;29123:6;29172:2;29160:9;29151:7;29147:23;29143:32;29140:119;;;29178:79;;:::i;:::-;29140:119;29298:1;29323:64;29379:7;29370:6;29359:9;29355:22;29323:64;:::i;:::-;29313:74;;29269:128;29053:351;;;;:::o;29410:85::-;29455:7;29484:5;29473:16;;29410:85;;;:::o;29501:158::-;29559:9;29592:61;29610:42;29619:32;29645:5;29619:32;:::i;:::-;29610:42;:::i;:::-;29592:61;:::i;:::-;29579:74;;29501:158;;;:::o;29665:147::-;29760:45;29799:5;29760:45;:::i;:::-;29755:3;29748:58;29665:147;;:::o;29818:114::-;29885:6;29919:5;29913:12;29903:22;;29818:114;;;:::o;29938:184::-;30037:11;30071:6;30066:3;30059:19;30111:4;30106:3;30102:14;30087:29;;29938:184;;;;:::o;30128:132::-;30195:4;30218:3;30210:11;;30248:4;30243:3;30239:14;30231:22;;30128:132;;;:::o;30266:108::-;30343:24;30361:5;30343:24;:::i;:::-;30338:3;30331:37;30266:108;;:::o;30380:179::-;30449:10;30470:46;30512:3;30504:6;30470:46;:::i;:::-;30548:4;30543:3;30539:14;30525:28;;30380:179;;;;:::o;30565:113::-;30635:4;30667;30662:3;30658:14;30650:22;;30565:113;;;:::o;30714:732::-;30833:3;30862:54;30910:5;30862:54;:::i;:::-;30932:86;31011:6;31006:3;30932:86;:::i;:::-;30925:93;;31042:56;31092:5;31042:56;:::i;:::-;31121:7;31152:1;31137:284;31162:6;31159:1;31156:13;31137:284;;;31238:6;31232:13;31265:63;31324:3;31309:13;31265:63;:::i;:::-;31258:70;;31351:60;31404:6;31351:60;:::i;:::-;31341:70;;31197:224;31184:1;31181;31177:9;31172:14;;31137:284;;;31141:14;31437:3;31430:10;;30838:608;;;30714:732;;;;:::o;31452:831::-;31715:4;31753:3;31742:9;31738:19;31730:27;;31767:71;31835:1;31824:9;31820:17;31811:6;31767:71;:::i;:::-;31848:80;31924:2;31913:9;31909:18;31900:6;31848:80;:::i;:::-;31975:9;31969:4;31965:20;31960:2;31949:9;31945:18;31938:48;32003:108;32106:4;32097:6;32003:108;:::i;:::-;31995:116;;32121:72;32189:2;32178:9;32174:18;32165:6;32121:72;:::i;:::-;32203:73;32271:3;32260:9;32256:19;32247:6;32203:73;:::i;:::-;31452:831;;;;;;;;:::o;32289:807::-;32538:4;32576:3;32565:9;32561:19;32553:27;;32590:71;32658:1;32647:9;32643:17;32634:6;32590:71;:::i;:::-;32671:72;32739:2;32728:9;32724:18;32715:6;32671:72;:::i;:::-;32753:80;32829:2;32818:9;32814:18;32805:6;32753:80;:::i;:::-;32843;32919:2;32908:9;32904:18;32895:6;32843:80;:::i;:::-;32933:73;33001:3;32990:9;32986:19;32977:6;32933:73;:::i;:::-;33016;33084:3;33073:9;33069:19;33060:6;33016:73;:::i;:::-;32289:807;;;;;;;;;:::o;33102:143::-;33159:5;33190:6;33184:13;33175:22;;33206:33;33233:5;33206:33;:::i;:::-;33102:143;;;;:::o;33251:663::-;33339:6;33347;33355;33404:2;33392:9;33383:7;33379:23;33375:32;33372:119;;;33410:79;;:::i;:::-;33372:119;33530:1;33555:64;33611:7;33602:6;33591:9;33587:22;33555:64;:::i;:::-;33545:74;;33501:128;33668:2;33694:64;33750:7;33741:6;33730:9;33726:22;33694:64;:::i;:::-;33684:74;;33639:129;33807:2;33833:64;33889:7;33880:6;33869:9;33865:22;33833:64;:::i;:::-;33823:74;;33778:129;33251:663;;;;;:::o;33920:410::-;33960:7;33983:20;34001:1;33983:20;:::i;:::-;33978:25;;34017:20;34035:1;34017:20;:::i;:::-;34012:25;;34072:1;34069;34065:9;34094:30;34112:11;34094:30;:::i;:::-;34083:41;;34273:1;34264:7;34260:15;34257:1;34254:22;34234:1;34227:9;34207:83;34184:139;;34303:18;;:::i;:::-;34184:139;33968:362;33920:410;;;;:::o;34336:220::-;34476:34;34472:1;34464:6;34460:14;34453:58;34545:3;34540:2;34532:6;34528:15;34521:28;34336:220;:::o;34562:366::-;34704:3;34725:67;34789:2;34784:3;34725:67;:::i;:::-;34718:74;;34801:93;34890:3;34801:93;:::i;:::-;34919:2;34914:3;34910:12;34903:19;;34562:366;;;:::o;34934:419::-;35100:4;35138:2;35127:9;35123:18;35115:26;;35187:9;35181:4;35177:20;35173:1;35162:9;35158:17;35151:47;35215:131;35341:4;35215:131;:::i;:::-;35207:139;;34934:419;;;:::o

Swarm Source

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