ETH Price: $3,449.43 (+1.49%)

Token

clown.market (HONKHONK)
 

Overview

Max Total Supply

1,000,000,000,000,000 HONKHONK

Holders

88 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,922,254,631,238.957471007 HONKHONK

Value
$0.00
0xa538311df7dc52bbe861f6e3efdd749730503cae
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

clown.market is a community-driven experiment that aims to educate as well as poke fun at the cryptocurrency market.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HONKHONK

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-02
*/

/*
██╗  ██╗ ██████╗ ███╗   ██╗██╗  ██╗██╗  ██╗ ██████╗ ███╗   ██╗██╗  ██╗
██║  ██║██╔═══██╗████╗  ██║██║ ██╔╝██║  ██║██╔═══██╗████╗  ██║██║ ██╔╝
███████║██║   ██║██╔██╗ ██║█████╔╝ ███████║██║   ██║██╔██╗ ██║█████╔╝ 
██╔══██║██║   ██║██║╚██╗██║██╔═██╗ ██╔══██║██║   ██║██║╚██╗██║██╔═██╗ 
██║  ██║╚██████╔╝██║ ╚████║██║  ██╗██║  ██║╚██████╔╝██║ ╚████║██║  ██╗
╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝╚═╝  ╚═╝
 clown.market / $HONKHONK
 tokenomics:
  5% fee redistributed to holders
  4% fee to the liquidity pool
  1% fee to the dev
  total supply: 1,000,000,000,000,000
  maximum buy limit, no whales.
 antibot:
  trading disabled first few minutes of launch to prevent sniping bots from getting in early and dumping on the real holders.
 stealth launch:
  no presale nonsense, no team wallets. first come, first serve.
 website:  https://clown.market
 telegram: https://t.me/clownmarket (will be private until liquidity pool is funded, which will mark the launch)
 twitter:  https://twitter.com/clown_market
 github:   https://github.com/clownmarket
*/
// SPDX-License-Identifier: None
pragma solidity ^0.6.12;

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @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);
}

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return 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;
    }
}

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _previousOwner = _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);
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract HONKHONK is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    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;

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

    string private _name = "clown.market";
    string private _symbol = "HONKHONK";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 5;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 4;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _devFee = 1;
    uint256 private _previousDevFee = _devFee;

    uint256 private _startTime = 0;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingEnabled = false;

    address public devFeeAddress;

    uint256 public _maxTxAmount = _tTotal / 100;
    uint256 private numTokensSellToAddToLiquidity = _tTotal / 20;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        devFeeAddress = _msgSender();

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public view override 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 totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    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, uint256 tDev) = _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);
        _takeDevFee(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        emit Transfer(sender, devFeeAddress, tDev);
        emit Transfer(sender, address(this), tLiquidity);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }

    function setDevFeePercent(uint256 devFee) external onlyOwner() {
        _devFee = devFee;
    }
	
	function setDevFeeAddress(address account) external onlyOwner() {
        devFeeAddress = account;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

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

    function enableTrading(bool _tradingEnabled) external onlyOwner() {
        _startTime = block.number;
        tradingEnabled = _tradingEnabled;
    }

    receive() external payable {}

    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) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tDev, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tDev);
    }

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rDev = tDev.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rDev);
        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 _takeDevFee(uint256 tDevFee) private {
        uint256 currentRate =  _getRate();
        uint256 rDevFee = tDevFee.mul(currentRate);
        _rOwned[devFeeAddress] = _rOwned[devFeeAddress].add(rDevFee);
        if(_isExcluded[devFeeAddress])
            _tOwned[devFeeAddress] = _tOwned[devFeeAddress].add(tDevFee);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function calculateDevFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_devFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _devFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousDevFee = _devFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _devFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _devFee = _previousDevFee;
    }

    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(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(from != owner() && to != owner() && _startTime + 20 > block.number)
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        if (from != owner()) {
            require(tradingEnabled, "Trading is not enabled yet");
            require(_startTime != block.number, "Trading is not enabled yet");
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        if(_startTime + 20 > block.number && contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }

        bool takeFee = true;

        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
		
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
        uint256 initialBalance = address(this).balance;
		
        swapTokensForEth(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);

        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();

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

        if(!takeFee)
            restoreAllFee();
    }

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

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

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeDevFee(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        emit Transfer(sender, devFeeAddress, tDev);
        emit Transfer(sender, address(this), tLiquidity);
    }
}
// what are you doing down here? code's up there. *honk*

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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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":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":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","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":"_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":[],"name":"devFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingEnabled","type":"bool"}],"name":"enableTrading","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":[{"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":[],"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":"address","name":"account","type":"address"}],"name":"setDevFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]

60c060405269d3c21bcecceda1000000600855600854600019816200002057fe5b06600019036009556040518060400160405280600c81526020017f636c6f776e2e6d61726b65740000000000000000000000000000000000000000815250600b90805190602001906200007592919062000696565b506040518060400160405280600881526020017f484f4e4b484f4e4b000000000000000000000000000000000000000000000000815250600c9080519060200190620000c392919062000696565b506009600d60006101000a81548160ff021916908360ff1602179055506005600e55600e54600f556004601055601054601155600160125560125460135560006014556001601560016101000a81548160ff0219169083151502179055506000601560026101000a81548160ff0219169083151502179055506064600854816200014957fe5b046016556014600854816200015a57fe5b046017553480156200016b57600080fd5b5060006200017e6200068e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460026000620002726200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002c06200068e60201b60201c565b601560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d60208110156200038c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040057600080fd5b505afa15801562000415573d6000803e3d6000fd5b505050506040513d60208110156200042c57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004a757600080fd5b505af1158015620004bc573d6000803e3d6000fd5b505050506040513d6020811015620004d357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160056000620005676200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006206200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040518082815260200191505060405180910390a3506200073c565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006d957805160ff19168380011785556200070a565b828001600101855582156200070a579182015b8281111562000709578251825591602001919060010190620006ec565b5b5090506200071991906200071d565b5090565b5b80821115620007385760008160009055506001016200071e565b5090565b60805160601c60a05160601c6153b862000784600039806119b55280612e86525080610f905280613bce5280613cba5280613ce15280613dec5280613e1352506153b86000f3fe6080604052600436106102345760003560e01c806352390c021161012e578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610c53578063d687b4d114610c8e578063dd62ed3e14610cdf578063ea2f0b3714610d64578063f275f64b14610db55761023b565b8063a457c2d714610ac8578063a9059cbb14610b39578063aa45026b14610baa578063c090709914610bd5578063c49b9a8014610c165761023b565b80637d1db4a5116100f25780637d1db4a51461092a57806388f82020146109555780638da5cb5b146109bc5780638ee88c53146109fd57806395d89b4114610a385761023b565b806352390c02146107cb5780635342acb41461081c5780636bc87c3a1461088357806370a08231146108ae578063715018a6146109135761023b565b80633685d419116101bc578063437823ec11610180578063437823ec146106845780634549b039146106d557806349bd5a5e146107305780634a74bb02146107715780634ada218b1461079e5761023b565b80633685d41914610521578063379e29191461057257806339509351146105ad5780633b124fe71461061e5780633bd5d173146106495761023b565b80631694505e116102035780631694505e146103a757806318160ddd146103e857806323b872dd146104135780632d838119146104a4578063313ce567146104f35761023b565b8063061c82d01461024057806306fdde031461027b578063095ea7b31461030b57806313114a9d1461037c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102796004803603602081101561026357600080fd5b8101908080359060200190929190505050610df2565b005b34801561028757600080fd5b50610290610ec4565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d05780820151818401526020810190506102b5565b50505050905090810190601f1680156102fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031757600080fd5b506103646004803603604081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f66565b60405180821515815260200191505060405180910390f35b34801561038857600080fd5b50610391610f84565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b506103bc610f8e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f457600080fd5b506103fd610fb2565b6040518082815260200191505060405180910390f35b34801561041f57600080fd5b5061048c6004803603606081101561043657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fbc565b60405180821515815260200191505060405180910390f35b3480156104b057600080fd5b506104dd600480360360208110156104c757600080fd5b8101908080359060200190929190505050611095565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b50610508611119565b604051808260ff16815260200191505060405180910390f35b34801561052d57600080fd5b506105706004803603602081101561054457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611130565b005b34801561057e57600080fd5b506105ab6004803603602081101561059557600080fd5b81019080803590602001909291905050506114ba565b005b3480156105b957600080fd5b50610606600480360360408110156105d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061158c565b60405180821515815260200191505060405180910390f35b34801561062a57600080fd5b5061063361163f565b6040518082815260200191505060405180910390f35b34801561065557600080fd5b506106826004803603602081101561066c57600080fd5b8101908080359060200190929190505050611645565b005b34801561069057600080fd5b506106d3600480360360208110156106a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117d7565b005b3480156106e157600080fd5b5061071a600480360360408110156106f857600080fd5b81019080803590602001909291908035151590602001909291905050506118fa565b6040518082815260200191505060405180910390f35b34801561073c57600080fd5b506107456119b3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561077d57600080fd5b506107866119d7565b60405180821515815260200191505060405180910390f35b3480156107aa57600080fd5b506107b36119ea565b60405180821515815260200191505060405180910390f35b3480156107d757600080fd5b5061081a600480360360208110156107ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119fd565b005b34801561082857600080fd5b5061086b6004803603602081101561083f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d17565b60405180821515815260200191505060405180910390f35b34801561088f57600080fd5b50610898611d6d565b6040518082815260200191505060405180910390f35b3480156108ba57600080fd5b506108fd600480360360208110156108d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d73565b6040518082815260200191505060405180910390f35b34801561091f57600080fd5b50610928611e5e565b005b34801561093657600080fd5b5061093f611fe4565b6040518082815260200191505060405180910390f35b34801561096157600080fd5b506109a46004803603602081101561097857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fea565b60405180821515815260200191505060405180910390f35b3480156109c857600080fd5b506109d1612040565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0957600080fd5b50610a3660048036036020811015610a2057600080fd5b8101908080359060200190929190505050612069565b005b348015610a4457600080fd5b50610a4d61213b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8d578082015181840152602081019050610a72565b50505050905090810190601f168015610aba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad457600080fd5b50610b2160048036036040811015610aeb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121dd565b60405180821515815260200191505060405180910390f35b348015610b4557600080fd5b50610b9260048036036040811015610b5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122aa565b60405180821515815260200191505060405180910390f35b348015610bb657600080fd5b50610bbf6122c8565b6040518082815260200191505060405180910390f35b348015610be157600080fd5b50610bea6122ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2257600080fd5b50610c5160048036036020811015610c3957600080fd5b810190808035151590602001909291905050506122f4565b005b348015610c5f57600080fd5b50610c8c60048036036020811015610c7657600080fd5b8101908080359060200190929190505050612412565b005b348015610c9a57600080fd5b50610cdd60048036036020811015610cb157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250b565b005b348015610ceb57600080fd5b50610d4e60048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612617565b6040518082815260200191505060405180910390f35b348015610d7057600080fd5b50610db360048036036020811015610d8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061269e565b005b348015610dc157600080fd5b50610df060048036036020811015610dd857600080fd5b810190808035151590602001909291905050506127c1565b005b610dfa6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f5c5780601f10610f3157610100808354040283529160200191610f5c565b820191906000526020600020905b815481529060010190602001808311610f3f57829003601f168201915b5050505050905090565b6000610f7a610f736128ad565b84846128b5565b6001905092915050565b6000600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b6000610fc9848484612aac565b61108a84610fd56128ad565b6110858560405180606001604052806028815260200161529860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061103b6128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc69092919063ffffffff16565b6128b5565b600190509392505050565b60006009548211156110f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615203602a913960400191505060405180910390fd5b60006110fc613086565b905061111181846130b190919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b6111386128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6007805490508110156114b6578173ffffffffffffffffffffffffffffffffffffffff16600782815481106112eb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114a95760076001600780549050038154811061134757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166007828154811061137f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061146f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114b6565b80806001019150506112ba565b5050565b6114c26128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060128190555050565b60006116356115996128ad565b8461163085600460006115aa6128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b6128b5565b6001905092915050565b600e5481565b600061164f6128ad565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615332602c913960400191505060405180910390fd5b60006116ff83613183565b505050505050905061175981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117b1816009546131eb90919063ffffffff16565b6009819055506117cc83600a546130fb90919063ffffffff16565b600a81905550505050565b6117df6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600854831115611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161199557600061198484613183565b5050505050509050809150506119ad565b60006119a084613183565b5050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601560019054906101000a900460ff1681565b601560029054906101000a900460ff1681565b611a056128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c5957611c15600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e0e57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e59565b611e56600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095565b90505b919050565b611e666128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120716128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060108190555050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121d35780601f106121a8576101008083540402835291602001916121d3565b820191906000526020600020905b8154815290600101906020018083116121b657829003601f168201915b5050505050905090565b60006122a06121ea6128ad565b8461229b8560405180606001604052806025815260200161535e60259139600460006122146128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc69092919063ffffffff16565b6128b5565b6001905092915050565b60006122be6122b76128ad565b8484612aac565b6001905092915050565b60125481565b601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122fc6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b61241a6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61250260646124f48360085461323590919063ffffffff16565b6130b190919063ffffffff16565b60168190555050565b6125136128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126a66128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612766576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127c96128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b4360148190555080601560026101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561293b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061530e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061522d6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152e96025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806151e06023913960400191505060405180910390fd5b60008111612c11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152c06029913960400191505060405180910390fd5b612c19612040565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c875750612c57612040565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c965750436014805401115b15612cf757601654811115612cf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061524f6028913960400191505060405180910390fd5b5b612cff612040565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e2c57601560029054906101000a900460ff16612db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b436014541415612e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b5b6000612e3730611d73565b9050436014805401118015612e4e57506016548110155b15612e595760165490505b60006017548210159050808015612e7d5750601560009054906101000a900460ff16155b8015612ed557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612eed5750601560019054906101000a900460ff165b15612f01576017549150612f00826132bb565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fa85750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb257600090505b612fbe8686868461339d565b505050505050565b6000838311158290613073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561303857808201518184015260208101905061301d565b50505050905090810190601f1680156130655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006130936136ae565b915091506130aa81836130b190919063ffffffff16565b9250505090565b60006130f383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061393f565b905092915050565b600080828401905083811015613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600080600061319d8c613a05565b935093509350935060008060006131be8f8787876131b9613086565b613a84565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600061322d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fc6565b905092915050565b60008083141561324857600090506132b5565b600082840290508284828161325957fe5b04146132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152776021913960400191505060405180910390fd5b809150505b92915050565b6001601560006101000a81548160ff02191690831515021790555060006132ec6002836130b190919063ffffffff16565b9050600061330382846131eb90919063ffffffff16565b9050600047905061331383613b38565b600061332882476131eb90919063ffffffff16565b90506133348382613de6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b806133ab576133aa613f37565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134635761345e848484613f99565b61369a565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135065750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561351b576135168484846142f3565b613699565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135bf5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135d4576135cf84848461464d565b613698565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136765750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561368b57613686848484614912565b613697565b61369684848461464d565b5b5b5b5b806136a8576136a7614d01565b5b50505050565b600080600060095490506000600854905060005b600780549050811015613902578260026000600784815481106136e157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806137c8575081600360006007848154811061376057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137df576009546008549450945050505061393b565b61386860026000600784815481106137f357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131eb90919063ffffffff16565b92506138f3600360006007848154811061387e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131eb90919063ffffffff16565b915080806001019150506136c2565b5061391a6008546009546130b190919063ffffffff16565b8210156139325760095460085493509350505061393b565b81819350935050505b9091565b600080831182906139eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139b0578082015181840152602081019050613995565b50505050905090810190601f1680156139dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816139f757fe5b049050809150509392505050565b6000806000806000613a1686614d1e565b90506000613a2387614d4f565b90506000613a3088614d80565b90506000613a6b82613a5d85613a4f888e6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613a9d858a61323590919063ffffffff16565b90506000613ab4868a61323590919063ffffffff16565b90506000613acb878a61323590919063ffffffff16565b90506000613ae2888a61323590919063ffffffff16565b90506000613b1d82613b0f85613b01888a6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6060600267ffffffffffffffff81118015613b5257600080fd5b50604051908082528060200260200182016040528015613b815781602001602082028036833780820191505090505b5090503081600081518110613b9257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3257600080fd5b505afa158015613c46573d6000803e3d6000fd5b505050506040513d6020811015613c5c57600080fd5b810190808051906020019092919050505081600181518110613c7a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cdf307f0000000000000000000000000000000000000000000000000000000000000000846128b5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613da1578082015181840152602081019050613d86565b505050509050019650505050505050600060405180830381600087803b158015613dca57600080fd5b505af1158015613dde573d6000803e3d6000fd5b505050505050565b613e11307f0000000000000000000000000000000000000000000000000000000000000000846128b5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e5b612040565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613ee057600080fd5b505af1158015613ef4573d6000803e3d6000fd5b50505050506040513d6060811015613f0b57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600e54148015613f4b57506000601054145b8015613f5957506000601254145b15613f6357613f97565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b6000806000806000806000613fad88613183565b965096509650965096509650965061400d88600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a287600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061413786600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418382614db1565b61418c81614f56565b61419685846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061430788613183565b965096509650965096509650965061436787600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143fc84600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449186600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144dd82614db1565b6144e681614f56565b6144f085846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061466188613183565b96509650965096509650965096506146c187600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475686600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147a282614db1565b6147ab81614f56565b6147b585846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061492688613183565b965096509650965096509650965061498688600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1b87600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ab084600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4586600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9182614db1565b614b9a81614f56565b614ba485846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000614d486064614d3a600e548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614d796064614d6b6010548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614daa6064614d9c6012548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614dbb613086565b90506000614dd2828461323590919063ffffffff16565b9050614e2681600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614f5157614f0d83600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000614f60613086565b90506000614f77828461323590919063ffffffff16565b9050614fed8160026000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b60026000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060066000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156151a05761513a8360036000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b60036000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6151ba826009546131eb90919063ffffffff16565b6009819055506151d581600a546130fb90919063ffffffff16565b600a81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122095f1f46fca615191d87b375cd30916e60b1566146d5571fdbfead54a0a78572764736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806352390c021161012e578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610c53578063d687b4d114610c8e578063dd62ed3e14610cdf578063ea2f0b3714610d64578063f275f64b14610db55761023b565b8063a457c2d714610ac8578063a9059cbb14610b39578063aa45026b14610baa578063c090709914610bd5578063c49b9a8014610c165761023b565b80637d1db4a5116100f25780637d1db4a51461092a57806388f82020146109555780638da5cb5b146109bc5780638ee88c53146109fd57806395d89b4114610a385761023b565b806352390c02146107cb5780635342acb41461081c5780636bc87c3a1461088357806370a08231146108ae578063715018a6146109135761023b565b80633685d419116101bc578063437823ec11610180578063437823ec146106845780634549b039146106d557806349bd5a5e146107305780634a74bb02146107715780634ada218b1461079e5761023b565b80633685d41914610521578063379e29191461057257806339509351146105ad5780633b124fe71461061e5780633bd5d173146106495761023b565b80631694505e116102035780631694505e146103a757806318160ddd146103e857806323b872dd146104135780632d838119146104a4578063313ce567146104f35761023b565b8063061c82d01461024057806306fdde031461027b578063095ea7b31461030b57806313114a9d1461037c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102796004803603602081101561026357600080fd5b8101908080359060200190929190505050610df2565b005b34801561028757600080fd5b50610290610ec4565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d05780820151818401526020810190506102b5565b50505050905090810190601f1680156102fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031757600080fd5b506103646004803603604081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f66565b60405180821515815260200191505060405180910390f35b34801561038857600080fd5b50610391610f84565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b506103bc610f8e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f457600080fd5b506103fd610fb2565b6040518082815260200191505060405180910390f35b34801561041f57600080fd5b5061048c6004803603606081101561043657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fbc565b60405180821515815260200191505060405180910390f35b3480156104b057600080fd5b506104dd600480360360208110156104c757600080fd5b8101908080359060200190929190505050611095565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b50610508611119565b604051808260ff16815260200191505060405180910390f35b34801561052d57600080fd5b506105706004803603602081101561054457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611130565b005b34801561057e57600080fd5b506105ab6004803603602081101561059557600080fd5b81019080803590602001909291905050506114ba565b005b3480156105b957600080fd5b50610606600480360360408110156105d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061158c565b60405180821515815260200191505060405180910390f35b34801561062a57600080fd5b5061063361163f565b6040518082815260200191505060405180910390f35b34801561065557600080fd5b506106826004803603602081101561066c57600080fd5b8101908080359060200190929190505050611645565b005b34801561069057600080fd5b506106d3600480360360208110156106a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117d7565b005b3480156106e157600080fd5b5061071a600480360360408110156106f857600080fd5b81019080803590602001909291908035151590602001909291905050506118fa565b6040518082815260200191505060405180910390f35b34801561073c57600080fd5b506107456119b3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561077d57600080fd5b506107866119d7565b60405180821515815260200191505060405180910390f35b3480156107aa57600080fd5b506107b36119ea565b60405180821515815260200191505060405180910390f35b3480156107d757600080fd5b5061081a600480360360208110156107ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119fd565b005b34801561082857600080fd5b5061086b6004803603602081101561083f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d17565b60405180821515815260200191505060405180910390f35b34801561088f57600080fd5b50610898611d6d565b6040518082815260200191505060405180910390f35b3480156108ba57600080fd5b506108fd600480360360208110156108d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d73565b6040518082815260200191505060405180910390f35b34801561091f57600080fd5b50610928611e5e565b005b34801561093657600080fd5b5061093f611fe4565b6040518082815260200191505060405180910390f35b34801561096157600080fd5b506109a46004803603602081101561097857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fea565b60405180821515815260200191505060405180910390f35b3480156109c857600080fd5b506109d1612040565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0957600080fd5b50610a3660048036036020811015610a2057600080fd5b8101908080359060200190929190505050612069565b005b348015610a4457600080fd5b50610a4d61213b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8d578082015181840152602081019050610a72565b50505050905090810190601f168015610aba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad457600080fd5b50610b2160048036036040811015610aeb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121dd565b60405180821515815260200191505060405180910390f35b348015610b4557600080fd5b50610b9260048036036040811015610b5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122aa565b60405180821515815260200191505060405180910390f35b348015610bb657600080fd5b50610bbf6122c8565b6040518082815260200191505060405180910390f35b348015610be157600080fd5b50610bea6122ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2257600080fd5b50610c5160048036036020811015610c3957600080fd5b810190808035151590602001909291905050506122f4565b005b348015610c5f57600080fd5b50610c8c60048036036020811015610c7657600080fd5b8101908080359060200190929190505050612412565b005b348015610c9a57600080fd5b50610cdd60048036036020811015610cb157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250b565b005b348015610ceb57600080fd5b50610d4e60048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612617565b6040518082815260200191505060405180910390f35b348015610d7057600080fd5b50610db360048036036020811015610d8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061269e565b005b348015610dc157600080fd5b50610df060048036036020811015610dd857600080fd5b810190808035151590602001909291905050506127c1565b005b610dfa6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f5c5780601f10610f3157610100808354040283529160200191610f5c565b820191906000526020600020905b815481529060010190602001808311610f3f57829003601f168201915b5050505050905090565b6000610f7a610f736128ad565b84846128b5565b6001905092915050565b6000600a54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b6000610fc9848484612aac565b61108a84610fd56128ad565b6110858560405180606001604052806028815260200161529860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061103b6128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc69092919063ffffffff16565b6128b5565b600190509392505050565b60006009548211156110f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615203602a913960400191505060405180910390fd5b60006110fc613086565b905061111181846130b190919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b6111386128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6007805490508110156114b6578173ffffffffffffffffffffffffffffffffffffffff16600782815481106112eb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114a95760076001600780549050038154811061134757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166007828154811061137f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061146f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114b6565b80806001019150506112ba565b5050565b6114c26128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060128190555050565b60006116356115996128ad565b8461163085600460006115aa6128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b6128b5565b6001905092915050565b600e5481565b600061164f6128ad565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615332602c913960400191505060405180910390fd5b60006116ff83613183565b505050505050905061175981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117b1816009546131eb90919063ffffffff16565b6009819055506117cc83600a546130fb90919063ffffffff16565b600a81905550505050565b6117df6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600854831115611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161199557600061198484613183565b5050505050509050809150506119ad565b60006119a084613183565b5050505050915050809150505b92915050565b7f000000000000000000000000ba67bde734b0f4e8374ce97d37128fee191105d481565b601560019054906101000a900460ff1681565b601560029054906101000a900460ff1681565b611a056128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c5957611c15600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e0e57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e59565b611e56600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095565b90505b919050565b611e666128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120716128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060108190555050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121d35780601f106121a8576101008083540402835291602001916121d3565b820191906000526020600020905b8154815290600101906020018083116121b657829003601f168201915b5050505050905090565b60006122a06121ea6128ad565b8461229b8560405180606001604052806025815260200161535e60259139600460006122146128ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc69092919063ffffffff16565b6128b5565b6001905092915050565b60006122be6122b76128ad565b8484612aac565b6001905092915050565b60125481565b601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122fc6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b61241a6128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61250260646124f48360085461323590919063ffffffff16565b6130b190919063ffffffff16565b60168190555050565b6125136128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126a66128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612766576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127c96128ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b4360148190555080601560026101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561293b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061530e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061522d6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152e96025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806151e06023913960400191505060405180910390fd5b60008111612c11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152c06029913960400191505060405180910390fd5b612c19612040565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c875750612c57612040565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c965750436014805401115b15612cf757601654811115612cf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061524f6028913960400191505060405180910390fd5b5b612cff612040565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e2c57601560029054906101000a900460ff16612db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b436014541415612e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b5b6000612e3730611d73565b9050436014805401118015612e4e57506016548110155b15612e595760165490505b60006017548210159050808015612e7d5750601560009054906101000a900460ff16155b8015612ed557507f000000000000000000000000ba67bde734b0f4e8374ce97d37128fee191105d473ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612eed5750601560019054906101000a900460ff165b15612f01576017549150612f00826132bb565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fa85750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb257600090505b612fbe8686868461339d565b505050505050565b6000838311158290613073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561303857808201518184015260208101905061301d565b50505050905090810190601f1680156130655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006130936136ae565b915091506130aa81836130b190919063ffffffff16565b9250505090565b60006130f383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061393f565b905092915050565b600080828401905083811015613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600080600061319d8c613a05565b935093509350935060008060006131be8f8787876131b9613086565b613a84565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600061322d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fc6565b905092915050565b60008083141561324857600090506132b5565b600082840290508284828161325957fe5b04146132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152776021913960400191505060405180910390fd5b809150505b92915050565b6001601560006101000a81548160ff02191690831515021790555060006132ec6002836130b190919063ffffffff16565b9050600061330382846131eb90919063ffffffff16565b9050600047905061331383613b38565b600061332882476131eb90919063ffffffff16565b90506133348382613de6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b806133ab576133aa613f37565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134635761345e848484613f99565b61369a565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135065750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561351b576135168484846142f3565b613699565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135bf5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135d4576135cf84848461464d565b613698565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136765750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561368b57613686848484614912565b613697565b61369684848461464d565b5b5b5b5b806136a8576136a7614d01565b5b50505050565b600080600060095490506000600854905060005b600780549050811015613902578260026000600784815481106136e157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806137c8575081600360006007848154811061376057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137df576009546008549450945050505061393b565b61386860026000600784815481106137f357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131eb90919063ffffffff16565b92506138f3600360006007848154811061387e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131eb90919063ffffffff16565b915080806001019150506136c2565b5061391a6008546009546130b190919063ffffffff16565b8210156139325760095460085493509350505061393b565b81819350935050505b9091565b600080831182906139eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139b0578082015181840152602081019050613995565b50505050905090810190601f1680156139dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816139f757fe5b049050809150509392505050565b6000806000806000613a1686614d1e565b90506000613a2387614d4f565b90506000613a3088614d80565b90506000613a6b82613a5d85613a4f888e6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613a9d858a61323590919063ffffffff16565b90506000613ab4868a61323590919063ffffffff16565b90506000613acb878a61323590919063ffffffff16565b90506000613ae2888a61323590919063ffffffff16565b90506000613b1d82613b0f85613b01888a6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b6131eb90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6060600267ffffffffffffffff81118015613b5257600080fd5b50604051908082528060200260200182016040528015613b815781602001602082028036833780820191505090505b5090503081600081518110613b9257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3257600080fd5b505afa158015613c46573d6000803e3d6000fd5b505050506040513d6020811015613c5c57600080fd5b810190808051906020019092919050505081600181518110613c7a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cdf307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128b5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613da1578082015181840152602081019050613d86565b505050509050019650505050505050600060405180830381600087803b158015613dca57600080fd5b505af1158015613dde573d6000803e3d6000fd5b505050505050565b613e11307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128b5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e5b612040565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613ee057600080fd5b505af1158015613ef4573d6000803e3d6000fd5b50505050506040513d6060811015613f0b57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600e54148015613f4b57506000601054145b8015613f5957506000601254145b15613f6357613f97565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b6000806000806000806000613fad88613183565b965096509650965096509650965061400d88600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a287600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061413786600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418382614db1565b61418c81614f56565b61419685846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061430788613183565b965096509650965096509650965061436787600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143fc84600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449186600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144dd82614db1565b6144e681614f56565b6144f085846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061466188613183565b96509650965096509650965096506146c187600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475686600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147a282614db1565b6147ab81614f56565b6147b585846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061492688613183565b965096509650965096509650965061498688600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1b87600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131eb90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ab084600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4586600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9182614db1565b614b9a81614f56565b614ba485846151a5565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000614d486064614d3a600e548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614d796064614d6b6010548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614daa6064614d9c6012548561323590919063ffffffff16565b6130b190919063ffffffff16565b9050919050565b6000614dbb613086565b90506000614dd2828461323590919063ffffffff16565b9050614e2681600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614f5157614f0d83600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000614f60613086565b90506000614f77828461323590919063ffffffff16565b9050614fed8160026000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b60026000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060066000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156151a05761513a8360036000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130fb90919063ffffffff16565b60036000601560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6151ba826009546131eb90919063ffffffff16565b6009819055506151d581600a546130fb90919063ffffffff16565b600a81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122095f1f46fca615191d87b375cd30916e60b1566146d5571fdbfead54a0a78572764736f6c634300060c0033

Deployed Bytecode Sourcemap

25320:18769:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32813:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27706:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28645:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29766:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26385:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28010:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28814:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30693:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27910:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31295:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33049:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29135:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26079:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29861:378;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32576:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30247:438;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26443:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26518:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26565:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30954:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37777:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26162:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28113:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17242:148;;;;;;;;;;;;;:::i;:::-;;26645:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29638:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16606:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32919:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27806:96;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29361:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28319:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26263:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26608:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33437:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33267:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33153:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28494:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32695:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33616:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32813:98;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32897:6:::1;32887:7;:16;;;;32813:98:::0;:::o;27706:92::-;27752:13;27785:5;27778:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27706:92;:::o;28645:161::-;28720:4;28737:39;28746:12;:10;:12::i;:::-;28760:7;28769:6;28737:8;:39::i;:::-;28794:4;28787:11;;28645:161;;;;:::o;29766:87::-;29808:7;29835:10;;29828:17;;29766:87;:::o;26385:51::-;;;:::o;28010:95::-;28063:7;28090;;28083:14;;28010:95;:::o;28814:313::-;28912:4;28929:36;28939:6;28947:9;28958:6;28929:9;:36::i;:::-;28976:121;28985:6;28993:12;:10;:12::i;:::-;29007:89;29045:6;29007:89;;;;;;;;;;;;;;;;;:11;:19;29019:6;29007:19;;;;;;;;;;;;;;;:33;29027:12;:10;:12::i;:::-;29007:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28976:8;:121::i;:::-;29115:4;29108:11;;28814:313;;;;;:::o;30693:253::-;30759:7;30798;;30787;:18;;30779:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30863:19;30886:10;:8;:10::i;:::-;30863:33;;30914:24;30926:11;30914:7;:11;;:24;;;;:::i;:::-;30907:31;;;30693:253;;;:::o;27910:92::-;27960:5;27985:9;;;;;;;;;;;27978:16;;27910:92;:::o;31295:479::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31377:11:::1;:20;31389:7;31377:20;;;;;;;;;;;;;;;;;;;;;;;;;31369:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31445:9;31440:327;31464:9;:16;;;;31460:1;:20;31440:327;;;31522:7;31506:23;;:9;31516:1;31506:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;31502:254;;;31565:9;31594:1;31575:9;:16;;;;:20;31565:31;;;;;;;;;;;;;;;;;;;;;;;;;31550:9;31560:1;31550:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31634:1;31615:7;:16;31623:7;31615:16;;;;;;;;;;;;;;;:20;;;;31677:5;31654:11;:20;31666:7;31654:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31701:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31735:5;;31502:254;31482:3;;;;;;;31440:327;;;;31295:479:::0;:::o;33049:98::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33133:6:::1;33123:7;:16;;;;33049:98:::0;:::o;29135:218::-;29223:4;29240:83;29249:12;:10;:12::i;:::-;29263:7;29272:50;29311:10;29272:11;:25;29284:12;:10;:12::i;:::-;29272:25;;;;;;;;;;;;;;;:34;29298:7;29272:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29240:8;:83::i;:::-;29341:4;29334:11;;29135:218;;;;:::o;26079:26::-;;;;:::o;29861:378::-;29913:14;29930:12;:10;:12::i;:::-;29913:29;;29962:11;:19;29974:6;29962:19;;;;;;;;;;;;;;;;;;;;;;;;;29961:20;29953:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30042:15;30067:19;30078:7;30067:10;:19::i;:::-;30041:45;;;;;;;;30115:28;30135:7;30115;:15;30123:6;30115:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30097:7;:15;30105:6;30097:15;;;;;;;;;;;;;;;:46;;;;30164:20;30176:7;30164;;:11;;:20;;;;:::i;:::-;30154:7;:30;;;;30208:23;30223:7;30208:10;;:14;;:23;;;;:::i;:::-;30195:10;:36;;;;29861:378;;;:::o;32576:111::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32675:4:::1;32645:18;:27;32664:7;32645:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32576:111:::0;:::o;30247:438::-;30337:7;30376;;30365;:18;;30357:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30435:17;30430:248;;30470:15;30495:19;30506:7;30495:10;:19::i;:::-;30469:45;;;;;;;;30536:7;30529:14;;;;;30430:248;30578:23;30610:19;30621:7;30610:10;:19::i;:::-;30576:53;;;;;;;;30651:15;30644:22;;;30247:438;;;;;:::o;26443:38::-;;;:::o;26518:40::-;;;;;;;;;;;;;:::o;26565:34::-;;;;;;;;;;;;;:::o;30954:333::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31037:11:::1;:20;31049:7;31037:20;;;;;;;;;;;;;;;;;;;;;;;;;31036:21;31028:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31122:1;31103:7;:16;31111:7;31103:16;;;;;;;;;;;;;;;;:20;31100:108;;;31159:37;31179:7;:16;31187:7;31179:16;;;;;;;;;;;;;;;;31159:19;:37::i;:::-;31140:7;:16;31148:7;31140:16;;;;;;;;;;;;;;;:56;;;;31100:108;31241:4;31218:11;:20;31230:7;31218:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31256:9;31271:7;31256:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30954:333:::0;:::o;37777:123::-;37841:4;37865:18;:27;37884:7;37865:27;;;;;;;;;;;;;;;;;;;;;;;;;37858:34;;37777:123;;;:::o;26162:32::-;;;;:::o;28113:198::-;28179:7;28203:11;:20;28215:7;28203:20;;;;;;;;;;;;;;;;;;;;;;;;;28199:49;;;28232:7;:16;28240:7;28232:16;;;;;;;;;;;;;;;;28225:23;;;;28199:49;28266:37;28286:7;:16;28294:7;28286:16;;;;;;;;;;;;;;;;28266:19;:37::i;:::-;28259:44;;28113:198;;;;:::o;17242:148::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17349:1:::1;17312:40;;17333:6;::::0;::::1;;;;;;;;17312:40;;;;;;;;;;;;17380:1;17363:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17242:148::o:0;26645:43::-;;;;:::o;29638:120::-;29706:4;29730:11;:20;29742:7;29730:20;;;;;;;;;;;;;;;;;;;;;;;;;29723:27;;29638:120;;;:::o;16606:79::-;16644:7;16671:6;;;;;;;;;;;16664:13;;16606:79;:::o;32919:122::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33021:12:::1;33005:13;:28;;;;32919:122:::0;:::o;27806:96::-;27854:13;27887:7;27880:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27806:96;:::o;29361:269::-;29454:4;29471:129;29480:12;:10;:12::i;:::-;29494:7;29503:96;29542:15;29503:96;;;;;;;;;;;;;;;;;:11;:25;29515:12;:10;:12::i;:::-;29503:25;;;;;;;;;;;;;;;:34;29529:7;29503:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29471:8;:129::i;:::-;29618:4;29611:11;;29361:269;;;;:::o;28319:167::-;28397:4;28414:42;28424:12;:10;:12::i;:::-;28438:9;28449:6;28414:9;:42::i;:::-;28474:4;28467:11;;28319:167;;;;:::o;26263:26::-;;;;:::o;26608:28::-;;;;;;;;;;;;;:::o;33437:171::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33538:8:::1;33514:21;;:32;;;;;;;;;;;;;;;;;;33562:38;33591:8;33562:38;;;;;;;;;;;;;;;;;;;;33437:171:::0;:::o;33267:162::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33361:60:::1;33405:5;33361:25;33373:12;33361:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;33346:12;:75;;;;33267:162:::0;:::o;33153:106::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33244:7:::1;33228:13;;:23;;;;;;;;;;;;;;;;;;33153:106:::0;:::o;28494:143::-;28575:7;28602:11;:18;28614:5;28602:18;;;;;;;;;;;;;;;:27;28621:7;28602:27;;;;;;;;;;;;;;;;28595:34;;28494:143;;;;:::o;32695:110::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32792:5:::1;32762:18;:27;32781:7;32762:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32695:110:::0;:::o;33616:153::-;16828:12;:10;:12::i;:::-;16818:22;;:6;;;;;;;;;;:22;;;16810:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33706:12:::1;33693:10;:25;;;;33746:15;33729:14;;:32;;;;;;;;;;;;;;;;;;33616:153:::0;:::o;9607:106::-;9660:15;9695:10;9688:17;;9607:106;:::o;37908:337::-;38018:1;38001:19;;:5;:19;;;;37993:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38099:1;38080:21;;:7;:21;;;;38072:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38183:6;38153:11;:18;38165:5;38153:18;;;;;;;;;;;;;;;:27;38172:7;38153:27;;;;;;;;;;;;;;;:36;;;;38221:7;38205:32;;38214:5;38205:32;;;38230:6;38205:32;;;;;;;;;;;;;;;;;;37908:337;;;:::o;38253:1516::-;38391:1;38375:18;;:4;:18;;;;38367:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38468:1;38454:16;;:2;:16;;;;38446:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38538:1;38529:6;:10;38521:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38609:7;:5;:7::i;:::-;38601:15;;:4;:15;;;;:32;;;;;38626:7;:5;:7::i;:::-;38620:13;;:2;:13;;;;38601:32;:66;;;;;38655:12;38650:2;38637:10;;:15;:30;38601:66;38598:159;;;38700:12;;38690:6;:22;;38682:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38598:159;38782:7;:5;:7::i;:::-;38774:15;;:4;:15;;;38770:181;;38814:14;;;;;;;;;;;38806:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38896:12;38882:10;;:26;;38874:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38770:181;38963:28;38994:24;39012:4;38994:9;:24::i;:::-;38963:55;;39052:12;39047:2;39034:10;;:15;:30;:70;;;;;39092:12;;39068:20;:36;;39034:70;39031:146;;;39153:12;;39130:35;;39031:146;39189:24;39240:29;;39216:20;:53;;39189:80;;39298:19;:53;;;;;39335:16;;;;;;;;;;;39334:17;39298:53;:91;;;;;39376:13;39368:21;;:4;:21;;;;39298:91;:129;;;;;39406:21;;;;;;;;;;;39298:129;39280:289;;;39477:29;;39454:52;;39521:36;39536:20;39521:14;:36::i;:::-;39280:289;39581:12;39596:4;39581:19;;39616:18;:24;39635:4;39616:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;39644:18;:22;39663:2;39644:22;;;;;;;;;;;;;;;;;;;;;;;;;39616:50;39613:96;;;39692:5;39682:15;;39613:96;39723:38;39738:4;39743:2;39746:6;39753:7;39723:14;:38::i;:::-;38253:1516;;;;;;:::o;6017:192::-;6103:7;6136:1;6131;:6;;6139:12;6123:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6163:9;6179:1;6175;:5;6163:17;;6200:1;6193:8;;;6017:192;;;;;:::o;35352:163::-;35393:7;35414:15;35431;35450:19;:17;:19::i;:::-;35413:56;;;;35487:20;35499:7;35487;:11;;:20;;;;:::i;:::-;35480:27;;;;35352:163;:::o;7415:132::-;7473:7;7500:39;7504:1;7507;7500:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7493:46;;7415:132;;;;:::o;5114:181::-;5172:7;5192:9;5208:1;5204;:5;5192:17;;5233:1;5228;:6;;5220:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5286:1;5279:8;;;5114:181;;;;:::o;33969:454::-;34028:7;34037;34046;34055;34064;34073;34082;34103:23;34128:12;34142:18;34162:12;34178:20;34190:7;34178:11;:20::i;:::-;34102:96;;;;;;;;34210:15;34227:23;34252:12;34268:56;34280:7;34289:4;34295:10;34307:4;34313:10;:8;:10::i;:::-;34268:11;:56::i;:::-;34209:115;;;;;;34343:7;34352:15;34369:4;34375:15;34392:4;34398:10;34410:4;34335:80;;;;;;;;;;;;;;;;;;;;;33969:454;;;;;;;;;:::o;5578:136::-;5636:7;5663:43;5667:1;5670;5663:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5656:50;;5578:136;;;;:::o;6468:471::-;6526:7;6776:1;6771;:6;6767:47;;;6801:1;6794:8;;;;6767:47;6826:9;6842:1;6838;:5;6826:17;;6871:1;6866;6862;:5;;;;;;:10;6854:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6930:1;6923:8;;;6468:471;;;;;:::o;39777:474::-;27073:4;27054:16;;:23;;;;;;;;;;;;;;;;;;39862:12:::1;39877:27;39902:1;39877:20;:24;;:27;;;;:::i;:::-;39862:42;;39915:17;39935:30;39960:4;39935:20;:24;;:30;;;;:::i;:::-;39915:50;;39976:22;40001:21;39976:46;;40037:22;40054:4;40037:16;:22::i;:::-;40072:18;40093:41;40119:14;40093:21;:25;;:41;;;;:::i;:::-;40072:62;;40147:35;40160:9;40171:10;40147:12;:35::i;:::-;40200:43;40215:4;40221:10;40233:9;40200:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27088:1;;;;27119:5:::0;27100:16;;:24;;;;;;;;;;;;;;;;;;39777:474;:::o;41142:818::-;41253:7;41249:40;;41275:14;:12;:14::i;:::-;41249:40;41306:11;:19;41318:6;41306:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41330:11;:22;41342:9;41330:22;;;;;;;;;;;;;;;;;;;;;;;;;41329:23;41306:46;41302:597;;;41369:48;41391:6;41399:9;41410:6;41369:21;:48::i;:::-;41302:597;;;41440:11;:19;41452:6;41440:19;;;;;;;;;;;;;;;;;;;;;;;;;41439:20;:46;;;;;41463:11;:22;41475:9;41463:22;;;;;;;;;;;;;;;;;;;;;;;;;41439:46;41435:464;;;41502:46;41522:6;41530:9;41541:6;41502:19;:46::i;:::-;41435:464;;;41571:11;:19;41583:6;41571:19;;;;;;;;;;;;;;;;;;;;;;;;;41570:20;:47;;;;;41595:11;:22;41607:9;41595:22;;;;;;;;;;;;;;;;;;;;;;;;;41594:23;41570:47;41566:333;;;41634:44;41652:6;41660:9;41671:6;41634:17;:44::i;:::-;41566:333;;;41700:11;:19;41712:6;41700:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41723:11;:22;41735:9;41723:22;;;;;;;;;;;;;;;;;;;;;;;;;41700:45;41696:203;;;41762:48;41784:6;41792:9;41803:6;41762:21;:48::i;:::-;41696:203;;;41843:44;41861:6;41869:9;41880:6;41843:17;:44::i;:::-;41696:203;41566:333;41435:464;41302:597;41915:7;41911:41;;41937:15;:13;:15::i;:::-;41911:41;41142:818;;;;:::o;35523:555::-;35573:7;35582;35602:15;35620:7;;35602:25;;35638:15;35656:7;;35638:25;;35679:9;35674:289;35698:9;:16;;;;35694:1;:20;35674:289;;;35764:7;35740;:21;35748:9;35758:1;35748:12;;;;;;;;;;;;;;;;;;;;;;;;;35740:21;;;;;;;;;;;;;;;;:31;:66;;;;35799:7;35775;:21;35783:9;35793:1;35783:12;;;;;;;;;;;;;;;;;;;;;;;;;35775:21;;;;;;;;;;;;;;;;:31;35740:66;35736:97;;;35816:7;;35825;;35808:25;;;;;;;;;35736:97;35858:34;35870:7;:21;35878:9;35888:1;35878:12;;;;;;;;;;;;;;;;;;;;;;;;;35870:21;;;;;;;;;;;;;;;;35858:7;:11;;:34;;;;:::i;:::-;35848:44;;35917:34;35929:7;:21;35937:9;35947:1;35937:12;;;;;;;;;;;;;;;;;;;;;;;;;35929:21;;;;;;;;;;;;;;;;35917:7;:11;;:34;;;;:::i;:::-;35907:44;;35716:3;;;;;;;35674:289;;;;35987:20;35999:7;;35987;;:11;;:20;;;;:::i;:::-;35977:7;:30;35973:61;;;36017:7;;36026;;36009:25;;;;;;;;35973:61;36053:7;36062;36045:25;;;;;;35523:555;;;:::o;8043:278::-;8129:7;8161:1;8157;:5;8164:12;8149:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8188:9;8204:1;8200;:5;;;;;;8188:17;;8312:1;8305:8;;;8043:278;;;;;:::o;34431:405::-;34491:7;34500;34509;34518;34538:12;34553:24;34569:7;34553:15;:24::i;:::-;34538:39;;34588:18;34609:30;34631:7;34609:21;:30::i;:::-;34588:51;;34650:12;34665:24;34681:7;34665:15;:24::i;:::-;34650:39;;34700:23;34726:43;34764:4;34726:33;34748:10;34726:17;34738:4;34726:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;34700:69;;34788:15;34805:4;34811:10;34823:4;34780:48;;;;;;;;;;;;34431:405;;;;;:::o;34844:500::-;34973:7;34982;34991;35011:15;35029:24;35041:11;35029:7;:11;;:24;;;;:::i;:::-;35011:42;;35064:12;35079:21;35088:11;35079:4;:8;;:21;;;;:::i;:::-;35064:36;;35111:18;35132:27;35147:11;35132:10;:14;;:27;;;;:::i;:::-;35111:48;;35170:12;35185:21;35194:11;35185:4;:8;;:21;;;;:::i;:::-;35170:36;;35217:23;35243:43;35281:4;35243:33;35265:10;35243:17;35255:4;35243:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;35217:69;;35305:7;35314:15;35331:4;35297:39;;;;;;;;;;;34844:500;;;;;;;;;:::o;40259:475::-;40325:21;40363:1;40349:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40325:40;;40394:4;40376;40381:1;40376:7;;;;;;;;;;;;;:23;;;;;;;;;;;40420:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40410:4;40415:1;40410:7;;;;;;;;;;;;;:32;;;;;;;;;;;40455:62;40472:4;40487:15;40505:11;40455:8;:62::i;:::-;40530:15;:66;;;40611:11;40637:1;40653:4;40680;40700:15;40530:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40259:475;;:::o;40742:392::-;40823:62;40840:4;40855:15;40873:11;40823:8;:62::i;:::-;40928:15;:31;;;40967:9;41000:4;41020:11;41046:1;41062;41078:7;:5;:7::i;:::-;41100:15;40928:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40742:392;;:::o;37292:308::-;37349:1;37338:7;;:12;:34;;;;;37371:1;37354:13;;:18;37338:34;:50;;;;;37387:1;37376:7;;:12;37338:50;37335:62;;;37390:7;;37335:62;37427:7;;37409:15;:25;;;;37469:13;;37445:21;:37;;;;37511:7;;37493:15;:25;;;;37541:1;37531:7;:11;;;;37569:1;37553:13;:17;;;;37591:1;37581:7;:11;;;;37292:308;:::o;43369:717::-;43472:15;43489:23;43514:12;43528:23;43553:12;43567:18;43587:12;43603:19;43614:7;43603:10;:19::i;:::-;43471:151;;;;;;;;;;;;;;43651:28;43671:7;43651;:15;43659:6;43651:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43633:7;:15;43641:6;43633:15;;;;;;;;;;;;;;;:46;;;;43708:28;43728:7;43708;:15;43716:6;43708:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43690:7;:15;43698:6;43690:15;;;;;;;;;;;;;;;:46;;;;43768:39;43791:15;43768:7;:18;43776:9;43768:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43747:7;:18;43755:9;43747:18;;;;;;;;;;;;;;;:60;;;;43818:26;43833:10;43818:14;:26::i;:::-;43855:17;43867:4;43855:11;:17::i;:::-;43883:23;43895:4;43901;43883:11;:23::i;:::-;43939:9;43922:44;;43931:6;43922:44;;;43950:15;43922:44;;;;;;;;;;;;;;;;;;43999:13;;;;;;;;;;;43982:37;;43991:6;43982:37;;;44014:4;43982:37;;;;;;;;;;;;;;;;;;44060:4;44035:43;;44044:6;44035:43;;;44067:10;44035:43;;;;;;;;;;;;;;;;;;43369:717;;;;;;;;;;:::o;42632:729::-;42733:15;42750:23;42775:12;42789:23;42814:12;42828:18;42848:12;42864:19;42875:7;42864:10;:19::i;:::-;42732:151;;;;;;;;;;;;;;42912:28;42932:7;42912;:15;42920:6;42912:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42894:7;:15;42902:6;42894:15;;;;;;;;;;;;;;;:46;;;;42972:39;42995:15;42972:7;:18;42980:9;42972:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42951:7;:18;42959:9;42951:18;;;;;;;;;;;;;;;:60;;;;43043:39;43066:15;43043:7;:18;43051:9;43043:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43022:7;:18;43030:9;43022:18;;;;;;;;;;;;;;;:60;;;;43093:26;43108:10;43093:14;:26::i;:::-;43130:17;43142:4;43130:11;:17::i;:::-;43158:23;43170:4;43176;43158:11;:23::i;:::-;43214:9;43197:44;;43206:6;43197:44;;;43225:15;43197:44;;;;;;;;;;;;;;;;;;43274:13;;;;;;;;;;;43257:37;;43266:6;43257:37;;;43289:4;43257:37;;;;;;;;;;;;;;;;;;43335:4;43310:43;;43319:6;43310:43;;;43342:10;43310:43;;;;;;;;;;;;;;;;;;42632:729;;;;;;;;;;:::o;41968:656::-;42067:15;42084:23;42109:12;42123:23;42148:12;42162:18;42182:12;42198:19;42209:7;42198:10;:19::i;:::-;42066:151;;;;;;;;;;;;;;42246:28;42266:7;42246;:15;42254:6;42246:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42228:7;:15;42236:6;42228:15;;;;;;;;;;;;;;;:46;;;;42306:39;42329:15;42306:7;:18;42314:9;42306:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42285:7;:18;42293:9;42285:18;;;;;;;;;;;;;;;:60;;;;42356:26;42371:10;42356:14;:26::i;:::-;42393:17;42405:4;42393:11;:17::i;:::-;42421:23;42433:4;42439;42421:11;:23::i;:::-;42477:9;42460:44;;42469:6;42460:44;;;42488:15;42460:44;;;;;;;;;;;;;;;;;;42537:13;;;;;;;;;;;42520:37;;42529:6;42520:37;;;42552:4;42520:37;;;;;;;;;;;;;;;;;;42598:4;42573:43;;42582:6;42573:43;;;42605:10;42573:43;;;;;;;;;;;;;;;;;;41968:656;;;;;;;;;;:::o;31780:788::-;31883:15;31900:23;31925:12;31939:23;31964:12;31978:18;31998:12;32014:19;32025:7;32014:10;:19::i;:::-;31882:151;;;;;;;;;;;;;;32062:28;32082:7;32062;:15;32070:6;32062:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32044:7;:15;32052:6;32044:15;;;;;;;;;;;;;;;:46;;;;32119:28;32139:7;32119;:15;32127:6;32119:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32101:7;:15;32109:6;32101:15;;;;;;;;;;;;;;;:46;;;;32179:39;32202:15;32179:7;:18;32187:9;32179:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32158:7;:18;32166:9;32158:18;;;;;;;;;;;;;;;:60;;;;32250:39;32273:15;32250:7;:18;32258:9;32250:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32229:7;:18;32237:9;32229:18;;;;;;;;;;;;;;;:60;;;;32300:26;32315:10;32300:14;:26::i;:::-;32337:17;32349:4;32337:11;:17::i;:::-;32365:23;32377:4;32383;32365:11;:23::i;:::-;32421:9;32404:44;;32413:6;32404:44;;;32432:15;32404:44;;;;;;;;;;;;;;;;;;32481:13;;;;;;;;;;;32464:37;;32473:6;32464:37;;;32496:4;32464:37;;;;;;;;;;;;;;;;;;32542:4;32517:43;;32526:6;32517:43;;;32549:10;32517:43;;;;;;;;;;;;;;;;;;31780:788;;;;;;;;;;:::o;37608:161::-;37662:15;;37652:7;:25;;;;37704:21;;37688:13;:37;;;;37746:15;;37736:7;:25;;;;37608:161::o;36794:154::-;36858:7;36885:55;36924:5;36885:20;36897:7;;36885;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;36878:62;;36794:154;;;:::o;36956:166::-;37026:7;37053:61;37098:5;37053:26;37065:13;;37053:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;37046:68;;36956:166;;;:::o;37130:154::-;37194:7;37221:55;37260:5;37221:20;37233:7;;37221;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;37214:62;;37130:154;;;:::o;36086:355::-;36149:19;36172:10;:8;:10::i;:::-;36149:33;;36193:18;36214:27;36229:11;36214:10;:14;;:27;;;;:::i;:::-;36193:48;;36277:38;36304:10;36277:7;:22;36293:4;36277:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36252:7;:22;36268:4;36252:22;;;;;;;;;;;;;;;:63;;;;36329:11;:26;36349:4;36329:26;;;;;;;;;;;;;;;;;;;;;;;;;36326:107;;;36395:38;36422:10;36395:7;:22;36411:4;36395:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36370:7;:22;36386:4;36370:22;;;;;;;;;;;;;;;:63;;;;36326:107;36086:355;;;:::o;36449:337::-;36506:19;36529:10;:8;:10::i;:::-;36506:33;;36550:15;36568:24;36580:11;36568:7;:11;;:24;;;;:::i;:::-;36550:42;;36628:35;36655:7;36628;:22;36636:13;;;;;;;;;;;36628:22;;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;36603:7;:22;36611:13;;;;;;;;;;;36603:22;;;;;;;;;;;;;;;:60;;;;36677:11;:26;36689:13;;;;;;;;;;;36677:26;;;;;;;;;;;;;;;;;;;;;;;;;36674:104;;;36743:35;36770:7;36743;:22;36751:13;;;;;;;;;;;36743:22;;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;36718:7;:22;36726:13;;;;;;;;;;;36718:22;;;;;;;;;;;;;;;:60;;;;36674:104;36449:337;;;:::o;33814:147::-;33892:17;33904:4;33892:7;;:11;;:17;;;;:::i;:::-;33882:7;:27;;;;33933:20;33948:4;33933:10;;:14;;:20;;;;:::i;:::-;33920:10;:33;;;;33814:147;;:::o

Swarm Source

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