Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Source Code
Overview
Max Total Supply
100,000,000,000 XAI
Holders
63
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
XchainAI
Compiler Version
v0.8.19+commit.7dd6d404
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
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"}]Contract Creation Code
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.
Add Token to MetaMask (Web3)