ETH Price: $2,478.16 (+1.49%)

Token

XchainAI (XAI)
 

Overview

Max Total Supply

100,000,000,000 XAI

Holders

63

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
XchainAI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 1733 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-20
*/

/*
 * Xchain AI (XAI)
 *
 * Revolutionizing AI Experience with Xchain
 *
 * Website: https://xchainai.com/
 * Twitter: https://twitter.com/Xchainaicom/
 * Telegram: https://t.me/xchainai/
 *
 * By Studio L, Legacy Capital Division
 * https://legacycapital.cc/
*/

// SPDX-License-Identifier: MIT

// File: StudioL/XChain_AI/interface/IPairV2.sol



pragma solidity ^0.8.0;

interface IPairV2 {
    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 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;
}
// File: StudioL/XChain_AI/interface/IOKCDexRouterV1.sol


pragma solidity ^0.8.0;

// FACTORY CA: 0x7b9f0a56ca7d20a44f603c03c6f45db95b31e539
interface IOKCDexRouterV1 {
    function factory() external pure returns (address);

    function WOKT() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityOKT(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountOKTMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountOKT, uint256 liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityOKT(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountOKTMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountOKT);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityOKTWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountOKTMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountOKT);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactOKTForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactOKT(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForOKT(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapOKTForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function getAmountsIn(
        uint256 amountOut,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function removeLiquidityOKTSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountOKTMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountOKT);

    function removeLiquidityOKTWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountOKTMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountOKT);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactOKTForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForOKTSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
// File: StudioL/XChain_AI/interface/ICANTODexRouterV1.sol


pragma solidity ^0.8.0;

// FACTORY CA: 0xE387067f12561e579C5f7d4294f51867E0c1cFba
interface ICANTODexRouterV1 {
    function factory() external pure returns (address);

    function wcanto() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityCANTO(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountCANTOMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountCANTO, uint256 liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityCANTO(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountCANTOMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountCANTO);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityCANTOWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountCANTOMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountCANTO);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactCANTOForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactCANTO(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForCANTO(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapCANTOForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

}
// File: StudioL/XChain_AI/interface/IAVAXTJDexRouterV1.sol


pragma solidity ^0.8.0;

// FACTORY CA: 0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10
interface IAVAXTJDexRouterV1 {
    function factory() external pure returns (address);

    function WAVAX() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityAVAX(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountAVAX, uint256 liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityAVAX(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountAVAX);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityAVAXWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountAVAX);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactAVAXForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactAVAX(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForAVAX(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapAVAXForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function getAmountsIn(
        uint256 amountOut,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountAVAX);

    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountAVAX);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
// File: StudioL/XChain_AI/interface/IDexRouterV2.sol


pragma solidity ^0.8.0;

interface IDexRouterV2 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function getAmountsIn(
        uint256 amountOut,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

// File: StudioL/XChain_AI/interface/IFactoryV2.sol


pragma solidity ^0.8.0;

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
}
// File: StudioL/XChain_AI/interface/IPoolV3.sol


pragma solidity >=0.5.0;

/// @title Pool state that never changes
/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values
interface IPoolV3 {
    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface
    /// @return The contract address
    function factory() external view returns (address);

    /// @notice The first of the two tokens of the pool, sorted by address
    /// @return The token contract address
    function token0() external view returns (address);

    /// @notice The second of the two tokens of the pool, sorted by address
    /// @return The token contract address
    function token1() external view returns (address);

    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6
    /// @return The fee
    function fee() external view returns (uint24);

    /// @notice The pool tick spacing
    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive
    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...
    /// This value is an int24 to avoid casting even though it is always positive.
    /// @return The tick spacing
    function tickSpacing() external view returns (int24);

    /// @notice The maximum amount of position liquidity that can use any tick in the range
    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and
    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool
    /// @return The max amount of liquidity per tick
    function maxLiquidityPerTick() external view returns (uint128);
}
// File: StudioL/XChain_AI/interface/IDexRouterV3.sol


pragma solidity ^0.8.0;

interface IDexRouterV3 {
    function factory() external pure returns (address);

    function WETH9() external pure returns (address);

    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint deadline;
        uint amountIn;
        uint amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }

    /// @notice Swaps amountIn of one token for as much as possible of another token
    /// @param params The parameters necessary for the swap, encoded as ExactInputSingleParams in calldata
    /// @return amountOut The amount of the received token
    function exactInputSingle(
        ExactInputSingleParams calldata params
    ) external payable returns (uint amountOut);

    struct ExactInputParams {
        bytes path;
        address recipient;
        uint deadline;
        uint amountIn;
        uint amountOutMinimum;
    }

    /// @notice Swaps amountIn of one token for as much as possible of another along the specified path
    /// @param params The parameters necessary for the multi-hop swap, encoded as ExactInputParams in calldata
    /// @return amountOut The amount of the received token
    function exactInput(
        ExactInputParams calldata params
    ) external payable returns (uint amountOut);

    function swapExactTokensForTokens (
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to
    ) external payable;

    function swapTokensForExactTokens (
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to
    ) external payable;
}

// File: StudioL/XChain_AI/interface/IFactoryV3.sol


pragma solidity ^0.8.0;

/// @title The interface for the Uniswap V3 Factory
/// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees
interface IFactoryV3 {
    /// @notice Emitted when the owner of the factory is changed
    /// @param oldOwner The owner before the owner was changed
    /// @param newOwner The owner after the owner was changed
    event OwnerChanged(address indexed oldOwner, address indexed newOwner);

    /// @notice Emitted when a pool is created
    /// @param token0 The first token of the pool by address sort order
    /// @param token1 The second token of the pool by address sort order
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @param tickSpacing The minimum number of ticks between initialized ticks
    /// @param pool The address of the created pool
    event PoolCreated(
        address indexed token0,
        address indexed token1,
        uint24 indexed fee,
        int24 tickSpacing,
        address pool
    );

    /// @notice Emitted when a new fee amount is enabled for pool creation via the factory
    /// @param fee The enabled fee, denominated in hundredths of a bip
    /// @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee
    event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing);

    /// @notice Returns the current owner of the factory
    /// @dev Can be changed by the current owner via setOwner
    /// @return The address of the factory owner
    function owner() external view returns (address);

    /// @notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled
    /// @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context
    /// @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee
    /// @return The tick spacing
    function feeAmountTickSpacing(uint24 fee) external view returns (int24);

    /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist
    /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order
    /// @param tokenA The contract address of either token0 or token1
    /// @param tokenB The contract address of the other token
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @return pool The pool address
    function getPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) external view returns (address pool);

    /// @notice Creates a pool for the given two tokens and fee
    /// @param tokenA One of the two tokens in the desired pool
    /// @param tokenB The other of the two tokens in the desired pool
    /// @param fee The desired fee for the pool
    /// @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved
    /// from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments
    /// are invalid.
    /// @return pool The address of the newly created pool
    function createPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) external returns (address pool);

    /// @notice Updates the owner of the factory
    /// @dev Must be called by the current owner
    /// @param _owner The new owner of the factory
    function setOwner(address _owner) external;

    /// @notice Enables a fee amount with the given tickSpacing
    /// @dev Fee amounts may never be removed once enabled
    /// @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)
    /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount
    function enableFeeAmount(uint24 fee, int24 tickSpacing) external;
}
// File: StudioL/XChain_AI/lib/TransferHelper.sol


// Customized by StudioL

pragma solidity >=0.8.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal returns (bool) {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeApprove: approve failed'
        );
        return success;
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal returns (bool) {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeTransfer: transfer failed'
        );
        return success;
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal returns (bool) {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::transferFrom: transferFrom failed'
        );
        return success;
    }

    function safeTransferETH(address to, uint256 value) internal returns (bool) {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
        return success;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: StudioL/XChain_AI/AutoLiqSnSW_MaxWlt_Pausable_01_01.sol

/*
 * Xchain AI (XCAI)
 *
 * Revolutionizing AI Experience with Xchain
 *
 * Website: https://xchainai.com/
 * Twitter: https://twitter.com/Xchainaicom/
 * Telegram: https://t.me/xchainai/
 *
 * By Studio L, Legacy Capital Division
 * https://legacycapital.cc/
*/


pragma solidity >=0.8.0 <0.9.0;












interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IAntiBot {
    function authorizeRequestAB(address _tokenAddr) external;
    function checkAuthorized(address tokenCA) external returns (bool);
    function setProtections(
        address pairCA,
        bool antiSnipe,
        bool antiBlock,
        uint8 snipeBlockAmt,
        uint32 snipeBlockTime
    ) payable external returns (bool);
    function getProtTokenLPPoolProtectionStatus(address poolCA) external view returns (bool antiSnipe_, bool antiBlock_);
    function setLaunch(
        address lpPairCA,
        address pairedCoinCA,
        address dexCA,
        bool V2orV3,
        uint256 tradingEnabledBlock,
        uint256 tradingEnabledTime
    ) external returns (bool);
    function sniperProtection(
        address poolCA,
        address from,
        address to,
        bool buy,
        bool sell
    ) external returns (bool sniperTest, bool protectionSwitch);
    function sdwchBotProtection(address poolCA, address from, address to, bool buy, bool sell) external returns (bool);
}

interface ILPLocker {
    function setContractSwapSettings(uint256 _swapAmount) external returns (bool);
    function setDevelopmentWallet(address _development) external returns (bool);
    function setMarketingWallet(address _marketing) external returns (bool);
    function swapTokensAddNativeLiquidity(
        bool V2orV3,
        address pairedCoinCA
    ) external returns (
        bool success_
    );
    function swapTokensNonNative(
        bool V2orV3,
        address pairedCoinCA
    ) external returns (
        bool success_
    );
}

contract XchainAI is IERC20, Context {

    uint16 constant DIVISOR = 10000;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

//Token Variables
    string constant private _name = "XchainAI";
    string constant private _symbol = "XAI";

    uint64 constant private startingSupply = 100_000_000_000; //100 Billion, underscores aid readability
    uint8 constant private _decimals = 18;

    uint256 constant private _tTotal = startingSupply * (10 ** _decimals);

    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

//Router, LP Pair Variables
    address private dexRouterCA;
    address constant public dexRouterV2CA = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    IDexRouterV2 constant public dexRouterV2 = IDexRouterV2(dexRouterV2CA);
    address constant public dexRouterV3CA = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
    address private _poolCA;
    address constant public NATIVECOIN = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    mapping (address => LPool[]) private liqPoolList;
    //LP Pairs
    struct LPool {
        address poolCA;
        address pairedCoinCA;
        address dexCA;
        bool V2orV3;
        bool tradingEnabled;
        bool liqAdded;
        bool sniperProtection;
        bool sdBotProtection;
        uint8 snipeBlockAmt;
        uint32 snipeBlockTime;
        uint32 tradingEnabledBlock;
        uint32 tradingEnabledTime;
        uint32 tradingPauseTime;
        uint32 tradingPausedTimestamp;
    }
    mapping (address => bool) private isLiqPool;

    event NewLPCreated(address DexRouterCA, address LPCA, address PairedCoinCA);

    bool public launched = false;
    bool private contractSwapEnabled = false;
    uint256 private swapThreshold;
    uint256 private swapAmount;

    uint32 constant private maxTradePauseTime = 30 days;
    event TradeEnabled(address Setter, address PoolCA, uint256 EnabledBlock, uint256 EnabledTime);
    event TradePaused(address Setter, address PoolCA, uint256 PausedBlock, uint32 PauseTime, uint256 DisabledTimestamp);

//Fee Variables

    struct Taxes {
        uint16 buyTax;
        uint16 sellTax;
    }

    Taxes private _taxes = Taxes({
        buyTax: 1600,
        sellTax: 1600
        });

    struct Ratios {
        uint16 liquidity;
        uint16 dvelopmnt;
        uint16 marketing;
        uint16 totalTax;
    }

    Ratios private _ratiosBuy = Ratios({
        liquidity: 100,
        dvelopmnt: 400,
        marketing: 100,
        totalTax: 600
        });

    Ratios private _ratiosSell = Ratios({
        liquidity: 100,
        dvelopmnt: 400,
        marketing: 100,
        totalTax: 600
        });

    Ratios private _ratiosTransfer = Ratios({
        liquidity: 0,
        dvelopmnt: 0,
        marketing: 0,
        totalTax: 0
        });

    Ratios private _ratiosActive = Ratios({
        liquidity: 100,
        dvelopmnt: 400,
        marketing: 100,
        totalTax: 600
        });

    uint16 constant public maxBuyTaxes = 1900;
    uint16 constant public maxSellTaxes = 1900;
    uint16 constant public maxRoundtripFee = 3800;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;


    struct TaxWallets {
        address lpLocker;
        address development;
        address marketing;
    }

    TaxWallets private _taxWallets = TaxWallets({
        lpLocker: _owner,
        development: _owner,
        marketing: _owner
    });

    event TaxesUpdated(address Setter, uint16 BuyTax, uint16 SellTax, uint256 Timestamp);
    event BuyRatiosUpdated(address Setter, uint16 Liquidity, uint16 Development, uint16 Marketing, uint16 Total, uint256 Timestamp);
    event SellRatiosUpdated(address Setter, uint16 Liquidity, uint16 Development, uint16 Marketing, uint16 Total, uint256 Timestamp);

    event ETHWithdrawn(address Withdrawer, address Recipient, uint256 ETHamount);
    event StuckTokensWithdrawn(address Withdrawer, address Recipient, uint256 TokenAmount);

//Tx & Wallet Variables

    uint256 private _maxWalletSize = (_tTotal * 100) / DIVISOR; // 1%

    //Contract Swap
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    bool public inSwap;
    address[] private contractSwapPath = [ address(this), address(0) ];

    event MaxWalletUpdated(address Setter, uint256 indexed OldMaxWallet, uint256 indexed NewMaxWallet, uint256 Timestamp);

    event ContractSwapEnabledUpdated(bool Enabled);
    event ContractSwapSettingsUpdated(uint256 SwapThreshold, uint256 SwapAmount);
    event AutoLiquify(uint256 TokensSold, address CurrencyCoin, uint256 Timestamp);

//AntiBot

    IAntiBot private antiSnipe;
    address private antiBotCA;

    bool public initialized = false;
    bool public botProtection = false;

    event SniperProtectionTimeElapsed(address ProtectionSwitch, uint256 offBlock, uint256 offTime);

//Owner

    address private _owner;
    event OwnerSet(address Setter, address indexed OldOwner, address indexed NewOwner);

    // ============================================== Constructor ==============================================

    constructor (
        bool _V2orV3,
        bool _pairedIsNative,
        address _LPTargetCoinCA,
        address _lpLocker,
        address _development,
        address _marketing
    ) {
        _owner = _msgSender();

        _taxWallets.lpLocker = _lpLocker;
        _isExcludedFromFees[_lpLocker] = true;
        _isExcludedFromLimits[_lpLocker] = true;
        _liquidityHolders[_lpLocker] = true;
        _allowances[ address(this) ][_lpLocker] = type(uint256).max;
        _allowances[_lpLocker][ address(this) ] = type(uint256).max;
        _allowances[_lpLocker][dexRouterV2CA] = type(uint256).max;
        _allowances[dexRouterV2CA][_lpLocker] = type(uint256).max;
        _allowances[_lpLocker][dexRouterV3CA] = type(uint256).max;
        _allowances[dexRouterV3CA][_lpLocker] = type(uint256).max;

        _taxWallets.development = _development;
        _isExcludedFromFees[_development] = true;
        _isExcludedFromLimits[_development] = true;

        _taxWallets.marketing = _marketing;
        _isExcludedFromFees[_marketing] = true;
        _isExcludedFromLimits[_marketing] = true;

        setNewLiquidityPool(_V2orV3, _LPTargetCoinCA, _pairedIsNative);

        _isExcludedFromFees[_msgSender()] = true;
        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromLimits[_msgSender()] = true;
        _isExcludedFromLimits[_owner] = true;
        _isExcludedFromLimits[address(this)] = true;
        _liquidityHolders[_msgSender()] = true;
        _liquidityHolders[_owner] = true;

        _tOwned[_msgSender()] = _tTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    // ============================================== Modifiers ==============================================

    modifier onlyOwner() {
        require(_msgSender() == _owner);
        _;
    }

    modifier onlyLPLocker() {
        require(_msgSender() == _taxWallets.lpLocker ||
                _msgSender() == address(this)
               );
        _;
    }

//===============================================================================================================
//Override Functions

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { if (_tTotal == 0) { revert(); } return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function balanceOf(address account) external view override returns (uint256) {
        return _tOwned[account];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][_msgSender()] != type(uint256).max) {
            require(_allowances[sender][ _msgSender() ] >= amount, "ERC20: transfer amount exceeds allowance");
            _approve(sender, _msgSender(), _allowances[sender][ _msgSender() ] - amount);
        }
        _transfer(sender, recipient, amount);
        return true;
    }

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

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

//===============================================================================================================
//Common Functions

    function rescueStuckAssets(bool ethOrToken, address tokenCA, uint256 amt, address receivable) external onlyOwner {
        require(amt <= contractBalanceInWei(ethOrToken, tokenCA));
        bool sent;
        if (ethOrToken){
            sent = TransferHelper.safeTransferETH(receivable, amt);
            require(sent, "StudioL: Tx failed");
            emit ETHWithdrawn(_msgSender(), receivable, amt);
        } else {
            sent = TransferHelper.safeTransfer(tokenCA, receivable, amt);
            require(sent, "StudioL: Tx failed");
            emit StuckTokensWithdrawn(_msgSender(), receivable, amt);
        }
    }

    function contractBalanceInWei(bool ethOrToken, address tokenCA) public view returns (uint256) {
        if (ethOrToken){
            return address(this).balance;
        } else {
            return IERC20(tokenCA).balanceOf(address(this));
        }
    }

    receive() payable external {}

    function multiSendTokens(address[] memory accounts, uint256[] memory amountsInWei) external onlyOwner {
        require(accounts.length == amountsInWei.length, "StudioL_Token: Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(_tOwned[ _msgSender() ] >= amountsInWei[i]);
            _transfer(_msgSender(), accounts[i], amountsInWei[i]);
        }
    }

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

//===============================================================================================================
//Dex Router and LPool Manager Functions

    function setNewLiquidityPool(bool _V2orV3, address _LPTargetCoinCA, bool _pairedIsNative) public onlyOwner {
        if(_pairedIsNative == false){
            require(_LPTargetCoinCA != address(0), "StudioL_Token: Must Provide LP Target Token Contract Address!");
        }
        _isExcludedFromFees[dexRouterV2CA] = true;
        _isExcludedFromLimits[dexRouterV2CA] = true;
        _liquidityHolders[dexRouterV2CA] = true;

        _allowances[ _msgSender() ][dexRouterV2CA] = type(uint256).max;
        _allowances[dexRouterV2CA][ _msgSender() ] = type(uint256).max;
        _allowances[_owner][dexRouterV2CA] = type(uint256).max;
        _allowances[dexRouterV2CA][_owner] = type(uint256).max;
        _allowances[ address(this) ][dexRouterV2CA] = type(uint256).max;
        _allowances[dexRouterV2CA][ address(this) ] = type(uint256).max;

        _isExcludedFromFees[dexRouterV3CA] = true;
        _isExcludedFromLimits[dexRouterV3CA] = true;
        _liquidityHolders[dexRouterV3CA] = true;

        _allowances[ _msgSender() ][dexRouterV3CA] = type(uint256).max;
        _allowances[dexRouterV3CA][ _msgSender() ] = type(uint256).max;
        _allowances[_owner][dexRouterV3CA] = type(uint256).max;
        _allowances[dexRouterV3CA][_owner] = type(uint256).max;
        _allowances[ address(this) ][dexRouterV3CA] = type(uint256).max;
        _allowances[dexRouterV3CA][ address(this) ] = type(uint256).max;

        address lpCA;

        if(_V2orV3) {
            if(_pairedIsNative) {
                _LPTargetCoinCA = NATIVECOIN;
            }
            lpCA = IFactoryV2( IDexRouterV2(dexRouterV2CA).factory() ).getPair( _LPTargetCoinCA, address(this) );
            require(lpCA == address(0) && !isLiqPool[lpCA], "StudioL_Token: Pair already exists!");
            lpCA = IFactoryV2( IDexRouterV2(dexRouterV2CA).factory() ).createPair( _LPTargetCoinCA, address(this) );
        } else {
            if(_pairedIsNative) {
                _LPTargetCoinCA = NATIVECOIN;
            }
            lpCA = IFactoryV3( IDexRouterV3(dexRouterV3CA).factory() ).getPool( _LPTargetCoinCA, address(this), 3000 );
            require(lpCA == address(0) && !isLiqPool[lpCA], "StudioL_Token: Pool already exists!");
            lpCA = IFactoryV3( IDexRouterV3(dexRouterV3CA).factory() ).createPool( _LPTargetCoinCA, address(this), 3000 );
        }

        if(_V2orV3) {
            dexRouterCA = dexRouterV2CA;
        } else {
            dexRouterCA = dexRouterV3CA;
        }
        liqPoolList[ address(this) ].push( LPool( lpCA, _LPTargetCoinCA, dexRouterCA, _V2orV3, false, false, false, false, 0, 0, 0, 0, 0, 0) );

        isLiqPool[lpCA] = true;

        _allowances[lpCA][ _msgSender() ] = type(uint256).max;
        _allowances[ _msgSender() ][lpCA] = type(uint256).max;
        _allowances[lpCA][dexRouterCA] = type(uint256).max;
        _allowances[dexRouterCA][lpCA] = type(uint256).max;

        IERC20(lpCA).approve(dexRouterCA, type(uint256).max);

        emit NewLPCreated(dexRouterCA, lpCA, _LPTargetCoinCA);
    }

    function searchLiqPool(address pool) private view returns (uint8) {
        LPool[] memory poolInfo = liqPoolList[ address(this) ];

        for(uint8 i = 0; i < poolInfo.length; i++) {
            if(poolInfo[i].poolCA == pool) {return i;}
        }
        return type(uint8).max;
    }

    function getAllLiqPoolsData() external view returns (LPool[] memory) {
        return liqPoolList[ address(this) ];
    }

    function getLiqPoolsCount() external view returns (uint256) {
        return liqPoolList[ address(this) ].length;
    }

    function verifyLiqPool(address _ca) external view returns (bool) {
        return isLiqPool[_ca];
    }

//===============================================================================================================
//Antisniper Functions

    function requestProtection(address _antiBotCA) external onlyOwner returns (bool) {
        require(_antiBotCA != address(this), "StudioL_Token: Can't be self.");
        require(_antiBotCA.code.length > 0, "StudioL_Token: Can't be non-contract.");
        bool requested = false;
        antiSnipe = IAntiBot(_antiBotCA);
        antiBotCA = _antiBotCA;
        try antiSnipe.authorizeRequestAB( address(this) ) {
            requested = true;
        } catch {
            revert();
        }
        require(requested, "StudioL_Token: failed to request protection.");

        return requested;
    }

    function setProtection(
        address poolCA,
        bool _antiSWBot,
        bool _antiSnipe,
        uint8 snipeBlockAmt,
        uint32 snipeBlockTimeInSecs
    ) payable external onlyOwner returns (bool) {
        LPool storage poolInfo = liqPoolList[ address(this) ][ searchLiqPool(poolCA) ];
        bool checked = false;
        if(!initialized) {
            initialized = antiSnipe.checkAuthorized( address(this) );
        }
        if(_antiSnipe || _antiSWBot) {
            bool antiSnipe_;
            bool antiSw_;
            (antiSnipe_, antiSw_) = antiSnipe.getProtTokenLPPoolProtectionStatus(poolCA);
            if(antiSnipe_ != _antiSnipe || antiSw_ != _antiSWBot) {
                require(initialized, "StudioL_Token: protection request not authorized yet.");

                checked = antiSnipe.setProtections{value: msg.value}(
                    poolCA,
                    _antiSnipe,
                    _antiSWBot,
                    snipeBlockAmt,
                    snipeBlockTimeInSecs
                );
                require(checked, "StudioL_Token: failed to set protection.");
            }
            botProtection = true;

            _isExcludedFromFees[antiBotCA] = true;
            _isExcludedFromLimits[antiBotCA] = true;
            _allowances[poolCA][antiBotCA] = type(uint256).max;
            _allowances[antiBotCA][poolCA] = type(uint256).max;
            _allowances[antiBotCA][dexRouterV2CA] = type(uint256).max;
            _allowances[antiBotCA][dexRouterV3CA] = type(uint256).max;
        } else {
            botProtection = false;
        }
        poolInfo.sniperProtection = _antiSnipe;
        poolInfo.sdBotProtection = _antiSWBot;
        poolInfo.snipeBlockAmt = snipeBlockAmt;
        poolInfo.snipeBlockTime = snipeBlockTimeInSecs;
    
        return checked;
    }

    function enableTrading(address poolCA) external onlyOwner {
        LPool storage poolInfo = liqPoolList[ address(this) ][ searchLiqPool(poolCA) ];
        if(poolInfo.tradingPauseTime != 0) {
            poolInfo.tradingEnabled = true;
            poolInfo.tradingPauseTime = 0;
        } else {
            require(poolInfo.liqAdded, "StudioL_Token: Liquidity must be added.");
            require(poolInfo.tradingEnabled != true, "StudioL_Token: trading already enabled.");

            if(poolInfo.sniperProtection || poolInfo.sdBotProtection) {
                bool checked = antiSnipe.setLaunch(
                    poolCA,
                    poolInfo.pairedCoinCA,
                    poolInfo.dexCA,
                    poolInfo.V2orV3,
                    block.number,
                    block.timestamp
                );
                require(checked, "StudioL_Token: set launch tx failed.");
            }

            launched = true;
            poolInfo.tradingEnabled = true;
            poolInfo.tradingEnabledBlock = uint32(block.number);
            poolInfo.tradingEnabledTime = uint32(block.timestamp);

            setContractSwapSettings(true, 10, 11);
            // swapThreshold = (_tTotal * 10) / 10000; //0.1%
            // swapAmount = (_tTotal * 11) / 10000; //0.11%
        }
        emit TradeEnabled(_msgSender(), poolCA, block.number, block.timestamp);
    }

    function pauseTradeByPool(address[] calldata poolCA, bool pauseAllPools, uint32 pauseTimeInSecs) external onlyOwner {
        require(pauseTimeInSecs <= maxTradePauseTime, "StudioL_Token: cannot pause longer than max trade pause time.");
        LPool[] storage poolInfo = liqPoolList[ address(this) ];
        if(pauseAllPools) {
            for(uint8 i = 0; i < poolInfo.length; i++) {
                require(block.timestamp > 1 days + poolInfo[i].tradingPausedTimestamp, "StudioL_Token: can't pause again until cooldown is over.");
                poolInfo[i].tradingEnabled = false;
                poolInfo[i].tradingPauseTime = pauseTimeInSecs;
                poolInfo[i].tradingPausedTimestamp = uint32(block.timestamp);
                emit TradePaused(_msgSender(), poolInfo[i].poolCA, block.number, pauseTimeInSecs, block.timestamp);
            }
        } else {
            for(uint8 i = 0; i < poolCA.length; i++) {
                uint8 index = searchLiqPool(poolCA[i]);
                require(block.timestamp > 1 days + poolInfo[index].tradingPausedTimestamp, "StudioL_Token: can't pause again until cooldown is over.");
                poolInfo[index].tradingEnabled = false;
                poolInfo[index].tradingPauseTime = pauseTimeInSecs;
                poolInfo[index].tradingPausedTimestamp = uint32(block.timestamp);
                emit TradePaused(_msgSender(), poolCA[i], block.number, pauseTimeInSecs, block.timestamp);
            }
        }
    }

    function getMaxTradePauseTimeInDays() external pure returns (uint32) {
        return maxTradePauseTime / 1 days;
    }

    function getRemainingPauseTimeInSecs(address poolCA) public view returns (uint256) {
        uint8 index = searchLiqPool(poolCA);
        if(liqPoolList[ address(this) ][index].tradingPauseTime + liqPoolList[ address(this) ][index].tradingPausedTimestamp > block.timestamp) {
            return liqPoolList[ address(this) ][index].tradingPauseTime + liqPoolList[ address(this) ][index].tradingPausedTimestamp - block.timestamp;
        } else {
            return 0;            
        }
    }

//===============================================================================================================
//Fee Settings

//Set Fees and its Ratios
    function setTaxes(
        uint16 _buyTax,
        uint16 _sellTax,
        uint16 _liquidityBuy,
        uint16 _developmentBuy,
        uint16 _marketingBuy,
        uint16 _liquiditySell,
        uint16 _developmentSell,
        uint16 _marketingSell
    ) external onlyLPLocker returns (bool) {

        _taxes.buyTax = _buyTax;
        _taxes.sellTax = _sellTax;

        emit TaxesUpdated(_msgSender(), _buyTax, _sellTax, block.timestamp);
        setBuyRatios(_liquidityBuy, _developmentBuy, _marketingBuy);
        setSellRatios(_liquiditySell, _developmentSell, _marketingSell);
        return true;
    }

    function setBuyRatios(uint16 _liquidity, uint16 _development, uint16 _marketing) private {
        {
        _ratiosBuy.liquidity = _liquidity;
        _ratiosBuy.dvelopmnt = _development;
        _ratiosBuy.marketing = _marketing;
        _ratiosBuy.totalTax = _ratiosBuy.liquidity + _ratiosBuy.dvelopmnt + _ratiosBuy.marketing;
        }
        emit BuyRatiosUpdated(_msgSender(), _ratiosBuy.liquidity, _ratiosBuy.dvelopmnt, _ratiosBuy.marketing, _ratiosBuy.totalTax, block.timestamp);
    }

    function setSellRatios(uint16 _liquidity, uint16 _development, uint16 _marketing) private {
        {
        _ratiosSell.liquidity = _liquidity;
        _ratiosSell.dvelopmnt = _development;
        _ratiosSell.marketing = _marketing;
        _ratiosSell.totalTax = _ratiosSell.liquidity + _ratiosSell.dvelopmnt + _ratiosSell.marketing;
        }
        emit SellRatiosUpdated(_msgSender(), _ratiosSell.liquidity, _ratiosSell.dvelopmnt, _ratiosSell.marketing, _ratiosSell.totalTax, block.timestamp);
    }

    function getTaxesAndRatios() external view returns (
        uint16 buyTax_,
        uint16 sellTax_,
        uint16 buyLiquidityRatio_,
        uint16 buyDevelopmentRatio_,
        uint16 buyMarketingRatio_,
        uint16 sellLiquidityRatio_,
        uint16 sellDevelopmentRatio_,
        uint16 sellMarketingRatio_
    ) {
        return (
            _taxes.buyTax,
            _taxes.sellTax,
            _ratiosBuy.liquidity,
            _ratiosBuy.dvelopmnt,
            _ratiosBuy.marketing,
            _ratiosSell.liquidity,
            _ratiosSell.dvelopmnt,
            _ratiosSell.marketing
        );
    }

//Contract Swap functions
    function setContractSwapSettings(bool _switch, uint8 swapThresholdBps, uint8 amountBps) public onlyOwner {
        contractSwapEnabled = _switch;
        swapThreshold = (_tTotal * swapThresholdBps) / 10000;
        swapAmount = (_tTotal * amountBps) / 10000;
        require(swapThreshold <= swapAmount, "StudioL_Token: Threshold cannot be above amount.");

        emit ContractSwapEnabledUpdated(_switch);
        emit ContractSwapSettingsUpdated(swapThreshold, swapAmount);

        bool success = ILPLocker(_taxWallets.lpLocker).setContractSwapSettings(swapAmount);
        require(success, "StudioL_Token: Update contract swap settings at LP Locker contract tx failed.");
    }

    function getContractSwapSettings() external view returns (bool contractSwapEnabled_, uint256 swapThreshold_, uint256 swapAmount_) {
        return (contractSwapEnabled, swapThreshold, swapAmount);
    }

//Fee wallet functions
    function setLPLocker(address _lpLocker) external onlyOwner {
        _taxWallets.lpLocker = _lpLocker;
        _isExcludedFromFees[_lpLocker] = true;
        _isExcludedFromLimits[_lpLocker] = true;
        _liquidityHolders[_lpLocker] = true;
        _allowances[ address(this) ][_lpLocker] = type(uint256).max;
        _allowances[_lpLocker][ address(this) ] = type(uint256).max;
        _allowances[_lpLocker][dexRouterV2CA] = type(uint256).max;
        _allowances[dexRouterV2CA][_lpLocker] = type(uint256).max;
        _allowances[_lpLocker][dexRouterV3CA] = type(uint256).max;
        _allowances[dexRouterV3CA][_lpLocker] = type(uint256).max;
    }

    function setDevelopmentWallet(address _development) external onlyOwner {
        _taxWallets.development = _development;
        _isExcludedFromFees[_development] = true;
        _isExcludedFromLimits[_development] = true;
        bool success = ILPLocker(_taxWallets.lpLocker).setDevelopmentWallet(_development);
        require(success, "StudioL_Token: Update Development Wallet at LP Locker contract tx failed.");
    }

    function setMarketingWallet(address _marketing) external onlyOwner {
        _taxWallets.marketing = _marketing;
        _isExcludedFromFees[_marketing] = true;
        _isExcludedFromLimits[_marketing] = true;
        bool success = ILPLocker(_taxWallets.lpLocker).setMarketingWallet(_marketing);
        require(success, "StudioL_Token: Update Marketing Wallet at LP Locker contract tx failed.");
    }

    function getFeeWallets() external view returns (address lpLocker_, address development_, address marketing_) {
        return (_taxWallets.lpLocker, _taxWallets.development, _taxWallets.marketing);
    }

//===============================================================================================================
//Tx & User Wallet Settings

    function setMaxWalletSize(uint16 bps) external onlyOwner {
        require(_maxWalletSize != 0, "StudioL_Token: Max Wallet cannot be set once it has been set to 0 to turn off.");
        require((_tTotal * bps) / DIVISOR >= (_tTotal / 100), "StudioL_Token: Max Wallet amt must be above 1% of total supply.");

        emit MaxWalletUpdated(_msgSender(), _maxWalletSize, _tTotal * bps / DIVISOR, block.timestamp);
        _maxWalletSize = _tTotal * bps / DIVISOR;
    }

    function getMaxWalletSize() external view returns (uint256) {
        return _maxWalletSize;
    }

    function setExcludedFromFees(address account, bool _switch) external onlyOwner {
        _isExcludedFromFees[account] = _switch;
    }

    function setExcludedFromLimits(address account, bool _switch) external onlyOwner {
        _isExcludedFromLimits[account] = _switch;
    }

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

    function isExcludedFromLimits(address account) external view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[from]
            && !_liquidityHolders[to]
            && !_isExcludedFromLimits[from]
            && !_isExcludedFromLimits[to]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

//======================================================================================
//Transfer Functions

    function _transfer(address from, address to, uint256 amount) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "StudioL_Token: Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;

        if (isLiqPool[from]) {
            buy = true;
            _poolCA = from;
            _ratiosActive = _ratiosBuy;
        } else if (isLiqPool[to]) {
            sell = true;
            _poolCA = to;
            _ratiosActive = _ratiosSell;
        } else {
            other = true;
            _ratiosActive = _ratiosTransfer;
        }
        uint8 index = searchLiqPool(_poolCA);
        LPool memory poolInfo = liqPoolList[ address(this) ][index];

        if( _hasLimits(from, to) ) {
            if(poolInfo.tradingPauseTime != 0) {
                if( getRemainingPauseTimeInSecs(poolInfo.poolCA) == 0 ) {
                    liqPoolList[ address(this) ][index].tradingEnabled = true;
                    liqPoolList[ address(this) ][index].tradingPauseTime = 0;
                }
            }
            require(liqPoolList[ address(this) ][index].tradingEnabled, "StudioL_Token: Trading not enabled!");
            bool checked;

            if(poolInfo.sniperProtection) {
                try antiSnipe.sniperProtection(poolInfo.poolCA, from, to, buy, sell)
                returns (bool tested, bool protection) {
                    checked = tested;
                    liqPoolList[ address(this) ][index].sniperProtection = protection;
                } catch {
                    revert();
                }
                if(!checked) {
                    if(buy) {
                        _allowances[to][antiBotCA] = type(uint256).max;
                    } else {
                        require(checked, "StudioL_AntiBot: Sniper Rejected");
                    }
                }
                if (!poolInfo.sniperProtection) {
                    emit SniperProtectionTimeElapsed(poolInfo.poolCA, block.number, block.timestamp);
                }
            }

            if(poolInfo.sdBotProtection) {
                try antiSnipe.sdwchBotProtection(poolInfo.poolCA, from, to, buy, sell)
                returns (bool tested) {
                    checked = tested;
                } catch {
                    revert();
                }
                if(!checked) {
                    if(buy) {
                        _allowances[to][antiBotCA] = type(uint256).max;
                    } else {
                        require(checked, "StudioL_AntiBot: Sandwich Bot Rejected");
                    }
                }
            }

            if(to != poolInfo.dexCA && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(_tOwned[to] + amount <= _maxWalletSize, "StudioL_Token: Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if(contractSwapEnabled) {
            if(!inSwap) {
                if(!buy) {
                    if(_tOwned[_taxWallets.lpLocker] >= swapThreshold) {
                        contractSwap(poolInfo.V2orV3, poolInfo.pairedCoinCA);
                    }
                }
            }
        }

        // Check if this is the liquidity adding tx to startup.
        if(!poolInfo.liqAdded) {
            _checkLiquidityAdd(poolInfo.poolCA, from, to);
            if(!poolInfo.liqAdded && _hasLimits(from, to) && !other) {
                revert("StudioL_Token: Pre-liquidity transfer protection.");
            }
        }

        uint256 _transferAmount;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            _transferAmount = amount;
        } else {
            uint256 _feeAmount = amount * (_ratiosActive.liquidity + _ratiosActive.dvelopmnt + _ratiosActive.marketing) / DIVISOR;
            _transferAmount = amount - _feeAmount;
            _tOwned[from] -= _feeAmount;
            _tOwned[_taxWallets.lpLocker] += _feeAmount;
            emit Transfer(from, _taxWallets.lpLocker, _feeAmount);
        }

        _tOwned[from] -= _transferAmount;
        _tOwned[to] += _transferAmount;

        emit Transfer(from, to, _transferAmount);
    }

    function _checkLiquidityAdd(address poolAddr, address from, address to) internal {
        LPool storage poolInfo = liqPoolList[ address(this) ][ searchLiqPool(poolAddr) ];
        require(poolInfo.liqAdded == false, "StudioL_Token: Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == poolAddr) {
            _liquidityHolders[from] = true;
            poolInfo.liqAdded = true;
        }
    }

    function triggerContractSwap(bool poolIsV2orV3, address poolPairedCoinCA) external onlyOwner {
        contractSwap(poolIsV2orV3, poolPairedCoinCA);
    }

    function contractSwap(bool _V2orV3, address pairedCoinCA) private lockTheSwap {
        bool success;
        uint256 contractTokenBalance = _tOwned[_taxWallets.lpLocker];
        if(pairedCoinCA == NATIVECOIN) {
            success = ILPLocker(_taxWallets.lpLocker).swapTokensAddNativeLiquidity(_V2orV3, pairedCoinCA);
        } else {
            success = ILPLocker(_taxWallets.lpLocker).swapTokensNonNative(_V2orV3, pairedCoinCA);
        }
        emit AutoLiquify(contractTokenBalance, pairedCoinCA, block.timestamp);
        require(success, "StudioL_Token: AutoLiquidity tx failed");
    }

//===============================================================================================================
//Owner Settings

    function setOwner(address account) external onlyOwner {
        require(_owner != account, "StudioL_Token: Already set to the desired value");
        emit OwnerSet( _msgSender(), _owner, account);
        _owner = account;
    }

    function getOwner() external view returns (address) {
        return _owner;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bool","name":"_V2orV3","type":"bool"},{"internalType":"bool","name":"_pairedIsNative","type":"bool"},{"internalType":"address","name":"_LPTargetCoinCA","type":"address"},{"internalType":"address","name":"_lpLocker","type":"address"},{"internalType":"address","name":"_development","type":"address"},{"internalType":"address","name":"_marketing","type":"address"}],"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":"TokensSold","type":"uint256"},{"indexed":false,"internalType":"address","name":"CurrencyCoin","type":"address"},{"indexed":false,"internalType":"uint256","name":"Timestamp","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Setter","type":"address"},{"indexed":false,"internalType":"uint16","name":"Liquidity","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"Development","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"Marketing","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"Total","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"Timestamp","type":"uint256"}],"name":"BuyRatiosUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"Enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"SwapThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"SwapAmount","type":"uint256"}],"name":"ContractSwapSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Withdrawer","type":"address"},{"indexed":false,"internalType":"address","name":"Recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"ETHamount","type":"uint256"}],"name":"ETHWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Setter","type":"address"},{"indexed":true,"internalType":"uint256","name":"OldMaxWallet","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"NewMaxWallet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"Timestamp","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"DexRouterCA","type":"address"},{"indexed":false,"internalType":"address","name":"LPCA","type":"address"},{"indexed":false,"internalType":"address","name":"PairedCoinCA","type":"address"}],"name":"NewLPCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Setter","type":"address"},{"indexed":true,"internalType":"address","name":"OldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"NewOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Setter","type":"address"},{"indexed":false,"internalType":"uint16","name":"Liquidity","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"Development","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"Marketing","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"Total","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"Timestamp","type":"uint256"}],"name":"SellRatiosUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"ProtectionSwitch","type":"address"},{"indexed":false,"internalType":"uint256","name":"offBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"offTime","type":"uint256"}],"name":"SniperProtectionTimeElapsed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Withdrawer","type":"address"},{"indexed":false,"internalType":"address","name":"Recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"}],"name":"StuckTokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Setter","type":"address"},{"indexed":false,"internalType":"uint16","name":"BuyTax","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"SellTax","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"Timestamp","type":"uint256"}],"name":"TaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Setter","type":"address"},{"indexed":false,"internalType":"address","name":"PoolCA","type":"address"},{"indexed":false,"internalType":"uint256","name":"EnabledBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"EnabledTime","type":"uint256"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Setter","type":"address"},{"indexed":false,"internalType":"address","name":"PoolCA","type":"address"},{"indexed":false,"internalType":"uint256","name":"PausedBlock","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"PauseTime","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"DisabledTimestamp","type":"uint256"}],"name":"TradePaused","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVECOIN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"botProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"ethOrToken","type":"bool"},{"internalType":"address","name":"tokenCA","type":"address"}],"name":"contractBalanceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouterV2","outputs":[{"internalType":"contract IDexRouterV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouterV2CA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouterV3CA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"poolCA","type":"address"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllLiqPoolsData","outputs":[{"components":[{"internalType":"address","name":"poolCA","type":"address"},{"internalType":"address","name":"pairedCoinCA","type":"address"},{"internalType":"address","name":"dexCA","type":"address"},{"internalType":"bool","name":"V2orV3","type":"bool"},{"internalType":"bool","name":"tradingEnabled","type":"bool"},{"internalType":"bool","name":"liqAdded","type":"bool"},{"internalType":"bool","name":"sniperProtection","type":"bool"},{"internalType":"bool","name":"sdBotProtection","type":"bool"},{"internalType":"uint8","name":"snipeBlockAmt","type":"uint8"},{"internalType":"uint32","name":"snipeBlockTime","type":"uint32"},{"internalType":"uint32","name":"tradingEnabledBlock","type":"uint32"},{"internalType":"uint32","name":"tradingEnabledTime","type":"uint32"},{"internalType":"uint32","name":"tradingPauseTime","type":"uint32"},{"internalType":"uint32","name":"tradingPausedTimestamp","type":"uint32"}],"internalType":"struct XchainAI.LPool[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractSwapSettings","outputs":[{"internalType":"bool","name":"contractSwapEnabled_","type":"bool"},{"internalType":"uint256","name":"swapThreshold_","type":"uint256"},{"internalType":"uint256","name":"swapAmount_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeWallets","outputs":[{"internalType":"address","name":"lpLocker_","type":"address"},{"internalType":"address","name":"development_","type":"address"},{"internalType":"address","name":"marketing_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiqPoolsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTradePauseTimeInDays","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"poolCA","type":"address"}],"name":"getRemainingPauseTimeInSecs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxesAndRatios","outputs":[{"internalType":"uint16","name":"buyTax_","type":"uint16"},{"internalType":"uint16","name":"sellTax_","type":"uint16"},{"internalType":"uint16","name":"buyLiquidityRatio_","type":"uint16"},{"internalType":"uint16","name":"buyDevelopmentRatio_","type":"uint16"},{"internalType":"uint16","name":"buyMarketingRatio_","type":"uint16"},{"internalType":"uint16","name":"sellLiquidityRatio_","type":"uint16"},{"internalType":"uint16","name":"sellDevelopmentRatio_","type":"uint16"},{"internalType":"uint16","name":"sellMarketingRatio_","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoundtripFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"poolCA","type":"address[]"},{"internalType":"bool","name":"pauseAllPools","type":"bool"},{"internalType":"uint32","name":"pauseTimeInSecs","type":"uint32"}],"name":"pauseTradeByPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_antiBotCA","type":"address"}],"name":"requestProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"ethOrToken","type":"bool"},{"internalType":"address","name":"tokenCA","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"address","name":"receivable","type":"address"}],"name":"rescueStuckAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_switch","type":"bool"},{"internalType":"uint8","name":"swapThresholdBps","type":"uint8"},{"internalType":"uint8","name":"amountBps","type":"uint8"}],"name":"setContractSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_development","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_switch","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_switch","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpLocker","type":"address"}],"name":"setLPLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"bps","type":"uint16"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_V2orV3","type":"bool"},{"internalType":"address","name":"_LPTargetCoinCA","type":"address"},{"internalType":"bool","name":"_pairedIsNative","type":"bool"}],"name":"setNewLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolCA","type":"address"},{"internalType":"bool","name":"_antiSWBot","type":"bool"},{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"uint8","name":"snipeBlockAmt","type":"uint8"},{"internalType":"uint32","name":"snipeBlockTimeInSecs","type":"uint32"}],"name":"setProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_buyTax","type":"uint16"},{"internalType":"uint16","name":"_sellTax","type":"uint16"},{"internalType":"uint16","name":"_liquidityBuy","type":"uint16"},{"internalType":"uint16","name":"_developmentBuy","type":"uint16"},{"internalType":"uint16","name":"_marketingBuy","type":"uint16"},{"internalType":"uint16","name":"_liquiditySell","type":"uint16"},{"internalType":"uint16","name":"_developmentSell","type":"uint16"},{"internalType":"uint16","name":"_marketingSell","type":"uint16"}],"name":"setTaxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"poolIsV2orV3","type":"bool"},{"internalType":"address","name":"poolPairedCoinCA","type":"address"}],"name":"triggerContractSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ca","type":"address"}],"name":"verifyLiqPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6006805461ffff19169055610640608081905260a0526009805463ffffffff19166306400640179055606460c081905261019060e0819052610100829052610258610120819052600a80546001600160401b031990811667025800640190006490811783556101408690526101608590526101808690526101a0849052600b805483168217905560006101c08190526101e081905261020081905261022052600c80548316905561024086905261026094909452610280949094526102a091909152600d80549093169091179091556103206040526019546001600160a01b03166102c08190526102e0819052610300819052601180546001600160a01b0319908116831790915560128054821683178155601380549092169092179055612710916200012d919062001364565b6200013e9064174876e8006200137c565b6200014b9060646200137c565b62000157919062001396565b60145560408051808201909152308152600060208201526200017e906016906002620011ce565b506018805461ffff60a01b191690553480156200019a57600080fd5b506040516200750438038062007504833981016040819052620001bd91620013e7565b601980546001600160a01b03199081163317909155601180546001600160a01b0386811691841682179092556000818152600f60208181526040808420805460ff19908116600190811790925560108085528387208054831684179055600e8552838720805483168417905530808852838652848820898952865284882060001990819055848752858920918952818752858920819055600080516020620074a48339815191528952858920819055898952600080516020620074c48339815191528752858920819055600080516020620074e4833981519152895290865284882081905597875260008051602062007484833981519152855283872097909755601280548c8a16908b16811790915586528484528286208054821683179055868452828620805482168317905560138054988b16989099168817909855958452918152818320805487168617905592909252208054909216179055620003268685876200045d565b336000818152600f602090815260408083208054600160ff199182168117909255601980546001600160a01b0390811687528487208054841685179055308088528588208054851686179055888852601087528588208054851686179055825482168852858820805485168617905587528487208054841685179055968652600e90945282852080548216831790559254909416835290912080549091169091179055620003d76012600a62001364565b620003e89064174876e8006200137c565b33600081815260208190526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200042b6012600a62001364565b6200043c9064174876e8006200137c565b60405190815260200160405180910390a3505050505050620014a4565b3390565b6019546001600160a01b0316336001600160a01b0316146200047e57600080fd5b8015156000036200050b576001600160a01b0382166200050b5760405162461bcd60e51b815260206004820152603d60248201527f53747564696f4c5f546f6b656e3a204d7573742050726f76696465204c50205460448201527f617267657420546f6b656e20436f6e747261637420416464726573732100000060648201526084015b60405180910390fd5b600080516020620074a483398151915260009081527f7e98db1b893d503d049bbf1a3858119b9172e4b74989a91dfee4165dd9ce42a88054600160ff1991821681179092557feb1861b62122c39d7846b597c3c20bac261ab9032a26ee7d64c4c7f875977df88054821683179055600e6020527f37836a7135fae77e265e35732c70286035736c8b57b12590769780e067ead81c80549091168217905560001991620005b43390565b6001600160a01b03908116825260208083019390935260409182016000908120600080516020620074a48339815191528083529085528382209590955533808252600080516020620074c483398151915280865284832060001990819055601980548616855260018089528786208a8752895287862083905581548716865283895287862083905530808752818a528887209a87528a8a528887208490558087529389528786208390557f514b0c47adfe0a53b10efead42a63e51f8d3ab7d086a57833150d240dd24149e805460ff1990811683179091557f2883f9392b3ba59b33a93dfabc02a2e15af794b6e96b226e90f36354671ad94880548216831790557f310f99896b3f54ccdfe91d34c8cd2d482aae04e1065f67de2a2c478a38757e34805490911682179055848652808952878620600080516020620074e4833981519152808852908a5288872084905594865260008051602062007484833981519152808a5288872084905582548816875290895287862085875289528786208390559054909516845284875285842081905591835295855283822081905594815292528120919091558315620009ed578115620007845773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc292505b600080516020620074a48339815191526001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f8919062001468565b60405163e6a4390560e01b81526001600160a01b038581166004830152306024830152919091169063e6a4390590604401602060405180830381865afa15801562000847573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200086d919062001468565b90506001600160a01b038116158015620008a057506001600160a01b03811660009081526005602052604090205460ff16155b620008fa5760405162461bcd60e51b815260206004820152602360248201527f53747564696f4c5f546f6b656e3a205061697220616c7265616479206578697360448201526274732160e81b606482015260840162000502565b600080516020620074a48339815191526001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000948573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096e919062001468565b6040516364e329cb60e11b81526001600160a01b038581166004830152306024830152919091169063c9c65396906044016020604051808303816000875af1158015620009bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009e5919062001468565b905062000c80565b811562000a0c5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc292505b600080516020620074e48339815191526001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a5a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a80919062001468565b604051630b4c774160e11b81526001600160a01b038581166004830152306024830152610bb860448301529190911690631698ee8290606401602060405180830381865afa15801562000ad7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afd919062001468565b90506001600160a01b03811615801562000b3057506001600160a01b03811660009081526005602052604090205460ff16155b62000b8a5760405162461bcd60e51b815260206004820152602360248201527f53747564696f4c5f546f6b656e3a20506f6f6c20616c7265616479206578697360448201526274732160e81b606482015260840162000502565b600080516020620074e48339815191526001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bd8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bfe919062001468565b60405163a167129560e01b81526001600160a01b038581166004830152306024830152610bb86044830152919091169063a1671295906064016020604051808303816000875af115801562000c57573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c7d919062001468565b90505b831562000cae57600280546001600160a01b031916600080516020620074a483398151915217905562000cd0565b600280546001600160a01b031916600080516020620074e48339815191521790555b60046000306001600160a01b03166001600160a01b03168152602001908152602001600020604051806101c00160405280836001600160a01b03168152602001856001600160a01b03168152602001600260009054906101000a90046001600160a01b03166001600160a01b031681526020018615158152602001600015158152602001600015158152602001600015158152602001600015158152602001600060ff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff16815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160146101000a81548160ff02191690831515021790555060808201518160020160156101000a81548160ff02191690831515021790555060a08201518160020160166101000a81548160ff02191690831515021790555060c08201518160020160176101000a81548160ff02191690831515021790555060e08201518160020160186101000a81548160ff0219169083151502179055506101008201518160020160196101000a81548160ff021916908360ff16021790555061012082015181600201601a6101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160030160006101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160030160046101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160030160086101000a81548163ffffffff021916908363ffffffff1602179055506101a082015181600301600c6101000a81548163ffffffff021916908363ffffffff1602179055505050600160056000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060001960016000836001600160a01b03166001600160a01b0316815260200190815260200160002060006200106c6200045960201b60201c565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060001960016000620010a76200045960201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120868316808352908552838220959095556001808552838220600280548516845290865284832060001990819055815485168452918652848320878452909552908390208190559254915163095ea7b360e01b815291166004820152602481019190915263095ea7b3906044016020604051808303816000875af115801562001153573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001179919062001486565b50600254604080516001600160a01b039283168152838316602082015291851682820152517fbd359beb4995ebfd8d2e66ceb8734242a41a5e553611f3d484fc03f82e966f9b9181900360600190a150505050565b82805482825590600052602060002090810192821562001226579160200282015b828111156200122657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620011ef565b506200123492915062001238565b5090565b5b8082111562001234576000815560010162001239565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620012a65781600019048211156200128a576200128a6200124f565b808516156200129857918102915b93841c93908002906200126a565b509250929050565b600082620012bf575060016200135e565b81620012ce575060006200135e565b8160018114620012e75760028114620012f25762001312565b60019150506200135e565b60ff8411156200130657620013066200124f565b50506001821b6200135e565b5060208310610133831016604e8410600b841016171562001337575081810a6200135e565b62001343838362001265565b80600019048211156200135a576200135a6200124f565b0290505b92915050565b60006200137560ff841683620012ae565b9392505050565b80820281158282048414176200135e576200135e6200124f565b600082620013b457634e487b7160e01b600052601260045260246000fd5b500490565b80518015158114620013ca57600080fd5b919050565b80516001600160a01b0381168114620013ca57600080fd5b60008060008060008060c087890312156200140157600080fd5b6200140c87620013b9565b95506200141c60208801620013b9565b94506200142c60408801620013cf565b93506200143c60608801620013cf565b92506200144c60808801620013cf565b91506200145c60a08801620013cf565b90509295509295509295565b6000602082840312156200147b57600080fd5b6200137582620013cf565b6000602082840312156200149957600080fd5b6200137582620013b9565b615fd080620014b46000396000f3fe6080604052600436106103385760003560e01c80634d6cc0a5116101b0578063a9059cbb116100ec578063bb58a97311610095578063da07af441161006f578063da07af4414610a5b578063dd27cf2614610a7b578063dd62ed3e14610a9b578063ef39524d14610ae157600080fd5b8063bb58a973146109e7578063d830678614610a08578063d98f188314610a2257600080fd5b8063b3d514fb116100c6578063b3d514fb146105ac578063b524f87b146109a7578063b52ea402146109c757600080fd5b8063a9059cbb1461095f578063a95fda2b1461097f578063aacdd2d6146108f157600080fd5b80636ca4797f116101595780638091f3bf116101335780638091f3bf146108b9578063893d20e8146108d35780638f1ebcbf146108f157806395d89b411461091957600080fd5b80636ca4797f1461084d57806370a082311461086357806372ac24861461089957600080fd5b8063590ffdce1161018a578063590ffdce146107d45780635cce86cd146107f45780635d098b381461082d57600080fd5b80634d6cc0a5146106f75780634fbee1931461077157806350130b3b146107aa57600080fd5b80631b3ad65e1161027f578063313ce567116102285780633de99237116102025780633de992371461066457806340cc93521461068457806346671d2c146106a45780634aee3e9f146106b757600080fd5b8063313ce567146105f557806336fddb041461061c5780633abae3221461063c57600080fd5b80632acfcbac116102595780632acfcbac1461058c5780632b28fc7a146105ac57806330edd23b146105d557600080fd5b80631b3ad65e1461052a57806323b872dd1461054c5780632610eaca1461056c57600080fd5b80630b867756116102e157806313af4035116102bb57806313af4035146104d4578063158ef93e146104f457806318160ddd1461051557600080fd5b80630b867756146104575780630bca4e8a146104775780630f92df731461049757600080fd5b806306fdde031161031257806306fdde03146103b857806307980cb914610407578063095ea7b31461042757600080fd5b806303338b7b1461034457806303fd2a4514610366578063062276831461039957600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f36600461562b565b610b03565b005b34801561037257600080fd5b5061037c61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a557600080fd5b506014545b604051908152602001610390565b3480156103c457600080fd5b5060408051808201909152600881527f58636861696e414900000000000000000000000000000000000000000000000060208201525b6040516103909190615694565b34801561041357600080fd5b506103646104223660046156dc565b610dcf565b34801561043357600080fd5b506104476104423660046156f9565b6111bf565b6040519015158152602001610390565b34801561046357600080fd5b506104476104723660046156dc565b6111d6565b34801561048357600080fd5b50610364610492366004615739565b611373565b3480156104a357600080fd5b5060065460075460085461010090920460ff1691604080519315158452602084019290925290820152606001610390565b3480156104e057600080fd5b506103646104ef3660046156dc565b6118d5565b34801561050057600080fd5b5060185461044790600160a01b900460ff1681565b34801561052157600080fd5b506103aa6119e7565b34801561053657600080fd5b50306000908152600460205260409020546103aa565b34801561055857600080fd5b506104476105673660046157ce565b611a30565b34801561057857600080fd5b506103646105873660046158e5565b611b45565b34801561059857600080fd5b506103646105a73660046159a7565b611c97565b3480156105b857600080fd5b506105c261076c81565b60405161ffff9091168152602001610390565b3480156105e157600080fd5b506104476105f0366004615a0c565b611e24565b34801561060157600080fd5b5061060a611ef0565b60405160ff9091168152602001610390565b34801561062857600080fd5b50610364610637366004615aa3565b611f1f565b34801561064857600080fd5b5061037c7368b3465833fb72a70ecdf485e0e4c7bd8665fc4581565b34801561067057600080fd5b5061036461067f366004615adc565b611f6a565b34801561069057600080fd5b5061036461069f366004615b27565b612d20565b6104476106b2366004615b55565b612d4e565b3480156106c357600080fd5b50601154601254601354604080516001600160a01b0394851681529284166020840152921691810191909152606001610390565b34801561070357600080fd5b50600954600a54600b546040805161ffff80861682526201000095869004811660208301528085169282019290925284840482166060820152640100000000938490048216608082015281831660a0820152938204811660c08501529190041660e082015261010001610390565b34801561077d57600080fd5b5061044761078c3660046156dc565b6001600160a01b03166000908152600f602052604090205460ff1690565b3480156107b657600080fd5b506107bf6132a6565b60405163ffffffff9091168152602001610390565b3480156107e057600080fd5b506103646107ef366004615aa3565b6132b8565b34801561080057600080fd5b5061044761080f3660046156dc565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561083957600080fd5b506103646108483660046156dc565b613303565b34801561085957600080fd5b506105c2610ed881565b34801561086f57600080fd5b506103aa61087e3660046156dc565b6001600160a01b031660009081526020819052604090205490565b3480156108a557600080fd5b506103646108b43660046156dc565b61348f565b3480156108c557600080fd5b506006546104479060ff1681565b3480156108df57600080fd5b506019546001600160a01b031661037c565b3480156108fd57600080fd5b5061037c737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561092557600080fd5b5060408051808201909152600381527f584149000000000000000000000000000000000000000000000000000000000060208201526103fa565b34801561096b57600080fd5b5061044761097a3660046156f9565b61361b565b34801561098b57600080fd5b5061037c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156109b357600080fd5b506103646109c23660046156dc565b613628565b3480156109d357600080fd5b506103aa6109e23660046156dc565b613766565b3480156109f357600080fd5b5060185461044790600160a81b900460ff1681565b348015610a1457600080fd5b506015546104479060ff1681565b348015610a2e57600080fd5b50610447610a3d3660046156dc565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610a6757600080fd5b50610364610a76366004615bc0565b6138cc565b348015610a8757600080fd5b506103aa610a96366004615b27565b613b15565b348015610aa757600080fd5b506103aa610ab6366004615bdb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aed57600080fd5b50610af6613bac565b6040516103909190615bf9565b6019546001600160a01b0316336001600160a01b031614610b2357600080fd5b6006805461ff0019166101008515150217905561271060ff8316610b496012600a615def565b610b589064174876e800615dfe565b610b629190615dfe565b610b6c9190615e2b565b60075561271060ff8216610b826012600a615def565b610b919064174876e800615dfe565b610b9b9190615dfe565b610ba59190615e2b565b60088190556007541115610c265760405162461bcd60e51b815260206004820152603060248201527f53747564696f4c5f546f6b656e3a205468726573686f6c642063616e6e6f742060448201527f62652061626f766520616d6f756e742e0000000000000000000000000000000060648201526084015b60405180910390fd5b60405183151581527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a17fe982a30fd646fd24ecd1bce7b99a6ac0d04d50caa8c2ccaaffc1199adaea9959600754600854604051610c99929190918252602082015260400190565b60405180910390a16011546008546040517fdd19fbb700000000000000000000000000000000000000000000000000000000815260048101919091526000916001600160a01b03169063dd19fbb7906024016020604051808303816000875af1158015610d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2e9190615e3f565b905080610dc95760405162461bcd60e51b815260206004820152604d60248201527f53747564696f4c5f546f6b656e3a2055706461746520636f6e7472616374207360448201527f7761702073657474696e6773206174204c50204c6f636b657220636f6e74726160648201527f6374207478206661696c65642e00000000000000000000000000000000000000608482015260a401610c1d565b50505050565b6019546001600160a01b0316336001600160a01b031614610def57600080fd5b306000908152600460205260408120610e0783613cf6565b60ff1681548110610e1a57610e1a615e5c565b60009182526020909120600490910201600381015490915068010000000000000000900463ffffffff1615610e8d5760028101805460ff60a81b1916600160a81b1790556003810180547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff16905561116e565b6002810154600160b01b900460ff16610f0e5760405162461bcd60e51b815260206004820152602760248201527f53747564696f4c5f546f6b656e3a204c6971756964697479206d75737420626560448201527f2061646465642e000000000000000000000000000000000000000000000000006064820152608401610c1d565b6002810154600160a81b900460ff161515600103610f945760405162461bcd60e51b815260206004820152602760248201527f53747564696f4c5f546f6b656e3a2074726164696e6720616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610c1d565b6002810154600160b81b900460ff1680610fb957506002810154600160c01b900460ff165b156110f957601754600182015460028301546040517f674f8fc20000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015292831660248201528282166044820152600160a01b90910460ff16151560648201524360848201524260a4820152600092919091169063674f8fc29060c4016020604051808303816000875af115801561105f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110839190615e3f565b9050806110f75760405162461bcd60e51b8152602060048201526024808201527f53747564696f4c5f546f6b656e3a20736574206c61756e63682074782066616960448201527f6c65642e000000000000000000000000000000000000000000000000000000006064820152608401610c1d565b505b6006805460ff1916600190811790915560028201805460ff60a81b1916600160a81b1790556003820180544263ffffffff908116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921643919091161717905561116e90600a600b610b03565b604080513381526001600160a01b0384166020820152438183015242606082015290517fab4a0311680424f07f440bc25ed78bce8d142b75468b9d8e320bbd1106d3a7539181900360800190a15050565b60006111cc338484613ea3565b5060015b92915050565b6019546000906001600160a01b0316336001600160a01b0316146111f957600080fd5b306001600160a01b038316036112515760405162461bcd60e51b815260206004820152601d60248201527f53747564696f4c5f546f6b656e3a2043616e27742062652073656c662e0000006044820152606401610c1d565b6000826001600160a01b03163b116112d15760405162461bcd60e51b815260206004820152602560248201527f53747564696f4c5f546f6b656e3a2043616e2774206265206e6f6e2d636f6e7460448201527f726163742e0000000000000000000000000000000000000000000000000000006064820152608401610c1d565b601780546001600160a01b0384166001600160a01b0319918216811790925560188054909116821790556040517f4910b4d900000000000000000000000000000000000000000000000000000000815230600482015260009190634910b4d990602401600060405180830381600087803b15801561134e57600080fd5b505af192505050801561135f575060015b61136857600080fd5b50600190505b919050565b6019546001600160a01b0316336001600160a01b03161461139357600080fd5b62278d0063ffffffff821611156114125760405162461bcd60e51b815260206004820152603d60248201527f53747564696f4c5f546f6b656e3a2063616e6e6f74207061757365206c6f6e6760448201527f6572207468616e206d61782074726164652070617573652074696d652e0000006064820152608401610c1d565b30600090815260046020526040902082156116615760005b815460ff8216101561165b57818160ff168154811061144b5761144b615e5c565b600091825260209091206004909102016003015461147990600160601b900463ffffffff1662015180615e72565b63ffffffff1642116114f35760405162461bcd60e51b815260206004820152603860248201527f53747564696f4c5f546f6b656e3a2063616e277420706175736520616761696e60448201527f20756e74696c20636f6f6c646f776e206973206f7665722e00000000000000006064820152608401610c1d565b6000828260ff168154811061150a5761150a615e5c565b906000526020600020906004020160020160156101000a81548160ff02191690831515021790555082828260ff168154811061154857611548615e5c565b906000526020600020906004020160030160086101000a81548163ffffffff021916908363ffffffff16021790555042828260ff168154811061158d5761158d615e5c565b9060005260206000209060040201600301600c6101000a81548163ffffffff021916908363ffffffff1602179055507f09bc756b4dcf5965cb1b814df561e467ba5fe432c8b31517fe25da78006461746115e43390565b838360ff16815481106115f9576115f9615e5c565b600091825260209182902060049091020154604080516001600160a01b0394851681529390911691830191909152439082015263ffffffff8516606082015242608082015260a00160405180910390a18061165381615e96565b91505061142a565b506118ce565b60005b60ff81168511156118cc5760006116a387878460ff1681811061168957611689615e5c565b905060200201602081019061169e91906156dc565b613cf6565b9050828160ff16815481106116ba576116ba615e5c565b60009182526020909120600490910201600301546116e890600160601b900463ffffffff1662015180615e72565b63ffffffff1642116117625760405162461bcd60e51b815260206004820152603860248201527f53747564696f4c5f546f6b656e3a2063616e277420706175736520616761696e60448201527f20756e74696c20636f6f6c646f776e206973206f7665722e00000000000000006064820152608401610c1d565b6000838260ff168154811061177957611779615e5c565b906000526020600020906004020160020160156101000a81548160ff02191690831515021790555083838260ff16815481106117b7576117b7615e5c565b906000526020600020906004020160030160086101000a81548163ffffffff021916908363ffffffff16021790555042838260ff16815481106117fc576117fc615e5c565b9060005260206000209060040201600301600c6101000a81548163ffffffff021916908363ffffffff1602179055507f09bc756b4dcf5965cb1b814df561e467ba5fe432c8b31517fe25da78006461746118533390565b88888560ff1681811061186857611868615e5c565b905060200201602081019061187d91906156dc565b604080516001600160a01b039384168152929091166020830152439082015263ffffffff8616606082015242608082015260a00160405180910390a150806118c481615e96565b915050611664565b505b5050505050565b6019546001600160a01b0316336001600160a01b0316146118f557600080fd5b6019546001600160a01b038083169116036119785760405162461bcd60e51b815260206004820152602f60248201527f53747564696f4c5f546f6b656e3a20416c72656164792073657420746f20746860448201527f6520646573697265642076616c756500000000000000000000000000000000006064820152608401610c1d565b6019546001600160a01b0382811691167f2db8affcb91306c1e2b6526dee52161bd4ce39592a3d8be12a6adef0dd21bf8c336040516001600160a01b03909116815260200160405180910390a3601980546001600160a01b0319166001600160a01b0392909216919091179055565b60006119f56012600a615def565b611a049064174876e800615dfe565b600003611a1057600080fd5b611a1c6012600a615def565b611a2b9064174876e800615dfe565b905090565b6001600160a01b038316600090815260016020908152604080832033845290915281205460001914611b30576001600160a01b0384166000908152600160209081526040808320338452909152902054821115611af55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610c1d565b6001600160a01b038416600090815260016020908152604080832033808552925290912054611b30918691611b2b908690615eb5565b613ea3565b611b3b848484613fb0565b5060019392505050565b6019546001600160a01b0316336001600160a01b031614611b6557600080fd5b8051825114611bdb5760405162461bcd60e51b8152602060048201526024808201527f53747564696f4c5f546f6b656e3a204c656e6774687320646f206e6f74206d6160448201527f7463682e000000000000000000000000000000000000000000000000000000006064820152608401610c1d565b60005b82518160ff161015611c9257818160ff1681518110611bff57611bff615e5c565b6020026020010151600080611c113390565b6001600160a01b03166001600160a01b03168152602001908152602001600020541015611c3d57600080fd5b611c8033848360ff1681518110611c5657611c56615e5c565b6020026020010151848460ff1681518110611c7357611c73615e5c565b6020026020010151613fb0565b80611c8a81615e96565b915050611bde565b505050565b6019546001600160a01b0316336001600160a01b031614611cb757600080fd5b611cc18484613b15565b821115611ccd57600080fd5b60008415611d7b57611cdf8284614ce0565b905080611d2e5760405162461bcd60e51b815260206004820152601260248201527f53747564696f4c3a205478206661696c656400000000000000000000000000006044820152606401610c1d565b604080513381526001600160a01b038416602082015280820185905290517fc81b1761d304f16ef2aeae3a8611d9bd1d618adfff67d5157365cfb1251395329181900360600190a16118ce565b611d86848385614dc3565b905080611dd55760405162461bcd60e51b815260206004820152601260248201527f53747564696f4c3a205478206661696c656400000000000000000000000000006044820152606401610c1d565b604080513381526001600160a01b038416602082015280820185905290517f0e191ee1e354192688af5ec7da0cc3d7f54ecb056e6418d42e73ddc4c37d36379181900360600190a15050505050565b6011546000906001600160a01b0316336001600160a01b03161480611e4857503330145b611e5157600080fd5b6009805461ffff8a8116620100000263ffffffff19909216908c16171790557f745946ce5f79eaa80773b4814402e4df34ba32d19a46592eefa248aec26df6b4611e983390565b604080516001600160a01b03909216825261ffff808d1660208401528b169082015242606082015260800160405180910390a1611ed6878787614f33565b611ee184848461504a565b50600198975050505050505050565b6000611efe6012600a615def565b611f0d9064174876e800615dfe565b600003611f1957600080fd5b50601290565b6019546001600160a01b0316336001600160a01b031614611f3f57600080fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6019546001600160a01b0316336001600160a01b031614611f8a57600080fd5b801515600003612010576001600160a01b0382166120105760405162461bcd60e51b815260206004820152603d60248201527f53747564696f4c5f546f6b656e3a204d7573742050726f76696465204c50205460448201527f617267657420546f6b656e20436f6e74726163742041646472657373210000006064820152608401610c1d565b7f7e98db1b893d503d049bbf1a3858119b9172e4b74989a91dfee4165dd9ce42a88054600160ff1991821681179092557feb1861b62122c39d7846b597c3c20bac261ab9032a26ee7d64c4c7f875977df880548216831790557f37836a7135fae77e265e35732c70286035736c8b57b12590769780e067ead81c805482168317905533600081815260208481526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552818452828520600019908190558686527f12d4ae10b86c0fdfdbbd2bb2dffa7d211f4b1a0678afa5427bf6325849448125808652848720829055601980546001600160a01b0390811689528b8852868920858a52885286892084905581548116895282885286892084905530808a528c8952878a20958a52858952878a20859055808a529288528689208490557f514b0c47adfe0a53b10efead42a63e51f8d3ab7d086a57833150d240dd24149e80548c168d1790557f2883f9392b3ba59b33a93dfabc02a2e15af794b6e96b226e90f36354671ad94880548c168d1790557f310f99896b3f54ccdfe91d34c8cd2d482aae04e1065f67de2a2c478a38757e348054909b168c17909a557368b3465833fb72a70ecdf485e0e4c7bd8665fc458089529487528588208390559787527f2063a2b5df4feb4eafc67a25e78de774944b78020cd06ecd374fed9015fb461180875285882083905588548a16885299865284872084885286528487208290559654909716855287845282852087905590845282528083208590559282529390935282205583156125075781156122725773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc292505b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e89190615ec8565b6040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152306024830152919091169063e6a4390590604401602060405180830381865afa15801561234f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123739190615ec8565b90506001600160a01b0381161580156123a557506001600160a01b03811660009081526005602052604090205460ff16155b6123fd5760405162461bcd60e51b815260206004820152602360248201527f53747564696f4c5f546f6b656e3a205061697220616c7265616479206578697360448201526274732160e81b6064820152608401610c1d565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124739190615ec8565b6040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152306024830152919091169063c9c65396906044016020604051808303816000875af11580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125009190615ec8565b90506127c6565b81156125255773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc292505b7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259b9190615ec8565b6040517f1698ee820000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152306024830152610bb860448301529190911690631698ee8290606401602060405180830381865afa15801561260a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262e9190615ec8565b90506001600160a01b03811615801561266057506001600160a01b03811660009081526005602052604090205460ff16155b6126b85760405162461bcd60e51b815260206004820152602360248201527f53747564696f4c5f546f6b656e3a20506f6f6c20616c7265616479206578697360448201526274732160e81b6064820152608401610c1d565b7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272e9190615ec8565b6040517fa16712950000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152306024830152610bb86044830152919091169063a1671295906064016020604051808303816000875af115801561279f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c39190615ec8565b90505b83156127f757600280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905561281e565b600280546001600160a01b0319167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790555b60046000306001600160a01b03166001600160a01b03168152602001908152602001600020604051806101c00160405280836001600160a01b03168152602001856001600160a01b03168152602001600260009054906101000a90046001600160a01b03166001600160a01b031681526020018615158152602001600015158152602001600015158152602001600015158152602001600015158152602001600060ff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff16815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160146101000a81548160ff02191690831515021790555060808201518160020160156101000a81548160ff02191690831515021790555060a08201518160020160166101000a81548160ff02191690831515021790555060c08201518160020160176101000a81548160ff02191690831515021790555060e08201518160020160186101000a81548160ff0219169083151502179055506101008201518160020160196101000a81548160ff021916908360ff16021790555061012082015181600201601a6101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160030160006101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160030160046101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160030160086101000a81548163ffffffff021916908363ffffffff1602179055506101a082015181600301600c6101000a81548163ffffffff021916908363ffffffff1602179055505050600160056000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060001960016000836001600160a01b03166001600160a01b031681526020019081526020016000206000612bb13390565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060001960016000612be33390565b6001600160a01b0390811682526020808301939093526040918201600090812086831680835290855283822095909555600180855283822060028054851684529086528483206000199081905581548516845291865284832087845290955290839020819055925491517f095ea7b300000000000000000000000000000000000000000000000000000000815291166004820152602481019190915263095ea7b3906044016020604051808303816000875af1158015612ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccb9190615e3f565b50600254604080516001600160a01b039283168152838316602082015291851682820152517fbd359beb4995ebfd8d2e66ceb8734242a41a5e553611f3d484fc03f82e966f9b9181900360600190a150505050565b6019546001600160a01b0316336001600160a01b031614612d4057600080fd5b612d4a8282615158565b5050565b6019546000906001600160a01b0316336001600160a01b031614612d7157600080fd5b306000908152600460205260408120612d8988613cf6565b60ff1681548110612d9c57612d9c615e5c565b600091825260208220601854600490920201925060ff600160a01b90910416612e7e576017546040517fe3055f8e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039091169063e3055f8e906024016020604051808303816000875af1158015612e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e469190615e3f565b60188054911515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9092169190911790555b8580612e875750865b156131c1576017546040517f399161680000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015260009283929116906339916168906024016040805180830381865afa158015612ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f169190615ee5565b9092509050811515881515141580612f32575088151581151514155b156130db57601854600160a01b900460ff16612fb65760405162461bcd60e51b815260206004820152603560248201527f53747564696f4c5f546f6b656e3a2070726f74656374696f6e2072657175657360448201527f74206e6f7420617574686f72697a6564207965742e00000000000000000000006064820152608401610c1d565b6017546040517f02a4a72b0000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528a151560248301528b1515604483015260ff8a16606483015263ffffffff89166084830152909116906302a4a72b90349060a40160206040518083038185885af1158015613041573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130669190615e3f565b9250826130db5760405162461bcd60e51b815260206004820152602860248201527f53747564696f4c5f546f6b656e3a206661696c656420746f207365742070726f60448201527f74656374696f6e2e0000000000000000000000000000000000000000000000006064820152608401610c1d565b50506018805460ff60a81b198116600160a81b1782556001600160a01b039081166000908152600f60209081526040808320805460ff199081166001908117909255865486168552601084528285208054909116821790558d8516808552818452828520875487168652845282852060001990819055875487168652828552838620918652908452828520819055865486168552818452828520737a250d5630b4cf539739df2c5dacb4c659f2488d86528452828520819055955490941683529281528282207368b3465833fb72a70ecdf485e0e4c7bd8665fc458352905220556131cf565b6018805460ff60a81b191690555b6002909101805463ffffffff8516600160d01b027fffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8816600160c81b02167fffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffffff8a1515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff8b1515600160b81b02167fffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff90951694909417939093179290921691909117179055905095945050505050565b6000611a2b6201518062278d00615f14565b6019546001600160a01b0316336001600160a01b0316146132d857600080fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6019546001600160a01b0316336001600160a01b03161461332357600080fd5b601380546001600160a01b0319166001600160a01b038381169182179092556000818152600f60209081526040808320805460ff199081166001908117909255601090935281842080549093161790915560115490517f5d098b38000000000000000000000000000000000000000000000000000000008152600481019390935290921690635d098b38906024016020604051808303816000875af11580156133d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f49190615e3f565b905080612d4a5760405162461bcd60e51b815260206004820152604760248201527f53747564696f4c5f546f6b656e3a20557064617465204d61726b6574696e672060448201527f57616c6c6574206174204c50204c6f636b657220636f6e74726163742074782060648201527f6661696c65642e00000000000000000000000000000000000000000000000000608482015260a401610c1d565b6019546001600160a01b0316336001600160a01b0316146134af57600080fd5b601280546001600160a01b0319166001600160a01b038381169182179092556000818152600f60209081526040808320805460ff199081166001908117909255601090935281842080549093161790915560115490517f72ac24860000000000000000000000000000000000000000000000000000000081526004810193909352909216906372ac2486906024016020604051808303816000875af115801561355c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135809190615e3f565b905080612d4a5760405162461bcd60e51b815260206004820152604960248201527f53747564696f4c5f546f6b656e3a2055706461746520446576656c6f706d656e60448201527f742057616c6c6574206174204c50204c6f636b657220636f6e7472616374207460648201527f78206661696c65642e0000000000000000000000000000000000000000000000608482015260a401610c1d565b60006111cc338484613fb0565b6019546001600160a01b0316336001600160a01b03161461364857600080fd5b601180546001600160a01b0319166001600160a01b039290921691821790556000818152600f60209081526040808320805460ff199081166001908117909255601084528285208054821683179055600e845282852080549091168217905530808552818452828520868652845282852060001990819055918452828520908552808452828520829055737a250d5630b4cf539739df2c5dacb4c659f2488d85528285208290558585527f12d4ae10b86c0fdfdbbd2bb2dffa7d211f4b1a0678afa5427bf632584944812584528285208290557368b3465833fb72a70ecdf485e0e4c7bd8665fc45855283528184208190559383527f2063a2b5df4feb4eafc67a25e78de774944b78020cd06ecd374fed9015fb4611909152902055565b60008061377283613cf6565b3060009081526004602052604090208054919250429160ff841690811061379b5761379b615e5c565b600091825260208083206004928302016003015430845291905260409091208054600160601b90920463ffffffff169160ff85169081106137de576137de615e5c565b906000526020600020906004020160030160089054906101000a900463ffffffff1661380a9190615e72565b63ffffffff1611156138c357306000908152600460205260409020805442919060ff841690811061383d5761383d615e5c565b600091825260208083206004928302016003015430845291905260409091208054600160601b90920463ffffffff169160ff851690811061388057613880615e5c565b906000526020600020906004020160030160089054906101000a900463ffffffff166138ac9190615e72565b63ffffffff166138bc9190615eb5565b9392505050565b50600092915050565b6019546001600160a01b0316336001600160a01b0316146138ec57600080fd5b60145460000361398a5760405162461bcd60e51b815260206004820152604e60248201527f53747564696f4c5f546f6b656e3a204d61782057616c6c65742063616e6e6f7460448201527f20626520736574206f6e636520697420686173206265656e2073657420746f2060648201527f3020746f207475726e206f66662e000000000000000000000000000000000000608482015260a401610c1d565b60646139986012600a615def565b6139a79064174876e800615dfe565b6139b19190615e2b565b61271061ffff83166139c56012600a615def565b6139d49064174876e800615dfe565b6139de9190615dfe565b6139e89190615e2b565b1015613a5c5760405162461bcd60e51b815260206004820152603f60248201527f53747564696f4c5f546f6b656e3a204d61782057616c6c657420616d74206d7560448201527f73742062652061626f7665203125206f6620746f74616c20737570706c792e006064820152608401610c1d565b61271061ffff8216613a706012600a615def565b613a7f9064174876e800615dfe565b613a899190615dfe565b613a939190615e2b565b6014547f0fb270c3a865af3b2ea4d0e9c5434a97a5073d9a3e82ce30b98ad2b3dd25d62333604080516001600160a01b0390921682524260208301520160405180910390a361271061ffff8216613aec6012600a615def565b613afb9064174876e800615dfe565b613b059190615dfe565b613b0f9190615e2b565b60145550565b60008215613b245750476111d0565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba59190615f37565b90506111d0565b306000908152600460209081526040808320805482518185028101850190935280835260609492939192909184015b82821015613ced576000848152602090819020604080516101c0810182526004860290920180546001600160a01b03908116845260018083015482168587015260028301549182169385019390935260ff600160a01b8204811615156060860152600160a81b8204811615156080860152600160b01b82048116151560a0860152600160b81b82048116151560c0860152600160c01b82048116151560e0860152600160c81b82041661010085015263ffffffff600160d01b9091048116610120850152600390910154808216610140850152640100000000810482166101608501526801000000000000000081048216610180850152600160601b9004166101a08301529083529092019101613bdb565b50505050905090565b30600090815260046020908152604080832080548251818502810185019093528083528493849084015b82821015613e32576000848152602090819020604080516101c0810182526004860290920180546001600160a01b03908116845260018083015482168587015260028301549182169385019390935260ff600160a01b8204811615156060860152600160a81b8204811615156080860152600160b01b82048116151560a0860152600160b81b82048116151560c0860152600160c01b82048116151560e0860152600160c81b82041661010085015263ffffffff600160d01b9091048116610120850152600390910154808216610140850152640100000000810482166101608501526801000000000000000081048216610180850152600160601b9004166101a08301529083529092019101613d20565b50505050905060005b81518160ff161015613e9957836001600160a01b0316828260ff1681518110613e6657613e66615e5c565b6020026020010151600001516001600160a01b031603613e87579392505050565b80613e9181615e96565b915050613e3b565b5060ff9392505050565b6001600160a01b038316613ef95760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c1d565b6001600160a01b038216613f4f5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c1d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661402c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c1d565b6001600160a01b0382166140a85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c1d565b6000811161411e5760405162461bcd60e51b815260206004820152603860248201527f53747564696f4c5f546f6b656e3a205472616e7366657220616d6f756e74206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610c1d565b6001600160a01b0383166000908152600560205260408120548190819060ff16156141c857600380546001600160a01b0319166001600160a01b038816179055600a54600d805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff00000000191664010000000080850483160267ffff00000000000019161766010000000000009384900491909116909202919091179055600192506142d3565b6001600160a01b03851660009081526005602052604090205460ff161561426e57600380546001600160a01b0319166001600160a01b038716179055600b54600d805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff00000000191664010000000080850483160267ffff00000000000019161766010000000000009384900491909116909202919091179055600191506142d3565b50600c54600d805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff00000000191664010000000080850483160267ffff0000000000001916176601000000000000938490049190911690920291909117905560015b6003546000906142eb906001600160a01b0316613cf6565b3060009081526004602052604081208054929350909160ff841690811061431457614314615e5c565b6000918252602091829020604080516101c081018252600490930290910180546001600160a01b039081168452600182015481169484019490945260028101549384169183019190915260ff600160a01b8404811615156060840152600160a81b8404811615156080840152600160b01b84048116151560a0840152600160b81b84048116151560c0840152600160c01b84048116151560e0840152600160c81b84041661010083015263ffffffff600160d01b909304831661012083015260030154808316610140830152640100000000810483166101608301526801000000000000000081048316610180830152600160601b90049091166101a0820152905061442088886153a3565b156149d95761018081015163ffffffff16156144ee57805161444190613766565b6000036144ee5730600090815260046020526040902080546001919060ff851690811061447057614470615e5c565b60009182526020808320600492830201600201805460ff60a81b1916600160a81b951515959095029490941790935530825290915260408120805460ff85169081106144be576144be615e5c565b906000526020600020906004020160030160086101000a81548163ffffffff021916908363ffffffff1602179055505b306000908152600460205260409020805460ff841690811061451257614512615e5c565b906000526020600020906004020160020160159054906101000a900460ff166145a35760405162461bcd60e51b815260206004820152602360248201527f53747564696f4c5f546f6b656e3a2054726164696e67206e6f7420656e61626c60448201527f65642100000000000000000000000000000000000000000000000000000000006064820152608401610c1d565b60008160c001511561478c5760175482516040517f3a5f8f580000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201528b821660248201528a8216604482015288151560648201528715156084820152911690633a5f8f589060a40160408051808303816000875af1925050508015614650575060408051601f3d908101601f1916820190925261464d91810190615ee5565b60015b61465957600080fd5b3060009081526004602052604090208054929350839282919060ff881690811061468557614685615e5c565b906000526020600020906004020160020160176101000a81548160ff0219169083151502179055505050806147395785156146ec576001600160a01b0380891660009081526001602090815260408083206018549094168352929052206000199055614739565b806147395760405162461bcd60e51b815260206004820181905260248201527f53747564696f4c5f416e7469426f743a20536e697065722052656a65637465646044820152606401610c1d565b8160c0015161478c578151604080516001600160a01b0390921682524360208301524282820152517f889cff6f0386c74172b24ac91f177c69716feaed9fea3627bbc8096ed207429a9181900360600190a15b8160e00151156148f35760175482516040517fbb483ff50000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201528b821660248201528a821660448201528815156064820152871515608482015291169063bb483ff59060a4016020604051808303816000875af1925050508015614838575060408051601f3d908101601f1916820190925261483591810190615e3f565b60015b61484157600080fd5b9050806148f3578515614880576001600160a01b03808916600090815260016020908152604080832060185490941683529290522060001990556148f3565b806148f35760405162461bcd60e51b815260206004820152602660248201527f53747564696f4c5f416e7469426f743a2053616e647769636820426f7420526560448201527f6a656374656400000000000000000000000000000000000000000000000000006064820152608401610c1d565b81604001516001600160a01b0316886001600160a01b031614158015614917575084155b156149d7576001600160a01b03881660009081526010602052604090205460ff166149d7576014546001600160a01b038916600090815260208190526040902054614963908990615f50565b11156149d75760405162461bcd60e51b815260206004820152603960248201527f53747564696f4c5f546f6b656e3a205472616e7366657220616d6f756e74206560448201527f78636565647320746865206d617857616c6c657453697a652e000000000000006064820152608401610c1d565b505b600654610100900460ff1615614a2d5760155460ff16614a2d5784614a2d576007546011546001600160a01b031660009081526020819052604090205410614a2d57614a2d81606001518260200151615158565b8060a00151614ad7578051614a439089896154c3565b8060a00151158015614a5a5750614a5a88886153a3565b8015614a64575082155b15614ad75760405162461bcd60e51b815260206004820152603160248201527f53747564696f4c5f546f6b656e3a205072652d6c69717569646974792074726160448201527f6e736665722070726f74656374696f6e2e0000000000000000000000000000006064820152608401610c1d565b6001600160a01b0388166000908152600f602052604081205460ff1680614b1657506001600160a01b0388166000908152600f602052604090205460ff165b15614b22575085614c2c565b600d546000906127109061ffff6401000000008204811691614b4d9162010000820481169116615f63565b614b579190615f63565b614b659061ffff168a615dfe565b614b6f9190615e2b565b9050614b7b8189615eb5565b9150806000808c6001600160a01b03166001600160a01b031681526020019081526020016000206000828254614bb19190615eb5565b90915550506011546001600160a01b031660009081526020819052604081208054839290614be0908490615f50565b90915550506011546040518281526001600160a01b03918216918c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b6001600160a01b03891660009081526020819052604081208054839290614c54908490615eb5565b90915550506001600160a01b03881660009081526020819052604081208054839290614c81908490615f50565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051614ccd91815260200190565b60405180910390a3505050505050505050565b60408051600080825260208201928390529182916001600160a01b038616918591614d0a91615f7e565b60006040518083038185875af1925050503d8060008114614d47576040519150601f19603f3d011682016040523d82523d6000602084013e614d4c565b606091505b50509050806138bc5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c65640000000000000000000000006064820152608401610c1d565b6000806000856001600160a01b031663a9059cbb8686604051602401614dfe9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051614e4c9190615f7e565b6000604051808303816000865af19150503d8060008114614e89576040519150601f19603f3d011682016040523d82523d6000602084013e614e8e565b606091505b5091509150818015614eb8575080511580614eb8575080806020019051810190614eb89190615e3f565b614f2a5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c6564000000000000000000000000000000000000006064820152608401610c1d565b50949350505050565b600a805461ffff83811664010000000090810265ffff00000000198784166201000090810263ffffffff19909616858b161795909517908116821795869055918504831694614f8c949004831692908116911617615f63565b614f969190615f63565b600a805461ffff9290921666010000000000000267ffff000000000000199092169190911790557f5d2599801ce2d0f74f50d60908741dfea874928be36e10a86821ba460a923ae3614fe53390565b600a54604080516001600160a01b03909316835261ffff808316602085015262010000830481169184019190915264010000000082048116606084015266010000000000009091041660808201524260a082015260c0015b60405180910390a1505050565b600b805461ffff83811664010000000090810265ffff00000000198784166201000090810263ffffffff19909616858b1617959095179081168217958690559185048316946150a3949004831692908116911617615f63565b6150ad9190615f63565b600b805461ffff9290921666010000000000000267ffff000000000000199092169190911790557ffaa3fa39fe5e8b67522ae13ed3851746f2b2fb690acc9c0f5a1a668af08afb036150fc3390565b600b54604080516001600160a01b03909316835261ffff808316602085015262010000830481169184019190915264010000000082048116606084015266010000000000009091041660808201524260a082015260c00161503d565b6015805460ff191660011790556011546001600160a01b0390811660009081526020819052604081205490917fffffffffffffffffffffffff3fd555c64ddc0172f5f1a3b0d81526f7c38a933e90841601615245576011546040517f777c4d5300000000000000000000000000000000000000000000000000000000815285151560048201526001600160a01b0385811660248301529091169063777c4d53906044016020604051808303816000875af115801561521a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061523e9190615e3f565b91506152d9565b6011546040517fd3fcc8f300000000000000000000000000000000000000000000000000000000815285151560048201526001600160a01b0385811660248301529091169063d3fcc8f3906044016020604051808303816000875af11580156152b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152d69190615e3f565b91505b604080518281526001600160a01b0385166020820152428183015290517ffa77e5931b6f79610b4cf716e839caeea53bf67e42d92846ac2b49236f651a3c9181900360600190a1816153935760405162461bcd60e51b815260206004820152602660248201527f53747564696f4c5f546f6b656e3a204175746f4c69717569646974792074782060448201527f6661696c656400000000000000000000000000000000000000000000000000006064820152608401610c1d565b50506015805460ff191690555050565b6019546000906001600160a01b038481169116148015906153d257506019546001600160a01b03838116911614155b80156153e957506019546001600160a01b03163214155b801561540e57506001600160a01b0383166000908152600e602052604090205460ff16155b801561543357506001600160a01b0382166000908152600e602052604090205460ff16155b801561545857506001600160a01b03831660009081526010602052604090205460ff16155b801561547d57506001600160a01b03821660009081526010602052604090205460ff16155b801561549457506001600160a01b03821661dead14155b80156154a857506001600160a01b03821615155b80156138bc57506001600160a01b0383163014159392505050565b3060009081526004602052604081206154db85613cf6565b60ff16815481106154ee576154ee615e5c565b600091825260209091206004909102016002810154909150600160b01b900460ff16156155835760405162461bcd60e51b815260206004820152603260248201527f53747564696f4c5f546f6b656e3a204c697175696469747920616c726561647960448201527f20616464656420616e64206d61726b65642e00000000000000000000000000006064820152608401610c1d565b61558d83836153a3565b1580156155ab5750836001600160a01b0316826001600160a01b0316145b15610dc9576001600160a01b0383166000908152600e60205260409020805460ff191660011790556002810180547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16600160b01b17905550505050565b801515811461561757600080fd5b50565b803560ff8116811461136e57600080fd5b60008060006060848603121561564057600080fd5b833561564b81615609565b92506156596020850161561a565b91506156676040850161561a565b90509250925092565b60005b8381101561568b578181015183820152602001615673565b50506000910152565b60208152600082518060208401526156b3816040850160208701615670565b601f01601f19169190910160400192915050565b6001600160a01b038116811461561757600080fd5b6000602082840312156156ee57600080fd5b81356138bc816156c7565b6000806040838503121561570c57600080fd5b8235615717816156c7565b946020939093013593505050565b803563ffffffff8116811461136e57600080fd5b6000806000806060858703121561574f57600080fd5b843567ffffffffffffffff8082111561576757600080fd5b818701915087601f83011261577b57600080fd5b81358181111561578a57600080fd5b8860208260051b850101111561579f57600080fd5b602092830196509450508501356157b581615609565b91506157c360408601615725565b905092959194509250565b6000806000606084860312156157e357600080fd5b83356157ee816156c7565b925060208401356157fe816156c7565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561584e5761584e61580f565b604052919050565b600067ffffffffffffffff8211156158705761587061580f565b5060051b60200190565b600082601f83011261588b57600080fd5b813560206158a061589b83615856565b615825565b82815260059290921b840181019181810190868411156158bf57600080fd5b8286015b848110156158da57803583529183019183016158c3565b509695505050505050565b600080604083850312156158f857600080fd5b823567ffffffffffffffff8082111561591057600080fd5b818501915085601f83011261592457600080fd5b8135602061593461589b83615856565b82815260059290921b8401810191818101908984111561595357600080fd5b948201945b8386101561597a57853561596b816156c7565b82529482019490820190615958565b9650508601359250508082111561599057600080fd5b5061599d8582860161587a565b9150509250929050565b600080600080608085870312156159bd57600080fd5b84356159c881615609565b935060208501356159d8816156c7565b92506040850135915060608501356159ef816156c7565b939692955090935050565b803561ffff8116811461136e57600080fd5b600080600080600080600080610100898b031215615a2957600080fd5b615a32896159fa565b9750615a4060208a016159fa565b9650615a4e60408a016159fa565b9550615a5c60608a016159fa565b9450615a6a60808a016159fa565b9350615a7860a08a016159fa565b9250615a8660c08a016159fa565b9150615a9460e08a016159fa565b90509295985092959890939650565b60008060408385031215615ab657600080fd5b8235615ac1816156c7565b91506020830135615ad181615609565b809150509250929050565b600080600060608486031215615af157600080fd5b8335615afc81615609565b92506020840135615b0c816156c7565b91506040840135615b1c81615609565b809150509250925092565b60008060408385031215615b3a57600080fd5b8235615b4581615609565b91506020830135615ad1816156c7565b600080600080600060a08688031215615b6d57600080fd5b8535615b78816156c7565b94506020860135615b8881615609565b93506040860135615b9881615609565b9250615ba66060870161561a565b9150615bb460808701615725565b90509295509295909350565b600060208284031215615bd257600080fd5b6138bc826159fa565b60008060408385031215615bee57600080fd5b8235615b45816156c7565b602080825282518282018190526000919060409081850190868401855b82811015615ce857815180516001600160a01b0390811686528782015181168887015286820151168686015260608082015115159086015260808082015115159086015260a08082015115159086015260c08082015115159086015260e0808201511515908601526101008082015160ff16908601526101208082015163ffffffff908116918701919091526101408083015182169087015261016080830151821690870152610180808301518216908701526101a09182015116908501526101c09093019290850190600101615c16565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115615d46578160001904821115615d2c57615d2c615cf5565b80851615615d3957918102915b93841c9390800290615d10565b509250929050565b600082615d5d575060016111d0565b81615d6a575060006111d0565b8160018114615d805760028114615d8a57615da6565b60019150506111d0565b60ff841115615d9b57615d9b615cf5565b50506001821b6111d0565b5060208310610133831016604e8410600b8410161715615dc9575081810a6111d0565b615dd38383615d0b565b8060001904821115615de757615de7615cf5565b029392505050565b60006138bc60ff841683615d4e565b80820281158282048414176111d0576111d0615cf5565b634e487b7160e01b600052601260045260246000fd5b600082615e3a57615e3a615e15565b500490565b600060208284031215615e5157600080fd5b81516138bc81615609565b634e487b7160e01b600052603260045260246000fd5b63ffffffff818116838216019080821115615e8f57615e8f615cf5565b5092915050565b600060ff821660ff8103615eac57615eac615cf5565b60010192915050565b818103818111156111d0576111d0615cf5565b600060208284031215615eda57600080fd5b81516138bc816156c7565b60008060408385031215615ef857600080fd5b8251615f0381615609565b6020840151909250615ad181615609565b600063ffffffff80841680615f2b57615f2b615e15565b92169190910492915050565b600060208284031215615f4957600080fd5b5051919050565b808201808211156111d0576111d0615cf5565b61ffff818116838216019080821115615e8f57615e8f615cf5565b60008251615f90818460208701615670565b919091019291505056fea264697066735822122005ba6b6492a7f3693fba5258a9f2303a6ff882a7793eeeda5ec0fcd81b362ac064736f6c634300081300332063a2b5df4feb4eafc67a25e78de774944b78020cd06ecd374fed9015fb46110000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d12d4ae10b86c0fdfdbbd2bb2dffa7d211f4b1a0678afa5427bf632584944812500000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc4500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006c9dc24af2950b3f4aacff133f824f660a4855480000000000000000000000009768ac996680186df1b4cada4f55cec8a90efaea0000000000000000000000005db45235e3f096abdf538fac1c02df4635ac3278

Deployed Bytecode

0x6080604052600436106103385760003560e01c80634d6cc0a5116101b0578063a9059cbb116100ec578063bb58a97311610095578063da07af441161006f578063da07af4414610a5b578063dd27cf2614610a7b578063dd62ed3e14610a9b578063ef39524d14610ae157600080fd5b8063bb58a973146109e7578063d830678614610a08578063d98f188314610a2257600080fd5b8063b3d514fb116100c6578063b3d514fb146105ac578063b524f87b146109a7578063b52ea402146109c757600080fd5b8063a9059cbb1461095f578063a95fda2b1461097f578063aacdd2d6146108f157600080fd5b80636ca4797f116101595780638091f3bf116101335780638091f3bf146108b9578063893d20e8146108d35780638f1ebcbf146108f157806395d89b411461091957600080fd5b80636ca4797f1461084d57806370a082311461086357806372ac24861461089957600080fd5b8063590ffdce1161018a578063590ffdce146107d45780635cce86cd146107f45780635d098b381461082d57600080fd5b80634d6cc0a5146106f75780634fbee1931461077157806350130b3b146107aa57600080fd5b80631b3ad65e1161027f578063313ce567116102285780633de99237116102025780633de992371461066457806340cc93521461068457806346671d2c146106a45780634aee3e9f146106b757600080fd5b8063313ce567146105f557806336fddb041461061c5780633abae3221461063c57600080fd5b80632acfcbac116102595780632acfcbac1461058c5780632b28fc7a146105ac57806330edd23b146105d557600080fd5b80631b3ad65e1461052a57806323b872dd1461054c5780632610eaca1461056c57600080fd5b80630b867756116102e157806313af4035116102bb57806313af4035146104d4578063158ef93e146104f457806318160ddd1461051557600080fd5b80630b867756146104575780630bca4e8a146104775780630f92df731461049757600080fd5b806306fdde031161031257806306fdde03146103b857806307980cb914610407578063095ea7b31461042757600080fd5b806303338b7b1461034457806303fd2a4514610366578063062276831461039957600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f36600461562b565b610b03565b005b34801561037257600080fd5b5061037c61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a557600080fd5b506014545b604051908152602001610390565b3480156103c457600080fd5b5060408051808201909152600881527f58636861696e414900000000000000000000000000000000000000000000000060208201525b6040516103909190615694565b34801561041357600080fd5b506103646104223660046156dc565b610dcf565b34801561043357600080fd5b506104476104423660046156f9565b6111bf565b6040519015158152602001610390565b34801561046357600080fd5b506104476104723660046156dc565b6111d6565b34801561048357600080fd5b50610364610492366004615739565b611373565b3480156104a357600080fd5b5060065460075460085461010090920460ff1691604080519315158452602084019290925290820152606001610390565b3480156104e057600080fd5b506103646104ef3660046156dc565b6118d5565b34801561050057600080fd5b5060185461044790600160a01b900460ff1681565b34801561052157600080fd5b506103aa6119e7565b34801561053657600080fd5b50306000908152600460205260409020546103aa565b34801561055857600080fd5b506104476105673660046157ce565b611a30565b34801561057857600080fd5b506103646105873660046158e5565b611b45565b34801561059857600080fd5b506103646105a73660046159a7565b611c97565b3480156105b857600080fd5b506105c261076c81565b60405161ffff9091168152602001610390565b3480156105e157600080fd5b506104476105f0366004615a0c565b611e24565b34801561060157600080fd5b5061060a611ef0565b60405160ff9091168152602001610390565b34801561062857600080fd5b50610364610637366004615aa3565b611f1f565b34801561064857600080fd5b5061037c7368b3465833fb72a70ecdf485e0e4c7bd8665fc4581565b34801561067057600080fd5b5061036461067f366004615adc565b611f6a565b34801561069057600080fd5b5061036461069f366004615b27565b612d20565b6104476106b2366004615b55565b612d4e565b3480156106c357600080fd5b50601154601254601354604080516001600160a01b0394851681529284166020840152921691810191909152606001610390565b34801561070357600080fd5b50600954600a54600b546040805161ffff80861682526201000095869004811660208301528085169282019290925284840482166060820152640100000000938490048216608082015281831660a0820152938204811660c08501529190041660e082015261010001610390565b34801561077d57600080fd5b5061044761078c3660046156dc565b6001600160a01b03166000908152600f602052604090205460ff1690565b3480156107b657600080fd5b506107bf6132a6565b60405163ffffffff9091168152602001610390565b3480156107e057600080fd5b506103646107ef366004615aa3565b6132b8565b34801561080057600080fd5b5061044761080f3660046156dc565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561083957600080fd5b506103646108483660046156dc565b613303565b34801561085957600080fd5b506105c2610ed881565b34801561086f57600080fd5b506103aa61087e3660046156dc565b6001600160a01b031660009081526020819052604090205490565b3480156108a557600080fd5b506103646108b43660046156dc565b61348f565b3480156108c557600080fd5b506006546104479060ff1681565b3480156108df57600080fd5b506019546001600160a01b031661037c565b3480156108fd57600080fd5b5061037c737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561092557600080fd5b5060408051808201909152600381527f584149000000000000000000000000000000000000000000000000000000000060208201526103fa565b34801561096b57600080fd5b5061044761097a3660046156f9565b61361b565b34801561098b57600080fd5b5061037c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156109b357600080fd5b506103646109c23660046156dc565b613628565b3480156109d357600080fd5b506103aa6109e23660046156dc565b613766565b3480156109f357600080fd5b5060185461044790600160a81b900460ff1681565b348015610a1457600080fd5b506015546104479060ff1681565b348015610a2e57600080fd5b50610447610a3d3660046156dc565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610a6757600080fd5b50610364610a76366004615bc0565b6138cc565b348015610a8757600080fd5b506103aa610a96366004615b27565b613b15565b348015610aa757600080fd5b506103aa610ab6366004615bdb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aed57600080fd5b50610af6613bac565b6040516103909190615bf9565b6019546001600160a01b0316336001600160a01b031614610b2357600080fd5b6006805461ff0019166101008515150217905561271060ff8316610b496012600a615def565b610b589064174876e800615dfe565b610b629190615dfe565b610b6c9190615e2b565b60075561271060ff8216610b826012600a615def565b610b919064174876e800615dfe565b610b9b9190615dfe565b610ba59190615e2b565b60088190556007541115610c265760405162461bcd60e51b815260206004820152603060248201527f53747564696f4c5f546f6b656e3a205468726573686f6c642063616e6e6f742060448201527f62652061626f766520616d6f756e742e0000000000000000000000000000000060648201526084015b60405180910390fd5b60405183151581527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a17fe982a30fd646fd24ecd1bce7b99a6ac0d04d50caa8c2ccaaffc1199adaea9959600754600854604051610c99929190918252602082015260400190565b60405180910390a16011546008546040517fdd19fbb700000000000000000000000000000000000000000000000000000000815260048101919091526000916001600160a01b03169063dd19fbb7906024016020604051808303816000875af1158015610d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2e9190615e3f565b905080610dc95760405162461bcd60e51b815260206004820152604d60248201527f53747564696f4c5f546f6b656e3a2055706461746520636f6e7472616374207360448201527f7761702073657474696e6773206174204c50204c6f636b657220636f6e74726160648201527f6374207478206661696c65642e00000000000000000000000000000000000000608482015260a401610c1d565b50505050565b6019546001600160a01b0316336001600160a01b031614610def57600080fd5b306000908152600460205260408120610e0783613cf6565b60ff1681548110610e1a57610e1a615e5c565b60009182526020909120600490910201600381015490915068010000000000000000900463ffffffff1615610e8d5760028101805460ff60a81b1916600160a81b1790556003810180547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff16905561116e565b6002810154600160b01b900460ff16610f0e5760405162461bcd60e51b815260206004820152602760248201527f53747564696f4c5f546f6b656e3a204c6971756964697479206d75737420626560448201527f2061646465642e000000000000000000000000000000000000000000000000006064820152608401610c1d565b6002810154600160a81b900460ff161515600103610f945760405162461bcd60e51b815260206004820152602760248201527f53747564696f4c5f546f6b656e3a2074726164696e6720616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610c1d565b6002810154600160b81b900460ff1680610fb957506002810154600160c01b900460ff165b156110f957601754600182015460028301546040517f674f8fc20000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015292831660248201528282166044820152600160a01b90910460ff16151560648201524360848201524260a4820152600092919091169063674f8fc29060c4016020604051808303816000875af115801561105f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110839190615e3f565b9050806110f75760405162461bcd60e51b8152602060048201526024808201527f53747564696f4c5f546f6b656e3a20736574206c61756e63682074782066616960448201527f6c65642e000000000000000000000000000000000000000000000000000000006064820152608401610c1d565b505b6006805460ff1916600190811790915560028201805460ff60a81b1916600160a81b1790556003820180544263ffffffff908116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921643919091161717905561116e90600a600b610b03565b604080513381526001600160a01b0384166020820152438183015242606082015290517fab4a0311680424f07f440bc25ed78bce8d142b75468b9d8e320bbd1106d3a7539181900360800190a15050565b60006111cc338484613ea3565b5060015b92915050565b6019546000906001600160a01b0316336001600160a01b0316146111f957600080fd5b306001600160a01b038316036112515760405162461bcd60e51b815260206004820152601d60248201527f53747564696f4c5f546f6b656e3a2043616e27742062652073656c662e0000006044820152606401610c1d565b6000826001600160a01b03163b116112d15760405162461bcd60e51b815260206004820152602560248201527f53747564696f4c5f546f6b656e3a2043616e2774206265206e6f6e2d636f6e7460448201527f726163742e0000000000000000000000000000000000000000000000000000006064820152608401610c1d565b601780546001600160a01b0384166001600160a01b0319918216811790925560188054909116821790556040517f4910b4d900000000000000000000000000000000000000000000000000000000815230600482015260009190634910b4d990602401600060405180830381600087803b15801561134e57600080fd5b505af192505050801561135f575060015b61136857600080fd5b50600190505b919050565b6019546001600160a01b0316336001600160a01b03161461139357600080fd5b62278d0063ffffffff821611156114125760405162461bcd60e51b815260206004820152603d60248201527f53747564696f4c5f546f6b656e3a2063616e6e6f74207061757365206c6f6e6760448201527f6572207468616e206d61782074726164652070617573652074696d652e0000006064820152608401610c1d565b30600090815260046020526040902082156116615760005b815460ff8216101561165b57818160ff168154811061144b5761144b615e5c565b600091825260209091206004909102016003015461147990600160601b900463ffffffff1662015180615e72565b63ffffffff1642116114f35760405162461bcd60e51b815260206004820152603860248201527f53747564696f4c5f546f6b656e3a2063616e277420706175736520616761696e60448201527f20756e74696c20636f6f6c646f776e206973206f7665722e00000000000000006064820152608401610c1d565b6000828260ff168154811061150a5761150a615e5c565b906000526020600020906004020160020160156101000a81548160ff02191690831515021790555082828260ff168154811061154857611548615e5c565b906000526020600020906004020160030160086101000a81548163ffffffff021916908363ffffffff16021790555042828260ff168154811061158d5761158d615e5c565b9060005260206000209060040201600301600c6101000a81548163ffffffff021916908363ffffffff1602179055507f09bc756b4dcf5965cb1b814df561e467ba5fe432c8b31517fe25da78006461746115e43390565b838360ff16815481106115f9576115f9615e5c565b600091825260209182902060049091020154604080516001600160a01b0394851681529390911691830191909152439082015263ffffffff8516606082015242608082015260a00160405180910390a18061165381615e96565b91505061142a565b506118ce565b60005b60ff81168511156118cc5760006116a387878460ff1681811061168957611689615e5c565b905060200201602081019061169e91906156dc565b613cf6565b9050828160ff16815481106116ba576116ba615e5c565b60009182526020909120600490910201600301546116e890600160601b900463ffffffff1662015180615e72565b63ffffffff1642116117625760405162461bcd60e51b815260206004820152603860248201527f53747564696f4c5f546f6b656e3a2063616e277420706175736520616761696e60448201527f20756e74696c20636f6f6c646f776e206973206f7665722e00000000000000006064820152608401610c1d565b6000838260ff168154811061177957611779615e5c565b906000526020600020906004020160020160156101000a81548160ff02191690831515021790555083838260ff16815481106117b7576117b7615e5c565b906000526020600020906004020160030160086101000a81548163ffffffff021916908363ffffffff16021790555042838260ff16815481106117fc576117fc615e5c565b9060005260206000209060040201600301600c6101000a81548163ffffffff021916908363ffffffff1602179055507f09bc756b4dcf5965cb1b814df561e467ba5fe432c8b31517fe25da78006461746118533390565b88888560ff1681811061186857611868615e5c565b905060200201602081019061187d91906156dc565b604080516001600160a01b039384168152929091166020830152439082015263ffffffff8616606082015242608082015260a00160405180910390a150806118c481615e96565b915050611664565b505b5050505050565b6019546001600160a01b0316336001600160a01b0316146118f557600080fd5b6019546001600160a01b038083169116036119785760405162461bcd60e51b815260206004820152602f60248201527f53747564696f4c5f546f6b656e3a20416c72656164792073657420746f20746860448201527f6520646573697265642076616c756500000000000000000000000000000000006064820152608401610c1d565b6019546001600160a01b0382811691167f2db8affcb91306c1e2b6526dee52161bd4ce39592a3d8be12a6adef0dd21bf8c336040516001600160a01b03909116815260200160405180910390a3601980546001600160a01b0319166001600160a01b0392909216919091179055565b60006119f56012600a615def565b611a049064174876e800615dfe565b600003611a1057600080fd5b611a1c6012600a615def565b611a2b9064174876e800615dfe565b905090565b6001600160a01b038316600090815260016020908152604080832033845290915281205460001914611b30576001600160a01b0384166000908152600160209081526040808320338452909152902054821115611af55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610c1d565b6001600160a01b038416600090815260016020908152604080832033808552925290912054611b30918691611b2b908690615eb5565b613ea3565b611b3b848484613fb0565b5060019392505050565b6019546001600160a01b0316336001600160a01b031614611b6557600080fd5b8051825114611bdb5760405162461bcd60e51b8152602060048201526024808201527f53747564696f4c5f546f6b656e3a204c656e6774687320646f206e6f74206d6160448201527f7463682e000000000000000000000000000000000000000000000000000000006064820152608401610c1d565b60005b82518160ff161015611c9257818160ff1681518110611bff57611bff615e5c565b6020026020010151600080611c113390565b6001600160a01b03166001600160a01b03168152602001908152602001600020541015611c3d57600080fd5b611c8033848360ff1681518110611c5657611c56615e5c565b6020026020010151848460ff1681518110611c7357611c73615e5c565b6020026020010151613fb0565b80611c8a81615e96565b915050611bde565b505050565b6019546001600160a01b0316336001600160a01b031614611cb757600080fd5b611cc18484613b15565b821115611ccd57600080fd5b60008415611d7b57611cdf8284614ce0565b905080611d2e5760405162461bcd60e51b815260206004820152601260248201527f53747564696f4c3a205478206661696c656400000000000000000000000000006044820152606401610c1d565b604080513381526001600160a01b038416602082015280820185905290517fc81b1761d304f16ef2aeae3a8611d9bd1d618adfff67d5157365cfb1251395329181900360600190a16118ce565b611d86848385614dc3565b905080611dd55760405162461bcd60e51b815260206004820152601260248201527f53747564696f4c3a205478206661696c656400000000000000000000000000006044820152606401610c1d565b604080513381526001600160a01b038416602082015280820185905290517f0e191ee1e354192688af5ec7da0cc3d7f54ecb056e6418d42e73ddc4c37d36379181900360600190a15050505050565b6011546000906001600160a01b0316336001600160a01b03161480611e4857503330145b611e5157600080fd5b6009805461ffff8a8116620100000263ffffffff19909216908c16171790557f745946ce5f79eaa80773b4814402e4df34ba32d19a46592eefa248aec26df6b4611e983390565b604080516001600160a01b03909216825261ffff808d1660208401528b169082015242606082015260800160405180910390a1611ed6878787614f33565b611ee184848461504a565b50600198975050505050505050565b6000611efe6012600a615def565b611f0d9064174876e800615dfe565b600003611f1957600080fd5b50601290565b6019546001600160a01b0316336001600160a01b031614611f3f57600080fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6019546001600160a01b0316336001600160a01b031614611f8a57600080fd5b801515600003612010576001600160a01b0382166120105760405162461bcd60e51b815260206004820152603d60248201527f53747564696f4c5f546f6b656e3a204d7573742050726f76696465204c50205460448201527f617267657420546f6b656e20436f6e74726163742041646472657373210000006064820152608401610c1d565b7f7e98db1b893d503d049bbf1a3858119b9172e4b74989a91dfee4165dd9ce42a88054600160ff1991821681179092557feb1861b62122c39d7846b597c3c20bac261ab9032a26ee7d64c4c7f875977df880548216831790557f37836a7135fae77e265e35732c70286035736c8b57b12590769780e067ead81c805482168317905533600081815260208481526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552818452828520600019908190558686527f12d4ae10b86c0fdfdbbd2bb2dffa7d211f4b1a0678afa5427bf6325849448125808652848720829055601980546001600160a01b0390811689528b8852868920858a52885286892084905581548116895282885286892084905530808a528c8952878a20958a52858952878a20859055808a529288528689208490557f514b0c47adfe0a53b10efead42a63e51f8d3ab7d086a57833150d240dd24149e80548c168d1790557f2883f9392b3ba59b33a93dfabc02a2e15af794b6e96b226e90f36354671ad94880548c168d1790557f310f99896b3f54ccdfe91d34c8cd2d482aae04e1065f67de2a2c478a38757e348054909b168c17909a557368b3465833fb72a70ecdf485e0e4c7bd8665fc458089529487528588208390559787527f2063a2b5df4feb4eafc67a25e78de774944b78020cd06ecd374fed9015fb461180875285882083905588548a16885299865284872084885286528487208290559654909716855287845282852087905590845282528083208590559282529390935282205583156125075781156122725773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc292505b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e89190615ec8565b6040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152306024830152919091169063e6a4390590604401602060405180830381865afa15801561234f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123739190615ec8565b90506001600160a01b0381161580156123a557506001600160a01b03811660009081526005602052604090205460ff16155b6123fd5760405162461bcd60e51b815260206004820152602360248201527f53747564696f4c5f546f6b656e3a205061697220616c7265616479206578697360448201526274732160e81b6064820152608401610c1d565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124739190615ec8565b6040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152306024830152919091169063c9c65396906044016020604051808303816000875af11580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125009190615ec8565b90506127c6565b81156125255773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc292505b7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259b9190615ec8565b6040517f1698ee820000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152306024830152610bb860448301529190911690631698ee8290606401602060405180830381865afa15801561260a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262e9190615ec8565b90506001600160a01b03811615801561266057506001600160a01b03811660009081526005602052604090205460ff16155b6126b85760405162461bcd60e51b815260206004820152602360248201527f53747564696f4c5f546f6b656e3a20506f6f6c20616c7265616479206578697360448201526274732160e81b6064820152608401610c1d565b7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272e9190615ec8565b6040517fa16712950000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152306024830152610bb86044830152919091169063a1671295906064016020604051808303816000875af115801561279f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c39190615ec8565b90505b83156127f757600280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905561281e565b600280546001600160a01b0319167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790555b60046000306001600160a01b03166001600160a01b03168152602001908152602001600020604051806101c00160405280836001600160a01b03168152602001856001600160a01b03168152602001600260009054906101000a90046001600160a01b03166001600160a01b031681526020018615158152602001600015158152602001600015158152602001600015158152602001600015158152602001600060ff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff16815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160146101000a81548160ff02191690831515021790555060808201518160020160156101000a81548160ff02191690831515021790555060a08201518160020160166101000a81548160ff02191690831515021790555060c08201518160020160176101000a81548160ff02191690831515021790555060e08201518160020160186101000a81548160ff0219169083151502179055506101008201518160020160196101000a81548160ff021916908360ff16021790555061012082015181600201601a6101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160030160006101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160030160046101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160030160086101000a81548163ffffffff021916908363ffffffff1602179055506101a082015181600301600c6101000a81548163ffffffff021916908363ffffffff1602179055505050600160056000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060001960016000836001600160a01b03166001600160a01b031681526020019081526020016000206000612bb13390565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060001960016000612be33390565b6001600160a01b0390811682526020808301939093526040918201600090812086831680835290855283822095909555600180855283822060028054851684529086528483206000199081905581548516845291865284832087845290955290839020819055925491517f095ea7b300000000000000000000000000000000000000000000000000000000815291166004820152602481019190915263095ea7b3906044016020604051808303816000875af1158015612ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccb9190615e3f565b50600254604080516001600160a01b039283168152838316602082015291851682820152517fbd359beb4995ebfd8d2e66ceb8734242a41a5e553611f3d484fc03f82e966f9b9181900360600190a150505050565b6019546001600160a01b0316336001600160a01b031614612d4057600080fd5b612d4a8282615158565b5050565b6019546000906001600160a01b0316336001600160a01b031614612d7157600080fd5b306000908152600460205260408120612d8988613cf6565b60ff1681548110612d9c57612d9c615e5c565b600091825260208220601854600490920201925060ff600160a01b90910416612e7e576017546040517fe3055f8e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039091169063e3055f8e906024016020604051808303816000875af1158015612e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e469190615e3f565b60188054911515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9092169190911790555b8580612e875750865b156131c1576017546040517f399161680000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015260009283929116906339916168906024016040805180830381865afa158015612ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f169190615ee5565b9092509050811515881515141580612f32575088151581151514155b156130db57601854600160a01b900460ff16612fb65760405162461bcd60e51b815260206004820152603560248201527f53747564696f4c5f546f6b656e3a2070726f74656374696f6e2072657175657360448201527f74206e6f7420617574686f72697a6564207965742e00000000000000000000006064820152608401610c1d565b6017546040517f02a4a72b0000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528a151560248301528b1515604483015260ff8a16606483015263ffffffff89166084830152909116906302a4a72b90349060a40160206040518083038185885af1158015613041573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130669190615e3f565b9250826130db5760405162461bcd60e51b815260206004820152602860248201527f53747564696f4c5f546f6b656e3a206661696c656420746f207365742070726f60448201527f74656374696f6e2e0000000000000000000000000000000000000000000000006064820152608401610c1d565b50506018805460ff60a81b198116600160a81b1782556001600160a01b039081166000908152600f60209081526040808320805460ff199081166001908117909255865486168552601084528285208054909116821790558d8516808552818452828520875487168652845282852060001990819055875487168652828552838620918652908452828520819055865486168552818452828520737a250d5630b4cf539739df2c5dacb4c659f2488d86528452828520819055955490941683529281528282207368b3465833fb72a70ecdf485e0e4c7bd8665fc458352905220556131cf565b6018805460ff60a81b191690555b6002909101805463ffffffff8516600160d01b027fffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8816600160c81b02167fffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffffff8a1515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff8b1515600160b81b02167fffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff90951694909417939093179290921691909117179055905095945050505050565b6000611a2b6201518062278d00615f14565b6019546001600160a01b0316336001600160a01b0316146132d857600080fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6019546001600160a01b0316336001600160a01b03161461332357600080fd5b601380546001600160a01b0319166001600160a01b038381169182179092556000818152600f60209081526040808320805460ff199081166001908117909255601090935281842080549093161790915560115490517f5d098b38000000000000000000000000000000000000000000000000000000008152600481019390935290921690635d098b38906024016020604051808303816000875af11580156133d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f49190615e3f565b905080612d4a5760405162461bcd60e51b815260206004820152604760248201527f53747564696f4c5f546f6b656e3a20557064617465204d61726b6574696e672060448201527f57616c6c6574206174204c50204c6f636b657220636f6e74726163742074782060648201527f6661696c65642e00000000000000000000000000000000000000000000000000608482015260a401610c1d565b6019546001600160a01b0316336001600160a01b0316146134af57600080fd5b601280546001600160a01b0319166001600160a01b038381169182179092556000818152600f60209081526040808320805460ff199081166001908117909255601090935281842080549093161790915560115490517f72ac24860000000000000000000000000000000000000000000000000000000081526004810193909352909216906372ac2486906024016020604051808303816000875af115801561355c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135809190615e3f565b905080612d4a5760405162461bcd60e51b815260206004820152604960248201527f53747564696f4c5f546f6b656e3a2055706461746520446576656c6f706d656e60448201527f742057616c6c6574206174204c50204c6f636b657220636f6e7472616374207460648201527f78206661696c65642e0000000000000000000000000000000000000000000000608482015260a401610c1d565b60006111cc338484613fb0565b6019546001600160a01b0316336001600160a01b03161461364857600080fd5b601180546001600160a01b0319166001600160a01b039290921691821790556000818152600f60209081526040808320805460ff199081166001908117909255601084528285208054821683179055600e845282852080549091168217905530808552818452828520868652845282852060001990819055918452828520908552808452828520829055737a250d5630b4cf539739df2c5dacb4c659f2488d85528285208290558585527f12d4ae10b86c0fdfdbbd2bb2dffa7d211f4b1a0678afa5427bf632584944812584528285208290557368b3465833fb72a70ecdf485e0e4c7bd8665fc45855283528184208190559383527f2063a2b5df4feb4eafc67a25e78de774944b78020cd06ecd374fed9015fb4611909152902055565b60008061377283613cf6565b3060009081526004602052604090208054919250429160ff841690811061379b5761379b615e5c565b600091825260208083206004928302016003015430845291905260409091208054600160601b90920463ffffffff169160ff85169081106137de576137de615e5c565b906000526020600020906004020160030160089054906101000a900463ffffffff1661380a9190615e72565b63ffffffff1611156138c357306000908152600460205260409020805442919060ff841690811061383d5761383d615e5c565b600091825260208083206004928302016003015430845291905260409091208054600160601b90920463ffffffff169160ff851690811061388057613880615e5c565b906000526020600020906004020160030160089054906101000a900463ffffffff166138ac9190615e72565b63ffffffff166138bc9190615eb5565b9392505050565b50600092915050565b6019546001600160a01b0316336001600160a01b0316146138ec57600080fd5b60145460000361398a5760405162461bcd60e51b815260206004820152604e60248201527f53747564696f4c5f546f6b656e3a204d61782057616c6c65742063616e6e6f7460448201527f20626520736574206f6e636520697420686173206265656e2073657420746f2060648201527f3020746f207475726e206f66662e000000000000000000000000000000000000608482015260a401610c1d565b60646139986012600a615def565b6139a79064174876e800615dfe565b6139b19190615e2b565b61271061ffff83166139c56012600a615def565b6139d49064174876e800615dfe565b6139de9190615dfe565b6139e89190615e2b565b1015613a5c5760405162461bcd60e51b815260206004820152603f60248201527f53747564696f4c5f546f6b656e3a204d61782057616c6c657420616d74206d7560448201527f73742062652061626f7665203125206f6620746f74616c20737570706c792e006064820152608401610c1d565b61271061ffff8216613a706012600a615def565b613a7f9064174876e800615dfe565b613a899190615dfe565b613a939190615e2b565b6014547f0fb270c3a865af3b2ea4d0e9c5434a97a5073d9a3e82ce30b98ad2b3dd25d62333604080516001600160a01b0390921682524260208301520160405180910390a361271061ffff8216613aec6012600a615def565b613afb9064174876e800615dfe565b613b059190615dfe565b613b0f9190615e2b565b60145550565b60008215613b245750476111d0565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba59190615f37565b90506111d0565b306000908152600460209081526040808320805482518185028101850190935280835260609492939192909184015b82821015613ced576000848152602090819020604080516101c0810182526004860290920180546001600160a01b03908116845260018083015482168587015260028301549182169385019390935260ff600160a01b8204811615156060860152600160a81b8204811615156080860152600160b01b82048116151560a0860152600160b81b82048116151560c0860152600160c01b82048116151560e0860152600160c81b82041661010085015263ffffffff600160d01b9091048116610120850152600390910154808216610140850152640100000000810482166101608501526801000000000000000081048216610180850152600160601b9004166101a08301529083529092019101613bdb565b50505050905090565b30600090815260046020908152604080832080548251818502810185019093528083528493849084015b82821015613e32576000848152602090819020604080516101c0810182526004860290920180546001600160a01b03908116845260018083015482168587015260028301549182169385019390935260ff600160a01b8204811615156060860152600160a81b8204811615156080860152600160b01b82048116151560a0860152600160b81b82048116151560c0860152600160c01b82048116151560e0860152600160c81b82041661010085015263ffffffff600160d01b9091048116610120850152600390910154808216610140850152640100000000810482166101608501526801000000000000000081048216610180850152600160601b9004166101a08301529083529092019101613d20565b50505050905060005b81518160ff161015613e9957836001600160a01b0316828260ff1681518110613e6657613e66615e5c565b6020026020010151600001516001600160a01b031603613e87579392505050565b80613e9181615e96565b915050613e3b565b5060ff9392505050565b6001600160a01b038316613ef95760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c1d565b6001600160a01b038216613f4f5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610c1d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661402c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c1d565b6001600160a01b0382166140a85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c1d565b6000811161411e5760405162461bcd60e51b815260206004820152603860248201527f53747564696f4c5f546f6b656e3a205472616e7366657220616d6f756e74206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610c1d565b6001600160a01b0383166000908152600560205260408120548190819060ff16156141c857600380546001600160a01b0319166001600160a01b038816179055600a54600d805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff00000000191664010000000080850483160267ffff00000000000019161766010000000000009384900491909116909202919091179055600192506142d3565b6001600160a01b03851660009081526005602052604090205460ff161561426e57600380546001600160a01b0319166001600160a01b038716179055600b54600d805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff00000000191664010000000080850483160267ffff00000000000019161766010000000000009384900491909116909202919091179055600191506142d3565b50600c54600d805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff00000000191664010000000080850483160267ffff0000000000001916176601000000000000938490049190911690920291909117905560015b6003546000906142eb906001600160a01b0316613cf6565b3060009081526004602052604081208054929350909160ff841690811061431457614314615e5c565b6000918252602091829020604080516101c081018252600490930290910180546001600160a01b039081168452600182015481169484019490945260028101549384169183019190915260ff600160a01b8404811615156060840152600160a81b8404811615156080840152600160b01b84048116151560a0840152600160b81b84048116151560c0840152600160c01b84048116151560e0840152600160c81b84041661010083015263ffffffff600160d01b909304831661012083015260030154808316610140830152640100000000810483166101608301526801000000000000000081048316610180830152600160601b90049091166101a0820152905061442088886153a3565b156149d95761018081015163ffffffff16156144ee57805161444190613766565b6000036144ee5730600090815260046020526040902080546001919060ff851690811061447057614470615e5c565b60009182526020808320600492830201600201805460ff60a81b1916600160a81b951515959095029490941790935530825290915260408120805460ff85169081106144be576144be615e5c565b906000526020600020906004020160030160086101000a81548163ffffffff021916908363ffffffff1602179055505b306000908152600460205260409020805460ff841690811061451257614512615e5c565b906000526020600020906004020160020160159054906101000a900460ff166145a35760405162461bcd60e51b815260206004820152602360248201527f53747564696f4c5f546f6b656e3a2054726164696e67206e6f7420656e61626c60448201527f65642100000000000000000000000000000000000000000000000000000000006064820152608401610c1d565b60008160c001511561478c5760175482516040517f3a5f8f580000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201528b821660248201528a8216604482015288151560648201528715156084820152911690633a5f8f589060a40160408051808303816000875af1925050508015614650575060408051601f3d908101601f1916820190925261464d91810190615ee5565b60015b61465957600080fd5b3060009081526004602052604090208054929350839282919060ff881690811061468557614685615e5c565b906000526020600020906004020160020160176101000a81548160ff0219169083151502179055505050806147395785156146ec576001600160a01b0380891660009081526001602090815260408083206018549094168352929052206000199055614739565b806147395760405162461bcd60e51b815260206004820181905260248201527f53747564696f4c5f416e7469426f743a20536e697065722052656a65637465646044820152606401610c1d565b8160c0015161478c578151604080516001600160a01b0390921682524360208301524282820152517f889cff6f0386c74172b24ac91f177c69716feaed9fea3627bbc8096ed207429a9181900360600190a15b8160e00151156148f35760175482516040517fbb483ff50000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201528b821660248201528a821660448201528815156064820152871515608482015291169063bb483ff59060a4016020604051808303816000875af1925050508015614838575060408051601f3d908101601f1916820190925261483591810190615e3f565b60015b61484157600080fd5b9050806148f3578515614880576001600160a01b03808916600090815260016020908152604080832060185490941683529290522060001990556148f3565b806148f35760405162461bcd60e51b815260206004820152602660248201527f53747564696f4c5f416e7469426f743a2053616e647769636820426f7420526560448201527f6a656374656400000000000000000000000000000000000000000000000000006064820152608401610c1d565b81604001516001600160a01b0316886001600160a01b031614158015614917575084155b156149d7576001600160a01b03881660009081526010602052604090205460ff166149d7576014546001600160a01b038916600090815260208190526040902054614963908990615f50565b11156149d75760405162461bcd60e51b815260206004820152603960248201527f53747564696f4c5f546f6b656e3a205472616e7366657220616d6f756e74206560448201527f78636565647320746865206d617857616c6c657453697a652e000000000000006064820152608401610c1d565b505b600654610100900460ff1615614a2d5760155460ff16614a2d5784614a2d576007546011546001600160a01b031660009081526020819052604090205410614a2d57614a2d81606001518260200151615158565b8060a00151614ad7578051614a439089896154c3565b8060a00151158015614a5a5750614a5a88886153a3565b8015614a64575082155b15614ad75760405162461bcd60e51b815260206004820152603160248201527f53747564696f4c5f546f6b656e3a205072652d6c69717569646974792074726160448201527f6e736665722070726f74656374696f6e2e0000000000000000000000000000006064820152608401610c1d565b6001600160a01b0388166000908152600f602052604081205460ff1680614b1657506001600160a01b0388166000908152600f602052604090205460ff165b15614b22575085614c2c565b600d546000906127109061ffff6401000000008204811691614b4d9162010000820481169116615f63565b614b579190615f63565b614b659061ffff168a615dfe565b614b6f9190615e2b565b9050614b7b8189615eb5565b9150806000808c6001600160a01b03166001600160a01b031681526020019081526020016000206000828254614bb19190615eb5565b90915550506011546001600160a01b031660009081526020819052604081208054839290614be0908490615f50565b90915550506011546040518281526001600160a01b03918216918c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b6001600160a01b03891660009081526020819052604081208054839290614c54908490615eb5565b90915550506001600160a01b03881660009081526020819052604081208054839290614c81908490615f50565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051614ccd91815260200190565b60405180910390a3505050505050505050565b60408051600080825260208201928390529182916001600160a01b038616918591614d0a91615f7e565b60006040518083038185875af1925050503d8060008114614d47576040519150601f19603f3d011682016040523d82523d6000602084013e614d4c565b606091505b50509050806138bc5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c65640000000000000000000000006064820152608401610c1d565b6000806000856001600160a01b031663a9059cbb8686604051602401614dfe9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051614e4c9190615f7e565b6000604051808303816000865af19150503d8060008114614e89576040519150601f19603f3d011682016040523d82523d6000602084013e614e8e565b606091505b5091509150818015614eb8575080511580614eb8575080806020019051810190614eb89190615e3f565b614f2a5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c6564000000000000000000000000000000000000006064820152608401610c1d565b50949350505050565b600a805461ffff83811664010000000090810265ffff00000000198784166201000090810263ffffffff19909616858b161795909517908116821795869055918504831694614f8c949004831692908116911617615f63565b614f969190615f63565b600a805461ffff9290921666010000000000000267ffff000000000000199092169190911790557f5d2599801ce2d0f74f50d60908741dfea874928be36e10a86821ba460a923ae3614fe53390565b600a54604080516001600160a01b03909316835261ffff808316602085015262010000830481169184019190915264010000000082048116606084015266010000000000009091041660808201524260a082015260c0015b60405180910390a1505050565b600b805461ffff83811664010000000090810265ffff00000000198784166201000090810263ffffffff19909616858b1617959095179081168217958690559185048316946150a3949004831692908116911617615f63565b6150ad9190615f63565b600b805461ffff9290921666010000000000000267ffff000000000000199092169190911790557ffaa3fa39fe5e8b67522ae13ed3851746f2b2fb690acc9c0f5a1a668af08afb036150fc3390565b600b54604080516001600160a01b03909316835261ffff808316602085015262010000830481169184019190915264010000000082048116606084015266010000000000009091041660808201524260a082015260c00161503d565b6015805460ff191660011790556011546001600160a01b0390811660009081526020819052604081205490917fffffffffffffffffffffffff3fd555c64ddc0172f5f1a3b0d81526f7c38a933e90841601615245576011546040517f777c4d5300000000000000000000000000000000000000000000000000000000815285151560048201526001600160a01b0385811660248301529091169063777c4d53906044016020604051808303816000875af115801561521a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061523e9190615e3f565b91506152d9565b6011546040517fd3fcc8f300000000000000000000000000000000000000000000000000000000815285151560048201526001600160a01b0385811660248301529091169063d3fcc8f3906044016020604051808303816000875af11580156152b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152d69190615e3f565b91505b604080518281526001600160a01b0385166020820152428183015290517ffa77e5931b6f79610b4cf716e839caeea53bf67e42d92846ac2b49236f651a3c9181900360600190a1816153935760405162461bcd60e51b815260206004820152602660248201527f53747564696f4c5f546f6b656e3a204175746f4c69717569646974792074782060448201527f6661696c656400000000000000000000000000000000000000000000000000006064820152608401610c1d565b50506015805460ff191690555050565b6019546000906001600160a01b038481169116148015906153d257506019546001600160a01b03838116911614155b80156153e957506019546001600160a01b03163214155b801561540e57506001600160a01b0383166000908152600e602052604090205460ff16155b801561543357506001600160a01b0382166000908152600e602052604090205460ff16155b801561545857506001600160a01b03831660009081526010602052604090205460ff16155b801561547d57506001600160a01b03821660009081526010602052604090205460ff16155b801561549457506001600160a01b03821661dead14155b80156154a857506001600160a01b03821615155b80156138bc57506001600160a01b0383163014159392505050565b3060009081526004602052604081206154db85613cf6565b60ff16815481106154ee576154ee615e5c565b600091825260209091206004909102016002810154909150600160b01b900460ff16156155835760405162461bcd60e51b815260206004820152603260248201527f53747564696f4c5f546f6b656e3a204c697175696469747920616c726561647960448201527f20616464656420616e64206d61726b65642e00000000000000000000000000006064820152608401610c1d565b61558d83836153a3565b1580156155ab5750836001600160a01b0316826001600160a01b0316145b15610dc9576001600160a01b0383166000908152600e60205260409020805460ff191660011790556002810180547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16600160b01b17905550505050565b801515811461561757600080fd5b50565b803560ff8116811461136e57600080fd5b60008060006060848603121561564057600080fd5b833561564b81615609565b92506156596020850161561a565b91506156676040850161561a565b90509250925092565b60005b8381101561568b578181015183820152602001615673565b50506000910152565b60208152600082518060208401526156b3816040850160208701615670565b601f01601f19169190910160400192915050565b6001600160a01b038116811461561757600080fd5b6000602082840312156156ee57600080fd5b81356138bc816156c7565b6000806040838503121561570c57600080fd5b8235615717816156c7565b946020939093013593505050565b803563ffffffff8116811461136e57600080fd5b6000806000806060858703121561574f57600080fd5b843567ffffffffffffffff8082111561576757600080fd5b818701915087601f83011261577b57600080fd5b81358181111561578a57600080fd5b8860208260051b850101111561579f57600080fd5b602092830196509450508501356157b581615609565b91506157c360408601615725565b905092959194509250565b6000806000606084860312156157e357600080fd5b83356157ee816156c7565b925060208401356157fe816156c7565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561584e5761584e61580f565b604052919050565b600067ffffffffffffffff8211156158705761587061580f565b5060051b60200190565b600082601f83011261588b57600080fd5b813560206158a061589b83615856565b615825565b82815260059290921b840181019181810190868411156158bf57600080fd5b8286015b848110156158da57803583529183019183016158c3565b509695505050505050565b600080604083850312156158f857600080fd5b823567ffffffffffffffff8082111561591057600080fd5b818501915085601f83011261592457600080fd5b8135602061593461589b83615856565b82815260059290921b8401810191818101908984111561595357600080fd5b948201945b8386101561597a57853561596b816156c7565b82529482019490820190615958565b9650508601359250508082111561599057600080fd5b5061599d8582860161587a565b9150509250929050565b600080600080608085870312156159bd57600080fd5b84356159c881615609565b935060208501356159d8816156c7565b92506040850135915060608501356159ef816156c7565b939692955090935050565b803561ffff8116811461136e57600080fd5b600080600080600080600080610100898b031215615a2957600080fd5b615a32896159fa565b9750615a4060208a016159fa565b9650615a4e60408a016159fa565b9550615a5c60608a016159fa565b9450615a6a60808a016159fa565b9350615a7860a08a016159fa565b9250615a8660c08a016159fa565b9150615a9460e08a016159fa565b90509295985092959890939650565b60008060408385031215615ab657600080fd5b8235615ac1816156c7565b91506020830135615ad181615609565b809150509250929050565b600080600060608486031215615af157600080fd5b8335615afc81615609565b92506020840135615b0c816156c7565b91506040840135615b1c81615609565b809150509250925092565b60008060408385031215615b3a57600080fd5b8235615b4581615609565b91506020830135615ad1816156c7565b600080600080600060a08688031215615b6d57600080fd5b8535615b78816156c7565b94506020860135615b8881615609565b93506040860135615b9881615609565b9250615ba66060870161561a565b9150615bb460808701615725565b90509295509295909350565b600060208284031215615bd257600080fd5b6138bc826159fa565b60008060408385031215615bee57600080fd5b8235615b45816156c7565b602080825282518282018190526000919060409081850190868401855b82811015615ce857815180516001600160a01b0390811686528782015181168887015286820151168686015260608082015115159086015260808082015115159086015260a08082015115159086015260c08082015115159086015260e0808201511515908601526101008082015160ff16908601526101208082015163ffffffff908116918701919091526101408083015182169087015261016080830151821690870152610180808301518216908701526101a09182015116908501526101c09093019290850190600101615c16565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115615d46578160001904821115615d2c57615d2c615cf5565b80851615615d3957918102915b93841c9390800290615d10565b509250929050565b600082615d5d575060016111d0565b81615d6a575060006111d0565b8160018114615d805760028114615d8a57615da6565b60019150506111d0565b60ff841115615d9b57615d9b615cf5565b50506001821b6111d0565b5060208310610133831016604e8410600b8410161715615dc9575081810a6111d0565b615dd38383615d0b565b8060001904821115615de757615de7615cf5565b029392505050565b60006138bc60ff841683615d4e565b80820281158282048414176111d0576111d0615cf5565b634e487b7160e01b600052601260045260246000fd5b600082615e3a57615e3a615e15565b500490565b600060208284031215615e5157600080fd5b81516138bc81615609565b634e487b7160e01b600052603260045260246000fd5b63ffffffff818116838216019080821115615e8f57615e8f615cf5565b5092915050565b600060ff821660ff8103615eac57615eac615cf5565b60010192915050565b818103818111156111d0576111d0615cf5565b600060208284031215615eda57600080fd5b81516138bc816156c7565b60008060408385031215615ef857600080fd5b8251615f0381615609565b6020840151909250615ad181615609565b600063ffffffff80841680615f2b57615f2b615e15565b92169190910492915050565b600060208284031215615f4957600080fd5b5051919050565b808201808211156111d0576111d0615cf5565b61ffff818116838216019080821115615e8f57615e8f615cf5565b60008251615f90818460208701615670565b919091019291505056fea264697066735822122005ba6b6492a7f3693fba5258a9f2303a6ff882a7793eeeda5ec0fcd81b362ac064736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006c9dc24af2950b3f4aacff133f824f660a4855480000000000000000000000009768ac996680186df1b4cada4f55cec8a90efaea0000000000000000000000005db45235e3f096abdf538fac1c02df4635ac3278

-----Decoded View---------------
Arg [0] : _V2orV3 (bool): True
Arg [1] : _pairedIsNative (bool): True
Arg [2] : _LPTargetCoinCA (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [3] : _lpLocker (address): 0x6c9DC24Af2950B3F4AAcFF133F824F660A485548
Arg [4] : _development (address): 0x9768AC996680186dF1B4cAda4F55Cec8A90EFAeA
Arg [5] : _marketing (address): 0x5Db45235E3F096ABdf538FAC1c02DF4635AC3278

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [3] : 0000000000000000000000006c9dc24af2950b3f4aacff133f824f660a485548
Arg [4] : 0000000000000000000000009768ac996680186df1b4cada4f55cec8a90efaea
Arg [5] : 0000000000000000000000005db45235e3f096abdf538fac1c02df4635ac3278


Deployed Bytecode Sourcemap

37577:34736:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61628:694;;;;;;;;;;-1:-1:-1;61628:694:0;;;;;:::i;:::-;;:::i;:::-;;37661:73;;;;;;;;;;;;37692:42;37661:73;;;;;-1:-1:-1;;;;;980:55:1;;;962:74;;950:2;935:18;37661:73:0;;;;;;;;64935:100;;;;;;;;;;-1:-1:-1;65013:14:0;;64935:100;;;1193:25:1;;;1181:2;1166:18;64935:100:0;1047:177:1;45590:80:0;;;;;;;;;;-1:-1:-1;45662:5:0;;;;;;;;;;;;;;;;;45590:80;;;;;;;:::i;55534:1429::-;;;;;;;;;;-1:-1:-1;55534:1429:0;;;;;:::i;:::-;;:::i;46598:163::-;;;;;;;;;;-1:-1:-1;46598:163:0;;;;;:::i;:::-;;:::i;:::-;;;2877:14:1;;2870:22;2852:41;;2840:2;2825:18;46598:163:0;2712:187:1;53018:616:0;;;;;;;;;;-1:-1:-1;53018:616:0;;;;;:::i;:::-;;:::i;56971:1503::-;;;;;;;;;;-1:-1:-1;56971:1503:0;;;;;:::i;:::-;;:::i;62330:204::-;;;;;;;;;;-1:-1:-1;62479:19:0;;62500:13;;62515:10;;62479:19;;;;;;;62330:204;;;4120:14:1;;4113:22;4095:41;;4167:2;4152:18;;4145:34;;;;4195:18;;;4188:34;4083:2;4068:18;62330:204:0;3899:329:1;71983:233:0;;;;;;;;;;-1:-1:-1;71983:233:0;;;;;:::i;:::-;;:::i;42591:31::-;;;;;;;;;;-1:-1:-1;42591:31:0;;;;-1:-1:-1;;;42591:31:0;;;;;;45261:115;;;;;;;;;;;;;:::i;52635:121::-;;;;;;;;;;-1:-1:-1;52734:4:0;52686:7;52713:28;;;:11;:28;;;;;:35;52635:121;;46121:469;;;;;;;;;;-1:-1:-1;46121:469:0;;;;;:::i;:::-;;:::i;48181:408::-;;;;;;;;;;-1:-1:-1;48181:408:0;;;;;:::i;:::-;;:::i;47224:642::-;;;;;;;;;;-1:-1:-1;47224:642:0;;;;;:::i;:::-;;:::i;40703:41::-;;;;;;;;;;;;40740:4;40703:41;;;;;8009:6:1;7997:19;;;7979:38;;7967:2;7952:18;40703:41:0;7835:188:1;59280:632:0;;;;;;;;;;-1:-1:-1;59280:632:0;;;;;:::i;:::-;;:::i;45382:112::-;;;;;;;;;;;;;:::i;:::-;;;9142:4:1;9130:17;;;9112:36;;9100:2;9085:18;45382:112:0;8970:184:1;65187:140:0;;;;;;;;;;-1:-1:-1;65187:140:0;;;;;:::i;:::-;;:::i;38447:82::-;;;;;;;;;;;;38487:42;38447:82;;49090:3103;;;;;;;;;;-1:-1:-1;49090:3103:0;;;;;:::i;:::-;;:::i;71069:156::-;;;;;;;;;;-1:-1:-1;71069:156:0;;;;;:::i;:::-;;:::i;53642:1884::-;;;;;;:::i;:::-;;:::i;64094:205::-;;;;;;;;;;-1:-1:-1;64222:11:0;:20;64244:23;;64269:21;;64094:205;;;-1:-1:-1;;;;;64222:20:0;;;11384:34:1;;64244:23:0;;;11449:2:1;11434:18;;11427:43;64269:21:0;;11486:18:1;;;11479:43;;;;11311:2;11296:18;64094:205:0;11121:407:1;60953:640:0;;;;;;;;;;-1:-1:-1;61319:6:0;:13;61376:10;:20;61481:11;:21;60953:640;;;61319:13;;;;11885:34:1;;61347:14:0;;;;;;;11950:2:1;11935:18;;11928:43;61376:20:0;;;11987:18:1;;;11980:43;;;;61411:20:0;;;;;12054:2:1;12039:18;;12032:43;61446:20:0;;;;;;;12106:3:1;12091:19;;12084:44;61481:21:0;;;12159:3:1;12144:19;;12137:44;61517:21:0;;;;;12212:3:1;12197:19;;12190:44;61553:21:0;;;;12265:3:1;12250:19;;12243:44;11847:3;11832:19;60953:640:0;11533:760:1;65335:127:0;;;;;;;;;;-1:-1:-1;65335:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;65426:28:0;65402:4;65426:28;;;:19;:28;;;;;;;;;65335:127;58482:121;;;;;;;;;;;;;:::i;:::-;;;12571:10:1;12559:23;;;12541:42;;12529:2;12514:18;58482:121:0;12397:192:1;65043:136:0;;;;;;;;;;-1:-1:-1;65043:136:0;;;;;:::i;:::-;;:::i;65470:132::-;;;;;;;;;;-1:-1:-1;65470:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;65564:30:0;65540:4;65564:30;;;:21;:30;;;;;;;;;65470:132;63676:410;;;;;;;;;;-1:-1:-1;63676:410:0;;;;;:::i;:::-;;:::i;40800:45::-;;;;;;;;;;;;40841:4;40800:45;;45817:119;;;;;;;;;;-1:-1:-1;45817:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;45912:16:0;45885:7;45912:16;;;;;;;;;;;;45817:119;63240:428;;;;;;;;;;-1:-1:-1;63240:428:0;;;;;:::i;:::-;;:::i;39316:28::-;;;;;;;;;;-1:-1:-1;39316:28:0;;;;;;;;72224:84;;;;;;;;;;-1:-1:-1;72294:6:0;;-1:-1:-1;;;;;72294:6:0;72224:84;;38370:70;;;;;;;;;;;;38321:42;38370:70;;45500:84;;;;;;;;;;-1:-1:-1;45574:7:0;;;;;;;;;;;;;;;;;45500:84;;45944:169;;;;;;;;;;-1:-1:-1;45944:169:0;;;;;:::i;:::-;;:::i;38566:79::-;;;;;;;;;;;;38603:42;38566:79;;62566:666;;;;;;;;;;-1:-1:-1;62566:666:0;;;;;:::i;:::-;;:::i;58611:501::-;;;;;;;;;;-1:-1:-1;58611:501:0;;;;;:::i;:::-;;:::i;42629:33::-;;;;;;;;;;-1:-1:-1;42629:33:0;;;;-1:-1:-1;;;42629:33:0;;;;;;42062:18;;;;;;;;;;-1:-1:-1;42062:18:0;;;;;;;;52764:105;;;;;;;;;;-1:-1:-1;52764:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;52847:14:0;52823:4;52847:14;;;:9;:14;;;;;;;;;52764:105;64453:474;;;;;;;;;;-1:-1:-1;64453:474:0;;;;;:::i;:::-;;:::i;47874:262::-;;;;;;;;;;-1:-1:-1;47874:262:0;;;;;:::i;:::-;;:::i;45676:133::-;;;;;;;;;;-1:-1:-1;45676:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;45778:19:0;;;45760:7;45778:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;45676:133;52504:123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;61628:694::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;61744:19:::1;:29:::0;;-1:-1:-1;;61744:29:0::1;;::::0;::::1;;;;::::0;;61831:5:::1;61744:29;61801:26:::0;::::1;38064:15;38000:2;38064;:15;:::i;:::-;38046:34;::::0;37900:15:::1;38046:34;:::i;:::-;61801:26;;;;:::i;:::-;61800:36;;;;:::i;:::-;61784:13;:52:::0;61884:5:::1;61861:19;::::0;::::1;38064:15;38000:2;38064;:15;:::i;:::-;38046:34;::::0;37900:15:::1;38046:34;:::i;:::-;61861:19;;;;:::i;:::-;61860:29;;;;:::i;:::-;61847:10;:42:::0;;;61908:13:::1;::::0;:27:::1;;61900:88;;;::::0;-1:-1:-1;;;61900:88:0;;18227:2:1;61900:88:0::1;::::0;::::1;18209:21:1::0;18266:2;18246:18;;;18239:30;18305:34;18285:18;;;18278:62;18376:18;18356;;;18349:46;18412:19;;61900:88:0::1;;;;;;;;;62006:35;::::0;2877:14:1;;2870:22;2852:41;;62006:35:0::1;::::0;2840:2:1;2825:18;62006:35:0::1;;;;;;;62057:54;62085:13;;62100:10;;62057:54;;;;;;18616:25:1::0;;;18672:2;18657:18;;18650:34;18604:2;18589:18;;18442:248;62057:54:0::1;;;;;;;;62149:11;:20:::0;62195:10:::1;::::0;62139:67:::1;::::0;;;;::::1;::::0;::::1;1193:25:1::0;;;;62124:12:0::1;::::0;-1:-1:-1;;;;;62149:20:0::1;::::0;62139:55:::1;::::0;1166:18:1;;62139:67:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62124:82;;62225:7;62217:97;;;::::0;-1:-1:-1;;;62217:97:0;;19147:2:1;62217:97:0::1;::::0;::::1;19129:21:1::0;19186:2;19166:18;;;19159:30;19225:34;19205:18;;;19198:62;19296:34;19276:18;;;19269:62;19368:15;19347:19;;;19340:44;19401:19;;62217:97:0::1;18945:481:1::0;62217:97:0::1;61733:589;61628:694:::0;;;:::o;55534:1429::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;55649:4:::1;55603:22;55628:28:::0;;;:11:::1;:28;::::0;;;;55658:21:::1;55672:6:::0;55658:13:::1;:21::i;:::-;55628:53;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;55695:25;::::0;::::1;::::0;55628:53;;-1:-1:-1;55695:25:0;;::::1;;;:30:::0;55692:1183:::1;;55742:23;::::0;::::1;:30:::0;;-1:-1:-1;;;;55742:30:0::1;-1:-1:-1::0;;;55742:30:0::1;::::0;;55787:25:::1;::::0;::::1;:29:::0;;;::::1;::::0;;55692:1183:::1;;;55857:17;::::0;::::1;::::0;-1:-1:-1;;;55857:17:0;::::1;;;55849:69;;;::::0;-1:-1:-1;;;55849:69:0;;19822:2:1;55849:69:0::1;::::0;::::1;19804:21:1::0;19861:2;19841:18;;;19834:30;19900:34;19880:18;;;19873:62;19971:9;19951:18;;;19944:37;19998:19;;55849:69:0::1;19620:403:1::0;55849:69:0::1;55941:23;::::0;::::1;::::0;-1:-1:-1;;;55941:23:0;::::1;;;:31;;55968:4;55941:31:::0;55933:83:::1;;;::::0;-1:-1:-1;;;55933:83:0;;20230:2:1;55933:83:0::1;::::0;::::1;20212:21:1::0;20269:2;20249:18;;;20242:30;20308:34;20288:18;;;20281:62;20379:9;20359:18;;;20352:37;20406:19;;55933:83:0::1;20028:403:1::0;55933:83:0::1;56036:25;::::0;::::1;::::0;-1:-1:-1;;;56036:25:0;::::1;;;::::0;:53:::1;;-1:-1:-1::0;56065:24:0::1;::::0;::::1;::::0;-1:-1:-1;;;56065:24:0;::::1;;;56036:53;56033:442;;;56125:9;::::0;;56196:21;::::1;::::0;56240:14:::1;::::0;::::1;::::0;56125:259:::1;::::0;;;;-1:-1:-1;;;;;20796:15:1;;;56125:259:0::1;::::0;::::1;20778:34:1::0;56196:21:0;;::::1;20828:18:1::0;;;20821:43;56240:14:0;;::::1;20880:18:1::0;;;20873:43;-1:-1:-1;;;56277:15:0;;::::1;;;20959:14:1::0;20952:22;20932:18;;;20925:50;56315:12:0::1;20991:19:1::0;;;20984:35;56350:15:0::1;21035:19:1::0;;;21028:35;56110:12:0::1;::::0;56125:9;;;::::1;::::0;:19:::1;::::0;20689::1;;56125:259:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56110:274;;56411:7;56403:56;;;::::0;-1:-1:-1;;;56403:56:0;;21276:2:1;56403:56:0::1;::::0;::::1;21258:21:1::0;21315:2;21295:18;;;21288:30;21354:34;21334:18;;;21327:62;21425:6;21405:18;;;21398:34;21449:19;;56403:56:0::1;21074:400:1::0;56403:56:0::1;56091:384;56033:442;56491:8;:15:::0;;-1:-1:-1;;56491:15:0::1;56502:4;56491:15:::0;;::::1;::::0;;;56521:23:::1;::::0;::::1;:30:::0;;-1:-1:-1;;;;56521:30:0::1;-1:-1:-1::0;;;56521:30:0::1;::::0;;56566:28:::1;::::0;::::1;:51:::0;;56669:15:::1;56566:51;56632:53:::0;;::::1;::::0;::::1;::::0;;;;56604:12:::1;56566:51:::0;;;::::1;56632:53:::0;::::1;::::0;;56702:37:::1;::::0;56732:2:::1;56736;56702:23;:37::i;:::-;56890:65;::::0;;34583:10;21771:34:1;;-1:-1:-1;;;;;21841:15:1;;21836:2;21821:18;;21814:43;56925:12:0::1;21873:18:1::0;;;21866:34;56939:15:0::1;21931:2:1::0;21916:18;;21909:34;56890:65:0;;::::1;::::0;;;;21697:3:1;56890:65:0;;::::1;55592:1371;55534:1429:::0;:::o;46598:163::-;46675:4;46692:39;34583:10;46715:7;46724:6;46692:8;:39::i;:::-;-1:-1:-1;46749:4:0;46598:163;;;;;:::o;53018:616::-;44912:6;;53093:4;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;53140:4:::1;-1:-1:-1::0;;;;;53118:27:0;::::1;::::0;53110:69:::1;;;::::0;-1:-1:-1;;;53110:69:0;;22156:2:1;53110:69:0::1;::::0;::::1;22138:21:1::0;22195:2;22175:18;;;22168:30;22234:31;22214:18;;;22207:59;22283:18;;53110:69:0::1;21954:353:1::0;53110:69:0::1;53223:1;53198:10;-1:-1:-1::0;;;;;53198:22:0::1;;:26;53190:76;;;::::0;-1:-1:-1;;;53190:76:0;;22514:2:1;53190:76:0::1;::::0;::::1;22496:21:1::0;22553:2;22533:18;;;22526:30;22592:34;22572:18;;;22565:62;22663:7;22643:18;;;22636:35;22688:19;;53190:76:0::1;22312:401:1::0;53190:76:0::1;53310:9;:32:::0;;-1:-1:-1;;;;;53310:32:0;::::1;-1:-1:-1::0;;;;;;53310:32:0;;::::1;::::0;::::1;::::0;;;53353:9:::1;:22:::0;;;;::::1;::::0;::::1;::::0;;53390:45:::1;::::0;;;;53428:4:::1;53390:45;::::0;::::1;962:74:1::0;-1:-1:-1;;53310:32:0;53390:28:::1;::::0;935:18:1;;53390:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;53386:135;;53501:8;::::0;::::1;53386:135;-1:-1:-1::0;53463:4:0::1;53617:9:::0;-1:-1:-1;44930:1:0::1;53018:616:::0;;;:::o;56971:1503::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;39513:7:::1;57106:36;::::0;::::1;;;57098:110;;;::::0;-1:-1:-1;;;57098:110:0;;23333:2:1;57098:110:0::1;::::0;::::1;23315:21:1::0;23372:2;23352:18;;;23345:30;23411:34;23391:18;;;23384:62;23482:31;23462:18;;;23455:59;23531:19;;57098:110:0::1;23131:425:1::0;57098:110:0::1;57267:4;57219:24;57246:28:::0;;;:11:::1;:28;::::0;;;;57285:1182;::::1;;;57322:7;57318:522;57339:15:::0;;57335:19:::1;::::0;::::1;;57318:522;;;57415:8;57424:1;57415:11;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:34;;::::0;57406:43:::1;::::0;-1:-1:-1;;;57415:34:0;::::1;;;57406:6;:43;:::i;:::-;57388:61;;:15;:61;57380:130;;;::::0;-1:-1:-1;;;57380:130:0;;23940:2:1;57380:130:0::1;::::0;::::1;23922:21:1::0;23979:2;23959:18;;;23952:30;24018:34;23998:18;;;23991:62;24089:26;24069:18;;;24062:54;24133:19;;57380:130:0::1;23738:420:1::0;57380:130:0::1;57558:5;57529:8;57538:1;57529:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;;:34;;;;;;;;;;;;;;;;;;57613:15;57582:8;57591:1;57582:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;;:46;;;;;;;;;;;;;;;;;;57691:15;57647:8;57656:1;57647:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;:34;;;:60;;;;;;;;;;;;;;;;;;57731:93;57743:12;34583:10:::0;;34503:98;57743:12:::1;57757:8;57766:1;57757:11;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;;::::1;;:18:::0;57731:93:::1;::::0;;-1:-1:-1;;;;;24499:15:1;;;24481:34;;57757:18:0;;;::::1;24531::1::0;;;24524:43;;;;57777:12:0::1;24583:18:1::0;;;24576:34;24658:10;24646:23;;24641:2;24626:18;;24619:51;57808:15:0::1;24701:3:1::0;24686:19;;24679:35;24407:3;24392:19;57731:93:0::1;;;;;;;57356:3:::0;::::1;::::0;::::1;:::i;:::-;;;;57318:522;;;;57285:1182;;;57876:7;57872:584;57889:17;::::0;::::1;::::0;-1:-1:-1;57872:584:0::1;;;57932:11;57946:24;57960:6;;57967:1;57960:9;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;57946:13;:24::i;:::-;57932:38;;58024:8;58033:5;58024:15;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:38;;::::0;58015:47:::1;::::0;-1:-1:-1;;;58024:38:0;::::1;;;58015:6;:47;:::i;:::-;57997:65;;:15;:65;57989:134;;;::::0;-1:-1:-1;;;57989:134:0;;23940:2:1;57989:134:0::1;::::0;::::1;23922:21:1::0;23979:2;23959:18;;;23952:30;24018:34;23998:18;;;23991:62;24089:26;24069:18;;;24062:54;24133:19;;57989:134:0::1;23738:420:1::0;57989:134:0::1;58175:5;58142:8;58151:5;58142:15;;;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;:38;;;;;;;;;;;;;;;;;;58234:15;58199:8;58208:5;58199:15;;;;;;;;;;:::i;:::-;;;;;;;;;;;:32;;;:50;;;;;;;;;;;;;;;;;;58316:15;58268:8;58277:5;58268:15;;;;;;;;;;:::i;:::-;;;;;;;;;;;:38;;;:64;;;;;;;;;;;;;;;;;;58356:84;58368:12;34583:10:::0;;34503:98;58368:12:::1;58382:6;;58389:1;58382:9;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;58356:84;::::0;;-1:-1:-1;;;;;24499:15:1;;;24481:34;;24551:15;;;;24546:2;24531:18;;24524:43;58393:12:0::1;24583:18:1::0;;;24576:34;24658:10;24646:23;;24641:2;24626:18;;24619:51;58424:15:0::1;24701:3:1::0;24686:19;;24679:35;24407:3;24392:19;58356:84:0::1;;;;;;;-1:-1:-1::0;57908:3:0;::::1;::::0;::::1;:::i;:::-;;;;57872:584;;;;57285:1182;57087:1387;56971:1503:::0;;;;:::o;71983:233::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;72056:6:::1;::::0;-1:-1:-1;;;;;72056:17:0;;::::1;:6:::0;::::1;:17:::0;72048:77:::1;;;::::0;-1:-1:-1;;;72048:77:0;;25107:2:1;72048:77:0::1;::::0;::::1;25089:21:1::0;25146:2;25126:18;;;25119:30;25185:34;25165:18;;;25158:62;25256:17;25236:18;;;25229:45;25291:19;;72048:77:0::1;24905:411:1::0;72048:77:0::1;72165:6;::::0;-1:-1:-1;;;;;72141:40:0;;::::1;::::0;72165:6:::1;72141:40;34583:10:::0;72141:40:::1;::::0;-1:-1:-1;;;;;980:55:1;;;962:74;;950:2;935:18;72141:40:0::1;;;;;;;72192:6;:16:::0;;-1:-1:-1;;;;;;72192:16:0::1;-1:-1:-1::0;;;;;72192:16:0;;;::::1;::::0;;;::::1;::::0;;71983:233::o;45261:115::-;45316:7;38064:15;38000:2;38064;:15;:::i;:::-;38046:34;;37900:15;38046:34;:::i;:::-;45342:1;45331:12;45327:31;;45347:8;;;45327:31;38064:15;38000:2;38064;:15;:::i;:::-;38046:34;;37900:15;38046:34;:::i;:::-;45359:14;;45261:115;:::o;46121:469::-;-1:-1:-1;;;;;46242:19:0;;46221:4;46242:19;;;:11;:19;;;;;;;;34583:10;46242:33;;;;;;;;-1:-1:-1;;46242:54:0;46238:276;;-1:-1:-1;;;;;46321:19:0;;;;;;:11;:19;;;;;;;;34583:10;46321:35;;;;;;;;:45;-1:-1:-1;46321:45:0;46313:98;;;;-1:-1:-1;;;46313:98:0;;25523:2:1;46313:98:0;;;25505:21:1;25562:2;25542:18;;;25535:30;25601:34;25581:18;;;25574:62;25672:10;25652:18;;;25645:38;25700:19;;46313:98:0;25321:404:1;46313:98:0;-1:-1:-1;;;;;46457:19:0;;;;;;:11;:19;;;;;;;;34583:10;46457:35;;;;;;;;;46426:76;;46435:6;;46457:44;;46495:6;;46457:44;:::i;:::-;46426:8;:76::i;:::-;46524:36;46534:6;46542:9;46553:6;46524:9;:36::i;:::-;-1:-1:-1;46578:4:0;46121:469;;;;;:::o;48181:408::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;48321:12:::1;:19;48302:8;:15;:38;48294:87;;;::::0;-1:-1:-1;;;48294:87:0;;26065:2:1;48294:87:0::1;::::0;::::1;26047:21:1::0;26104:2;26084:18;;;26077:30;26143:34;26123:18;;;26116:62;26214:6;26194:18;;;26187:34;26238:19;;48294:87:0::1;25863:400:1::0;48294:87:0::1;48397:7;48392:190;48414:8;:15;48410:1;:19;;;48392:190;;;48486:12;48499:1;48486:15;;;;;;;;;;:::i;:::-;;;;;;;48459:7;:23:::0;48468:12:::1;34583:10:::0;;34503:98;48468:12:::1;-1:-1:-1::0;;;;;48459:23:0::1;-1:-1:-1::0;;;;;48459:23:0::1;;;;;;;;;;;;;:42;;48451:51;;;::::0;::::1;;48517:53;34583:10:::0;48541:8:::1;48550:1;48541:11;;;;;;;;;;:::i;:::-;;;;;;;48554:12;48567:1;48554:15;;;;;;;;;;:::i;:::-;;;;;;;48517:9;:53::i;:::-;48431:3:::0;::::1;::::0;::::1;:::i;:::-;;;;48392:190;;;;48181:408:::0;;:::o;47224:642::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;47363:41:::1;47384:10;47396:7;47363:20;:41::i;:::-;47356:3;:48;;47348:57;;;::::0;::::1;;47416:9;47440:10;47436:423;;;47473:47;47504:10;47516:3;47473:30;:47::i;:::-;47466:54;;47543:4;47535:35;;;::::0;-1:-1:-1;;;47535:35:0;;26470:2:1;47535:35:0::1;::::0;::::1;26452:21:1::0;26509:2;26489:18;;;26482:30;26548:20;26528:18;;;26521:48;26586:18;;47535:35:0::1;26268:342:1::0;47535:35:0::1;47590:43;::::0;;34583:10;26878:34:1;;-1:-1:-1;;;;;26948:15:1;;26943:2;26928:18;;26921:43;26980:18;;;26973:34;;;47590:43:0;;::::1;::::0;;;;26805:2:1;47590:43:0;;::::1;47436:423;;;47673:53;47701:7;47710:10;47722:3;47673:27;:53::i;:::-;47666:60;;47749:4;47741:35;;;::::0;-1:-1:-1;;;47741:35:0;;26470:2:1;47741:35:0::1;::::0;::::1;26452:21:1::0;26509:2;26489:18;;;26482:30;26548:20;26528:18;;;26521:48;26586:18;;47741:35:0::1;26268:342:1::0;47741:35:0::1;47796:51;::::0;;34583:10;26878:34:1;;-1:-1:-1;;;;;26948:15:1;;26943:2;26928:18;;26921:43;26980:18;;;26973:34;;;47796:51:0;;::::1;::::0;;;;26805:2:1;47796:51:0;;::::1;47337:529;47224:642:::0;;;;:::o;59280:632::-;45006:11;:20;59580:4;;-1:-1:-1;;;;;45006:20:0;34583:10;-1:-1:-1;;;;;44990:36:0;;:86;;;-1:-1:-1;34583:10:0;45071:4;45047:29;44990:86;44982:112;;;;;;59599:6:::1;:23:::0;;::::1;59633:25:::0;;::::1;::::0;::::1;-1:-1:-1::0;;59633:25:0;;;59599:23;;::::1;59633:25:::0;::::1;::::0;;59676:62:::1;59689:12;34583:10:::0;;34503:98;59689:12:::1;59676:62;::::0;;-1:-1:-1;;;;;27263:55:1;;;27245:74;;27338:6;27380:15;;;27375:2;27360:18;;27353:43;27432:15;;27412:18;;;27405:43;59722:15:0::1;27479:2:1::0;27464:18;;27457:34;27232:3;27217:19;59676:62:0::1;;;;;;;59749:59;59762:13;59777:15;59794:13;59749:12;:59::i;:::-;59819:63;59833:14;59849:16;59867:14;59819:13;:63::i;:::-;-1:-1:-1::0;59900:4:0::1;59280:632:::0;;;;;;;;;;:::o;45382:112::-;45434:5;38064:15;38000:2;38064;:15;:::i;:::-;38046:34;;37900:15;38046:34;:::i;:::-;45458:1;45447:12;45443:31;;45463:8;;;45443:31;-1:-1:-1;38000:2:0;;45382:112::o;65187:140::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;-1:-1:-1;;;;;65279:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;65279:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;65187:140::o;49090:3103::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;49211:24;::::1;;49230:5;49211:24:::0;49208:158:::1;;-1:-1:-1::0;;;;;49259:29:0;::::1;49251:103;;;::::0;-1:-1:-1;;;49251:103:0;;27704:2:1;49251:103:0::1;::::0;::::1;27686:21:1::0;27743:2;27723:18;;;27716:30;27782:34;27762:18;;;27755:62;27853:31;27833:18;;;27826:59;27902:19;;49251:103:0::1;27502:425:1::0;49251:103:0::1;49376:34:::0;:41;;49413:4:::1;-1:-1:-1::0;;49376:41:0;;::::1;::::0;::::1;::::0;;;49428:36;:43;;;::::1;::::0;::::1;::::0;;49482:32;:39;;;::::1;::::0;::::1;::::0;;34583:10;-1:-1:-1;49534:27:0;;;49376:34:::1;49534:27:::0;;;;;;;38321:42:::1;49534::::0;;;;;;;;;-1:-1:-1;;49534:62:0;;;;49607:42;;;:26;:42;;;;;;:62;;;49692:6:::1;::::0;;-1:-1:-1;;;;;49692:6:0;;::::1;49680:19:::0;;;;;;;;:34;;;;;;;;:54;;;49772:6;;;::::1;49745:34:::0;;;;;;;;:54;;;49831:4:::1;49810:28:::0;;;;;;;;;:43;;;;;;;;;:63;;;49884:43;;;;;;;;;:63;;;49960:34;:41;;;::::1;::::0;::::1;::::0;;50012:36;:43;;;::::1;::::0;::::1;::::0;;50066:32;:39;;;;::::1;::::0;::::1;::::0;;;38487:42:::1;50118::::0;;;;;;;;;:62;;;50191:42;;;:26;:42;;;;;;:62;;;50276:6;;;::::1;50264:19:::0;;;;;;;;:34;;;;;;;;:54;;;50356:6;;;;::::1;50329:34:::0;;;;;;;;:54;;;50394:43;;;;;;;;:63;;;50468:43;;;;;;;;;:63;50569:916;::::1;;;50599:15;50596:83;;;38603:42;50635:28;;50596:83;38321:42;-1:-1:-1::0;;;;;50712:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50700:93;::::0;;;;-1:-1:-1;;;;;28441:15:1;;;50700:93:0::1;::::0;::::1;28423:34:1::0;50786:4:0::1;28473:18:1::0;;;28466:43;50700:59:0;;;::::1;::::0;::::1;::::0;28335:18:1;;50700:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50693:100:::0;-1:-1:-1;;;;;;50816:18:0;::::1;::::0;:38;::::1;;;-1:-1:-1::0;;;;;;50839:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;::::1;;50838:16;50816:38;50808:86;;;::::0;-1:-1:-1;;;50808:86:0;;28722:2:1;50808:86:0::1;::::0;::::1;28704:21:1::0;28761:2;28741:18;;;28734:30;28800:34;28780:18;;;28773:62;-1:-1:-1;;;28851:18:1;;;28844:33;28894:19;;50808:86:0::1;28520:399:1::0;50808:86:0::1;38321:42;-1:-1:-1::0;;;;;50928:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50916:96;::::0;;;;-1:-1:-1;;;;;28441:15:1;;;50916:96:0::1;::::0;::::1;28423:34:1::0;51005:4:0::1;28473:18:1::0;;;28466:43;50916:62:0;;;::::1;::::0;::::1;::::0;28335:18:1;;50916:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50909:103;;50569:916;;;51048:15;51045:83;;;38603:42;51084:28;;51045:83;38487:42;-1:-1:-1::0;;;;;51161:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51149:99;::::0;;;;-1:-1:-1;;;;;29215:15:1;;;51149:99:0::1;::::0;::::1;29197:34:1::0;51235:4:0::1;29247:18:1::0;;;29240:43;51242:4:0::1;29299:18:1::0;;;29292:49;51149:59:0;;;::::1;::::0;::::1;::::0;29109:18:1;;51149:99:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51142:106:::0;-1:-1:-1;;;;;;51271:18:0;::::1;::::0;:38;::::1;;;-1:-1:-1::0;;;;;;51294:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;::::1;;51293:16;51271:38;51263:86;;;::::0;-1:-1:-1;;;51263:86:0;;29554:2:1;51263:86:0::1;::::0;::::1;29536:21:1::0;29593:2;29573:18;;;29566:30;29632:34;29612:18;;;29605:62;-1:-1:-1;;;29683:18:1;;;29676:33;29726:19;;51263:86:0::1;29352:399:1::0;51263:86:0::1;38487:42;-1:-1:-1::0;;;;;51383:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51371:102;::::0;;;;-1:-1:-1;;;;;29215:15:1;;;51371:102:0::1;::::0;::::1;29197:34:1::0;51460:4:0::1;29247:18:1::0;;;29240:43;51467:4:0::1;29299:18:1::0;;;29292:49;51371:62:0;;;::::1;::::0;::::1;::::0;29109:18:1;;51371:102:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51364:109;;50569:916;51500:7;51497:126;;;51524:11;:27:::0;;-1:-1:-1;;;;;;51524:27:0::1;38321:42;51524:27;::::0;;51497:126:::1;;;51584:11;:27:::0;;-1:-1:-1;;;;;;51584:27:0::1;38487:42;51584:27;::::0;;51497:126:::1;51633:11;:28;51654:4;-1:-1:-1::0;;;;;51633:28:0::1;-1:-1:-1::0;;;;;51633:28:0::1;;;;;;;;;;;;51668:97;;;;;;;;51675:4;-1:-1:-1::0;;;;;51668:97:0::1;;;;;51681:15;-1:-1:-1::0;;;;;51668:97:0::1;;;;;51698:11;;;;;;;;;-1:-1:-1::0;;;;;51698:11:0::1;-1:-1:-1::0;;;;;51668:97:0::1;;;;;51711:7;51668:97;;;;;;51720:5;51668:97;;;;;;51727:5;51668:97;;;;;;51734:5;51668:97;;;;;;51741:5;51668:97;;;;;;51748:1;51668:97;;;;;;51751:1;51668:97;;;;;;51754:1;51668:97;;;;;;51757:1;51668:97;;;;;;51760:1;51668:97;;;;;;51763:1;51668:97;;;;::::0;51633:134:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;51633:134:0::1;;;;;-1:-1:-1::0;;;;;51633:134:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;51633:134:0::1;;;;;-1:-1:-1::0;;;;;51633:134:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;51633:134:0::1;;;;;-1:-1:-1::0;;;;;51633:134:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51798:4;51780:9;:15;51790:4;-1:-1:-1::0;;;;;51780:15:0::1;-1:-1:-1::0;;;;;51780:15:0::1;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;51815:11:0::1;:17;51827:4;-1:-1:-1::0;;;;;51815:17:0::1;-1:-1:-1::0;;;;;51815:17:0::1;;;;;;;;;;;;:33;51834:12;34583:10:::0;;34503:98;51834:12:::1;-1:-1:-1::0;;;;;51815:33:0::1;-1:-1:-1::0;;;;;51815:33:0::1;;;;;;;;;;;;:53;;;;-1:-1:-1::0;;51879:11:0::1;:27;51892:12;34583:10:::0;;34503:98;51892:12:::1;-1:-1:-1::0;;;;;51879:27:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;51879:27:0;;;:33;;::::1;::::0;;;;;;;;;:53;;;;51943:11:::1;:17:::0;;;;;;51961:11:::1;::::0;;;::::1;51943:30:::0;;;;;;;;-1:-1:-1;;51943:50:0;;;;52016:11;;;::::1;52004:24:::0;;;;;;;;:30;;;;;;;;;;:50;;;52088:11;;52067:52;;;;;52088:11;::::1;52067:52;::::0;::::1;29930:74:1::0;30020:18;;;30013:34;;;;52067:20:0::1;::::0;29903:18:1;;52067:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;52150:11:0::1;::::0;52137:48:::1;::::0;;-1:-1:-1;;;;;52150:11:0;;::::1;11384:34:1::0;;11454:15;;;11449:2;11434:18;;11427:43;11506:15;;;11486:18;;;11479:43;52137:48:0;::::1;::::0;;;;11311:2:1;52137:48:0;;::::1;49197:2996;49090:3103:::0;;;:::o;71069:156::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;71173:44:::1;71186:12;71200:16;71173:12;:44::i;:::-;71069:156:::0;;:::o;53642:1884::-;44912:6;;53853:4;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;53916:4:::1;53870:22;53895:28:::0;;;:11:::1;:28;::::0;;;;53925:21:::1;53939:6:::0;53925:13:::1;:21::i;:::-;53895:53;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;53994:11:::1;::::0;53895:53:::1;::::0;;::::1;;::::0;-1:-1:-1;53994:11:0::1;-1:-1:-1::0;;;53994:11:0;;::::1;;53990:100;;54036:9;::::0;:42:::1;::::0;;;;54071:4:::1;54036:42;::::0;::::1;962:74:1::0;-1:-1:-1;;;;;54036:9:0;;::::1;::::0;:25:::1;::::0;935:18:1;;54036:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54022:11;:56:::0;;;::::1;;-1:-1:-1::0;;;54022:56:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;53990:100:::1;54103:10;:24;;;;54117:10;54103:24;54100:1185;;;54225:9;::::0;:52:::1;::::0;;;;-1:-1:-1;;;;;980:55:1;;;54225:52:0::1;::::0;::::1;962:74:1::0;54144:15:0::1;::::0;;;54225:9;::::1;::::0;:44:::1;::::0;935:18:1;;54225:52:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54201:76:::0;;-1:-1:-1;54201:76:0;-1:-1:-1;54295:24:0;::::1;;::::0;::::1;;;;::::0;:49:::1;;;54334:10;54323:21;;:7;:21;;;;54295:49;54292:511;;;54373:11;::::0;-1:-1:-1;;;54373:11:0;::::1;;;54365:77;;;::::0;-1:-1:-1;;;54365:77:0;;30638:2:1;54365:77:0::1;::::0;::::1;30620:21:1::0;30677:2;30657:18;;;30650:30;30716:34;30696:18;;;30689:62;30787:23;30767:18;;;30760:51;30828:19;;54365:77:0::1;30436:417:1::0;54365:77:0::1;54473:9;::::0;:235:::1;::::0;;;;-1:-1:-1;;;;;31117:55:1;;;54473:235:0::1;::::0;::::1;31099:74:1::0;31216:14;;31209:22;31189:18;;;31182:50;31275:14;;31268:22;31248:18;;;31241:50;31339:4;31327:17;;31307:18;;;31300:45;31394:10;31382:23;;31361:19;;;31354:52;54473:9:0;;::::1;::::0;:24:::1;::::0;54505:9:::1;::::0;31071:19:1;;54473:235:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54463:245;;54735:7;54727:60;;;::::0;-1:-1:-1;;;54727:60:0;;31619:2:1;54727:60:0::1;::::0;::::1;31601:21:1::0;31658:2;31638:18;;;31631:30;31697:34;31677:18;;;31670:62;31768:10;31748:18;;;31741:38;31796:19;;54727:60:0::1;31417:404:1::0;54727:60:0::1;-1:-1:-1::0;;54817:13:0::1;:20:::0;;-1:-1:-1;;;;54817:20:0;::::1;-1:-1:-1::0;;;54817:20:0::1;::::0;;-1:-1:-1;;;;;54874:9:0;;;54817:20;54854:30;;;:19:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;54854:37:0;;::::1;54833:4;54854:37:::0;;::::1;::::0;;;54928:9;;;::::1;54906:32:::0;;:21:::1;:32:::0;;;;;:39;;;;::::1;::::0;::::1;::::0;;54960:19;;::::1;::::0;;;;;;;;;54980:9;;;::::1;54960:30:::0;;;;;;;-1:-1:-1;;54960:50:0;;;;55037:9;;;::::1;55025:22:::0;;;;;;;;:30;;;;;;;;;:50;;;55102:9;;;::::1;55090:22:::0;;;;;;;;38321:42:::1;55090:37:::0;;;;;;;:57;;;55174:9;;;;::::1;55162:22:::0;;;;;;;;38487:42:::1;55162:37:::0;;;;;:57;54100:1185:::1;;;55252:13;:21:::0;;-1:-1:-1;;;;55252:21:0::1;::::0;;54100:1185:::1;55295:25;::::0;;::::1;:38:::0;;55441:46:::1;::::0;::::1;-1:-1:-1::0;;;55441:46:0::1;::::0;55295:38:::1;55392::::0;::::1;-1:-1:-1::0;;;55392:38:0::1;55441:46:::0;;55344:37;::::1;;-1:-1:-1::0;;;55344:37:0::1;::::0;55295:38;::::1;;-1:-1:-1::0;;;55295:38:0::1;55344:37:::0;;;;;;;;;;;;::::1;55441:46:::0;;;;;;;;::::1;::::0;;55511:7;-1:-1:-1;53642:1884:0;;;;;;;:::o;58482:121::-;58543:6;58569:26;58589:6;39513:7;58569:26;:::i;65043:136::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;-1:-1:-1;;;;;65133:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;65133:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;65043:136::o;63676:410::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;63754:21;:34;;-1:-1:-1;;;;;;63754:34:0::1;-1:-1:-1::0;;;;;63754:34:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;63799:31:0;;;:19:::1;:31;::::0;;;;;;;:38;;-1:-1:-1;;63799:38:0;;::::1;-1:-1:-1::0;63799:38:0;;::::1;::::0;;;63848:21:::1;:33:::0;;;;;;:40;;;;::::1;;::::0;;;63754:11:::1;63924:20:::0;63914:62;;;;;::::1;::::0;::::1;962:74:1::0;;;;-1:-1:-1;;63924:20:0::1;::::0;63914:50:::1;::::0;935:18:1;;63914:62:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63899:77;;63995:7;63987:91;;;::::0;-1:-1:-1;;;63987:91:0;;32224:2:1;63987:91:0::1;::::0;::::1;32206:21:1::0;32263:2;32243:18;;;32236:30;32302:34;32282:18;;;32275:62;32373:34;32353:18;;;32346:62;32445:9;32424:19;;;32417:38;32472:19;;63987:91:0::1;32022:475:1::0;63240:428:0;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;63322:23;:38;;-1:-1:-1;;;;;;63322:38:0::1;-1:-1:-1::0;;;;;63322:38:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;63371:33:0;;;:19:::1;:33;::::0;;;;;;;:40;;-1:-1:-1;;63371:40:0;;::::1;-1:-1:-1::0;63371:40:0;;::::1;::::0;;;63422:21:::1;:35:::0;;;;;;:42;;;;::::1;;::::0;;;63322:11:::1;63500:20:::0;63490:66;;;;;::::1;::::0;::::1;962:74:1::0;;;;-1:-1:-1;;63500:20:0::1;::::0;63490:52:::1;::::0;935:18:1;;63490:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63475:81;;63575:7;63567:93;;;::::0;-1:-1:-1;;;63567:93:0;;32704:2:1;63567:93:0::1;::::0;::::1;32686:21:1::0;32743:2;32723:18;;;32716:30;32782:34;32762:18;;;32755:62;32853:34;32833:18;;;32826:62;32925:11;32904:19;;;32897:40;32954:19;;63567:93:0::1;32502:477:1::0;45944:169:0;46024:4;46041:42;34583:10;46065:9;46076:6;46041:9;:42::i;62566:666::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;62636:11:::1;:32:::0;;-1:-1:-1;;;;;;62636:32:0::1;-1:-1:-1::0;;;;;62636:32:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;62679:30:0;;;:19:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;62679:37:0;;::::1;-1:-1:-1::0;62679:37:0;;::::1;::::0;;;62727:21:::1;:32:::0;;;;;:39;;;::::1;::::0;::::1;::::0;;62777:17:::1;:28:::0;;;;;:35;;;;::::1;::::0;::::1;::::0;;62844:4:::1;62823:28:::0;;;;;;;;;:39;;;;;;;;-1:-1:-1;;62823:59:0;;;;62893:22;;;;;;:39;;;;;;;;;:59;;;38321:42:::1;62963:37:::0;;;;;:57;;;63031:37;;;:26;:37;;;;;:57;;;38487:42:::1;63099:37:::0;;;;;;;:57;;;63167:37;;;:26;:37;;;;;:57;62566:666::o;58611:501::-;58685:7;58705:11;58719:21;58733:6;58719:13;:21::i;:::-;58830:4;58809:28;;;;:11;:28;;;;;:35;;58705;;-1:-1:-1;58870:15:0;;58809:35;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:58;;;58775:4;58754:28;;;;;;;;;:35;;-1:-1:-1;;;58809:58:0;;;;;;58754:35;;;;;;;;;;:::i;:::-;;;;;;;;;;;:52;;;;;;;;;;;;:113;;;;:::i;:::-;:131;;;58751:354;;;58985:4;58964:28;;;;:11;:28;;;;;:35;;59025:15;;58964:28;:35;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:58;;;58930:4;58909:28;;;;;;;;;:35;;-1:-1:-1;;;58964:58:0;;;;;;58909:35;;;;;;;;;;:::i;:::-;;;;;;;;;;;:52;;;;;;;;;;;;:113;;;;:::i;:::-;:131;;;;;;:::i;:::-;58902:138;58611:501;-1:-1:-1;;;58611:501:0:o;58751:354::-;-1:-1:-1;59080:1:0;;58611:501;-1:-1:-1;;58611:501:0:o;64453:474::-;44912:6;;-1:-1:-1;;;;;44912:6:0;34583:10;-1:-1:-1;;;;;44896:22:0;;44888:31;;;;;;64529:14:::1;;64547:1;64529:19:::0;64521:110:::1;;;::::0;-1:-1:-1;;;64521:110:0;;33186:2:1;64521:110:0::1;::::0;::::1;33168:21:1::0;33225:2;33205:18;;;33198:30;33264:34;33244:18;;;33237:62;33335:34;33315:18;;;33308:62;33407:16;33386:19;;;33379:45;33441:19;;64521:110:0::1;32984:482:1::0;64521:110:0::1;64690:3;38064:15;38000:2;38064;:15;:::i;:::-;38046:34;::::0;37900:15:::1;38046:34;:::i;:::-;64680:13;;;;:::i;:::-;37649:5;64650:25;64651:13:::0;::::1;38064:15;38000:2;38064;:15;:::i;:::-;38046:34;::::0;37900:15:::1;38046:34;:::i;:::-;64651:13;;;;:::i;:::-;64650:25;;;;:::i;:::-;:44;;64642:120;;;::::0;-1:-1:-1;;;64642:120:0;;33673:2:1;64642:120:0::1;::::0;::::1;33655:21:1::0;33712:2;33692:18;;;33685:30;33751:34;33731:18;;;33724:62;33822:33;33802:18;;;33795:61;33873:19;;64642:120:0::1;33471:427:1::0;64642:120:0::1;37649:5;64827:23;:13:::0;::::1;38064:15;38000:2;38064;:15;:::i;:::-;38046:34;::::0;37900:15:::1;38046:34;:::i;:::-;64827:13;;;;:::i;:::-;:23;;;;:::i;:::-;64811:14;::::0;64780:88:::1;34583:10:::0;64780:88:::1;::::0;;-1:-1:-1;;;;;29948:55:1;;;29930:74;;64852:15:0::1;30035:2:1::0;30020:18;;30013:34;29903:18;64780:88:0::1;;;;;;;37649:5;64896:23;:13:::0;::::1;38064:15;38000:2;38064;:15;:::i;:::-;38046:34;::::0;37900:15:::1;38046:34;:::i;:::-;64896:13;;;;:::i;:::-;:23;;;;:::i;:::-;64879:14;:40:::0;-1:-1:-1;64453:474:0:o;47874:262::-;47959:7;47983:10;47979:150;;;-1:-1:-1;48016:21:0;48009:28;;47979:150;48077:40;;;;;48111:4;48077:40;;;962:74:1;-1:-1:-1;;;;;48077:25:0;;;;;935:18:1;;48077:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48070:47;;;;52504:123;52612:4;52591:28;;;;:11;:28;;;;;;;;52584:35;;;;;;;;;;;;;;;;;52557:14;;52584:35;;52591:28;;52584:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52584:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52584:35:0;;;;;;;;;;-1:-1:-1;;;52584:35:0;;;;;;;;;;-1:-1:-1;;;52584:35:0;;;;;;;;;;-1:-1:-1;;;52584:35:0;;;;;;;;;;-1:-1:-1;;;52584:35:0;;;;;;;;;;-1:-1:-1;;;52584:35:0;;;;;;;;-1:-1:-1;;;52584:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52584:35:0;;;;;;;;;;;;;;;;;;;;;;;;52504:123;:::o;52201:295::-;52325:4;52260:5;52304:28;;;:11;:28;;;;;;;;52278:54;;;;;;;;;;;;;;;;;52260:5;;;;52278:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52278:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52278:54:0;;;;;;;;;;-1:-1:-1;;;52278:54:0;;;;;;;;;;-1:-1:-1;;;52278:54:0;;;;;;;;;;-1:-1:-1;;;52278:54:0;;;;;;;;;;-1:-1:-1;;;52278:54:0;;;;;;;;;;-1:-1:-1;;;52278:54:0;;;;;;;;-1:-1:-1;;;52278:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52278:54:0;;;;;;;;;;;;;;;;;;;;;;;;52349:7;52345:111;52366:8;:15;52362:1;:19;;;52345:111;;;52428:4;-1:-1:-1;;;;;52406:26:0;:8;52415:1;52406:11;;;;;;;;;;:::i;:::-;;;;;;;:18;;;-1:-1:-1;;;;;52406:26:0;;52403:42;;52442:1;52201:295;-1:-1:-1;;;52201:295:0:o;52403:42::-;52383:3;;;;:::i;:::-;;;;52345:111;;;-1:-1:-1;52473:15:0;;52201:295;-1:-1:-1;;;52201:295:0:o;46769:310::-;-1:-1:-1;;;;;46864:20:0;;46856:52;;;;-1:-1:-1;;;46856:52:0;;34294:2:1;46856:52:0;;;34276:21:1;34333:2;34313:18;;;34306:30;34372:21;34352:18;;;34345:49;34411:18;;46856:52:0;34092:343:1;46856:52:0;-1:-1:-1;;;;;46927:21:0;;46919:53;;;;-1:-1:-1;;;46919:53:0;;34294:2:1;46919:53:0;;;34276:21:1;34333:2;34313:18;;;34306:30;34372:21;34352:18;;;34345:49;34411:18;;46919:53:0;34092:343:1;46919:53:0;-1:-1:-1;;;;;46985:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;47038:33;;1193:25:1;;;47038:33:0;;1166:18:1;47038:33:0;;;;;;;46769:310;;;:::o;66178:4444::-;-1:-1:-1;;;;;66267:18:0;;66259:68;;;;-1:-1:-1;;;66259:68:0;;34642:2:1;66259:68:0;;;34624:21:1;34681:2;34661:18;;;34654:30;34720:34;34700:18;;;34693:62;34791:7;34771:18;;;34764:35;34816:19;;66259:68:0;34440:401:1;66259:68:0;-1:-1:-1;;;;;66346:16:0;;66338:64;;;;-1:-1:-1;;;66338:64:0;;35048:2:1;66338:64:0;;;35030:21:1;35087:2;35067:18;;;35060:30;35126:34;35106:18;;;35099:62;35197:5;35177:18;;;35170:33;35220:19;;66338:64:0;34846:399:1;66338:64:0;66430:1;66421:6;:10;66413:79;;;;-1:-1:-1;;;66413:79:0;;35452:2:1;66413:79:0;;;35434:21:1;35491:2;35471:18;;;35464:30;35530:34;35510:18;;;35503:62;35601:26;35581:18;;;35574:54;35645:19;;66413:79:0;35250:420:1;66413:79:0;-1:-1:-1;;;;;66593:15:0;;66503:8;66593:15;;;:9;:15;;;;;;66503:8;;;;66593:15;;66589:351;;;66650:7;:14;;-1:-1:-1;;;;;;66650:14:0;-1:-1:-1;;;;;66650:14:0;;;;;66695:10;66679:26;:13;:26;;;;;;-1:-1:-1;;66679:26:0;;;;;;;;;;;;;;;-1:-1:-1;;66679:26:0;;;;;;;;-1:-1:-1;;66679:26:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;66589:351:0;;;-1:-1:-1;;;;;66727:13:0;;;;;;:9;:13;;;;;;;;66723:217;;;66783:7;:12;;-1:-1:-1;;;;;;66783:12:0;-1:-1:-1;;;;;66783:12:0;;;;;66826:11;66810:27;:13;:27;;;;;;-1:-1:-1;;66810:27:0;;;;;;;;;;;;;;;-1:-1:-1;;66810:27:0;;;;;;;;-1:-1:-1;;66810:27:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;66723:217:0;;;-1:-1:-1;66913:15:0;66897:31;:13;:31;;;;;;-1:-1:-1;;66897:31:0;;;;;;;;;;;;;;;-1:-1:-1;;66897:31:0;;;;;;;;-1:-1:-1;;66897:31:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;66723:217:0;66978:7;;66950:11;;66964:22;;-1:-1:-1;;;;;66978:7:0;66964:13;:22::i;:::-;67042:4;66997:21;67021:28;;;:11;:28;;;;;:35;;66950:36;;-1:-1:-1;66997:21:0;;67021:35;;;;;;;;;;:::i;:::-;;;;;;;;;;66997:59;;;;;;;;67021:35;;;;;;;66997:59;;-1:-1:-1;;;;;66997:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;66997:59:0;;;;;;;;;;-1:-1:-1;;;66997:59:0;;;;;;;;;;-1:-1:-1;;;66997:59:0;;;;;;;;;;-1:-1:-1;;;66997:59:0;;;;;;;;;;-1:-1:-1;;;66997:59:0;;;;;;;;;;-1:-1:-1;;;66997:59:0;;;;;;;;-1:-1:-1;;;66997:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;66997:59:0;;;;;;;;;;-1:-1:-1;67073:20:0;67084:4;67090:2;67073:10;:20::i;:::-;67069:2233;;;67114:25;;;;:30;;;67111:304;;67197:15;;67169:44;;:27;:44::i;:::-;67217:1;67169:49;67165:235;;67265:4;67244:28;;;;:11;:28;;;;;:35;;67297:4;;67244:28;:35;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:50;;:57;;-1:-1:-1;;;;67244:57:0;-1:-1:-1;;;67244:57:0;;;;;;;;;;;;;;67345:4;67324:28;;;;;;;;:35;;67244:57;67324:35;;;;;;;;;:::i;:::-;;;;;;;;;;;:52;;;:56;;;;;;;;;;;;;;;;;;67165:235;67458:4;67437:28;;;;:11;:28;;;;;:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:50;;;;;;;;;;;;67429:98;;;;-1:-1:-1;;;67429:98:0;;35877:2:1;67429:98:0;;;35859:21:1;35916:2;35896:18;;;35889:30;35955:34;35935:18;;;35928:62;36026:5;36006:18;;;35999:33;36049:19;;67429:98:0;35675:399:1;67429:98:0;67542:12;67574:8;:25;;;67571:854;;;67624:9;;67651:15;;67624:64;;;;;-1:-1:-1;;;;;36405:15:1;;;67624:64:0;;;36387:34:1;36457:15;;;36437:18;;;36430:43;36509:15;;;36489:18;;;36482:43;36568:14;;36561:22;36541:18;;;36534:50;36628:14;;36621:22;36600:19;;;36593:51;67624:9:0;;;:26;;36298:19:1;;67624:64:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;67624:64:0;;;;;;;;-1:-1:-1;;67624:64:0;;;;;;;;;;;;:::i;:::-;;;67620:330;;67922:8;;;67620:330;67828:4;67807:28;;;;:11;:28;;;;;:35;;67778:6;;-1:-1:-1;67778:6:0;;67862:10;;67807:28;:35;;;;;;;;;;:::i;:::-;;;;;;;;;;;:52;;;:65;;;;;;;;;;;;;;;;;;67706:186;;67972:7;67968:269;;68007:3;68004:214;;;-1:-1:-1;;;;;68039:15:0;;;;;;;:11;:15;;;;;;;;68055:9;;;;;68039:26;;;;;;-1:-1:-1;;68039:46:0;;68004:214;;;68150:7;68142:52;;;;-1:-1:-1;;;68142:52:0;;36857:2:1;68142:52:0;;;36839:21:1;;;36876:18;;;36869:30;36935:34;36915:18;;;36908:62;36987:18;;68142:52:0;36655:356:1;68142:52:0;68260:8;:25;;;68255:155;;68343:15;;68315:75;;;-1:-1:-1;;;;;37236:55:1;;;37218:74;;68360:12:0;37323:2:1;37308:18;;37301:34;68374:15:0;37351:18:1;;;37344:34;68315:75:0;;;;;;37206:2:1;68315:75:0;;;68255:155;68444:8;:24;;;68441:583;;;68493:9;;68522:15;;68493:66;;;;;-1:-1:-1;;;;;36405:15:1;;;68493:66:0;;;36387:34:1;36457:15;;;36437:18;;;36430:43;36509:15;;;36489:18;;;36482:43;36568:14;;36561:22;36541:18;;;36534:50;36628:14;;36621:22;36600:19;;;36593:51;68493:9:0;;;:28;;36298:19:1;;68493:66:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;68493:66:0;;;;;;;;-1:-1:-1;;68493:66:0;;;;;;;;;;;;:::i;:::-;;;68489:227;;68688:8;;;68489:227;68632:6;-1:-1:-1;68738:7:0;68734:275;;68773:3;68770:220;;;-1:-1:-1;;;;;68805:15:0;;;;;;;:11;:15;;;;;;;;68821:9;;;;;68805:26;;;;;;-1:-1:-1;;68805:46:0;;68770:220;;;68916:7;68908:58;;;;-1:-1:-1;;;68908:58:0;;37591:2:1;68908:58:0;;;37573:21:1;37630:2;37610:18;;;37603:30;37669:34;37649:18;;;37642:62;37740:8;37720:18;;;37713:36;37766:19;;68908:58:0;37389:402:1;68908:58:0;69049:8;:14;;;-1:-1:-1;;;;;69043:20:0;:2;-1:-1:-1;;;;;69043:20:0;;;:29;;;;;69068:4;69067:5;69043:29;69040:251;;;-1:-1:-1;;;;;69098:25:0;;;;;;:21;:25;;;;;;;;69093:183;;69180:14;;-1:-1:-1;;;;;69156:11:0;;:7;:11;;;;;;;;;;;:20;;69170:6;;69156:20;:::i;:::-;:38;;69148:108;;;;-1:-1:-1;;;69148:108:0;;38128:2:1;69148:108:0;;;38110:21:1;38167:2;38147:18;;;38140:30;38206:34;38186:18;;;38179:62;38277:27;38257:18;;;38250:55;38322:19;;69148:108:0;37926:421:1;69148:108:0;67096:2206;67069:2233;69317:19;;;;;;;69314:301;;;69357:6;;;;69353:251;;69388:3;69384:205;;69452:13;;69427:11;:20;-1:-1:-1;;;;;69427:20:0;69419:7;:29;;;;;;;;;;;:46;69416:154;;69494:52;69507:8;:15;;;69524:8;:21;;;69494:12;:52::i;:::-;69696:8;:17;;;69692:260;;69749:15;;69730:45;;69766:4;69772:2;69730:18;:45::i;:::-;69794:8;:17;;;69793:18;:42;;;;;69815:20;69826:4;69832:2;69815:10;:20::i;:::-;69793:52;;;;;69840:5;69839:6;69793:52;69790:151;;;69866:59;;-1:-1:-1;;;69866:59:0;;38554:2:1;69866:59:0;;;38536:21:1;38593:2;38573:18;;;38566:30;38632:34;38612:18;;;38605:62;38703:19;38683:18;;;38676:47;38740:19;;69866:59:0;38352:413:1;69790:151:0;-1:-1:-1;;;;;70001:25:0;;69964:23;70001:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;70030:23:0;;;;;;:19;:23;;;;;;;;70001:52;69998:478;;;-1:-1:-1;70088:6:0;69998:478;;;70210:13;:23;70127:18;;37649:5;;70148:96;70210:23;;;;;;70158:49;;70184:23;;;;;;70158;:49;:::i;:::-;:75;;;;:::i;:::-;70148:86;;;;:6;:86;:::i;:::-;:96;;;;:::i;:::-;70127:117;-1:-1:-1;70277:19:0;70127:117;70277:6;:19;:::i;:::-;70259:37;;70328:10;70311:7;:13;70319:4;-1:-1:-1;;;;;70311:13:0;-1:-1:-1;;;;;70311:13:0;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;70361:11:0;:20;-1:-1:-1;;;;;70361:20:0;70353:7;:29;;;;;;;;;;:43;;70386:10;;70353:7;:43;;70386:10;;70353:43;:::i;:::-;;;;-1:-1:-1;;70431:11:0;:20;70416:48;;1193:25:1;;;-1:-1:-1;;;;;70431:20:0;;;;70416:48;;;;;1181:2:1;1166:18;70416:48:0;;;;;;;70112:364;69998:478;-1:-1:-1;;;;;70488:13:0;;:7;:13;;;;;;;;;;:32;;70505:15;;70488:7;:32;;70505:15;;70488:32;:::i;:::-;;;;-1:-1:-1;;;;;;;70531:11:0;;:7;:11;;;;;;;;;;:30;;70546:15;;70531:7;:30;;70546:15;;70531:30;:::i;:::-;;;;;;;;70594:2;-1:-1:-1;;;;;70579:35:0;70588:4;-1:-1:-1;;;;;70579:35:0;;70598:15;70579:35;;;;1193:25:1;;1181:2;1166:18;;1047:177;70579:35:0;;;;;;;;66248:4374;;;;;;66178:4444;;;:::o;33560:257::-;33688:12;;;33630:4;33688:12;;;;;;;;;;33630:4;;;-1:-1:-1;;;;;33666:7:0;;;33681:5;;33666:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33647:54;;;33720:7;33712:72;;;;-1:-1:-1;;;33712:72:0;;39437:2:1;33712:72:0;;;39419:21:1;39476:2;39456:18;;;39449:30;39515:34;39495:18;;;39488:62;39586:22;39566:18;;;39559:50;39626:19;;33712:72:0;39235:416:1;32517:489:0;32633:4;32718:12;32732:17;32753:5;-1:-1:-1;;;;;32753:10:0;32787;32799:2;32803:5;32764:45;;;;;;;;-1:-1:-1;;;;;29948:55:1;;;;29930:74;;30035:2;30020:18;;30013:34;29918:2;29903:18;;29756:297;32764:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32753:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32717:93;;;;32843:7;:57;;;;-1:-1:-1;32855:11:0;;:16;;:44;;;32886:4;32875:24;;;;;;;;;;;;:::i;:::-;32821:152;;;;-1:-1:-1;;;32821:152:0;;39858:2:1;32821:152:0;;;39840:21:1;39897:2;39877:18;;;39870:30;39936:34;39916:18;;;39909:62;40007:15;39987:18;;;39980:43;40040:19;;32821:152:0;39656:409:1;32821:152:0;-1:-1:-1;32991:7:0;32517:489;-1:-1:-1;;;;32517:489:0:o;59920:502::-;60031:10;:33;;;60121;;;;;;;-1:-1:-1;;60075:35:0;;;;;;;-1:-1:-1;;60075:35:0;;;60031:33;;;60075:35;;;;;60121:33;;;;;;;;;60233:20;;;;;;60187:43;;60210:20;;;;;60187;;;;;;:43;:::i;:::-;:66;;;;:::i;:::-;60165:10;:88;;;;;;;;;-1:-1:-1;;60165:88:0;;;;;;;;;60280:134;60297:12;34583:10;;34503:98;60297:12;60311:10;:20;60280:134;;;-1:-1:-1;;;;;40367:55:1;;;40349:74;;60311:20:0;;;;40479:2:1;40464:18;;40457:43;60333:20:0;;;;;40516:18:1;;;40509:43;;;;60355:20:0;;;;;40583:2:1;40568:18;;40561:43;60377:19:0;;;;;40635:3:1;40620:19;;40613:44;60398:15:0;40688:3:1;40673:19;;40666:35;40336:3;40321:19;60280:134:0;;;;;;;;59920:502;;;:::o;60430:515::-;60542:11;:34;;;60634;;;;;;;-1:-1:-1;;60587:36:0;;;;;;;-1:-1:-1;;60587:36:0;;;60542:34;;;60587:36;;;;;60634:34;;;;;;;;;60750:21;;;;;;60702:45;;60726:21;;;;;60702;;;;;;:45;:::i;:::-;:69;;;;:::i;:::-;60679:11;:92;;;;;;;;;-1:-1:-1;;60679:92:0;;;;;;;;;60798:139;60816:12;34583:10;;34503:98;60816:12;60830:11;:21;60798:139;;;-1:-1:-1;;;;;40367:55:1;;;40349:74;;60830:21:0;;;;40479:2:1;40464:18;;40457:43;60853:21:0;;;;;40516:18:1;;;40509:43;;;;60876:21:0;;;;;40583:2:1;40568:18;;40561:43;60899:20:0;;;;;40635:3:1;40620:19;;40613:44;60921:15:0;40688:3:1;40673:19;;40666:35;40336:3;40321:19;60798:139:0;40070:637:1;71233:607:0;41996:6;:13;;-1:-1:-1;;41996:13:0;42005:4;41996:13;;;71384:11:::1;:20:::0;-1:-1:-1;;;;;71384:20:0;;::::1;41996:6:::0;71376:29;;;::::1;::::0;;;;;;;41996:6;;71419:26;;;::::1;::::0;71416:268:::1;;71482:11;:20:::0;71472:83:::1;::::0;;;;40905:14:1;;40898:22;71472:83:0::1;::::0;::::1;40880:41:1::0;-1:-1:-1;;;;;40957:55:1;;;40937:18;;;40930:83;71482:20:0;;::::1;::::0;71472:60:::1;::::0;40853:18:1;;71472:83:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;71462:93;;71416:268;;;71608:11;:20:::0;71598:74:::1;::::0;;;;40905:14:1;;40898:22;71598:74:0::1;::::0;::::1;40880:41:1::0;-1:-1:-1;;;;;40957:55:1;;;40937:18;;;40930:83;71608:20:0;;::::1;::::0;71598:51:::1;::::0;40853:18:1;;71598:74:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;71588:84;;71416:268;71699:64;::::0;;41226:25:1;;;-1:-1:-1;;;;;41287:55:1;;41282:2;41267:18;;41260:83;71747:15:0::1;41359:18:1::0;;;41352:34;71699:64:0;;::::1;::::0;;;;41214:2:1;71699:64:0;;::::1;71782:7;71774:58;;;::::0;-1:-1:-1;;;71774:58:0;;41599:2:1;71774:58:0::1;::::0;::::1;41581:21:1::0;41638:2;41618:18;;;41611:30;41677:34;41657:18;;;41650:62;41748:8;41728:18;;;41721:36;41774:19;;71774:58:0::1;41397:402:1::0;71774:58:0::1;-1:-1:-1::0;;42032:6:0;:14;;-1:-1:-1;;42032:14:0;;;-1:-1:-1;;71233:607:0:o;65610:446::-;65711:6;;65679:4;;-1:-1:-1;;;;;65703:14:0;;;65711:6;;65703:14;;;;:43;;-1:-1:-1;65740:6:0;;-1:-1:-1;;;;;65734:12:0;;;65740:6;;65734:12;;65703:43;:79;;;;-1:-1:-1;65776:6:0;;-1:-1:-1;;;;;65776:6:0;65763:9;:19;;65703:79;:120;;;;-1:-1:-1;;;;;;65800:23:0;;;;;;:17;:23;;;;;;;;65799:24;65703:120;:159;;;;-1:-1:-1;;;;;;65841:21:0;;;;;;:17;:21;;;;;;;;65840:22;65703:159;:204;;;;-1:-1:-1;;;;;;65880:27:0;;;;;;:21;:27;;;;;;;;65879:28;65703:204;:247;;;;-1:-1:-1;;;;;;65925:25:0;;;;;;:21;:25;;;;;;;;65924:26;65703:247;:274;;;;-1:-1:-1;;;;;;65967:10:0;;37692:42;65967:10;;65703:274;:307;;;;-1:-1:-1;;;;;;65994:16:0;;;;65703:307;:345;;;;-1:-1:-1;;;;;;66027:21:0;;66043:4;66027:21;;65696:352;65610:446;-1:-1:-1;;;65610:446:0:o;70630:431::-;70768:4;70722:22;70747:28;;;:11;:28;;;;;70777:23;70791:8;70777:13;:23::i;:::-;70747:55;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;70821:17;;;;70747:55;;-1:-1:-1;;;;70821:17:0;;;;:26;70813:89;;;;-1:-1:-1;;;70813:89:0;;42006:2:1;70813:89:0;;;41988:21:1;42045:2;42025:18;;;42018:30;42084:34;42064:18;;;42057:62;42155:20;42135:18;;;42128:48;42193:19;;70813:89:0;41804:414:1;70813:89:0;70918:20;70929:4;70935:2;70918:10;:20::i;:::-;70917:21;:39;;;;;70948:8;-1:-1:-1;;;;;70942:14:0;:2;-1:-1:-1;;;;;70942:14:0;;70917:39;70913:141;;;-1:-1:-1;;;;;70973:23:0;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;70973:30:0;70999:4;70973:30;;;71018:17;;;:24;;;;-1:-1:-1;;;71018:24:0;;;70711:350;70630:431;;;:::o;14:118:1:-;100:5;93:13;86:21;79:5;76:32;66:60;;122:1;119;112:12;66:60;14:118;:::o;137:156::-;203:20;;263:4;252:16;;242:27;;232:55;;283:1;280;273:12;298:381;368:6;376;384;437:2;425:9;416:7;412:23;408:32;405:52;;;453:1;450;443:12;405:52;492:9;479:23;511:28;533:5;511:28;:::i;:::-;558:5;-1:-1:-1;582:36:1;614:2;599:18;;582:36;:::i;:::-;572:46;;637:36;669:2;658:9;654:18;637:36;:::i;:::-;627:46;;298:381;;;;;:::o;1229:250::-;1314:1;1324:113;1338:6;1335:1;1332:13;1324:113;;;1414:11;;;1408:18;1395:11;;;1388:39;1360:2;1353:10;1324:113;;;-1:-1:-1;;1471:1:1;1453:16;;1446:27;1229:250::o;1484:396::-;1633:2;1622:9;1615:21;1596:4;1665:6;1659:13;1708:6;1703:2;1692:9;1688:18;1681:34;1724:79;1796:6;1791:2;1780:9;1776:18;1771:2;1763:6;1759:15;1724:79;:::i;:::-;1864:2;1843:15;-1:-1:-1;;1839:29:1;1824:45;;;;1871:2;1820:54;;1484:396;-1:-1:-1;;1484:396:1:o;1885:154::-;-1:-1:-1;;;;;1964:5:1;1960:54;1953:5;1950:65;1940:93;;2029:1;2026;2019:12;2044:247;2103:6;2156:2;2144:9;2135:7;2131:23;2127:32;2124:52;;;2172:1;2169;2162:12;2124:52;2211:9;2198:23;2230:31;2255:5;2230:31;:::i;2296:315::-;2364:6;2372;2425:2;2413:9;2404:7;2400:23;2396:32;2393:52;;;2441:1;2438;2431:12;2393:52;2480:9;2467:23;2499:31;2524:5;2499:31;:::i;:::-;2549:5;2601:2;2586:18;;;;2573:32;;-1:-1:-1;;;2296:315:1:o;2904:163::-;2971:20;;3031:10;3020:22;;3010:33;;3000:61;;3057:1;3054;3047:12;3072:822;3172:6;3180;3188;3196;3249:2;3237:9;3228:7;3224:23;3220:32;3217:52;;;3265:1;3262;3255:12;3217:52;3305:9;3292:23;3334:18;3375:2;3367:6;3364:14;3361:34;;;3391:1;3388;3381:12;3361:34;3429:6;3418:9;3414:22;3404:32;;3474:7;3467:4;3463:2;3459:13;3455:27;3445:55;;3496:1;3493;3486:12;3445:55;3536:2;3523:16;3562:2;3554:6;3551:14;3548:34;;;3578:1;3575;3568:12;3548:34;3633:7;3626:4;3616:6;3613:1;3609:14;3605:2;3601:23;3597:34;3594:47;3591:67;;;3654:1;3651;3644:12;3591:67;3685:4;3677:13;;;;-1:-1:-1;3709:6:1;-1:-1:-1;;3750:20:1;;3737:34;3780:28;3737:34;3780:28;:::i;:::-;3827:5;-1:-1:-1;3851:37:1;3884:2;3869:18;;3851:37;:::i;:::-;3841:47;;3072:822;;;;;;;:::o;4233:456::-;4310:6;4318;4326;4379:2;4367:9;4358:7;4354:23;4350:32;4347:52;;;4395:1;4392;4385:12;4347:52;4434:9;4421:23;4453:31;4478:5;4453:31;:::i;:::-;4503:5;-1:-1:-1;4560:2:1;4545:18;;4532:32;4573:33;4532:32;4573:33;:::i;:::-;4233:456;;4625:7;;-1:-1:-1;;;4679:2:1;4664:18;;;;4651:32;;4233:456::o;4694:184::-;-1:-1:-1;;;4743:1:1;4736:88;4843:4;4840:1;4833:15;4867:4;4864:1;4857:15;4883:275;4954:2;4948:9;5019:2;5000:13;;-1:-1:-1;;4996:27:1;4984:40;;5054:18;5039:34;;5075:22;;;5036:62;5033:88;;;5101:18;;:::i;:::-;5137:2;5130:22;4883:275;;-1:-1:-1;4883:275:1:o;5163:183::-;5223:4;5256:18;5248:6;5245:30;5242:56;;;5278:18;;:::i;:::-;-1:-1:-1;5323:1:1;5319:14;5335:4;5315:25;;5163:183::o;5351:662::-;5405:5;5458:3;5451:4;5443:6;5439:17;5435:27;5425:55;;5476:1;5473;5466:12;5425:55;5512:6;5499:20;5538:4;5562:60;5578:43;5618:2;5578:43;:::i;:::-;5562:60;:::i;:::-;5656:15;;;5742:1;5738:10;;;;5726:23;;5722:32;;;5687:12;;;;5766:15;;;5763:35;;;5794:1;5791;5784:12;5763:35;5830:2;5822:6;5818:15;5842:142;5858:6;5853:3;5850:15;5842:142;;;5924:17;;5912:30;;5962:12;;;;5875;;5842:142;;;-1:-1:-1;6002:5:1;5351:662;-1:-1:-1;;;;;;5351:662:1:o;6018:1215::-;6136:6;6144;6197:2;6185:9;6176:7;6172:23;6168:32;6165:52;;;6213:1;6210;6203:12;6165:52;6253:9;6240:23;6282:18;6323:2;6315:6;6312:14;6309:34;;;6339:1;6336;6329:12;6309:34;6377:6;6366:9;6362:22;6352:32;;6422:7;6415:4;6411:2;6407:13;6403:27;6393:55;;6444:1;6441;6434:12;6393:55;6480:2;6467:16;6502:4;6526:60;6542:43;6582:2;6542:43;:::i;6526:60::-;6620:15;;;6702:1;6698:10;;;;6690:19;;6686:28;;;6651:12;;;;6726:19;;;6723:39;;;6758:1;6755;6748:12;6723:39;6782:11;;;;6802:217;6818:6;6813:3;6810:15;6802:217;;;6898:3;6885:17;6915:31;6940:5;6915:31;:::i;:::-;6959:18;;6835:12;;;;6997;;;;6802:217;;;7038:5;-1:-1:-1;;7081:18:1;;7068:32;;-1:-1:-1;;7112:16:1;;;7109:36;;;7141:1;7138;7131:12;7109:36;;7164:63;7219:7;7208:8;7197:9;7193:24;7164:63;:::i;:::-;7154:73;;;6018:1215;;;;;:::o;7238:592::-;7321:6;7329;7337;7345;7398:3;7386:9;7377:7;7373:23;7369:33;7366:53;;;7415:1;7412;7405:12;7366:53;7454:9;7441:23;7473:28;7495:5;7473:28;:::i;:::-;7520:5;-1:-1:-1;7577:2:1;7562:18;;7549:32;7590:33;7549:32;7590:33;:::i;:::-;7642:7;-1:-1:-1;7696:2:1;7681:18;;7668:32;;-1:-1:-1;7752:2:1;7737:18;;7724:32;7765:33;7724:32;7765:33;:::i;:::-;7238:592;;;;-1:-1:-1;7238:592:1;;-1:-1:-1;;7238:592:1:o;8028:159::-;8095:20;;8155:6;8144:18;;8134:29;;8124:57;;8177:1;8174;8167:12;8192:693;8306:6;8314;8322;8330;8338;8346;8354;8362;8415:3;8403:9;8394:7;8390:23;8386:33;8383:53;;;8432:1;8429;8422:12;8383:53;8455:28;8473:9;8455:28;:::i;:::-;8445:38;;8502:37;8535:2;8524:9;8520:18;8502:37;:::i;:::-;8492:47;;8558:37;8591:2;8580:9;8576:18;8558:37;:::i;:::-;8548:47;;8614:37;8647:2;8636:9;8632:18;8614:37;:::i;:::-;8604:47;;8670:38;8703:3;8692:9;8688:19;8670:38;:::i;:::-;8660:48;;8727:38;8760:3;8749:9;8745:19;8727:38;:::i;:::-;8717:48;;8784:38;8817:3;8806:9;8802:19;8784:38;:::i;:::-;8774:48;;8841:38;8874:3;8863:9;8859:19;8841:38;:::i;:::-;8831:48;;8192:693;;;;;;;;;;;:::o;9159:382::-;9224:6;9232;9285:2;9273:9;9264:7;9260:23;9256:32;9253:52;;;9301:1;9298;9291:12;9253:52;9340:9;9327:23;9359:31;9384:5;9359:31;:::i;:::-;9409:5;-1:-1:-1;9466:2:1;9451:18;;9438:32;9479:30;9438:32;9479:30;:::i;:::-;9528:7;9518:17;;;9159:382;;;;;:::o;9546:517::-;9617:6;9625;9633;9686:2;9674:9;9665:7;9661:23;9657:32;9654:52;;;9702:1;9699;9692:12;9654:52;9741:9;9728:23;9760:28;9782:5;9760:28;:::i;:::-;9807:5;-1:-1:-1;9864:2:1;9849:18;;9836:32;9877:33;9836:32;9877:33;:::i;:::-;9929:7;-1:-1:-1;9988:2:1;9973:18;;9960:32;10001:30;9960:32;10001:30;:::i;:::-;10050:7;10040:17;;;9546:517;;;;;:::o;10068:382::-;10133:6;10141;10194:2;10182:9;10173:7;10169:23;10165:32;10162:52;;;10210:1;10207;10200:12;10162:52;10249:9;10236:23;10268:28;10290:5;10268:28;:::i;:::-;10315:5;-1:-1:-1;10372:2:1;10357:18;;10344:32;10385:33;10344:32;10385:33;:::i;10455:661::-;10541:6;10549;10557;10565;10573;10626:3;10614:9;10605:7;10601:23;10597:33;10594:53;;;10643:1;10640;10633:12;10594:53;10682:9;10669:23;10701:31;10726:5;10701:31;:::i;:::-;10751:5;-1:-1:-1;10808:2:1;10793:18;;10780:32;10821:30;10780:32;10821:30;:::i;:::-;10870:7;-1:-1:-1;10929:2:1;10914:18;;10901:32;10942:30;10901:32;10942:30;:::i;:::-;10991:7;-1:-1:-1;11017:36:1;11049:2;11034:18;;11017:36;:::i;:::-;11007:46;;11072:38;11105:3;11094:9;11090:19;11072:38;:::i;:::-;11062:48;;10455:661;;;;;;;;:::o;12846:184::-;12904:6;12957:2;12945:9;12936:7;12932:23;12928:32;12925:52;;;12973:1;12970;12963:12;12925:52;12996:28;13014:9;12996:28;:::i;13035:388::-;13103:6;13111;13164:2;13152:9;13143:7;13139:23;13135:32;13132:52;;;13180:1;13177;13170:12;13132:52;13219:9;13206:23;13238:31;13263:5;13238:31;:::i;13428:2533::-;13645:2;13697:21;;;13767:13;;13670:18;;;13789:22;;;13616:4;;13645:2;13830;;13848:18;;;;13889:15;;;13616:4;13932:2003;13946:6;13943:1;13940:13;13932:2003;;;14005:13;;14050:9;;-1:-1:-1;;;;;750:54:1;;;738:67;;14104:11;;;14098:18;750:54;;14162:12;;;738:67;14216:11;;;14210:18;750:54;14276:12;;;738:67;14312:4;14357:11;;;14351:18;2686:13;2679:21;14414:12;;;2667:34;14450:4;14495:11;;;14489:18;2686:13;2679:21;14552:12;;;2667:34;14588:4;14633:11;;;14627:18;2686:13;2679:21;14690:12;;;2667:34;14726:4;14771:11;;;14765:18;2686:13;2679:21;14828:12;;;2667:34;14864:4;14909:11;;;14903:18;2686:13;2679:21;14966:12;;;2667:34;15002:6;15049:11;;;15043:18;8957:4;8946:16;15107:12;;;8934:29;15144:6;15191:12;;;15185:19;12374:10;12363:22;;;15251:13;;;12351:35;;;;15289:6;15336:12;;;15330:19;12363:22;;15396:13;;;12351:35;15434:6;15482:12;;;15476:19;12363:22;;15543:13;;;12351:35;15581:6;15629:12;;;15623:19;12363:22;;15690:13;;;12351:35;15728:6;15776:12;;;15770:19;12363:22;15837:13;;;12351:35;15880:6;15871:16;;;;15910:15;;;;13968:1;13961:9;13932:2003;;;-1:-1:-1;15952:3:1;;13428:2533;-1:-1:-1;;;;;;;13428:2533:1:o;15966:184::-;-1:-1:-1;;;16015:1:1;16008:88;16115:4;16112:1;16105:15;16139:4;16136:1;16129:15;16155:422;16244:1;16287:5;16244:1;16301:270;16322:7;16312:8;16309:21;16301:270;;;16381:4;16377:1;16373:6;16369:17;16363:4;16360:27;16357:53;;;16390:18;;:::i;:::-;16440:7;16430:8;16426:22;16423:55;;;16460:16;;;;16423:55;16539:22;;;;16499:15;;;;16301:270;;;16305:3;16155:422;;;;;:::o;16582:806::-;16631:5;16661:8;16651:80;;-1:-1:-1;16702:1:1;16716:5;;16651:80;16750:4;16740:76;;-1:-1:-1;16787:1:1;16801:5;;16740:76;16832:4;16850:1;16845:59;;;;16918:1;16913:130;;;;16825:218;;16845:59;16875:1;16866:10;;16889:5;;;16913:130;16950:3;16940:8;16937:17;16934:43;;;16957:18;;:::i;:::-;-1:-1:-1;;17013:1:1;16999:16;;17028:5;;16825:218;;17127:2;17117:8;17114:16;17108:3;17102:4;17099:13;17095:36;17089:2;17079:8;17076:16;17071:2;17065:4;17062:12;17058:35;17055:77;17052:159;;;-1:-1:-1;17164:19:1;;;17196:5;;17052:159;17243:34;17268:8;17262:4;17243:34;:::i;:::-;17313:6;17309:1;17305:6;17301:19;17292:7;17289:32;17286:58;;;17324:18;;:::i;:::-;17362:20;;16582:806;-1:-1:-1;;;16582:806:1:o;17393:140::-;17451:5;17480:47;17521:4;17511:8;17507:19;17501:4;17480:47;:::i;17538:168::-;17611:9;;;17642;;17659:15;;;17653:22;;17639:37;17629:71;;17680:18;;:::i;17711:184::-;-1:-1:-1;;;17760:1:1;17753:88;17860:4;17857:1;17850:15;17884:4;17881:1;17874:15;17900:120;17940:1;17966;17956:35;;17971:18;;:::i;:::-;-1:-1:-1;18005:9:1;;17900:120::o;18695:245::-;18762:6;18815:2;18803:9;18794:7;18790:23;18786:32;18783:52;;;18831:1;18828;18821:12;18783:52;18863:9;18857:16;18882:28;18904:5;18882:28;:::i;19431:184::-;-1:-1:-1;;;19480:1:1;19473:88;19580:4;19577:1;19570:15;19604:4;19601:1;19594:15;23561:172;23628:10;23658;;;23670;;;23654:27;;23693:11;;;23690:37;;;23707:18;;:::i;:::-;23690:37;23561:172;;;;:::o;24725:175::-;24762:3;24806:4;24799:5;24795:16;24835:4;24826:7;24823:17;24820:43;;24843:18;;:::i;:::-;24892:1;24879:15;;24725:175;-1:-1:-1;;24725:175:1:o;25730:128::-;25797:9;;;25818:11;;;25815:37;;;25832:18;;:::i;27932:251::-;28002:6;28055:2;28043:9;28034:7;28030:23;28026:32;28023:52;;;28071:1;28068;28061:12;28023:52;28103:9;28097:16;28122:31;28147:5;28122:31;:::i;30058:373::-;30131:6;30139;30192:2;30180:9;30171:7;30167:23;30163:32;30160:52;;;30208:1;30205;30198:12;30160:52;30240:9;30234:16;30259:28;30281:5;30259:28;:::i;:::-;30356:2;30341:18;;30335:25;30306:5;;-1:-1:-1;30369:30:1;30335:25;30369:30;:::i;31826:191::-;31865:1;31891:10;31928:2;31925:1;31921:10;31950:3;31940:37;;31957:18;;:::i;:::-;31995:10;;31991:20;;;;;31826:191;-1:-1:-1;;31826:191:1:o;33903:184::-;33973:6;34026:2;34014:9;34005:7;34001:23;33997:32;33994:52;;;34042:1;34039;34032:12;33994:52;-1:-1:-1;34065:16:1;;33903:184;-1:-1:-1;33903:184:1:o;37796:125::-;37861:9;;;37882:10;;;37879:36;;;37895:18;;:::i;38770:168::-;38837:6;38863:10;;;38875;;;38859:27;;38898:11;;;38895:37;;;38912:18;;:::i;38943:287::-;39072:3;39110:6;39104:13;39126:66;39185:6;39180:3;39173:4;39165:6;39161:17;39126:66;:::i;:::-;39208:16;;;;;38943:287;-1:-1:-1;;38943:287:1:o

Swarm Source

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