Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,312 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 962532 | 4 mins ago | IN | 0 S | 0.00013501 | ||||
Swap Exact ETH F... | 962354 | 5 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 962232 | 6 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 962115 | 7 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 962043 | 7 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961994 | 7 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961914 | 8 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961869 | 8 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961788 | 9 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961740 | 9 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961662 | 9 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961622 | 10 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961497 | 10 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961370 | 11 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961242 | 12 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 961116 | 13 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Add Liquidity ET... | 961039 | 13 mins ago | IN | 0.04984994 S | 0.00016588 | ||||
Swap Exact ETH F... | 960982 | 13 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact Token... | 960915 | 14 mins ago | IN | 0 S | 0.00013445 | ||||
Swap Exact ETH F... | 960628 | 15 mins ago | IN | 0.1 S | 0.00014127 | ||||
Swap Exact ETH F... | 960587 | 16 mins ago | IN | 0.1 S | 0.00014157 | ||||
Swap Exact ETH F... | 960375 | 17 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 960268 | 17 mins ago | IN | 0.000011 S | 0.00012123 | ||||
Swap Exact ETH F... | 960241 | 18 mins ago | IN | 0.000011 S | 0.00012253 | ||||
Swap Exact ETH F... | 960139 | 18 mins ago | IN | 0.000011 S | 0.00012253 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
962532 | 4 mins ago | 1,477.67472981 S | ||||
962532 | 4 mins ago | 1,477.67472981 S | ||||
962354 | 5 mins ago | 0.000011 S | ||||
962232 | 6 mins ago | 0.000011 S | ||||
962115 | 7 mins ago | 0.000011 S | ||||
962043 | 7 mins ago | 0.000011 S | ||||
961994 | 7 mins ago | 0.000011 S | ||||
961914 | 8 mins ago | 0.000011 S | ||||
961869 | 8 mins ago | 0.000011 S | ||||
961788 | 9 mins ago | 0.000011 S | ||||
961740 | 9 mins ago | 0.000011 S | ||||
961662 | 9 mins ago | 0.000011 S | ||||
961622 | 10 mins ago | 0.000011 S | ||||
961497 | 10 mins ago | 0.000011 S | ||||
961370 | 11 mins ago | 0.000011 S | ||||
961242 | 12 mins ago | 0.000011 S | ||||
961116 | 13 mins ago | 0.000011 S | ||||
961039 | 13 mins ago | 0.04984994 S | ||||
960982 | 13 mins ago | 0.000011 S | ||||
960915 | 14 mins ago | 0.06349475 S | ||||
960915 | 14 mins ago | 0.06349475 S | ||||
960628 | 15 mins ago | 0.1 S | ||||
960587 | 16 mins ago | 0.1 S | ||||
960375 | 17 mins ago | 0.000011 S | ||||
960268 | 17 mins ago | 0.000011 S |
Loading...
Loading
Contract Name:
SBoomRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-12 */ // File contracts/interfaces/IERC20.sol pragma solidity >=0.5.0; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address _owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/interfaces/IUniswapFactory.sol pragma solidity >=0.5.0; interface IUniswapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File contracts/interfaces/IUniswapRouter01.sol pragma solidity >=0.6.2; interface IUniswapRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File contracts/dex/interfaces/IUniswapRouter02.sol pragma solidity >=0.6.2; interface IUniswapRouter02 is IUniswapRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File contracts/dex/interfaces/IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File contracts/dex/libraries/SafeMath.sol pragma solidity >=0.5.0; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } } // File contracts/interfaces/IUniswapPair.sol pragma solidity >=0.5.0; interface IUniswapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File contracts/dex/libraries/SwapLibrary.sol pragma solidity >=0.5.0; library SwapLibrary { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens( address tokenA, address tokenB ) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "SwapLibrary: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "SwapLibrary: ZERO_ADDRESS"); } // calculates the CREATE2 address for a pair without making any external calls function pairFor( address factory, address tokenA, address tokenB ) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address( uint( keccak256( abi.encodePacked( hex"ff", factory, keccak256(abi.encodePacked(token0, token1)), hex"3bed42f03907b5c612da7c772b49cf2764194400bdae02522522d4137400b19a" // init code hash ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint reserveA, uint reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1, ) = IUniswapPair( pairFor(factory, tokenA, tokenB) ).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote( uint amountA, uint reserveA, uint reserveB ) internal pure returns (uint amountB) { require(amountA > 0, "SwapLibrary: INSUFFICIENT_AMOUNT"); require( reserveA > 0 && reserveB > 0, "SwapLibrary: INSUFFICIENT_LIQUIDITY" ); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) internal pure returns (uint amountOut) { require(amountIn > 0, "SwapLibrary: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "SwapLibrary: INSUFFICIENT_LIQUIDITY" ); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) internal pure returns (uint amountIn) { require(amountOut > 0, "SwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "SwapLibrary: INSUFFICIENT_LIQUIDITY" ); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint amountIn, address[] memory path ) internal view returns (uint[] memory amounts) { require(path.length >= 2, "SwapLibrary: INVALID_PATH"); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint amountOut, address[] memory path ) internal view returns (uint[] memory amounts) { require(path.length >= 2, "SwapLibrary: INVALID_PATH"); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File contracts/dex/libraries/TransferHelper.sol pragma solidity >=0.6.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 { // 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" ); } function safeTransfer(address token, address to, uint256 value) internal { // 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" ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // 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" ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require( success, "TransferHelper::safeTransferETH: ETH transfer failed" ); } } // File contracts/project/dex/SBoomRouter02.sol // SPDX-License-Identifier: MIT pragma solidity =0.6.6; contract SBoomRouter is IUniswapRouter02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, "SwapRouter: EXPIRED"); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (IUniswapFactory(factory).getPair(tokenA, tokenB) == address(0)) { IUniswapFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = SwapLibrary.getReserves( factory, tokenA, tokenB ); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = SwapLibrary.quote( amountADesired, reserveA, reserveB ); if (amountBOptimal <= amountBDesired) { require( amountBOptimal >= amountBMin, "SwapRouter: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = SwapLibrary.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "SwapRouter: INSUFFICIENT_A_AMOUNT" ); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity( tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin ); address pair = SwapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IUniswapPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = SwapLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IUniswapPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = SwapLibrary.pairFor(factory, tokenA, tokenB); IUniswapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IUniswapPair(pair).burn(to); (address token0, ) = SwapLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "SwapRouter: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "SwapRouter: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = SwapLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IUniswapPair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); (amountA, amountB) = removeLiquidity( tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline ); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = SwapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IUniswapPair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); (amountToken, amountETH) = removeLiquidityETH( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer( token, to, IERC20(token).balanceOf(address(this)) ); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = SwapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IUniswapPair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap( uint[] memory amounts, address[] memory path, address _to ) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = SwapLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? SwapLibrary.pairFor(factory, output, path[i + 2]) : _to; IUniswapPair(SwapLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = SwapLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, SwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = SwapLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "SwapRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, SwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "SwapRouter: INVALID_PATH"); amounts = SwapLibrary.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( SwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); } function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, "SwapRouter: INVALID_PATH"); amounts = SwapLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "SwapRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, SwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, "SwapRouter: INVALID_PATH"); amounts = SwapLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, SwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "SwapRouter: INVALID_PATH"); amounts = SwapLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= msg.value, "SwapRouter: EXCESSIVE_INPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( SwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens( address[] memory path, address _to ) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = SwapLibrary.sortTokens(input, output); IUniswapPair pair = IUniswapPair( SwapLibrary.pairFor(factory, input, output) ); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1, ) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub( reserveInput ); amountOutput = SwapLibrary.getAmountOut( amountInput, reserveInput, reserveOutput ); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? SwapLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, SwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "SwapRouter: INVALID_PATH"); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert( IWETH(WETH).transfer( SwapLibrary.pairFor(factory, path[0], path[1]), amountIn ) ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, "SwapRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, SwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require( amountOut >= amountOutMin, "SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint amountA, uint reserveA, uint reserveB ) public pure virtual override returns (uint amountB) { return SwapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountOut) { return SwapLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountIn) { return SwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut( uint amountIn, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return SwapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn( uint amountOut, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return SwapLibrary.getAmountsIn(factory, amountOut, path); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b5060405162004754380380620047548339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145cf620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061371452806137575280613a365280613bb5528061401152806140bf528061413f52506145cf6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da58583613118565b50965096945050505050565b6000610dbe848484613210565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061330092505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613448565b85600081518110610fe657fe5b6020026020010151613508565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613665915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b6020026020010151613118565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138ab565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613448565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061330092505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613665915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138ab92505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260228152602001806145576022913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613448565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613508565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139df915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613cea16565b10156118935760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139df915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b505050506118938482613118565b60608142811015611b67576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061330092505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613665915050565b5095945050505050565b6000610dbe848484613d3a565b60608142811015611ec7576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138ab92505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260228152602001806145576022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e2a565b60008142811015611ff1576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e88483613118565b8042811015612170576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139df915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613448565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613eec565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260218152602001806145796021913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b815260040180806020018281038252602181526020018061449c6021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613300565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613448565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fe0565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613448565b90506128f88d338388613508565b6129048c338387613508565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fe0565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613448565b9050612a748b338388613508565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c3433853403613118565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138ab92505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260228152602001806145576022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f8882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613665915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b60200260200101513403613118565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b6131115760405162461bcd60e51b815260040180806020018281038252602d81526020018061452a602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131645780518252601f199092019160209182019101613145565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131c6576040519150601f19603f3d011682016040523d82523d6000602084013e6131cb565b606091505b505090508061320b5760405162461bcd60e51b815260040180806020018281038252603481526020018061441f6034913960400191505060405180910390fd5b505050565b60008084116132505760405162461bcd60e51b81526004018080602001828103825260268152602001806144766026913960400191505060405180910390fd5b6000831180156132605750600082115b61329b5760405162461bcd60e51b81526004018080602001828103825260238152602001806144536023913960400191505060405180910390fd5b60006132af856103e563ffffffff61425416565b905060006132c3828563ffffffff61425416565b905060006132e9836132dd886103e863ffffffff61425416565b9063ffffffff6142b716565b90508082816132f457fe5b04979650505050505050565b6060600282511015613355576040805162461bcd60e51b81526020600482015260196024820152780a6eec2e098d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561336d57600080fd5b50604051908082528060200260200182016040528015613397578160200160208202803683370190505b50905082816000815181106133a857fe5b60200260200101818152505060005b6001835103811015613440576000806133fa878685815181106133d657fe5b60200260200101518786600101815181106133ed57fe5b6020026020010151614306565b9150915061341c84848151811061340d57fe5b60200260200101518383613210565b84846001018151811061342b57fe5b602090810291909101015250506001016133b7565b509392505050565b60008060006134578585613eec565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f3bed42f03907b5c612da7c772b49cf2764194400bdae02522522d4137400b19a609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061358d5780518252601f19909201916020918201910161356e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135ef576040519150601f19603f3d011682016040523d82523d6000602084013e6135f4565b606091505b5091509150818015613622575080511580613622575080806020019051602081101561361f57600080fd5b50515b61365d5760405162461bcd60e51b81526004018080602001828103825260318152602001806143ee6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138a55760008084838151811061368357fe5b602002602001015185846001018151811061369a57fe5b60200260200101519150915060006136b28383613eec565b50905060008785600101815181106136c657fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136f4578260006136f8565b6000835b91509150600060028a5103881061370f5788613750565b6137507f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061374357fe5b6020026020010151613448565b905061377d7f00000000000000000000000000000000000000000000000000000000000000008888613448565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137ba576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561382b578181015183820152602001613813565b50505050905090810190601f1680156138585780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561387a57600080fd5b505af115801561388e573d6000803e3d6000fd5b505060019099019850613668975050505050505050565b50505050565b6060600282511015613900576040805162461bcd60e51b81526020600482015260196024820152780a6eec2e098d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561391857600080fd5b50604051908082528060200260200182016040528015613942578160200160208202803683370190505b509050828160018351038151811061395657fe5b60209081029190910101528151600019015b8015613440576000806139988786600186038151811061398457fe5b60200260200101518786815181106133ed57fe5b915091506139ba8484815181106139ab57fe5b60200260200101518383613d3a565b8460018503815181106139c957fe5b6020908102919091010152505060001901613968565b60005b600183510381101561320b576000808483815181106139fd57fe5b6020026020010151858460010181518110613a1457fe5b6020026020010151915091506000613a2c8383613eec565b5090506000613a5c7f00000000000000000000000000000000000000000000000000000000000000008585613448565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a9d57600080fd5b505afa158015613ab1573d6000803e3d6000fd5b505050506040513d6060811015613ac757600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613afd578284613b00565b83835b91509150613b5e828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b6b868383613210565b945050505050600080856001600160a01b0316886001600160a01b031614613b9557826000613b99565b6000835b91509150600060028c51038a10613bb0578a613be4565b613be47f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061374357fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c6e578181015183820152602001613c56565b50505050905090810190601f168015613c9b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cbd57600080fd5b505af1158015613cd1573d6000803e3d6000fd5b50506001909b019a506139e29950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d7a5760405162461bcd60e51b81526004018080602001828103825260278152602001806144e36027913960400191505060405180910390fd5b600083118015613d8a5750600082115b613dc55760405162461bcd60e51b81526004018080602001828103825260238152602001806144536023913960400191505060405180910390fd5b6000613de96103e8613ddd868863ffffffff61425416565b9063ffffffff61425416565b90506000613e036103e5613ddd868963ffffffff613cea16565b9050613e206001828481613e1357fe5b049063ffffffff6142b716565b9695505050505050565b6000808411613e80576040805162461bcd60e51b815260206004820181905260248201527f537761704c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015613e905750600082115b613ecb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144536023913960400191505060405180910390fd5b82613edc858463ffffffff61425416565b81613ee357fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f56576040805162461bcd60e51b815260206004820181905260248201527f537761704c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610613f76578284613f79565b83835b90925090506001600160a01b038216613fd9576040805162461bcd60e51b815260206004820152601960248201527f537761704c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561405a57600080fd5b505afa15801561406e573d6000803e3d6000fd5b505050506040513d602081101561408457600080fd5b50516001600160a01b0316141561413757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561410a57600080fd5b505af115801561411e573d6000803e3d6000fd5b505050506040513d602081101561413457600080fd5b50505b6000806141657f00000000000000000000000000000000000000000000000000000000000000008b8b614306565b91509150816000148015614177575080155b1561418757879350869250614247565b6000614194898484613e2a565b90508781116141e757858110156141dc5760405162461bcd60e51b815260040180806020018281038252602181526020018061449c6021913960400191505060405180910390fd5b889450925082614245565b60006141f4898486613e2a565b90508981111561420057fe5b8781101561423f5760405162461bcd60e51b81526004018080602001828103825260218152602001806145796021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061426f5750508082028282828161426c57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143158585613eec565b509050600080614326888888613448565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435e57600080fd5b505afa158015614372573d6000803e3d6000fd5b505050506040513d606081101561438857600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143bb5780826143be565b81815b9099909850965050505050505056fe53776170526f757465723a20494e56414c49445f5041544800000000000000005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5453776170526f757465723a20494e53554646494349454e545f425f414d4f554e5453776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5453776170526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656453776170526f757465723a204558434553534956455f494e5055545f414d4f554e5453776170526f757465723a20494e53554646494349454e545f415f414d4f554e54a26469706673582212206d469bc3d8eb947eef97eb9bf80283196bb2784dc13d58897f0d87828384d3c764736f6c634300060600330000000000000000000000003638ca700d67d560be2a2d0dd471640957564829000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Deployed Bytecode
0x60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b610d0d897f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da58583613118565b50965096945050505050565b6000610dbe848484613210565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad381686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b610efd7f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061330092505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613448565b85600081518110610fe657fe5b6020026020010151613508565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613665915050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b6020026020010151613118565b509695505050505050565b60606111207f0000000000000000000000003638ca700d67d560be2a2d0dd47164095756482984846138ab565b90505b92915050565b60008060006111597f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298f8f613448565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6112c77f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061330092505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613665915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000003638ca700d67d560be2a2d0dd471640957564829898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138ab92505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260228152602001806145576022913960400191505060405180910390fd5b6000806115487f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298d7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38613448565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613508565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139df915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613cea16565b10156118935760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139df915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b505050506118938482613118565b60608142811015611b67576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b611c557f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648293488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061330092505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260268152602001806144bd6026913960400191505060405180910390fd5b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb611d957f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613665915050565b5095945050505050565b6000610dbe848484613d3a565b60608142811015611ec7576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000003638ca700d67d560be2a2d0dd471640957564829898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138ab92505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260228152602001806145576022913960400191505060405180910390fd5b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b6000610dbe848484613e2a565b60008142811015611ff1576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3889898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e88483613118565b8042811015612170576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb6122d97f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139df915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b600061252c7f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298c8c613448565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613eec565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260218152602001806145796021913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b815260040180806020018281038252602181526020018061449c6021913960400191505060405180910390fd5b505050505097509795505050505050565b7f0000000000000000000000003638ca700d67d560be2a2d0dd47164095756482981565b60606111207f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298484613300565b600080600061279d7f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298e7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38613448565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fe0565b909450925060006128ea7f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298e8e613448565b90506128f88d338388613508565b6129048c338387613508565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b612a148a7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388b348c8c613fe0565b90945092506000612a667f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298c7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38613448565b9050612a748b338388613508565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c3433853403613118565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b8152602060048201526013602482015260008051602061450a833981519152604482015290519081900360640190fd5b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601860248201526000805160206143ce833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000003638ca700d67d560be2a2d0dd471640957564829888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138ab92505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260228152602001806145576022913960400191505060405180910390fd5b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb612eb37f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f8882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613665915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b60200260200101513403613118565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b6131115760405162461bcd60e51b815260040180806020018281038252602d81526020018061452a602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131645780518252601f199092019160209182019101613145565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131c6576040519150601f19603f3d011682016040523d82523d6000602084013e6131cb565b606091505b505090508061320b5760405162461bcd60e51b815260040180806020018281038252603481526020018061441f6034913960400191505060405180910390fd5b505050565b60008084116132505760405162461bcd60e51b81526004018080602001828103825260268152602001806144766026913960400191505060405180910390fd5b6000831180156132605750600082115b61329b5760405162461bcd60e51b81526004018080602001828103825260238152602001806144536023913960400191505060405180910390fd5b60006132af856103e563ffffffff61425416565b905060006132c3828563ffffffff61425416565b905060006132e9836132dd886103e863ffffffff61425416565b9063ffffffff6142b716565b90508082816132f457fe5b04979650505050505050565b6060600282511015613355576040805162461bcd60e51b81526020600482015260196024820152780a6eec2e098d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561336d57600080fd5b50604051908082528060200260200182016040528015613397578160200160208202803683370190505b50905082816000815181106133a857fe5b60200260200101818152505060005b6001835103811015613440576000806133fa878685815181106133d657fe5b60200260200101518786600101815181106133ed57fe5b6020026020010151614306565b9150915061341c84848151811061340d57fe5b60200260200101518383613210565b84846001018151811061342b57fe5b602090810291909101015250506001016133b7565b509392505050565b60008060006134578585613eec565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f3bed42f03907b5c612da7c772b49cf2764194400bdae02522522d4137400b19a609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061358d5780518252601f19909201916020918201910161356e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135ef576040519150601f19603f3d011682016040523d82523d6000602084013e6135f4565b606091505b5091509150818015613622575080511580613622575080806020019051602081101561361f57600080fd5b50515b61365d5760405162461bcd60e51b81526004018080602001828103825260318152602001806143ee6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138a55760008084838151811061368357fe5b602002602001015185846001018151811061369a57fe5b60200260200101519150915060006136b28383613eec565b50905060008785600101815181106136c657fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136f4578260006136f8565b6000835b91509150600060028a5103881061370f5788613750565b6137507f0000000000000000000000003638ca700d67d560be2a2d0dd471640957564829878c8b6002018151811061374357fe5b6020026020010151613448565b905061377d7f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298888613448565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137ba576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561382b578181015183820152602001613813565b50505050905090810190601f1680156138585780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561387a57600080fd5b505af115801561388e573d6000803e3d6000fd5b505060019099019850613668975050505050505050565b50505050565b6060600282511015613900576040805162461bcd60e51b81526020600482015260196024820152780a6eec2e098d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561391857600080fd5b50604051908082528060200260200182016040528015613942578160200160208202803683370190505b509050828160018351038151811061395657fe5b60209081029190910101528151600019015b8015613440576000806139988786600186038151811061398457fe5b60200260200101518786815181106133ed57fe5b915091506139ba8484815181106139ab57fe5b60200260200101518383613d3a565b8460018503815181106139c957fe5b6020908102919091010152505060001901613968565b60005b600183510381101561320b576000808483815181106139fd57fe5b6020026020010151858460010181518110613a1457fe5b6020026020010151915091506000613a2c8383613eec565b5090506000613a5c7f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298585613448565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a9d57600080fd5b505afa158015613ab1573d6000803e3d6000fd5b505050506040513d6060811015613ac757600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613afd578284613b00565b83835b91509150613b5e828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b6b868383613210565b945050505050600080856001600160a01b0316886001600160a01b031614613b9557826000613b99565b6000835b91509150600060028c51038a10613bb0578a613be4565b613be47f0000000000000000000000003638ca700d67d560be2a2d0dd471640957564829898e8d6002018151811061374357fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c6e578181015183820152602001613c56565b50505050905090810190601f168015613c9b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cbd57600080fd5b505af1158015613cd1573d6000803e3d6000fd5b50506001909b019a506139e29950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d7a5760405162461bcd60e51b81526004018080602001828103825260278152602001806144e36027913960400191505060405180910390fd5b600083118015613d8a5750600082115b613dc55760405162461bcd60e51b81526004018080602001828103825260238152602001806144536023913960400191505060405180910390fd5b6000613de96103e8613ddd868863ffffffff61425416565b9063ffffffff61425416565b90506000613e036103e5613ddd868963ffffffff613cea16565b9050613e206001828481613e1357fe5b049063ffffffff6142b716565b9695505050505050565b6000808411613e80576040805162461bcd60e51b815260206004820181905260248201527f537761704c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015613e905750600082115b613ecb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144536023913960400191505060405180910390fd5b82613edc858463ffffffff61425416565b81613ee357fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f56576040805162461bcd60e51b815260206004820181905260248201527f537761704c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610613f76578284613f79565b83835b90925090506001600160a01b038216613fd9576040805162461bcd60e51b815260206004820152601960248201527f537761704c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648299092169163e6a4390591604480820192602092909190829003018186803b15801561405a57600080fd5b505afa15801561406e573d6000803e3d6000fd5b505050506040513d602081101561408457600080fd5b50516001600160a01b0316141561413757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648299092169163c9c65396916044808201926020929091908290030181600087803b15801561410a57600080fd5b505af115801561411e573d6000803e3d6000fd5b505050506040513d602081101561413457600080fd5b50505b6000806141657f0000000000000000000000003638ca700d67d560be2a2d0dd4716409575648298b8b614306565b91509150816000148015614177575080155b1561418757879350869250614247565b6000614194898484613e2a565b90508781116141e757858110156141dc5760405162461bcd60e51b815260040180806020018281038252602181526020018061449c6021913960400191505060405180910390fd5b889450925082614245565b60006141f4898486613e2a565b90508981111561420057fe5b8781101561423f5760405162461bcd60e51b81526004018080602001828103825260218152602001806145796021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061426f5750508082028282828161426c57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143158585613eec565b509050600080614326888888613448565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435e57600080fd5b505afa158015614372573d6000803e3d6000fd5b505050506040513d606081101561438857600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143bb5780826143be565b81815b9099909850965050505050505056fe53776170526f757465723a20494e56414c49445f5041544800000000000000005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5453776170526f757465723a20494e53554646494349454e545f425f414d4f554e5453776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5453776170526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656453776170526f757465723a204558434553534956455f494e5055545f414d4f554e5453776170526f757465723a20494e53554646494349454e545f415f414d4f554e54a26469706673582212206d469bc3d8eb947eef97eb9bf80283196bb2784dc13d58897f0d87828384d3c764736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003638ca700d67d560be2a2d0dd471640957564829000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
-----Decoded View---------------
Arg [0] : _factory (address): 0x3638Ca700D67D560Be2A2d0DD471640957564829
Arg [1] : _WETH (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003638ca700d67d560be2a2d0dd471640957564829
Arg [1] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Deployed Bytecode Sourcemap
19379:21001:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19848:10;-1:-1:-1;;;;;19862:4:0;19848:18;;19841:26;;;;19379:21001;;12:1:-1;9;2:12;24545:723:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24545:723:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24545:723:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39426:241;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39426:241:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39426:241:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33052:958;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33052:958:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33052:958:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33052:958:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33052:958:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33052:958:0;;-1:-1:-1;33052:958:0;-1:-1:-1;;;;;;33052:958:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;33052:958:0;;;;;;;;;;;;;;;;;40154:223;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40154:223:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40154:223:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;40154:223:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40154:223:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40154:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40154:223:0;;-1:-1:-1;40154:223:0;;-1:-1:-1;;;;;40154:223:0:i;25276:901::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25276:901:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25276:901:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29798:739::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29798:739:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29798:739:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29798:739:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29798:739:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29798:739:0;;-1:-1:-1;29798:739:0;-1:-1:-1;;;;;;29798:739:0;;;;;;;;:::i;32108:936::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32108:936:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32108:936:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32108:936:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32108:936:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32108:936:0;;-1:-1:-1;32108:936:0;-1:-1:-1;;;;;;32108:936:0;;;;;;;;:::i;27902:905::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27902:905:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27902:905:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36643:760::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36643:760:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36643:760:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36643:760:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36643:760:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36643:760:0;;-1:-1:-1;36643:760:0;-1:-1:-1;;;;;;36643:760:0;;;;;;;;:::i;38294:863::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38294:863:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;38294:863:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;38294:863:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38294:863:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38294:863:0;;-1:-1:-1;38294:863:0;-1:-1:-1;;;;;;38294:863:0;;;;;;;;:::i;31270:830::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31270:830:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31270:830:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31270:830:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31270:830:0;;-1:-1:-1;31270:830:0;-1:-1:-1;;;;;;31270:830:0;;;;;;;;:::i;39675:240::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39675:240:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39675:240:0;;;;;;;;;;;;:::i;30545:717::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30545:717:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30545:717:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30545:717:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30545:717:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30545:717:0;;-1:-1:-1;30545:717:0;-1:-1:-1;;;;;;30545:717:0;;;;;;;;:::i;19507:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19507:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;19507:38:0;;;;;;;;;;;;;;39201:217;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39201:217:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39201:217:0;;;;;;;;;;;;:::i;27144:750::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27144:750:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27144:750:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37411:875::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37411:875:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;37411:875:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37411:875:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37411:875:0;;-1:-1:-1;37411:875:0;-1:-1:-1;;;;;;37411:875:0;;;;;;;;:::i;23619:918::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23619:918:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23619:918:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19459:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19459:41:0;;;:::i;39923:223::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39923:223:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39923:223:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39923:223:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39923:223:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39923:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39923:223:0;;-1:-1:-1;39923:223:0;;-1:-1:-1;;;;;39923:223:0:i;26185:880::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26185:880:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26185:880:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21659:870::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21659:870:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21659:870:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;22537:1039;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22537:1039:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34018:956::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34018:956:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34018:956:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34018:956:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34018:956:0;;-1:-1:-1;34018:956:0;-1:-1:-1;;;;;;34018:956:0;;;;;;;;:::i;24545:723::-;24827:16;24845:14;24799:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;24904:196:::1;24934:5;24954:4;24973:9;24997:14;25026:12;25061:4;25081:8;24904:15;:196::i;:::-;24877:223:::0;;-1:-1:-1;24877:223:0;-1:-1:-1;25111:51:0::1;25139:5:::0;25146:2;24877:223;25111:27:::1;:51::i;:::-;25179:4;-1:-1:-1::0;;;;;25173:20:0::1;;25194:9;25173:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25173:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25173:31:0;;;;25215:45;25246:2;25250:9;25215:30;:45::i;:::-;24545:723:::0;;;;;;;;;;:::o;39426:241::-;39568:14;39602:57;39627:8;39637:9;39648:10;39602:24;:57::i;:::-;39595:64;39426:241;-1:-1:-1;;;;39426:241:0:o;33052:958::-;33318:21;33290:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33390:4:0::1;33365:29;:4:::0;;-1:-1:-1;;33370:15:0;;33365:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33365:21:0::1;-1:-1:-1::0;;;;;33365:29:0::1;;33357:66;;;::::0;;-1:-1:-1;;;33357:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33357:66:0;;;;;;;;;;;;;::::1;;33444:50;33470:7;33479:8;33489:4;;33444:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33444:25:0::1;::::0;-1:-1:-1;;;33444:50:0:i:1;:::-;33434:60;;33558:12;33527:7;33552:1;33535:7;:14;:18;33527:27;;;;;;;;;;;;;;:43;;33505:131;;;;-1:-1:-1::0;;;33505:131:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33647:175;33693:4;;33698:1;33693:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33693:7:0::1;33715:10;33740:46;33760:7;33769:4;;33774:1;33769:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33769:7:0::1;33778:4;;33783:1;33778:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33778:7:0::1;33740:19;:46::i;:::-;33801:7;33809:1;33801:10;;;;;;;;;;;;;;33647:31;:175::i;:::-;33833:35;33839:7;33848:4;;33833:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33862:4:0::1;::::0;-1:-1:-1;33833:5:0::1;::::0;-1:-1:-1;;33833:35:0:i:1;:::-;33885:4;-1:-1:-1::0;;;;;33879:20:0::1;;33900:7;33925:1;33908:7;:14;:18;33900:27;;;;;;;;;;;;;;33879:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33879:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33879:49:0;;;;33939:63;33970:2;33974:7;33999:1;33982:7;:14;:18;33974:27;;;;;;;;;;;;;;33939:30;:63::i;:::-;33052:958:::0;;;;;;;;;:::o;40154:223::-;40278:21;40319:50;40344:7;40353:9;40364:4;40319:24;:50::i;:::-;40312:57;;40154:223;;;;;:::o;25276:901::-;25609:12;25623;25648;25663:44;25683:7;25692:6;25700;25663:19;:44::i;:::-;25648:59;;25718:10;25731;:33;;25755:9;25731:33;;;-1:-1:-1;;25731:33:0;25775:180;;;-1:-1:-1;;;25775:180:0;;25815:10;25775:180;;;;25848:4;25775:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25718:46;;-1:-1:-1;;;;;;25775:25:0;;;;;:180;;;;;-1:-1:-1;;25775:180:0;;;;;;;;-1:-1:-1;25775:25:0;:180;;;2:2:-1;;;;27:1;24;17:12;2:2;25775:180:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25775:180:0;;;;25987:182;26017:6;26038;26059:9;26083:10;26108;26133:2;26150:8;25987:15;:182::i;:::-;25966:203;;;;;;;;25276:901;;;;;;;;;;;;;;;;:::o;29798:739::-;30067:21;30039:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;30116:50:::1;30142:7;30151:8;30161:4;;30116:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30116:25:0::1;::::0;-1:-1:-1;;;30116:50:0:i:1;:::-;30106:60;;30230:12;30199:7;30224:1;30207:7;:14;:18;30199:27;;;;;;;;;;;;;;:43;;30177:131;;;;-1:-1:-1::0;;;30177:131:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30319:175;30365:4;;30370:1;30365:7;;;;;;30319:175;30505:24;30511:7;30520:4;;30505:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30526:2:0;;-1:-1:-1;30505:5:0::1;::::0;-1:-1:-1;;30505:24:0:i:1;32108:936::-:0;32374:21;32346:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32446:4:0::1;32421:29;:4:::0;;-1:-1:-1;;32426:15:0;;32421:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32421:21:0::1;-1:-1:-1::0;;;;;32421:29:0::1;;32413:66;;;::::0;;-1:-1:-1;;;32413:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32413:66:0;;;;;;;;;;;;;::::1;;32500:50;32525:7;32534:9;32545:4;;32500:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32500:24:0::1;::::0;-1:-1:-1;;;32500:50:0:i:1;:::-;32490:60;;32597:11;32583:7;32591:1;32583:10;;;;;;;;;;;;;;:25;;32561:109;;;;-1:-1:-1::0;;;32561:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27902:905:::0;28247:14;28274:12;28289:41;28309:7;28318:5;28325:4;28289:19;:41::i;:::-;28274:56;;28341:10;28354;:33;;28378:9;28354:33;;;-1:-1:-1;;28354:33:0;28398:180;;;-1:-1:-1;;;28398:180:0;;28438:10;28398:180;;;;28471:4;28398:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28341:46;;-1:-1:-1;;;;;;28398:25:0;;;;;:180;;;;;-1:-1:-1;;28398:180:0;;;;;;;;-1:-1:-1;28398:25:0;:180;;;2:2:-1;;;;27:1;24;17:12;2:2;28398:180:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28398:180:0;;;;28601:198;28663:5;28683:9;28707:14;28736:12;28763:2;28780:8;28601:47;:198::i;:::-;28589:210;27902:905;-1:-1:-1;;;;;;;;;;;;;27902:905:0:o;36643:760::-;36877:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;36898:173:::1;36944:4;;36949:1;36944:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36944:7:0::1;36966:10;36991:46;37011:7;37020:4;;37025:1;37020:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37020:7:0::1;37029:4;;37034:1;37029:7;;;;;;36991:46;37052:8;36898:31;:173::i;:::-;37082:18;37110:4:::0;;-1:-1:-1;;37115:15:0;;37110:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37110:21:0::1;-1:-1:-1::0;;;;;37103:39:0::1;;37143:2;37103:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37103:43:0::1;-1:-1:-1::0;;;;;37103:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37103:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37103:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37103:43:0;37157:44:::1;::::0;;37103:43:::1;37157:44:::0;;::::1;::::0;;;;;;;;;;;37103:43;;-1:-1:-1;37157:44:0::1;::::0;;;37192:4;;;;;;37157:44;::::1;::::0;37192:4;;37157:44;37192:4;37157:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37198:2:0;;-1:-1:-1;37157:34:0::1;::::0;-1:-1:-1;;37157:44:0:i:1;:::-;37317:12:::0;37234:62:::1;37282:13:::0;37241:4;;-1:-1:-1;;37246:15:0;;37241:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37241:21:0::1;-1:-1:-1::0;;;;;37234:39:0::1;;37274:2;37234:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37234:43:0::1;-1:-1:-1::0;;;;;37234:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37234:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37234:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37234:43:0;;:62:::1;:47;:62;:::i;:::-;:95;;37212:183;;;;-1:-1:-1::0;;;37212:183:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19666:1;36643:760:::0;;;;;;;:::o;38294:863::-;38525:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38579:4:0::1;38554:29;:4:::0;;-1:-1:-1;;38559:15:0;;38554:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38554:21:0::1;-1:-1:-1::0;;;;;38554:29:0::1;;38546:66;;;::::0;;-1:-1:-1;;;38546:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;38546:66:0;;;;;;;;;;;;;::::1;;38623:173;38669:4;;38674:1;38669:7;;;;;;38623:173;38807:55;38842:4;;38807:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38856:4:0::1;::::0;-1:-1:-1;38807:34:0::1;::::0;-1:-1:-1;;38807:55:0:i:1;:::-;38890:37;::::0;;-1:-1:-1;;;38890:37:0;;38921:4:::1;38890:37;::::0;::::1;::::0;;;38873:14:::1;::::0;-1:-1:-1;;;;;38897:4:0::1;38890:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;38890:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38890:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38890:37:0;;-1:-1:-1;38960:25:0;;::::1;;38938:113;;;;-1:-1:-1::0;;;38938:113:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39068:4;-1:-1:-1::0;;;;;39062:20:0::1;;39083:9;39062:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;39062:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39062:31:0;;;;39104:45;39135:2;39139:9;39104:30;:45::i;31270:830::-:0;31529:21;31501:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;31587:4:::1;-1:-1:-1::0;;;;;31576:15:0::1;:4;;31581:1;31576:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31576:7:0::1;-1:-1:-1::0;;;;;31576:15:0::1;;31568:52;;;::::0;;-1:-1:-1;;;31568:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31568:52:0;;;;;;;;;;;;;::::1;;31641:51;31667:7;31676:9;31687:4;;31641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31641:25:0::1;::::0;-1:-1:-1;;;31641:51:0:i:1;:::-;31631:61;;31756:12;31725:7;31750:1;31733:7;:14;:18;31725:27;;;;;;;;;;;;;;:43;;31703:131;;;;-1:-1:-1::0;;;31703:131:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31851:4;-1:-1:-1::0;;;;;31845:19:0::1;;31872:7;31880:1;31872:10;;;;;;;;;;;;;;31845:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31845:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31845:40:0;;;;;31923:4;-1:-1:-1::0;;;;;31917:20:0::1;;31956:46;31976:7;31985:4;;31990:1;31985:7;;;;;;31956:46;32021:7;32029:1;32021:10;;;;;;;;;;;;;;31917:129;;;;;;;;;;;;;-1:-1:-1::0;;;;;31917:129:0::1;-1:-1:-1::0;;;;;31917:129:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31917:129:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31917:129:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31917:129:0;31896:161:::1;;;;32068:24;32074:7;32083:4;;32068:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32089:2:0;;-1:-1:-1;32068:5:0::1;::::0;-1:-1:-1;;32068:24:0:i:1;:::-;31270:830:::0;;;;;;;;:::o;39675:240::-;39817:13;39850:57;39874:9;39885;39896:10;39850:23;:57::i;30545:717::-;30814:21;30786:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;30863:50:::1;30888:7;30897:9;30908:4;;30863:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30863:24:0::1;::::0;-1:-1:-1;;;30863:50:0:i:1;:::-;30853:60;;30960:11;30946:7;30954:1;30946:10;;;;;;;;;;;;;;:25;;30924:109;;;;-1:-1:-1::0;;;30924:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19507:38:::0;;;:::o;39201:217::-;39332:12;39364:46;39382:7;39391:8;39401;39364:17;:46::i;27144:750::-;27410:14;27391:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;27453:196:::1;27483:5;27503:4;27522:9;27546:14;27575:12;27610:4;27630:8;27453:15;:196::i;:::-;27739:38;::::0;;-1:-1:-1;;;27739:38:0;;27771:4:::1;27739:38;::::0;::::1;::::0;;;27437:212;;-1:-1:-1;27660:128:0::1;::::0;-1:-1:-1;27702:5:0;;27722:2;;-1:-1:-1;;;;;27739:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27739:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27739:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27739:38:0;27660:27:::1;:128::i;:::-;27805:4;-1:-1:-1::0;;;;;27799:20:0::1;;27820:9;27799:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27799:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27799:31:0;;;;27841:45;27872:2;27876:9;27841:30;:45::i;37411:875::-:0;37626:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;37666:4:::1;-1:-1:-1::0;;;;;37655:15:0::1;:4;;37660:1;37655:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37655:7:0::1;-1:-1:-1::0;;;;;37655:15:0::1;;37647:52;;;::::0;;-1:-1:-1;;;37647:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37647:52:0;;;;;;;;;;;;;::::1;;37710:13;37726:9;37710:25;;37752:4;-1:-1:-1::0;;;;;37746:19:0::1;;37773:8;37746:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37746:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37746:38:0;;;;;37822:4;-1:-1:-1::0;;;;;37816:20:0::1;;37855:46;37875:7;37884:4;;37889:1;37884:7;;;;;;37855:46;37920:8;37816:127;;;;;;;;;;;;;-1:-1:-1::0;;;;;37816:127:0::1;-1:-1:-1::0;;;;;37816:127:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37816:127:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37816:127:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37816:127:0;37795:159:::1;;;;37965:18;37993:4:::0;;-1:-1:-1;;37998:15:0;;37993:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37993:21:0::1;-1:-1:-1::0;;;;;37986:39:0::1;;38026:2;37986:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37986:43:0::1;-1:-1:-1::0;;;;;37986:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37986:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37986:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37986:43:0;38040:44:::1;::::0;;37986:43:::1;38040:44:::0;;::::1;::::0;;;;;;;;;;;37986:43;;-1:-1:-1;38040:44:0::1;::::0;;;38075:4;;;;;;38040:44;::::1;::::0;38075:4;;38040:44;38075:4;38040:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38081:2:0;;-1:-1:-1;38040:34:0::1;::::0;-1:-1:-1;;38040:44:0:i:1;:::-;38200:12:::0;38117:62:::1;38165:13:::0;38124:4;;-1:-1:-1;;38129:15:0;;38124:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38124:21:0::1;-1:-1:-1::0;;;;;38117:39:0::1;;38157:2;38117:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38117:43:0::1;-1:-1:-1::0;;;;;38117:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;23619:918:0::0;23918:12;23932;23890:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;23962:12:::1;23977:44;23997:7;24006:6;24014;23977:19;:44::i;:::-;24032:60;::::0;;-1:-1:-1;;;24032:60:0;;24064:10:::1;24032:60;::::0;::::1;::::0;-1:-1:-1;;;;;24032:31:0;::::1;:60:::0;;;;;;;;;;;;;;23962:59;;-1:-1:-1;24032:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;24032:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24032:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24032:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;24160:27:0::1;::::0;;-1:-1:-1;;;24160:27:0;;-1:-1:-1;;;;;24160:27:0;;::::1;;::::0;::::1;::::0;;;24130:12:::1;::::0;;;24160:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;24130:12;24160:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24160:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24160:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24160:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;24160:27:0;-1:-1:-1;24199:14:0::1;24219:38;24242:6:::0;24250;24219:22:::1;:38::i;:::-;24198:59;;;24299:6;-1:-1:-1::0;;;;;24289:16:0::1;:6;-1:-1:-1::0;;;;;24289:16:0::1;;:84;;24356:7;24365;24289:84;;;24322:7;24331;24289:84;24268:105:::0;;-1:-1:-1;24268:105:0;-1:-1:-1;24392:21:0;;::::1;;24384:67;;;;-1:-1:-1::0;;;24384:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24481:10;24470:7;:21;;24462:67;;;;-1:-1:-1::0;;;24462:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19666:1;;;;23619:918:::0;;;;;;;;;;;:::o;19459:41::-;;;:::o;39923:223::-;40047:21;40088:50;40114:7;40123:8;40133:4;40088:25;:50::i;26185:880::-;26501:16;26519:14;26546:12;26561:41;26581:7;26590:5;26597:4;26561:19;:41::i;:::-;26546:56;;26613:10;26626;:33;;26650:9;26626:33;;;-1:-1:-1;;26626:33:0;26670:180;;;-1:-1:-1;;;26670:180:0;;26710:10;26670:180;;;;26743:4;26670:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26613:46;;-1:-1:-1;;;;;;26670:25:0;;;;;:180;;;;;-1:-1:-1;;26670:180:0;;;;;;;;-1:-1:-1;26670:25:0;:180;;;2:2:-1;;;;27:1;24;17:12;2:2;26670:180:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26670:180:0;;;;26888:169;26921:5;26941:9;26965:14;26994:12;27021:2;27038:8;26888:18;:169::i;:::-;26861:196;;;;-1:-1:-1;26185:880:0;-1:-1:-1;;;;;;;;;;;;;26185:880:0:o;21659:870::-;21992:12;22006;22020:14;21964:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;22073:174:::1;22101:6;22122;22143:14;22172;22201:10;22226;22073:13;:174::i;:::-;22052:195:::0;;-1:-1:-1;22052:195:0;-1:-1:-1;22258:12:0::1;22273:44;22293:7;22302:6:::0;22310;22273:19:::1;:44::i;:::-;22258:59;;22328:66;22360:6;22368:10;22380:4;22386:7;22328:31;:66::i;:::-;22405;22437:6;22445:10;22457:4;22463:7;22405:31;:66::i;:::-;22507:4;-1:-1:-1::0;;;;;22494:23:0::1;;22518:2;22494:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;22494:27:0::1;-1:-1:-1::0;;;;;22494:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22494:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22494:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22494:27:0;21659:870;;;;-1:-1:-1;22494:27:0;;-1:-1:-1;21659:870:0;;-1:-1:-1;;;;;;;;;21659:870:0:o;22537:1039::-;22844:16;22862:14;22878;22816:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;22937:176:::1;22965:5;22985:4;23004:18;23037:9;23061:14;23090:12;22937:13;:176::i;:::-;22910:203:::0;;-1:-1:-1;22910:203:0;-1:-1:-1;23124:12:0::1;23139:41;23159:7;23168:5:::0;23175:4:::1;23139:19;:41::i;:::-;23124:56;;23191:69;23223:5;23230:10;23242:4;23248:11;23191:31;:69::i;:::-;23277:4;-1:-1:-1::0;;;;;23271:19:0::1;;23298:9;23271:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23271:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23271:39:0;;;;;23334:4;-1:-1:-1::0;;;;;23328:20:0::1;;23349:4;23355:9;23328:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;23328:37:0::1;-1:-1:-1::0;;;;;23328:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23328:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23328:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23328:37:0;23321:45:::1;;;;23402:4;-1:-1:-1::0;;;;;23389:23:0::1;;23413:2;23389:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;23389:27:0::1;-1:-1:-1::0;;;;;23389:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23389:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23389:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23389:27:0;;-1:-1:-1;23467:9:0::1;:21:::0;-1:-1:-1;23463:105:0::1;;;23503:65;23534:10;23558:9;23546;:21;23503:30;:65::i;:::-;19666:1;22537:1039:::0;;;;;;;;;;;:::o;34018:956::-;34274:21;34246:8;19616:15;19604:8;:27;;19596:59;;;;;-1:-1:-1;;;19596:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19596:59:0;;;;;;;;;;;;;;;34332:4:::1;-1:-1:-1::0;;;;;34321:15:0::1;:4;;34326:1;34321:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34321:7:0::1;-1:-1:-1::0;;;;;34321:15:0::1;;34313:52;;;::::0;;-1:-1:-1;;;34313:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34313:52:0;;;;;;;;;;;;;::::1;;34386:50;34411:7;34420:9;34431:4;;34386:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34386:24:0::1;::::0;-1:-1:-1;;;34386:50:0:i:1;:::-;34376:60;;34483:9;34469:7;34477:1;34469:10;;;;;;;;;;;;;;:23;;34447:107;;;;-1:-1:-1::0;;;34447:107:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34571:4;-1:-1:-1::0;;;;;34565:19:0::1;;34592:7;34600:1;34592:10;;;;;;;;;;;;;;34565:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34565:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34565:40:0;;;;;34643:4;-1:-1:-1::0;;;;;34637:20:0::1;;34676:46;34696:7;34705:4;;34710:1;34705:7;;;;;;34676:46;34741:7;34749:1;34741:10;;;;;;;;;;;;;;34637:129;;;;;;;;;;;;;-1:-1:-1::0;;;;;34637:129:0::1;-1:-1:-1::0;;;;;34637:129:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34637:129:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34637:129:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34637:129:0;34616:161:::1;;;;34788:24;34794:7;34803:4;;34788:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34809:2:0;;-1:-1:-1;34788:5:0::1;::::0;-1:-1:-1;;34788:24:0:i:1;:::-;34875:7;34883:1;34875:10;;;;;;;;;;;;;;34863:9;:22;34859:107;;;34900:66;34931:10;34955:7;34963:1;34955:10;;;;;;;;;;;;;;34943:9;:22;34900:30;:66::i;18026:439::-:0;18238:45;;;-1:-1:-1;;;;;18238:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18238:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18213:81:0;;;;18178:12;;18192:17;;18213:10;;;;18238:45;18213:81;;;25:18:-1;18213:81:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18213:81:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;18177:117:0;;;;18327:7;:57;;;;-1:-1:-1;18339:11:0;;:16;;:44;;;18370:4;18359:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18359:24:0;18339:44;18305:152;;;;-1:-1:-1;;;18305:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18026:439;;;;;:::o;19003:254::-;19116:12;;;19076;19116;;;;;;;;;-1:-1:-1;;;;;19094:7:0;;;19109:5;;19094:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;19094:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;19075:54:0;;;19162:7;19140:109;;;;-1:-1:-1;;;19140:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19003:254;;;:::o;14722:578::-;14849:14;14895:1;14884:8;:12;14876:63;;;;-1:-1:-1;;;14876:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14984:1;14972:9;:13;:31;;;;;15002:1;14989:10;:14;14972:31;14950:116;;;;-1:-1:-1;;;14950:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15077:20;15100:17;:8;15113:3;15100:17;:12;:17;:::i;:::-;15077:40;-1:-1:-1;15128:14:0;15145:31;15077:40;15165:10;15145:31;:19;:31;:::i;:::-;15128:48;-1:-1:-1;15187:16:0;15206:40;15230:15;15206:19;:9;15220:4;15206:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;15187:59;;15281:11;15269:9;:23;;;;;;;14722:578;-1:-1:-1;;;;;;;14722:578:0:o;16036:606::-;16171:21;16228:1;16213:4;:11;:16;;16205:54;;;;;-1:-1:-1;;;16205:54:0;;;;;;;;;;;;-1:-1:-1;;;16205:54:0;;;;;;;;;;;;;;;16291:4;:11;16280:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16280:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16280:23:0;;16270:33;;16327:8;16314:7;16322:1;16314:10;;;;;;;;;;;;;:21;;;;;16351:6;16346:289;16377:1;16363:4;:11;:15;16359:1;:19;16346:289;;;16401:14;16417:15;16436:108;16466:7;16492:4;16497:1;16492:7;;;;;;;;;;;;;;16518:4;16523:1;16527;16523:5;16518:11;;;;;;;;;;;;;;16436;:108::i;:::-;16400:144;;;;16576:47;16589:7;16597:1;16589:10;;;;;;;;;;;;;;16601:9;16612:10;16576:12;:47::i;:::-;16559:7;16567:1;16571;16567:5;16559:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;16380:3:0;;16346:289;;;;16036:606;;;;;:::o;12924:648::-;13047:12;13073:14;13089;13107:26;13118:6;13126;13107:10;:26::i;:::-;13349:32;;;-1:-1:-1;;13349:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;13349:32:0;;;;;13339:43;;;;;;-1:-1:-1;;;;;;13228:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13228:291:0;;;;;;;13196:342;;;;;;;;;12924:648;-1:-1:-1;;;;;12924:648:0:o;18473:522::-;18758:51;;;-1:-1:-1;;;;;18758:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18758:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18733:87:0;;;;18698:12;;18712:17;;18733:10;;;;18758:51;18733:87;;;25:18:-1;18733:87:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18733:87:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;18697:123:0;;;;18853:7;:57;;;;-1:-1:-1;18865:11:0;;:16;;:44;;;18896:4;18885:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18885:24:0;18865:44;18831:156;;;;-1:-1:-1;;;18831:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18473:522;;;;;;:::o;28918:872::-;29059:6;29054:729;29085:1;29071:4;:11;:15;29067:1;:19;29054:729;;;29109:13;29124:14;29143:4;29148:1;29143:7;;;;;;;;;;;;;;29152:4;29157:1;29161;29157:5;29152:11;;;;;;;;;;;;;;29108:56;;;;29180:14;29200:37;29223:5;29230:6;29200:22;:37::i;:::-;29179:58;;;29252:14;29269:7;29277:1;29281;29277:5;29269:14;;;;;;;;;;;;;;29252:31;;29299:15;29316;29344:6;-1:-1:-1;;;;;29335:15:0;:5;-1:-1:-1;;;;;29335:15:0;;:95;;29411:9;29427:1;29335:95;;;29376:1;29380:9;29335:95;29298:132;;;;29445:10;29476:1;29462:4;:11;:15;29458:1;:19;:111;;29566:3;29458:111;;;29497:49;29517:7;29526:6;29534:4;29539:1;29543;29539:5;29534:11;;;;;;;;;;;;;;29497:19;:49::i;:::-;29445:124;;29597:43;29617:7;29626:5;29633:6;29597:19;:43::i;:::-;-1:-1:-1;;;;;29584:62:0;;29665:10;29694;29723:2;29754:1;29744:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;29744:12:0;87:42:-1;143:17;;-1:-1;29744:12:0;;29584:187;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29584:187:0;-1:-1:-1;;;;;29584:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29584:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29584:187:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29088:3:0;;;;;-1:-1:-1;29054:729:0;;-1:-1:-1;;;;;;;;29054:729:0;;;28918:872;;;:::o;16723:627::-;16858:21;16915:1;16900:4;:11;:16;;16892:54;;;;;-1:-1:-1;;;16892:54:0;;;;;;;;;;;;-1:-1:-1;;;16892:54:0;;;;;;;;;;;;;;;16978:4;:11;16967:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16967:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16967:23:0;;16957:33;;17031:9;17001:7;17026:1;17009:7;:14;:18;17001:27;;;;;;;;;;;;;;;;;:39;17065:11;;-1:-1:-1;;17065:15:0;17051:292;17082:5;;17051:292;;17110:14;17126:15;17145:108;17175:7;17201:4;17210:1;17206;:5;17201:11;;;;;;;;;;;;;;17231:4;17236:1;17231:7;;;;;;;17145:108;17109:144;;;;17285:46;17297:7;17305:1;17297:10;;;;;;;;;;;;;;17309:9;17320:10;17285:11;:46::i;:::-;17268:7;17280:1;17276;:5;17268:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;17089:3:0;17051:292;;35121:1514;35259:6;35254:1374;35285:1;35271:4;:11;:15;35267:1;:19;35254:1374;;;35309:13;35324:14;35343:4;35348:1;35343:7;;;;;;;;;;;;;;35352:4;35357:1;35361;35357:5;35352:11;;;;;;;;;;;;;;35308:56;;;;35380:14;35400:37;35423:5;35430:6;35400:22;:37::i;:::-;35379:58;;;35452:17;35503:43;35523:7;35532:5;35539:6;35503:19;:43::i;:::-;35452:109;;35576:16;35607:17;35716:13;35731;35750:4;-1:-1:-1;;;;;35750:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35750:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35750:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35750:18:0;;;;;;;-1:-1:-1;;;;;35715:53:0;;;;-1:-1:-1;35715:53:0;;-1:-1:-1;35788:17:0;;-1:-1:-1;;;;;35829:15:0;;;;;;;:103;;35913:8;35923;35829:103;;;35869:8;35879;35829:103;35787:145;;;;35965:96;36030:12;35972:5;-1:-1:-1;;;;;35965:23:0;;35997:4;35965:38;;;;;;;;;;;;;-1:-1:-1;;;;;35965:38:0;-1:-1:-1;;;;;35965:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;35965:96:0;35951:110;;36095:148;36142:11;36176:12;36211:13;36095:24;:148::i;:::-;36080:163;;35254:1374;;;;36274:15;36291;36319:6;-1:-1:-1;;;;;36310:15:0;:5;-1:-1:-1;;;;;36310:15:0;;:101;;36389:12;36408:1;36310:101;;;36351:1;36355:12;36310:101;36273:138;;;;36426:10;36457:1;36443:4;:11;:15;36439:1;:19;:111;;36547:3;36439:111;;;36478:49;36498:7;36507:6;36515:4;36520:1;36524;36520:5;36515:11;;;;;;;36478:49;36603:12;;;36613:1;36603:12;;;;;;;;;;-1:-1:-1;;;36565:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36565:51:0;;;;;;;;;;;;;;;;;;;;;;36426:124;;-1:-1:-1;36565:9:0;;;;;;36575:10;;36587;;36426:124;;36603:12;;36565:51;;;;;;;;36603:12;;36565:51;;;;36603:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36565:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36565:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;35288:3:0;;;;;-1:-1:-1;35254:1374:0;;-1:-1:-1;;;;;;;;;;35254:1374:0;9388:129;9472:5;;;9467:16;;;;9459:50;;;;;-1:-1:-1;;;9459:50:0;;;;;;;;;;;;-1:-1:-1;;;9459:50:0;;;;;;;;;;;;;;15421:533;15548:13;15594:1;15582:9;:13;15574:65;;;;-1:-1:-1;;;15574:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15684:1;15672:9;:13;:31;;;;;15702:1;15689:10;:14;15672:31;15650:116;;;;-1:-1:-1;;;15650:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15777:14;15794:34;15823:4;15794:24;:9;15808;15794:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;15777:51;-1:-1:-1;15839:16:0;15858:34;15888:3;15858:25;:10;15873:9;15858:25;:14;:25;:::i;:34::-;15839:53;;15914:32;15944:1;15927:11;15915:9;:23;;;;;;;15914:32;:29;:32;:::i;:::-;15903:43;15421:533;-1:-1:-1;;;;;;15421:533:0:o;14218:382::-;14334:12;14377:1;14367:7;:11;14359:56;;;;;-1:-1:-1;;;14359:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14459:1;14448:8;:12;:28;;;;;14475:1;14464:8;:12;14448:28;14426:113;;;;-1:-1:-1;;;14426:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14584:8;14560:21;:7;14572:8;14560:21;:11;:21;:::i;:::-;:32;;;;;;;14218:382;-1:-1:-1;;;;14218:382:0:o;12442:390::-;12542:14;12558;12603:6;-1:-1:-1;;;;;12593:16:0;:6;-1:-1:-1;;;;;12593:16:0;;;12585:61;;;;;-1:-1:-1;;;12585:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12685:6;-1:-1:-1;;;;;12676:15:0;:6;-1:-1:-1;;;;;12676:15:0;;:79;;12740:6;12748;12676:79;;;12708:6;12716;12676:79;12657:98;;-1:-1:-1;12657:98:0;-1:-1:-1;;;;;;12774:20:0;;12766:58;;;;;-1:-1:-1;;;12766:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12442:390;;;;;:::o;19970:1681::-;20283:48;;;-1:-1:-1;;;20283:48:0;;-1:-1:-1;;;;;20283:48:0;;;;;;;;;;;;;;;;20188:12;;;;;;20299:7;20283:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;20283:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20283:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20283:48:0;-1:-1:-1;;;;;20283:62:0;;20279:146;;;20362:51;;;-1:-1:-1;;;20362:51:0;;-1:-1:-1;;;;;20362:51:0;;;;;;;;;;;;;;;;20378:7;20362:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;20362:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;20362:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20362:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;20279:146:0;20436:13;20451;20468:98;20506:7;20528:6;20549;20468:23;:98::i;:::-;20435:131;;;;20581:8;20593:1;20581:13;:30;;;;-1:-1:-1;20598:13:0;;20581:30;20577:1067;;;20650:14;;-1:-1:-1;20666:14:0;;-1:-1:-1;20577:1067:0;;;20714:19;20736:119;20772:14;20805:8;20832;20736:17;:119::i;:::-;20714:141;;20892:14;20874;:32;20870:763;;20975:10;20957:14;:28;;20927:135;;;;-1:-1:-1;;;20927:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21103:14;;-1:-1:-1;21119:14:0;-1:-1:-1;21119:14:0;20870:763;;;21175:19;21197:135;21237:14;21274:8;21305;21197:17;:135::i;:::-;21175:157;;21376:14;21358;:32;;21351:40;;;;21458:10;21440:14;:28;;21410:135;;;;-1:-1:-1;;;21410:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21586:14;-1:-1:-1;21602:14:0;;-1:-1:-1;20870:763:0;20577:1067;;19970:1681;;;;;;;;;;;:::o;9525:142::-;9577:6;9604;;;:30;;-1:-1:-1;;9619:5:0;;;9633:1;9628;9619:5;9628:1;9614:15;;;;;:20;9604:30;9596:63;;;;;-1:-1:-1;;;9596:63:0;;;;;;;;;;;;-1:-1:-1;;;9596:63:0;;;;;;;;;;;;;;9252:128;9336:5;;;9331:16;;;;9323:49;;;;;-1:-1:-1;;;9323:49:0;;;;;;;;;;;;-1:-1:-1;;;9323:49:0;;;;;;;;;;;;;;13630:475;13757:13;13772;13799:14;13819:26;13830:6;13838;13819:10;:26::i;:::-;13798:47;;;13857:13;13872;13918:32;13926:7;13935:6;13943;13918:7;:32::i;:::-;-1:-1:-1;;;;;13891:82:0;;:84;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13891:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13891:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13891:84:0;;;;;;;-1:-1:-1;;;;;13856:119:0;;;;-1:-1:-1;13856:119:0;;-1:-1:-1;;;;;;14009:16:0;;;;;;;:88;;14078:8;14088;14009:88;;;14042:8;14052;14009:88;13986:111;;;;-1:-1:-1;13630:475:0;-1:-1:-1;;;;;;;13630:475:0:o
Swarm Source
ipfs://6d469bc3d8eb947eef97eb9bf80283196bb2784dc13d58897f0d87828384d3c7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.