Contract 0xb99978440f310658c5e69d5042724327ef6d3ce7 4

Contract Overview

Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa9e36046d25b3b3c72b468353414f38ba51ebe77595a42bd171fc589faf73367Swap Exact Token...67663132023-02-01 19:27:073 mins ago0x4cd863e70fea26e7f07208eb12d0d0fbfd986cc0 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO0.8288382446890
0x233ed202ecc84ea0bb8c2725d9644165019367e40762b52cfe8c4a4dee582598Add Liquidity67661792023-02-01 19:14:2915 mins ago0x72f85906f75014f7851bc087935aac8aa39bf4b1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.098292404781 4,907.845568167
0x1448bb214ed4053008a1decfc72b2bb34389fda287ead8b3fb51f2410461310eAdd Liquidity67661632023-02-01 19:12:5817 mins ago0x380be068614e9c462508f2b7954ebc36ca46c0f1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.2260105 5,500
0x6363cf1bd72d01128d321b642a55e00c19b13c6d5ac3f3c1071085deba427dbcSwap Exact Token...67661572023-02-01 19:12:2417 mins ago0x380be068614e9c462508f2b7954ebc36ca46c0f1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.02575 5,500
0xaa38218c3e488c52cba84d6bbfb5966156c49eda6e9000e8482d41640e3ddca3Swap Exact Token...67661502023-02-01 19:11:4518 mins ago0x380be068614e9c462508f2b7954ebc36ca46c0f1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.146134 5,500
0x7c0e10b874cf5fda27f5ccc541bc156cd4a58ccc946075188e64c2a3f47c3912Remove Liquidity...67661412023-02-01 19:10:5519 mins ago0x380be068614e9c462508f2b7954ebc36ca46c0f1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.158861 5,500
0xe3778e7a202d855384f3cd0a205554a99905bd0e6474629677565d8c87ef418aSwap Exact Token...67661262023-02-01 19:09:2920 mins ago0x72f85906f75014f7851bc087935aac8aa39bf4b1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO0.631832607923 4,878.149887844
0x5f378f66bc06d8b5dfacf97a1d1f6886da75b6062828143a2ac5b2a041555e9cAdd Liquidity67660892023-02-01 19:06:0024 mins ago0x6b730ea5e6b3dde2f826b9eb7438bc9c571c52b4 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.2310045 5,500
0xa37e23a5883ae1fd30693644562fdb6b4bc7b209455daed7d423e73e47c391bcSwap Exact ETH F...67660752023-02-01 19:04:4225 mins ago0xfb954737c1538f64a993effa0995be6d69246a82 IN  0xb99978440f310658c5e69d5042724327ef6d3ce740 CRO0.7501164475030
0xcdb0f7ef6a6fb502d697616d05d14e7bedf83653c878e8c6cc41216ea6a7cf3eSwap Exact ETH F...67660722023-02-01 19:04:2525 mins ago0xfb954737c1538f64a993effa0995be6d69246a82 IN  0xb99978440f310658c5e69d5042724327ef6d3ce710 CRO0.7501164759540
0x78e4c62e53d362a5c827a131598bdac802f7790204698d79ba3a542c5781755aSwap Exact ETH F...67660702023-02-01 19:04:1326 mins ago0xfb954737c1538f64a993effa0995be6d69246a82 IN  0xb99978440f310658c5e69d5042724327ef6d3ce710 CRO0.7501164824160
0xba36d16708155808a2339e90853a5db6cd8d7692073b8a9f0c776f1f13fd66caSwap Exact ETH F...67660672023-02-01 19:03:5626 mins ago0xfb954737c1538f64a993effa0995be6d69246a82 IN  0xb99978440f310658c5e69d5042724327ef6d3ce7100 CRO0.7501165105070
0xef79869d2f66df69dc3547a3ca33fe5d55f3cfe7c8acca68e784a17a6467f08cSwap Exact ETH F...67660642023-02-01 19:03:3926 mins ago0xfb954737c1538f64a993effa0995be6d69246a82 IN  0xb99978440f310658c5e69d5042724327ef6d3ce7100 CRO0.750116524640
0xb98e9da9e5d18cf2a1f047a16ed6ae0b55a3668fd9c856961e40285ade999514Swap Exact ETH F...67660592023-02-01 19:03:1127 mins ago0x6b730ea5e6b3dde2f826b9eb7438bc9c571c52b4 IN  0xb99978440f310658c5e69d5042724327ef6d3ce715 CRO0.7406465 5,500
0xfe1b01500f850f84c1af4c3987d1e0e588923ffd8adc45418b45df2578f842c6Swap Exact ETH F...67660532023-02-01 19:02:3827 mins ago0x6b730ea5e6b3dde2f826b9eb7438bc9c571c52b4 IN  0xb99978440f310658c5e69d5042724327ef6d3ce715 CRO1.135684 5,500
0xcd5737aa4e88d184af0e1c806f0921057db663fb98404ec15cac4453e1ddf710Swap Exact ETH F...67660202023-02-01 18:59:3030 mins ago0xa7405aeffa68f41c4c7daa001faa74155d41b02d IN  0xb99978440f310658c5e69d5042724327ef6d3ce71,000 CRO0.5796340
0x6254eb01cdb2208be1d2a85fb39c3c9976a44c7577aeb2c1f6d3001e2c8f0ef1Add Liquidity67659282023-02-01 18:50:4939 mins ago0x380be068614e9c462508f2b7954ebc36ca46c0f1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.2260105 5,500
0xb793abde3b41c24e959b029a6caac6afc23512f5bd9eeee7bb77d3e02bde740fAdd Liquidity67659162023-02-01 18:49:4040 mins ago0x380be068614e9c462508f2b7954ebc36ca46c0f1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.2582735 5,500
0x40df990b23490e3728c3dae507b5f8a2d1b6e0cb9784cdd361bea3ca2e078b14Swap Exact Token...67659102023-02-01 18:49:0641 mins ago0xf90216a1ba5742be41dac5200e2b5552bfd02458 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO0.919347 5,500
0x0d3722344261e16dacc11049b0e592bae5ab7eacbd8e7d3d40203524e9cd9777Swap Exact Token...67659032023-02-01 18:48:2741 mins ago0x380be068614e9c462508f2b7954ebc36ca46c0f1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.118568 5,500
0xa84d912cef23ca8c8150040a04b5a56e113ce7a6fea6142104da97a6fb6eb46bSwap Exact Token...67658762023-02-01 18:45:5444 mins ago0x380be068614e9c462508f2b7954ebc36ca46c0f1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.1450340
0x3022909bfcad9c0d454d61b4d67679ffbad84faed30162ad45447707f62205ecRemove Liquidity...67658682023-02-01 18:45:0845 mins ago0x380be068614e9c462508f2b7954ebc36ca46c0f1 IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO1.2454860
0x23b4753c3ef82aebc53c94028f00a5e9777c350b9655586c9b1ea9e49ab3b996Swap Exact ETH F...67658442023-02-01 18:42:5247 mins ago0x00d2c498fb20d91d094b49b134088ef746d09c1f IN  0xb99978440f310658c5e69d5042724327ef6d3ce71,000 CRO1.2296550
0x5b3031a8acf8a889492cdcd1227a92436fd4596d9f4c93315774c306db16f3fdSwap Exact ETH F...67658052023-02-01 18:39:0751 mins ago0x00d2c498fb20d91d094b49b134088ef746d09c1f IN  0xb99978440f310658c5e69d5042724327ef6d3ce7900 CRO1.0620750
0x97c5ddcd1682875e8880ee87220ea11cfdbe5506f994fc546f4c1f935c551567Swap Exact Token...67657982023-02-01 18:38:2851 mins ago0x41d7059fa2b6aca2a30478fc0558f877c2898dfc IN  0xb99978440f310658c5e69d5042724327ef6d3ce70 CRO0.8397228252940
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xa9e36046d25b3b3c72b468353414f38ba51ebe77595a42bd171fc589faf7336767663132023-02-01 19:27:073 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce70x4cd863e70fea26e7f07208eb12d0d0fbfd986cc0599.951399216999713329 CRO
0xa9e36046d25b3b3c72b468353414f38ba51ebe77595a42bd171fc589faf7336767663132023-02-01 19:27:073 mins ago Cronos: WCRO Token 0xb99978440f310658c5e69d5042724327ef6d3ce7599.951399216999713329 CRO
0xa37e23a5883ae1fd30693644562fdb6b4bc7b209455daed7d423e73e47c391bc67660752023-02-01 19:04:4225 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token40 CRO
0xcdb0f7ef6a6fb502d697616d05d14e7bedf83653c878e8c6cc41216ea6a7cf3e67660722023-02-01 19:04:2525 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token10 CRO
0x78e4c62e53d362a5c827a131598bdac802f7790204698d79ba3a542c5781755a67660702023-02-01 19:04:1326 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token10 CRO
0xba36d16708155808a2339e90853a5db6cd8d7692073b8a9f0c776f1f13fd66ca67660672023-02-01 19:03:5626 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token100 CRO
0xef79869d2f66df69dc3547a3ca33fe5d55f3cfe7c8acca68e784a17a6467f08c67660642023-02-01 19:03:3926 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token100 CRO
0xb98e9da9e5d18cf2a1f047a16ed6ae0b55a3668fd9c856961e40285ade99951467660592023-02-01 19:03:1127 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token15 CRO
0xfe1b01500f850f84c1af4c3987d1e0e588923ffd8adc45418b45df2578f842c667660532023-02-01 19:02:3827 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token15 CRO
0xcd5737aa4e88d184af0e1c806f0921057db663fb98404ec15cac4453e1ddf71067660202023-02-01 18:59:3030 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token1,000 CRO
0x40df990b23490e3728c3dae507b5f8a2d1b6e0cb9784cdd361bea3ca2e078b1467659102023-02-01 18:49:0641 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce70xf90216a1ba5742be41dac5200e2b5552bfd0245858.250772183079010455 CRO
0x40df990b23490e3728c3dae507b5f8a2d1b6e0cb9784cdd361bea3ca2e078b1467659102023-02-01 18:49:0641 mins ago Cronos: WCRO Token 0xb99978440f310658c5e69d5042724327ef6d3ce758.250772183079010455 CRO
0x23b4753c3ef82aebc53c94028f00a5e9777c350b9655586c9b1ea9e49ab3b99667658442023-02-01 18:42:5247 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token1,000 CRO
0x5b3031a8acf8a889492cdcd1227a92436fd4596d9f4c93315774c306db16f3fd67658052023-02-01 18:39:0751 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token900 CRO
0x7bc76a034aecf2fe04c9bcb22c51f26e5fea60bc0cbf78561ddd1838db811a1767657842023-02-01 18:37:0853 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token75 CRO
0x387490568faba31a8f70956c89f890b2e728efd0e5cc669775dcb040ac55da5667657482023-02-01 18:33:4456 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token30 CRO
0x4b1e7540a94bfd2608d917864300aad3bdb2189e9f24cb9b439400861d5944d667657332023-02-01 18:32:1957 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token30 CRO
0x78d5b83ae9026ec2f23af85b2fff3f1148c0fa0c9ef14af2ee1b6fb05d30729967657022023-02-01 18:29:241 hr ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token200 CRO
0x403e09b48f2fad5e2fe766729598072447906a2be4b16cdb77d22ebfef6b591067656952023-02-01 18:28:451 hr 1 min ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token200 CRO
0x2b719937fa3da75d5e27fcda29cf9f3f66ba35d13953b6ea7dbc0ab6e75a39db67656882023-02-01 18:28:061 hr 2 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token30 CRO
0x9eb2ee3be4f11113e1c1a9703494bbfa8dde6a20253f20cac1851b11ce08762967656722023-02-01 18:26:351 hr 3 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token150 CRO
0x8f4952f7975a567b8f667bc3b7d0ad58e14c5654299ad7db31e863e8dcb5f52567656582023-02-01 18:25:161 hr 5 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token100 CRO
0x0c3c3ef2c67370be3325eec566d955da3f10a2ab88b1460edce3824e199e227267656512023-02-01 18:24:371 hr 5 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce7 Cronos: WCRO Token100 CRO
0xd94e6faed57595272d35fc5eadb11096093faf5b5fdb623fe22d4036a227c26967656482023-02-01 18:24:191 hr 5 mins ago 0xb99978440f310658c5e69d5042724327ef6d3ce70x9042266c00d6fe1975f0a24d4564bd34fb362d0759.824671786150869212 CRO
0xd94e6faed57595272d35fc5eadb11096093faf5b5fdb623fe22d4036a227c26967656482023-02-01 18:24:191 hr 5 mins ago Cronos: WCRO Token 0xb99978440f310658c5e69d5042724327ef6d3ce759.824671786150869212 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CandyRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-09-08
*/

// File: @uniswap\lib\contracts\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, uint 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: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint 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: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint 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: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

// File: contracts\interfaces\ICandyRouter01.sol

pragma solidity >=0.6.2;

interface ICandyRouter01 {
    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\interfaces\ICandyRouter02.sol

pragma solidity >=0.6.2;

interface ICandyRouter02 is ICandyRouter01 {
    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\interfaces\ICandyFactory.sol

pragma solidity >=0.5.0;

interface ICandyFactory {
    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;

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}

// File: contracts\libraries\SafeMath.sol

pragma solidity =0.6.6;

// 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\ICandyPair.sol

pragma solidity >=0.5.0;

interface ICandyPair {
    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\libraries\CandyLibrary.sol

pragma solidity >=0.5.0;



library CandyLibrary {
    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, 'CandyLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'CandyLibrary: 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'a2db84935f9b1e3d4d331b5f7816dc3ecd7eda22818d3b0189eb374e320f9dd1' // 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);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = ICandyPair(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, 'CandyLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'CandyLibrary: 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, 'CandyLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CandyLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(9985);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(10000).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, 'CandyLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CandyLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(10000);
        uint denominator = reserveOut.sub(amountOut).mul(9985);
        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, 'CandyLibrary: 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, 'CandyLibrary: 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\interfaces\IERC20.sol

pragma solidity >=0.5.0;

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
}

// File: contracts\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\CandyRouter.sol

pragma solidity =0.6.6;







contract CandyRouter is ICandyRouter02 {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WETH;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'CandyRouter: 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 (ICandyFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            ICandyFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = CandyLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = CandyLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'CandyRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = CandyLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'CandyRouter: 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 = CandyLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = ICandyPair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = CandyLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = ICandyPair(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 = CandyLibrary.pairFor(factory, tokenA, tokenB);
        ICandyPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = ICandyPair(pair).burn(to);
        (address token0,) = CandyLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'CandyRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'CandyRouter: 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 = CandyLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        ICandyPair(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 = CandyLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICandyPair(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 = CandyLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICandyPair(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,) = CandyLibrary.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 ? CandyLibrary.pairFor(factory, output, path[i + 2]) : _to;
            ICandyPair(CandyLibrary.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 = CandyLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CandyRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CandyLibrary.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 = CandyLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CandyRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CandyLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'CandyRouter: INVALID_PATH');
        amounts = CandyLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CandyRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CandyLibrary.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, 'CandyRouter: INVALID_PATH');
        amounts = CandyLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CandyRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CandyLibrary.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, 'CandyRouter: INVALID_PATH');
        amounts = CandyLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CandyRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CandyLibrary.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
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'CandyRouter: INVALID_PATH');
        amounts = CandyLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'CandyRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CandyLibrary.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,) = CandyLibrary.sortTokens(input, output);
            ICandyPair pair = ICandyPair(CandyLibrary.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 = CandyLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? CandyLibrary.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, CandyLibrary.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,
            'CandyRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'CandyRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(CandyLibrary.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,
            'CandyRouter: 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, 'CandyRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CandyLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'CandyRouter: 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 CandyLibrary.quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountOut)
    {
        return CandyLibrary.getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountIn)
    {
        return CandyLibrary.getAmountIn(amountOut, reserveIn, reserveOut);
    }

    function getAmountsOut(uint amountIn, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return CandyLibrary.getAmountsOut(factory, amountIn, path);
    }

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return CandyLibrary.getAmountsIn(factory, amountOut, path);
    }
}

Contract ABI

[{"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"}]

60c060405234801561001057600080fd5b5060405162004750380380620047508339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145cb620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145cb6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b8152602060048201526019602482015260008051602061441a833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806143f36027913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806143f36027913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b8152602060048201526019602482015260008051602061441a833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260238152602001806144a06023913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b81526004018080602001828103825260278152602001806143f36027913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b8152602060048201526019602482015260008051602061441a833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260278152602001806143f36027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b8152602060048201526019602482015260008051602061441a833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260278152602001806143f36027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260238152602001806144a06023913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b8152602060048201526019602482015260008051602061441a833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260228152602001806145746022913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260228152602001806144c36022913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601460248201526000805160206144e5833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b8152602060048201526019602482015260008051602061441a833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144a06023913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806145056023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b81526004018080602001828103825260278152602001806143cc6027913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b815260040180806020018281038252602481526020018061443a6024913960400191505060405180910390fd5b60006132c58561270163ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f38861271063ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601a60248201527f43616e64794c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fa2db84935f9b1e3d4d331b5f7816dc3ecd7eda22818d3b0189eb374e320f9dd1609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145506024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601a60248201527f43616e64794c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b81526004018080602001828103825260288152602001806145286028913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b815260040180806020018281038252602481526020018061443a6024913960400191505060405180910390fd5b6000613e07612710613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e21612701613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602181526020018061447f6021913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b815260040180806020018281038252602481526020018061443a6024913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b815260040180806020018281038252602181526020018061445e6021913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601a60248201527f43616e64794c6962726172793a205a45524f5f41444452455353000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260228152602001806144c36022913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260228152602001806145746022913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe43616e64794c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5443616e6479526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5443616e6479526f757465723a20494e56414c49445f504154480000000000000043616e64794c6962726172793a20494e53554646494349454e545f4c495155494449545943616e64794c6962726172793a204944454e544943414c5f41444452455353455343616e64794c6962726172793a20494e53554646494349454e545f414d4f554e5443616e6479526f757465723a204558434553534956455f494e5055545f414d4f554e5443616e6479526f757465723a20494e53554646494349454e545f425f414d4f554e5443616e6479526f757465723a20455850495245440000000000000000000000005472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454443616e64794c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454443616e6479526f757465723a20494e53554646494349454e545f415f414d4f554e54a2646970667358221220015a9fd6969054e7599c44a93356ec44aad051660ac7fd9f1e971398eaa799f564736f6c6343000606003300000000000000000000000084343b84eed78228ccfb65eadee7659f246023bf0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

00000000000000000000000084343b84eed78228ccfb65eadee7659f246023bf0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Decoded View---------------
Arg [0] : _factory (address): 0x84343b84eed78228ccfb65eadee7659f246023bf
Arg [1] : _WETH (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000084343b84eed78228ccfb65eadee7659f246023bf
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Deployed ByteCode Sourcemap

16239:18263:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16707:10;-1:-1:-1;;;;;16721:4:0;16707:18;;16700:26;;;;16239:18263;;12:1:-1;9;2:12;20789:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20789:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20789:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33462:258;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33462:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33462:258:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27862:834;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27862:834:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27862:834:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27862:834:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27862:834: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;27862:834:0;;-1:-1:-1;27862:834:0;-1:-1:-1;;;;;;27862:834: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;27862:834:0;;;;;;;;;;;;;;;;;34250:249;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34250:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34250:249:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34250:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34250:249: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;34250:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34250:249:0;;-1:-1:-1;34250:249:0;;-1:-1:-1;;;;;34250:249:0:i;21468:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21468:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21468:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25135:616::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25135:616:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25135:616:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25135:616:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25135:616: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;25135:616:0;;-1:-1:-1;25135:616:0;-1:-1:-1;;;;;;25135:616:0;;;;;;;;:::i;27044:812::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27044:812:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27044:812:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27044:812:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27044:812: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;27044:812:0;;-1:-1:-1;27044:812:0;-1:-1:-1;;;;;;27044:812:0;;;;;;;;:::i;23589:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23589:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23589:710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30839:706::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30839:706:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30839:706:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30839:706:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30839:706: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;30839:706:0;;-1:-1:-1;30839:706:0;-1:-1:-1;;;;;;30839:706:0;;;;;;;;:::i;32395:831::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32395:831:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32395:831:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32395:831:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32395:831: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;32395:831:0;;-1:-1:-1;32395:831:0;-1:-1:-1;;;;;;32395:831:0;;;;;;;;:::i;26357:681::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26357:681:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26357:681:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26357:681: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;26357:681:0;;-1:-1:-1;26357:681:0;-1:-1:-1;;;;;;26357:681:0;;;;;;;;:::i;33728:257::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33728:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33728:257:0;;;;;;;;;;;;:::i;25757:594::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25757:594:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25757:594:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25757:594:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25757:594: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;25757:594:0;;-1:-1:-1;25757:594:0;-1:-1:-1;;;;;;25757:594:0;;;;;;;;:::i;16365:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16365:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16365:38:0;;;;;;;;;;;;;;33270:184;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33270:184:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33270:184:0;;;;;;;;;;;;:::i;22883:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22883:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22883:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31551:838::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31551:838:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31551:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31551:838: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;31551:838:0;;-1:-1:-1;31551:838:0;-1:-1:-1;;;;;;31551:838:0;;;;;;;;:::i;19942:841::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19942:841:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19942:841:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16317:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16317:41:0;;;:::i;33993:249::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33993:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33993:249:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33993:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33993:249: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;33993:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33993:249:0;;-1:-1:-1;33993:249:0;;-1:-1:-1;;;;;33993:249:0:i;22143:661::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22143:661:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22143:661:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18197:730::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18197:730:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18197:730:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18933:966;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18933:966:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28702:794::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28702:794:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28702:794:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28702:794: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;28702:794:0;;-1:-1:-1;28702:794:0;-1:-1:-1;;;;;;28702:794:0;;;;;;;;:::i;20789:673::-;21026:16;21044:14;21007:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;21098:196:::1;21128:5;21148:4;21167:9;21191:14;21220:12;21255:4;21275:8;21098:15;:196::i;:::-;21071:223:::0;;-1:-1:-1;21071:223:0;-1:-1:-1;21305:51:0::1;21333:5:::0;21340:2;21071:223;21305:27:::1;:51::i;:::-;21373:4;-1:-1:-1::0;;;;;21367:20:0::1;;21388:9;21367:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21367:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21367:31:0;;;;21409:45;21440:2;21444:9;21409:30;:45::i;:::-;20789:673:::0;;;;;;;;;;:::o;33462:258::-;33615:14;33654:58;33680:8;33690:9;33701:10;33654:25;:58::i;:::-;33647:65;33462:258;-1:-1:-1;;;;33462:258:0:o;27862:834::-;28076:21;28048:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28148:4:0::1;28123:29;:4:::0;;-1:-1:-1;;28128:15:0;;28123:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28123:21:0::1;-1:-1:-1::0;;;;;28123:29:0::1;;28115:67;;;::::0;;-1:-1:-1;;;28115:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28115:67:0;;;;;;;;;;;;;::::1;;28203:51;28230:7;28239:8;28249:4;;28203:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28203:26:0::1;::::0;-1:-1:-1;;;28203:51:0:i:1;:::-;28193:61;;28304:12;28273:7;28298:1;28281:7;:14;:18;28273:27;;;;;;;;;;;;;;:43;;28265:95;;;;-1:-1:-1::0;;;28265:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28371:137;28417:4;;28422:1;28417:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28417:7:0::1;28426:10;28438:47;28459:7;28468:4;;28473:1;28468:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28468:7:0::1;28477:4;;28482:1;28477:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28477:7:0::1;28438:20;:47::i;:::-;28487:7;28495:1;28487:10;;;;;;;;;;;;;;28371:31;:137::i;:::-;28519:35;28525:7;28534:4;;28519:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28548:4:0::1;::::0;-1:-1:-1;28519:5:0::1;::::0;-1:-1:-1;;28519:35:0:i:1;:::-;28571:4;-1:-1:-1::0;;;;;28565:20:0::1;;28586:7;28611:1;28594:7;:14;:18;28586:27;;;;;;;;;;;;;;28565:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28565:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28565:49:0;;;;28625:63;28656:2;28660:7;28685:1;28668:7;:14;:18;28660:27;;;;;;;;;;;;;;28625:30;:63::i;:::-;27862:834:::0;;;;;;;;;:::o;34250:249::-;34394:21;34440:51;34466:7;34475:9;34486:4;34440:25;:51::i;:::-;34433:58;;34250:249;;;;;:::o;21468:669::-;21774:12;21788;21813;21828:45;21849:7;21858:6;21866;21828:20;:45::i;:::-;21813:60;;21884:10;21897;:33;;21921:9;21897:33;;;-1:-1:-1;;21897:33:0;21941:76;;;-1:-1:-1;;;21941:76:0;;21965:10;21941:76;;;;21985:4;21941:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21884:46;;-1:-1:-1;;;;;;21941:23:0;;;;;:76;;;;;-1:-1:-1;;21941:76:0;;;;;;;;-1:-1:-1;21941:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;21941:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21941:76:0;;;;22049:80;22065:6;22073;22081:9;22092:10;22104;22116:2;22120:8;22049:15;:80::i;:::-;22028:101;;;;;;;;21468:669;;;;;;;;;;;;;;;;:::o;25135:616::-;25359:21;25340:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;25403:51:::1;25430:7;25439:8;25449:4;;25403:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25403:26:0::1;::::0;-1:-1:-1;;;25403:51:0:i:1;:::-;25393:61;;25504:12;25473:7;25498:1;25481:7;:14;:18;25473:27;;;;;;;;;;;;;;:43;;25465:95;;;;-1:-1:-1::0;;;25465:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25571:137;25617:4;;25622:1;25617:7;;;;;;25571:137;25719:24;25725:7;25734:4;;25719:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25740:2:0;;-1:-1:-1;25719:5:0::1;::::0;-1:-1:-1;;25719:24:0:i:1;27044:812::-:0;27258:21;27230:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27330:4:0::1;27305:29;:4:::0;;-1:-1:-1;;27310:15:0;;27305:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27305:21:0::1;-1:-1:-1::0;;;;;27305:29:0::1;;27297:67;;;::::0;;-1:-1:-1;;;27297:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27297:67:0;;;;;;;;;;;;;::::1;;27385:51;27411:7;27420:9;27431:4;;27385:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27385:25:0::1;::::0;-1:-1:-1;;;27385:51:0:i:1;:::-;27375:61;;27469:11;27455:7;27463:1;27455:10;;;;;;;;;;;;;;:25;;27447:73;;;;-1:-1:-1::0;;;27447:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23589:710:::0;23907:14;23934:12;23949:42;23970:7;23979:5;23986:4;23949:20;:42::i;:::-;23934:57;;24002:10;24015;:33;;24039:9;24015:33;;;-1:-1:-1;;24015:33:0;24059:76;;;-1:-1:-1;;;24059:76:0;;24083:10;24059:76;;;;24103:4;24059:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24002:46;;-1:-1:-1;;;;;;24059:23:0;;;;;:76;;;;;-1:-1:-1;;24059:76:0;;;;;;;;-1:-1:-1;24059:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;24059:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24059:76:0;;;;24158:133;24220:5;24227:9;24238:14;24254:12;24268:2;24272:8;24158:47;:133::i;:::-;24146:145;23589:710;-1:-1:-1;;;;;;;;;;;;;23589:710:0:o;30839:706::-;31073:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;31094:135:::1;31140:4;;31145:1;31140:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31140:7:0::1;31149:10;31161:47;31182:7;31191:4;;31196:1;31191:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31191:7:0::1;31200:4;;31205:1;31200:7;;;;;;31161:47;31210:8;31094:31;:135::i;:::-;31240:18;31268:4:::0;;-1:-1:-1;;31273:15:0;;31268:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31268:21:0::1;-1:-1:-1::0;;;;;31261:39:0::1;;31301:2;31261:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31261:43:0::1;-1:-1:-1::0;;;;;31261:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31261:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31261:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31261:43:0;31315:44:::1;::::0;;31261:43:::1;31315:44:::0;;::::1;::::0;;;;;;;;;;;31261:43;;-1:-1:-1;31315:44:0::1;::::0;;;31350:4;;;;;;31315:44;::::1;::::0;31350:4;;31315:44;31350:4;31315:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31356:2:0;;-1:-1:-1;31315:34:0::1;::::0;-1:-1:-1;;31315:44:0:i:1;:::-;31458:12:::0;31392:62:::1;31440:13:::0;31399:4;;-1:-1:-1;;31404:15:0;;31399:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31399:21:0::1;-1:-1:-1::0;;;;;31392:39:0::1;;31432:2;31392:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31392:43:0::1;-1:-1:-1::0;;;;;31392:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31392:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31392:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31392:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31370:167;;;;-1:-1:-1::0;;;31370:167:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16525:1;30839:706:::0;;;;;;;:::o;32395:831::-;32662:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32721:4:0::1;32696:29;:4:::0;;-1:-1:-1;;32701:15:0;;32696:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32696:21:0::1;-1:-1:-1::0;;;;;32696:29:0::1;;32688:67;;;::::0;;-1:-1:-1;;;32688:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32688:67:0;;;;;;;;;;;;;::::1;;32766:135;32812:4;;32817:1;32812:7;;;;;;32766:135;32912:55;32947:4;;32912:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32961:4:0::1;::::0;-1:-1:-1;32912:34:0::1;::::0;-1:-1:-1;;32912:55:0:i:1;:::-;32995:37;::::0;;-1:-1:-1;;;32995:37:0;;33026:4:::1;32995:37;::::0;::::1;::::0;;;32978:14:::1;::::0;-1:-1:-1;;;;;33002:4:0::1;32995:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32995:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32995:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32995:37:0;;-1:-1:-1;33051:25:0;;::::1;;33043:77;;;;-1:-1:-1::0;;;33043:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33137:4;-1:-1:-1::0;;;;;33131:20:0::1;;33152:9;33131:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33131:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33131:31:0;;;;33173:45;33204:2;33208:9;33173:30;:45::i;26357:681::-:0;26573:21;26545:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;26631:4:::1;-1:-1:-1::0;;;;;26620:15:0::1;:4;;26625:1;26620:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26620:7:0::1;-1:-1:-1::0;;;;;26620:15:0::1;;26612:53;;;::::0;;-1:-1:-1;;;26612:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26612:53:0;;;;;;;;;;;;;::::1;;26686:52;26713:7;26722:9;26733:4;;26686:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26686:26:0::1;::::0;-1:-1:-1;;;26686:52:0:i:1;:::-;26676:62;;26788:12;26757:7;26782:1;26765:7;:14;:18;26757:27;;;;;;;;;;;;;;:43;;26749:95;;;;-1:-1:-1::0;;;26749:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26861:4;-1:-1:-1::0;;;;;26855:19:0::1;;26882:7;26890:1;26882:10;;;;;;;;;;;;;;26855:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26855:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26855:40:0;;;;;26919:4;-1:-1:-1::0;;;;;26913:20:0::1;;26934:47;26955:7;26964:4;;26969:1;26964:7;;;;;;26934:47;26983:7;26991:1;26983:10;;;;;;;;;;;;;;26913:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;26913:81:0::1;-1:-1:-1::0;;;;;26913:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26913:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26913:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26913:81:0;26906:89:::1;;;;27006:24;27012:7;27021:4;;27006:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27027:2:0;;-1:-1:-1;27006:5:0::1;::::0;-1:-1:-1;;27006:24:0:i:1;:::-;26357:681:::0;;;;;;;;:::o;33728:257::-;33881:13;33919:58;33944:9;33955;33966:10;33919:24;:58::i;25757:594::-;25981:21;25962:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;26025:51:::1;26051:7;26060:9;26071:4;;26025:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26025:25:0::1;::::0;-1:-1:-1;;;26025:51:0:i:1;:::-;26015:61;;26109:11;26095:7;26103:1;26095:10;;;;;;;;;;;;;;:25;;26087:73;;;;-1:-1:-1::0;;;26087:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16365:38:::0;;;:::o;33270:184::-;33367:12;33399:47;33418:7;33427:8;33437;33399:18;:47::i;22883:700::-;23149:14;23130:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;23192:196:::1;23222:5;23242:4;23261:9;23285:14;23314:12;23349:4;23369:8;23192:15;:196::i;:::-;23438:38;::::0;;-1:-1:-1;;;23438:38:0;;23470:4:::1;23438:38;::::0;::::1;::::0;;;23176:212;;-1:-1:-1;23399:78:0::1;::::0;-1:-1:-1;23427:5:0;;23434:2;;-1:-1:-1;;;;;23438: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;23438:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23438:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23438:38:0;23399:27:::1;:78::i;:::-;23494:4;-1:-1:-1::0;;;;;23488:20:0::1;;23509:9;23488:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23488:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23488:31:0;;;;23530:45;23561:2;23565:9;23530:30;:45::i;31551:838::-:0;31811:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;31856:4:::1;-1:-1:-1::0;;;;;31845:15:0::1;:4;;31850:1;31845:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31845:7:0::1;-1:-1:-1::0;;;;;31845:15:0::1;;31837:53;;;::::0;;-1:-1:-1;;;31837:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31837:53:0;;;;;;;;;;;;;::::1;;31901:13;31917:9;31901:25;;31943:4;-1:-1:-1::0;;;;;31937:19:0::1;;31964:8;31937:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31937:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31937:38:0;;;;;31999:4;-1:-1:-1::0;;;;;31993:20:0::1;;32014:47;32035:7;32044:4;;32049:1;32044:7;;;;;;32014:47;32063:8;31993:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;31993:79:0::1;-1:-1:-1::0;;;;;31993:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31993:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31993:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31993:79:0;31986:87:::1;;;;32084:18;32112:4:::0;;-1:-1:-1;;32117:15:0;;32112:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32112:21:0::1;-1:-1:-1::0;;;;;32105:39:0::1;;32145:2;32105:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32105:43:0::1;-1:-1:-1::0;;;;;32105:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32105:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32105:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32105:43:0;32159:44:::1;::::0;;32105:43:::1;32159:44:::0;;::::1;::::0;;;;;;;;;;;32105:43;;-1:-1:-1;32159:44:0::1;::::0;;;32194:4;;;;;;32159:44;::::1;::::0;32194:4;;32159:44;32194:4;32159:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32200:2:0;;-1:-1:-1;32159:34:0::1;::::0;-1:-1:-1;;32159:44:0:i:1;:::-;32302:12:::0;32236:62:::1;32284:13:::0;32243:4;;-1:-1:-1;;32248:15:0;;32243:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32243:21:0::1;-1:-1:-1::0;;;;;32236:39:0::1;;32276:2;32236:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32236:43:0::1;-1:-1:-1::0;;;;;32236:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19942:841:0::0;20196:12;20210;20177:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;20235:12:::1;20250:45;20271:7;20280:6;20288;20250:20;:45::i;:::-;20306:58;::::0;;-1:-1:-1;;;20306:58:0;;20336:10:::1;20306:58;::::0;::::1;::::0;-1:-1:-1;;;;;20306:29:0;::::1;:58:::0;;;;;;;;;;;;;;20235:60;;-1:-1:-1;20306:29:0;;::::1;::::0;:58;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20306:29:0;:58;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20306:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20306:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20432:25:0::1;::::0;;-1:-1:-1;;;20432:25:0;;-1:-1:-1;;;;;20432:25:0;;::::1;;::::0;::::1;::::0;;;20402:12:::1;::::0;;;20432:21;;::::1;::::0;::::1;::::0;:25;;;;;;;;;;;20402:12;20432:21;:25;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20432:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20432:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20432:25:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20432:25:0;-1:-1:-1;20469:14:0::1;20488:39;20512:6:::0;20520;20488:23:::1;:39::i;:::-;20468:59;;;20569:6;-1:-1:-1::0;;;;;20559:16:0::1;:6;-1:-1:-1::0;;;;;20559:16:0::1;;:58;;20600:7;20609;20559:58;;;20579:7;20588;20559:58;20538:79:::0;;-1:-1:-1;20538:79:0;-1:-1:-1;20636:21:0;;::::1;;20628:68;;;;-1:-1:-1::0;;;20628:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20726:10;20715:7;:21;;20707:68;;;;-1:-1:-1::0;;;20707:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16525:1;;;;19942:841:::0;;;;;;;;;;;:::o;16317:41::-;;;:::o;33993:249::-;34137:21;34183:51;34210:7;34219:8;34229:4;34183:26;:51::i;22143:661::-;22432:16;22450:14;22477:12;22492:42;22513:7;22522:5;22529:4;22492:20;:42::i;:::-;22477:57;;22545:10;22558;:33;;22582:9;22558:33;;;-1:-1:-1;;22558:33:0;22602:76;;;-1:-1:-1;;;22602:76:0;;22626:10;22602:76;;;;22646:4;22602:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22545:46;;-1:-1:-1;;;;;;22602:23:0;;;;;:76;;;;;-1:-1:-1;;22602:76:0;;;;;;;;-1:-1:-1;22602:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;22602:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22602:76:0;;;;22716:80;22735:5;22742:9;22753:14;22769:12;22783:2;22787:8;22716:18;:80::i;:::-;22689:107;;;;-1:-1:-1;22143:661:0;-1:-1:-1;;;;;;;;;;;;;22143:661:0:o;18197:730::-;18485:12;18499;18513:14;18466:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;18561:85:::1;18575:6;18583;18591:14;18607;18623:10;18635;18561:13;:85::i;:::-;18540:106:::0;;-1:-1:-1;18540:106:0;-1:-1:-1;18657:12:0::1;18672:45;18693:7;18702:6:::0;18710;18672:20:::1;:45::i;:::-;18657:60;;18728:66;18760:6;18768:10;18780:4;18786:7;18728:31;:66::i;:::-;18805;18837:6;18845:10;18857:4;18863:7;18805:31;:66::i;:::-;18905:4;-1:-1:-1::0;;;;;18894:21:0::1;;18916:2;18894:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;18894:25:0::1;-1:-1:-1::0;;;;;18894:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18894:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18894:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18894:25:0;18197:730;;;;-1:-1:-1;18894:25:0;;-1:-1:-1;18197:730:0;;-1:-1:-1;;;;;;;;;18197:730:0:o;18933:966::-;19186:16;19204:14;19220;19167:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;19274:176:::1;19302:5;19322:4;19341:18;19374:9;19398:14;19427:12;19274:13;:176::i;:::-;19247:203:::0;;-1:-1:-1;19247:203:0;-1:-1:-1;19461:12:0::1;19476:42;19497:7;19506:5:::0;19513:4:::1;19476:20;:42::i;:::-;19461:57;;19529:69;19561:5;19568:10;19580:4;19586:11;19529:31;:69::i;:::-;19615:4;-1:-1:-1::0;;;;;19609:19:0::1;;19636:9;19609:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19609:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19609:39:0;;;;;19672:4;-1:-1:-1::0;;;;;19666:20:0::1;;19687:4;19693:9;19666:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19666:37:0::1;-1:-1:-1::0;;;;;19666:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19666:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19666:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19666:37:0;19659:45:::1;;;;19738:4;-1:-1:-1::0;;;;;19727:21:0::1;;19749:2;19727:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;19727:25:0::1;-1:-1:-1::0;;;;;19727:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19727:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19727:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19727:25:0;;-1:-1:-1;19803:9:0::1;:21:::0;-1:-1:-1;19799:92:0::1;;;19826:65;19857:10;19881:9;19869;:21;19826:30;:65::i;:::-;16525:1;18933:966:::0;;;;;;;;;;;:::o;28702:794::-;28915:21;28887:8;16474:15;16462:8;:27;;16454:60;;;;;-1:-1:-1;;;16454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16454:60:0;;;;;;;;;;;;;;;28973:4:::1;-1:-1:-1::0;;;;;28962:15:0::1;:4;;28967:1;28962:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28962:7:0::1;-1:-1:-1::0;;;;;28962:15:0::1;;28954:53;;;::::0;;-1:-1:-1;;;28954:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28954:53:0;;;;;;;;;;;;;::::1;;29028:51;29054:7;29063:9;29074:4;;29028:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29028:25:0::1;::::0;-1:-1:-1;;;29028:51:0:i:1;:::-;29018:61;;29112:9;29098:7;29106:1;29098:10;;;;;;;;;;;;;;:23;;29090:71;;;;-1:-1:-1::0;;;29090:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29178:4;-1:-1:-1::0;;;;;29172:19:0::1;;29199:7;29207:1;29199:10;;;;;;;;;;;;;;29172:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29172:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29172:40:0;;;;;29236:4;-1:-1:-1::0;;;;;29230:20:0::1;;29251:47;29272:7;29281:4;;29286:1;29281:7;;;;;;29251:47;29300:7;29308:1;29300:10;;;;;;;;;;;;;;29230:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;29230:81:0::1;-1:-1:-1::0;;;;;29230:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29230:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29230:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29230:81:0;29223:89:::1;;;;29323:24;29329:7;29338:4;;29323:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29344:2:0;;-1:-1:-1;29323:5:0::1;::::0;-1:-1:-1;;29323:24:0:i:1;:::-;29410:7;29418:1;29410:10;;;;;;;;;;;;;;29398:9;:22;29394:94;;;29422:66;29453:10;29477:7;29485:1;29477:10;;;;;;;;;;;;;;29465:9;:22;29422:30;:66::i;600:361::-:0;795:45;;;-1:-1:-1;;;;;795:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;795:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;784:57:0;;;;749:12;;763:17;;784:10;;;;795:45;784:57;;;25:18:-1;784:57: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;;;784:57: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;;748:93:0;;;;860:7;:57;;;;-1:-1:-1;872:11:0;;:16;;:44;;;903:4;892:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;892:24:0;872:44;852:101;;;;;-1:-1:-1;;;852:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;600:361;;;;;:::o;1379:195::-;1487:12;;;1449;1487;;;;;;;;;-1:-1:-1;;;;;1466:7:0;;;1480:5;;1466:34;;;;;;;;;;;;;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;;;1466:34: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;;1448:52:0;;;1519:7;1511:55;;;;-1:-1:-1;;;1511:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1379:195;;;:::o;12725:511::-;12818:14;12864:1;12853:8;:12;12845:64;;;;-1:-1:-1;;;12845:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12940:1;12928:9;:13;:31;;;;;12958:1;12945:10;:14;12928:31;12920:80;;;;-1:-1:-1;;;12920:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13011:20;13034:18;:8;13047:4;13034:18;:12;:18;:::i;:::-;13011:41;-1:-1:-1;13063:14:0;13080:31;13011:41;13100:10;13080:31;:19;:31;:::i;:::-;13063:48;-1:-1:-1;13122:16:0;13141:41;13166:15;13141:20;:9;13155:5;13141:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;13122:60;;13217:11;13205:9;:23;;;;;;;12725:511;-1:-1:-1;;;;;;;12725:511:0:o;13905:507::-;14006:21;14063:1;14048:4;:11;:16;;14040:55;;;;;-1:-1:-1;;;14040:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14127:4;:11;14116:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14116:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14116:23:0;;14106:33;;14163:8;14150:7;14158:1;14150:10;;;;;;;;;;;;;:21;;;;;14187:6;14182:223;14213:1;14199:4;:11;:15;14195:1;:19;14182:223;;;14237:14;14253:15;14272:42;14284:7;14293:4;14298:1;14293:7;;;;;;;;;;;;;;14302:4;14307:1;14311;14307:5;14302:11;;;;;;;;;;;;;;14272;:42::i;:::-;14236:78;;;;14346:47;14359:7;14367:1;14359:10;;;;;;;;;;;;;;14371:9;14382:10;14346:12;:47::i;:::-;14329:7;14337:1;14341;14337:5;14329:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14216:3:0;;14182:223;;;;13905:507;;;;;:::o;11211:478::-;11300:12;11326:14;11342;11360:26;11371:6;11379;11360:10;:26::i;:::-;11524:32;;;-1:-1:-1;;11524:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11524:32:0;;;;;11514:43;;;;;;-1:-1:-1;;;;;;11427:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11427:251:0;;;;;;;11417:262;;;;;;;;;11211:478;-1:-1:-1;;;;;11211:478:0:o;969:402::-;1194:51;;;-1:-1:-1;;;;;1194:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1194:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1183:63:0;;;;1148:12;;1162:17;;1183:10;;;;1194:51;1183:63;;;25:18:-1;1183:63: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;;;1183:63: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;;1147:99:0;;;;1265:7;:57;;;;-1:-1:-1;1277:11:0;;:16;;:44;;;1308:4;1297:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1297:24:0;1277:44;1257:106;;;;-1:-1:-1;;;1257:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;969:402;;;;;;:::o;24410:719::-;24517:6;24512:610;24543:1;24529:4;:11;:15;24525:1;:19;24512:610;;;24567:13;24582:14;24601:4;24606:1;24601:7;;;;;;;;;;;;;;24610:4;24615:1;24619;24615:5;24610:11;;;;;;;;;;;;;;24566:56;;;;24638:14;24657:38;24681:5;24688:6;24657:23;:38::i;:::-;24637:58;;;24710:14;24727:7;24735:1;24739;24735:5;24727:14;;;;;;;;;;;;;;24710:31;;24757:15;24774;24802:6;-1:-1:-1;;;;;24793:15:0;:5;-1:-1:-1;;;;;24793:15:0;;:61;;24835:9;24851:1;24793:61;;;24817:1;24821:9;24793:61;24756:98;;;;24869:10;24900:1;24886:4;:11;:15;24882:1;:19;:78;;24957:3;24882:78;;;24904:50;24925:7;24934:6;24942:4;24947:1;24951;24947:5;24942:11;;;;;;;;;;;;;;24904:20;:50::i;:::-;24869:91;;24986:44;25007:7;25016:5;25023:6;24986:20;:44::i;:::-;-1:-1:-1;;;;;24975:61:0;;25055:10;25067;25079:2;25093:1;25083:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25083:12:0;87:42:-1;143:17;;-1:-1;25083:12:0;;24975:135;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24975:135:0;-1:-1:-1;;;;;24975:135: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;24975:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24975:135:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24546:3:0;;;;;-1:-1:-1;24512:610:0;;-1:-1:-1;;;;;;;;24512:610:0;;;24410:719;;;:::o;14493:528::-;14594:21;14651:1;14636:4;:11;:16;;14628:55;;;;;-1:-1:-1;;;14628:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14715:4;:11;14704:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14704:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14704:23:0;;14694:33;;14768:9;14738:7;14763:1;14746:7;:14;:18;14738:27;;;;;;;;;;;;;;;;;:39;14802:11;;-1:-1:-1;;14802:15:0;14788:226;14819:5;;14788:226;;14847:14;14863:15;14882:42;14894:7;14903:4;14912:1;14908;:5;14903:11;;;;;;;;;;;;;;14916:4;14921:1;14916:7;;;;;;;14882:42;14846:78;;;;14956:46;14968:7;14976:1;14968:10;;;;;;;;;;;;;;14980:9;14991:10;14956:11;:46::i;:::-;14939:7;14951:1;14947;:5;14939:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14826:3:0;14788:226;;29643:1190;29756:6;29751:1075;29782:1;29768:4;:11;:15;29764:1;:19;29751:1075;;;29806:13;29821:14;29840:4;29845:1;29840:7;;;;;;;;;;;;;;29849:4;29854:1;29858;29854:5;29849:11;;;;;;;;;;;;;;29805:56;;;;29877:14;29896:38;29920:5;29927:6;29896:23;:38::i;:::-;29876:58;;;29949:15;29978:44;29999:7;30008:5;30015:6;29978:20;:44::i;:::-;29949:74;;30038:16;30069:17;30157:13;30172;30190:4;-1:-1:-1;;;;;30190:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30190:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30190:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30190:18:0;;;;;;;-1:-1:-1;;;;;30156:52:0;;;;-1:-1:-1;30156:52:0;;-1:-1:-1;30224:17:0;;-1:-1:-1;;;;;30265:15:0;;;;;;;:61;;30307:8;30317;30265:61;;;30284:8;30294;30265:61;30223:103;;;;30355:56;30398:12;30362:5;-1:-1:-1;;;;;30355:23:0;;30387:4;30355:38;;;;;;;;;;;;;-1:-1:-1;;;;;30355:38:0;-1:-1:-1;;;;;30355:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30355:56:0;30341:70;;30441:67;30467:11;30480:12;30494:13;30441:25;:67::i;:::-;30426:82;;29751:1075;;;;30539:15;30556;30584:6;-1:-1:-1;;;;;30575:15:0;:5;-1:-1:-1;;;;;30575:15:0;;:67;;30620:12;30639:1;30575:67;;;30599:1;30603:12;30575:67;30538:104;;;;30657:10;30688:1;30674:4;:11;:15;30670:1;:19;:78;;30745:3;30670:78;;;30692:50;30713:7;30722:6;30730:4;30735:1;30739;30735:5;30730:11;;;;;;;30692:50;30801:12;;;30811:1;30801:12;;;;;;;;;;-1:-1:-1;;;30763:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30763:51:0;;;;;;;;;;;;;;;;;;;;;;30657:91;;-1:-1:-1;30763:9:0;;;;;;30773:10;;30785;;30657:91;;30801:12;;30763:51;;;;;;;;30801:12;;30763:51;;;;30801: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;30763:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30763:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29785:3:0;;;;;-1:-1:-1;29751:1075:0;;-1:-1:-1;;;;;;;;;;29751:1075:0;7728:129;7812:5;;;7807:16;;;;7799:50;;;;;-1:-1:-1;;;7799:50:0;;;;;;;;;;;;-1:-1:-1;;;7799:50:0;;;;;;;;;;;;;;13357:466;13450:13;13496:1;13484:9;:13;13476:66;;;;-1:-1:-1;;;13476:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13573:1;13561:9;:13;:31;;;;;13591:1;13578:10;:14;13561:31;13553:80;;;;-1:-1:-1;;;13553:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13644:14;13661:35;13690:5;13661:24;:9;13675;13661:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13644:52;-1:-1:-1;13707:16:0;13726:35;13756:4;13726:25;:10;13741:9;13726:25;:14;:25;:::i;:35::-;13707:54;;13783:32;13813:1;13796:11;13784:9;:23;;;;;;;13783:32;:29;:32;:::i;:::-;13772:43;13357:466;-1:-1:-1;;;;;;13357:466:0:o;12290:313::-;12372:12;12415:1;12405:7;:11;12397:57;;;;-1:-1:-1;;;12397:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12484:1;12473:8;:12;:28;;;;;12500:1;12489:8;:12;12473:28;12465:77;;;;-1:-1:-1;;;12465:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12587:8;12563:21;:7;12575:8;12563:21;:11;:21;:::i;:::-;:32;;;;;;;12290:313;-1:-1:-1;;;;12290:313:0:o;10778:341::-;10853:14;10869;10914:6;-1:-1:-1;;;;;10904:16:0;:6;-1:-1:-1;;;;;10904:16:0;;;10896:62;;;;-1:-1:-1;;;10896:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10997:6;-1:-1:-1;;;;;10988:15:0;:6;-1:-1:-1;;;;;10988:15:0;;:53;;11026:6;11034;10988:53;;;11007:6;11015;10988:53;10969:72;;-1:-1:-1;10969:72:0;-1:-1:-1;;;;;;11060:20:0;;11052:59;;;;;-1:-1:-1;;;11052:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10778:341;;;;;:::o;16829:1362::-;17142:46;;;-1:-1:-1;;;17142:46:0;;-1:-1:-1;;;;;17142:46:0;;;;;;;;;;;;;;;;17047:12;;;;;;17156:7;17142:30;;;;;;:46;;;;;;;;;;;;;;;:30;:46;;;2:2:-1;;;;27:1;24;17:12;2:2;17142:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17142:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17142:46:0;-1:-1:-1;;;;;17142:60:0;;17138:142;;;17219:49;;;-1:-1:-1;;;17219:49:0;;-1:-1:-1;;;;;17219:49:0;;;;;;;;;;;;;;;;17233:7;17219:33;;;;;;:49;;;;;;;;;;;;;;;-1:-1:-1;17219:33:0;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;17219:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17219:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17138:142:0;17291:13;17306;17323:49;17348:7;17357:6;17365;17323:24;:49::i;:::-;17290:82;;;;17387:8;17399:1;17387:13;:30;;;;-1:-1:-1;17404:13:0;;17387:30;17383:801;;;17456:14;;-1:-1:-1;17472:14:0;;-1:-1:-1;17383:801:0;;;17520:19;17542:54;17561:14;17577:8;17587;17542:18;:54::i;:::-;17520:76;;17633:14;17615;:32;17611:562;;17694:10;17676:14;:28;;17668:75;;;;-1:-1:-1;;;17668:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17784:14;;-1:-1:-1;17800:14:0;-1:-1:-1;17800:14:0;17611:562;;;17856:19;17878:54;17897:14;17913:8;17923;17878:18;:54::i;:::-;17856:76;;17976:14;17958;:32;;17951:40;;;;18036:10;18018:14;:28;;18010:75;;;;-1:-1:-1;;;18010:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18126:14;-1:-1:-1;18142:14:0;;-1:-1:-1;17611:562:0;17383:801;;16829:1362;;;;;;;;;;;:::o;7865:142::-;7917:6;7944;;;:30;;-1:-1:-1;;7959:5:0;;;7973:1;7968;7959:5;7968:1;7954:15;;;;;:20;7944:30;7936:63;;;;;-1:-1:-1;;;7936:63:0;;;;;;;;;;;;-1:-1:-1;;;7936:63:0;;;;;;;;;;;;;;7592:128;7676:5;;;7671:16;;;;7663:49;;;;;-1:-1:-1;;;7663:49:0;;;;;;;;;;;;-1:-1:-1;;;7663:49:0;;;;;;;;;;;;;;11747:430;11840:13;11855;11882:14;11901:26;11912:6;11920;11901:10;:26::i;:::-;11881:46;;;11938:32;11946:7;11955:6;11963;11938:7;:32::i;:::-;;11982:13;11997;12026:32;12034:7;12043:6;12051;12026:7;:32::i;:::-;-1:-1:-1;;;;;12015:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12015:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12015:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12015:58:0;;;;;;;-1:-1:-1;;;;;11981:92:0;;;;-1:-1:-1;11981:92:0;;-1:-1:-1;;;;;;12107:16:0;;;;;;;:62;;12150:8;12160;12107:62;;;12127:8;12137;12107:62;12084:85;;;;-1:-1:-1;11747:430:0;-1:-1:-1;;;;;;;11747:430:0:o

Swarm Source

ipfs://015a9fd6969054e7599c44a93356ec44aad051660ac7fd9f1e971398eaa799f5
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.