Contract 0xb5b2444edf79b00d40f463f79158d1187a0d0c25 2

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x89e3d255ab2cc01555516574a0f42df7539307719a5cb271fb3a5fe596fbd886Swap Exact Token...189790062022-08-22 15:50:0236 days 18 hrs ago0x3524a58dff0bf0f42a20673dbca4613ad3b6002b IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0029844035 26.5
0xc7d256a70227b16b8a97d11fc38c5c724c8c2e789fefdd1754f6433078df088eSwap Exact Token...178009282022-07-25 21:30:5464 days 12 hrs ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.004668558 26.5
0x62d10441f64fff9d583d6feb748002dbc8e93b32e284265c0980d0b443bb40fcRemove Liquidity...178007942022-07-25 21:26:0764 days 12 hrs ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.00597469 26.5
0x5ff8198e23b9d417fc2f62002efea87b59c17760f6a1804910728c91d564ca91Remove Liquidity178007622022-07-25 21:25:0264 days 12 hrs ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.004456187 26.5
0x6fcf58e4ec4013af6ca4e97c72064b85227c22bbe977048da25f0d54095b177aRemove Liquidity178007382022-07-25 21:24:1564 days 12 hrs ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.004915114 26.5
0x3cf9a998d8714b8ec334968ce1ca94adf316ff893b01f828408a0bc64b6796daRemove Liquidity178007082022-07-25 21:23:1564 days 12 hrs ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.005027421 26.5
0x6f3b2750301645cda862a9e26783a1bd3663b2d31e6be72a1e0d401b564d43efRemove Liquidity...178006632022-07-25 21:21:3664 days 12 hrs ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.006520378 26.5
0xfe6164dbf0c59c82ddfd875785a40ca0c1a8402ee1a68fac59baf3037f6f9776Remove Liquidity178006382022-07-25 21:20:4364 days 12 hrs ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.004495831 26.5
0xc6e0670097cb28673114799b6beceb8ae4cfaddcf85a6c321290bcf35c76e127Remove Liquidity...178006052022-07-25 21:19:3764 days 12 hrs ago0x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b5 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.006123302 26.5
0x2f01265faea025e0d8f404a39987a39874c027b6472b5ed2a496ffb6694690b4Swap Exact Token...167086922022-06-30 9:24:3290 days 50 mins ago0xd5caf88a16a36b5bfd27e8dbbaf16debcdf2d2ed IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.00324835 25
0xf9dc0f845c1bfea5b5c99d09db9421440116dbac8e5e43b85ce405c1c663cef3Swap Exact Token...164969962022-06-25 11:39:5994 days 22 hrs ago0x8c5b66f05a8609f584c6505df246738d56aa77f0 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.005531981 26.5
0xd051f2e7fe8b160ec5e2bdd67c6be016e283f7c017fa417dc1a6c800afa340baSwap Exact Token...164627932022-06-24 16:40:0895 days 17 hrs ago0x341eb52a28ad11b6c2cb12c3895c31af02b20a86 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0038558825 26.5
0x2e0659c350927a59e1b9ab09a6d4b339ce8ef25036547596682d63cb207a4b2eSwap Exact Token...164496462022-06-24 9:22:4996 days 52 mins ago0xd0a207bd73a68598998532c6448ab43ed197f2f7 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0055346045 26.5
0x9f2e4c5e33c8a98d72e0d1edb0994d422d2d6af266bf431d6595d3a208d5d444Swap Exact Token...164196182022-06-23 16:44:3396 days 17 hrs ago0xc2c98acd1b7b20253d5bf98bbc1c385bbd06435b IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0038558825 26.5
0x9e0c69e8a796b6e9706ff40f2589212e169ece0387262774b3c21001299cfb07Swap Exact Token...164080422022-06-23 10:18:1896 days 23 hrs ago0x88fe68ac3d4d9a1c6047ba9811d39b93147c8caa IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0055349225 26.5
0xdd757b8ae8e1224de2828b7225a147aff007993b20b14456cea3524b0847e366Remove Liquidity164075262022-06-23 10:01:1497 days 13 mins ago0x88fe68ac3d4d9a1c6047ba9811d39b93147c8caa IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.005075227 26.5
0xf9fb772c4014ce23c773ee85eab63c711df32932b4efd6db757e5cedfffd4868Swap Exact Token...163741062022-06-22 15:26:5597 days 18 hrs ago0x95f49f90156145731c99e0bb4a8a825dea73f9b5 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0038558825 26.5
0x6306be557da1873f18dad8cafcfe42cf41c62decd9b4a85e44cd7237e31449a3Swap Exact Token...163699902022-06-22 13:10:1897 days 21 hrs ago0x1ba53263b13b6294846e0f75af3b4195c9e1e0d4 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.005743787527.5
0x61e8fcc52528919585c1e5d650d400c48f54d9c31b450bf10357035b40df9511Swap Exact Token...163694072022-06-22 12:51:0997 days 21 hrs ago0x819cf5875cdc24a0e9cbdef29a4bc7f68d62b799 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0038558825 26.5
0xca3751dc3bfd918de6d844d7d7f87b723354dba780393f48bc83eedc79b9aa5fSwap Tokens For ...163621062022-06-22 8:47:5198 days 1 hr ago0x905e0f438cc1aae570a84c1a62a156ba5c1bb345 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0034418465 26.5
0xef90a45ca62755ee344e674e158ff12e9d78dfcae181e85d3271a9ab97374b84Swap Exact Token...163468702022-06-22 0:18:4498 days 9 hrs ago0xb4af2fa8f59024ad179742ee72fd334683972825 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0063331025 26.5
0x8e8db994578bc72c2b79bd49cfe00c2860af0e25dafcd3288257fb97b8bbf742Swap Exact Token...163467932022-06-22 0:16:1098 days 9 hrs ago0xb4af2fa8f59024ad179742ee72fd334683972825 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0029847215 26.5
0x384511dc88432f66fc0150eb533aae2dc56ac46a9407438a2f69482155e805f0Remove Liquidity163467352022-06-22 0:14:2198 days 10 hrs ago0xb4af2fa8f59024ad179742ee72fd334683972825 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.005562445151 26.82299375
0x6db196824d7d4dd356c50d3a0bbba138468f4114023ee3817ee1ead9070a88e6Swap Exact Token...162878932022-06-20 15:31:4199 days 18 hrs ago0x2a57d2dbd4401e16c916fb3bb5d62ccd87960351 IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0038558825 26.5
0x588c14ccf3e296012e36332d2baac2952398193211a66129b6806fd0251703a9Swap Exact Token...162819142022-06-20 12:12:2199 days 22 hrs ago0xcc82361e3759220c2474e6126de504966992b4ba IN  0xb5b2444edf79b00d40f463f79158d1187a0d0c250 AVAX0.0071783465 26.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x62d10441f64fff9d583d6feb748002dbc8e93b32e284265c0980d0b443bb40fc178007942022-07-25 21:26:0764 days 12 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b50.70346269515696542 AVAX
0x62d10441f64fff9d583d6feb748002dbc8e93b32e284265c0980d0b443bb40fc178007942022-07-25 21:26:0764 days 12 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c250.70346269515696542 AVAX
0x6f3b2750301645cda862a9e26783a1bd3663b2d31e6be72a1e0d401b564d43ef178006632022-07-25 21:21:3664 days 12 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b50.132916243086828259 AVAX
0x6f3b2750301645cda862a9e26783a1bd3663b2d31e6be72a1e0d401b564d43ef178006632022-07-25 21:21:3664 days 12 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c250.132916243086828259 AVAX
0xc6e0670097cb28673114799b6beceb8ae4cfaddcf85a6c321290bcf35c76e127178006052022-07-25 21:19:3764 days 12 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x0ce8df46e23e4ec4ffa959af72fac0b6375cd7b52.412431149656408325 AVAX
0xc6e0670097cb28673114799b6beceb8ae4cfaddcf85a6c321290bcf35c76e127178006052022-07-25 21:19:3764 days 12 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c252.412431149656408325 AVAX
0xf9dc0f845c1bfea5b5c99d09db9421440116dbac8e5e43b85ce405c1c663cef3164969962022-06-25 11:39:5994 days 22 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x8c5b66f05a8609f584c6505df246738d56aa77f00.046527628794527616 AVAX
0xf9dc0f845c1bfea5b5c99d09db9421440116dbac8e5e43b85ce405c1c663cef3164969962022-06-25 11:39:5994 days 22 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c250.046527628794527616 AVAX
0xd051f2e7fe8b160ec5e2bdd67c6be016e283f7c017fa417dc1a6c800afa340ba164627932022-06-24 16:40:0895 days 17 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x341eb52a28ad11b6c2cb12c3895c31af02b20a860.194055423401272075 AVAX
0xd051f2e7fe8b160ec5e2bdd67c6be016e283f7c017fa417dc1a6c800afa340ba164627932022-06-24 16:40:0895 days 17 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c250.194055423401272075 AVAX
0x2e0659c350927a59e1b9ab09a6d4b339ce8ef25036547596682d63cb207a4b2e164496462022-06-24 9:22:4996 days 52 mins ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250xd0a207bd73a68598998532c6448ab43ed197f2f70.356520823333484376 AVAX
0x2e0659c350927a59e1b9ab09a6d4b339ce8ef25036547596682d63cb207a4b2e164496462022-06-24 9:22:4996 days 52 mins ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c250.356520823333484376 AVAX
0x9f2e4c5e33c8a98d72e0d1edb0994d422d2d6af266bf431d6595d3a208d5d444164196182022-06-23 16:44:3396 days 17 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250xc2c98acd1b7b20253d5bf98bbc1c385bbd06435b3.698564817222136301 AVAX
0x9f2e4c5e33c8a98d72e0d1edb0994d422d2d6af266bf431d6595d3a208d5d444164196182022-06-23 16:44:3396 days 17 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c253.698564817222136301 AVAX
0x9e0c69e8a796b6e9706ff40f2589212e169ece0387262774b3c21001299cfb07164080422022-06-23 10:18:1896 days 23 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x88fe68ac3d4d9a1c6047ba9811d39b93147c8caa5.294429474804272966 AVAX
0x9e0c69e8a796b6e9706ff40f2589212e169ece0387262774b3c21001299cfb07164080422022-06-23 10:18:1896 days 23 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c255.294429474804272966 AVAX
0xf9fb772c4014ce23c773ee85eab63c711df32932b4efd6db757e5cedfffd4868163741062022-06-22 15:26:5597 days 18 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x95f49f90156145731c99e0bb4a8a825dea73f9b54.509487310746271639 AVAX
0xf9fb772c4014ce23c773ee85eab63c711df32932b4efd6db757e5cedfffd4868163741062022-06-22 15:26:5597 days 18 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c254.509487310746271639 AVAX
0x6306be557da1873f18dad8cafcfe42cf41c62decd9b4a85e44cd7237e31449a3163699902022-06-22 13:10:1897 days 21 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x1ba53263b13b6294846e0f75af3b4195c9e1e0d44.724510048990351844 AVAX
0x6306be557da1873f18dad8cafcfe42cf41c62decd9b4a85e44cd7237e31449a3163699902022-06-22 13:10:1897 days 21 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c254.724510048990351844 AVAX
0x61e8fcc52528919585c1e5d650d400c48f54d9c31b450bf10357035b40df9511163694072022-06-22 12:51:0997 days 21 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x819cf5875cdc24a0e9cbdef29a4bc7f68d62b7990.134520083317654432 AVAX
0x61e8fcc52528919585c1e5d650d400c48f54d9c31b450bf10357035b40df9511163694072022-06-22 12:51:0997 days 21 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c250.134520083317654432 AVAX
0x6db196824d7d4dd356c50d3a0bbba138468f4114023ee3817ee1ead9070a88e6162878932022-06-20 15:31:4199 days 18 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250x2a57d2dbd4401e16c916fb3bb5d62ccd879603511.353436095202464697 AVAX
0x6db196824d7d4dd356c50d3a0bbba138468f4114023ee3817ee1ead9070a88e6162878932022-06-20 15:31:4199 days 18 hrs ago Wrapped AVAX 0xb5b2444edf79b00d40f463f79158d1187a0d0c251.353436095202464697 AVAX
0x588c14ccf3e296012e36332d2baac2952398193211a66129b6806fd0251703a9162819142022-06-20 12:12:2199 days 22 hrs ago 0xb5b2444edf79b00d40f463f79158d1187a0d0c250xcc82361e3759220c2474e6126de504966992b4ba0.95094599718242459 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ThorusRouter

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 snowtrace.io on 2021-12-23
*/

// SPDX-License-Identifier: MIТ

pragma solidity =0.6.6;


interface IThorusFactory {
    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;
}

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

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

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

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

interface IThorusRouter02 is IThorusRouter01 {
    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;
}

interface IThorusPair {
    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;
}

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

library ThorusLibrary {
    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, 'ThorusLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'ThorusLibrary: 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'c6b4cc64699496d0514c783d6aca5142c3b61e327524db01cabfa4248e430e49' // 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,) = IThorusPair(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, 'ThorusLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'ThorusLibrary: 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, 'ThorusLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'ThorusLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(999);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'ThorusLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'ThorusLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(999);
        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, 'ThorusLibrary: 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, 'ThorusLibrary: 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);
        }
    }
}

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

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

contract ThorusRouter is IThorusRouter02 {
    using SafeMath for uint;

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

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

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

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

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

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return ThorusLibrary.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"}]

60c060405234801561001057600080fd5b5060405162004759380380620047598339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145d4620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145d46000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601a6024820152600080516020614459833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260288152602001806143ec6028913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260288152602001806143ec6028913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601a6024820152600080516020614459833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602481526020018061457b6024913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b81526004018080602001828103825260288152602001806143ec6028913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601a6024820152600080516020614459833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260288152602001806143ec6028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601a6024820152600080516020614459833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260288152602001806143ec6028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602481526020018061457b6024913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601a6024820152600080516020614459833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260238152602001806144c06023913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144366023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601a6024820152600080516020614459833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b815260040180806020018281038252602481526020018061457b6024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061450b6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b81526004018080602001828103825260288152602001806144e36028913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260258152602001806144796025913960400191505060405180910390fd5b60006132c5856103e763ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601b60248201527f54686f7275734c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fc6b4cc64699496d0514c783d6aca5142c3b61e327524db01cabfa4248e430e49609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145576024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601b60248201527f54686f7275734c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602981526020018061452e6029913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260258152602001806144796025913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e7613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260228152602001806144146022913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260258152602001806144796025913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b815260040180806020018281038252602281526020018061449e6022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601b60248201527f54686f7275734c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260238152602001806144366023913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260238152602001806144c06023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe54686f727573526f757465723a2045585049524544000000000000000000000054686f727573526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5454686f7275734c6962726172793a20494e53554646494349454e545f414d4f554e5454686f727573526f757465723a20494e53554646494349454e545f425f414d4f554e5454686f727573526f757465723a20494e56414c49445f5041544800000000000054686f7275734c6962726172793a20494e53554646494349454e545f4c495155494449545954686f7275734c6962726172793a204944454e544943414c5f41444452455353455354686f727573526f757465723a20494e53554646494349454e545f415f414d4f554e5454686f7275734c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454454686f7275734c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454454686f727573526f757465723a204558434553534956455f494e5055545f414d4f554e54a264697066735822122096ad3d68e6477ab9e8d8990b9dca99b9a2faeb54320cddb45b6cb9bb0eeaea9364736f6c63430006060033000000000000000000000000a98ea6356a316b44bf710d5f9b6b4ea0081409ef000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

000000000000000000000000a98ea6356a316b44bf710d5f9b6b4ea0081409ef000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Decoded View---------------
Arg [0] : _factory (address): 0xa98ea6356a316b44bf710d5f9b6b4ea0081409ef
Arg [1] : _WETH (address): 0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a98ea6356a316b44bf710d5f9b6b4ea0081409ef
Arg [1] : 000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7


Deployed ByteCode Sourcemap

15464:18334:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15935:10;-1:-1:-1;;;;;15949:4:0;15935:18;;15928:26;;;;15464:18334;;12:1:-1;9;2:12;20034:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20034:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20034:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32754:259;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32754:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32754:259:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27131:838;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27131:838:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27131:838:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27131:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27131: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;27131:838:0;;-1:-1:-1;27131:838:0;-1:-1:-1;;;;;;27131:838: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;27131:838:0;;;;;;;;;;;;;;;;;33545:250;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33545:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33545:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33545:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33545:250: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;33545:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33545:250:0;;-1:-1:-1;33545:250:0;;-1:-1:-1;;;;;33545:250:0:i;20713:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20713:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20713:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24390:619::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24390:619:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24390:619:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24390:619:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24390:619: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;24390:619:0;;-1:-1:-1;24390:619:0;-1:-1:-1;;;;;;24390:619:0;;;;;;;;:::i;26309:816::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26309:816:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26309:816:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26309:816:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26309:816: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;26309:816:0;;-1:-1:-1;26309:816:0;-1:-1:-1;;;;;;26309:816:0;;;;;;;;:::i;22838:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22838:712:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22838:712:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30122:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30122:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30122:708:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30122:708:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30122:708: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;30122:708:0;;-1:-1:-1;30122:708:0;-1:-1:-1;;;;;;30122:708:0;;;;;;;;:::i;31683:834::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31683:834:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31683:834:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31683:834:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31683: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;31683:834:0;;-1:-1:-1;31683:834:0;-1:-1:-1;;;;;;31683:834:0;;;;;;;;:::i;25618:685::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25618:685:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25618:685:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25618:685: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;25618:685:0;;-1:-1:-1;25618:685:0;-1:-1:-1;;;;;;25618:685:0;;;;;;;;:::i;33021:258::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33021:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33021:258:0;;;;;;;;;;;;:::i;25015:597::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25015:597:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25015:597:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25015:597:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25015:597: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;25015:597:0;;-1:-1:-1;25015:597:0;-1:-1:-1;;;;;;25015:597:0;;;;;;;;:::i;15592:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15592:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15592:38:0;;;;;;;;;;;;;;32561:185;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32561:185:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32561:185:0;;;;;;;;;;;;:::i;22132:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22132:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22132:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30836:841::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30836:841:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30836:841:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30836:841: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;30836:841:0;;-1:-1:-1;30836:841:0;-1:-1:-1;;;;;;30836:841:0;;;;;;;;:::i;19181:847::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19181:847:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19181:847:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15544:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15544:41:0;;;:::i;33287:250::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33287:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33287:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33287:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33287:250: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;33287:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33287:250:0;;-1:-1:-1;33287:250:0;;-1:-1:-1;;;;;33287:250:0:i;21390:663::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21390:663:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21390:663:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17432:732::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17432:732:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17432:732:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18170:968;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18170:968:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27975:798::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27975:798:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27975:798:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27975:798: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;27975:798:0;;-1:-1:-1;27975:798:0;-1:-1:-1;;;;;;27975:798:0;;;;;;;;:::i;20034:673::-;20271:16;20289:14;20252:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;20343:196:::1;20373:5;20393:4;20412:9;20436:14;20465:12;20500:4;20520:8;20343:15;:196::i;:::-;20316:223:::0;;-1:-1:-1;20316:223:0;-1:-1:-1;20550:51:0::1;20578:5:::0;20585:2;20316:223;20550:27:::1;:51::i;:::-;20618:4;-1:-1:-1::0;;;;;20612:20:0::1;;20633:9;20612:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20612:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20612:31:0;;;;20654:45;20685:2;20689:9;20654:30;:45::i;:::-;20034:673:::0;;;;;;;;;;:::o;32754:259::-;32907:14;32946:59;32973:8;32983:9;32994:10;32946:26;:59::i;:::-;32939:66;32754:259;-1:-1:-1;;;;32754:259:0:o;27131:838::-;27345:21;27317:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27417:4:0::1;27392:29;:4:::0;;-1:-1:-1;;27397:15:0;;27392:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27392:21:0::1;-1:-1:-1::0;;;;;27392:29:0::1;;27384:68;;;::::0;;-1:-1:-1;;;27384:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27384:68:0;;;;;;;;;;;;;::::1;;27473:52;27501:7;27510:8;27520:4;;27473:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27473:27:0::1;::::0;-1:-1:-1;;;27473:52:0:i:1;:::-;27463:62;;27575:12;27544:7;27569:1;27552:7;:14;:18;27544:27;;;;;;;;;;;;;;:43;;27536:96;;;;-1:-1:-1::0;;;27536:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27643:138;27689:4;;27694:1;27689:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27689:7:0::1;27698:10;27710:48;27732:7;27741:4;;27746:1;27741:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27741:7:0::1;27750:4;;27755:1;27750:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27750:7:0::1;27710:21;:48::i;:::-;27760:7;27768:1;27760:10;;;;;;;;;;;;;;27643:31;:138::i;:::-;27792:35;27798:7;27807:4;;27792:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27821:4:0::1;::::0;-1:-1:-1;27792:5:0::1;::::0;-1:-1:-1;;27792:35:0:i:1;:::-;27844:4;-1:-1:-1::0;;;;;27838:20:0::1;;27859:7;27884:1;27867:7;:14;:18;27859:27;;;;;;;;;;;;;;27838:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27838:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27838:49:0;;;;27898:63;27929:2;27933:7;27958:1;27941:7;:14;:18;27933:27;;;;;;;;;;;;;;27898:30;:63::i;:::-;27131:838:::0;;;;;;;;;:::o;33545:250::-;33689:21;33735:52;33762:7;33771:9;33782:4;33735:26;:52::i;:::-;33728:59;;33545:250;;;;;:::o;20713:671::-;21019:12;21033;21058;21073:46;21095:7;21104:6;21112;21073:21;:46::i;:::-;21058:61;;21130:10;21143;:33;;21167:9;21143:33;;;-1:-1:-1;;21143:33:0;21187:77;;;-1:-1:-1;;;21187:77:0;;21212:10;21187:77;;;;21232:4;21187:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21130:46;;-1:-1:-1;;;;;;21187:24:0;;;;;:77;;;;;-1:-1:-1;;21187:77:0;;;;;;;;-1:-1:-1;21187:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;21187:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21187:77:0;;;;21296:80;21312:6;21320;21328:9;21339:10;21351;21363:2;21367:8;21296:15;:80::i;:::-;21275:101;;;;;;;;20713:671;;;;;;;;;;;;;;;;:::o;24390:619::-;24614:21;24595:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;24658:52:::1;24686:7;24695:8;24705:4;;24658:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24658:27:0::1;::::0;-1:-1:-1;;;24658:52:0:i:1;:::-;24648:62;;24760:12;24729:7;24754:1;24737:7;:14;:18;24729:27;;;;;;;;;;;;;;:43;;24721:96;;;;-1:-1:-1::0;;;24721:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24828:138;24874:4;;24879:1;24874:7;;;;;;24828:138;24977:24;24983:7;24992:4;;24977:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24998:2:0;;-1:-1:-1;24977:5:0::1;::::0;-1:-1:-1;;24977:24:0:i:1;26309:816::-:0;26523:21;26495:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26595:4:0::1;26570:29;:4:::0;;-1:-1:-1;;26575:15:0;;26570:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26570:21:0::1;-1:-1:-1::0;;;;;26570:29:0::1;;26562:68;;;::::0;;-1:-1:-1;;;26562:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26562:68:0;;;;;;;;;;;;;::::1;;26651:52;26678:7;26687:9;26698:4;;26651:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26651:26:0::1;::::0;-1:-1:-1;;;26651:52:0:i:1;:::-;26641:62;;26736:11;26722:7;26730:1;26722:10;;;;;;;;;;;;;;:25;;26714:74;;;;-1:-1:-1::0;;;26714:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22838:712:::0;23156:14;23183:12;23198:43;23220:7;23229:5;23236:4;23198:21;:43::i;:::-;23183:58;;23252:10;23265;:33;;23289:9;23265:33;;;-1:-1:-1;;23265:33:0;23309:77;;;-1:-1:-1;;;23309:77:0;;23334:10;23309:77;;;;23354:4;23309:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23252:46;;-1:-1:-1;;;;;;23309:24:0;;;;;:77;;;;;-1:-1:-1;;23309:77:0;;;;;;;;-1:-1:-1;23309:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;23309:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23309:77:0;;;;23409:133;23471:5;23478:9;23489:14;23505:12;23519:2;23523:8;23409:47;:133::i;:::-;23397:145;22838:712;-1:-1:-1;;;;;;;;;;;;;22838:712:0:o;30122:708::-;30356:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;30377:136:::1;30423:4;;30428:1;30423:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30423:7:0::1;30432:10;30444:48;30466:7;30475:4;;30480:1;30475:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30475:7:0::1;30484:4;;30489:1;30484:7;;;;;;30444:48;30494:8;30377:31;:136::i;:::-;30524:18;30552:4:::0;;-1:-1:-1;;30557:15:0;;30552:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30552:21:0::1;-1:-1:-1::0;;;;;30545:39:0::1;;30585:2;30545:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30545:43:0::1;-1:-1:-1::0;;;;;30545:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30545:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30545:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30545:43:0;30599:44:::1;::::0;;30545:43:::1;30599:44:::0;;::::1;::::0;;;;;;;;;;;30545:43;;-1:-1:-1;30599:44:0::1;::::0;;;30634:4;;;;;;30599:44;::::1;::::0;30634:4;;30599:44;30634:4;30599:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30640:2:0;;-1:-1:-1;30599:34:0::1;::::0;-1:-1:-1;;30599:44:0:i:1;:::-;30742:12:::0;30676:62:::1;30724:13:::0;30683:4;;-1:-1:-1;;30688:15:0;;30683:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30683:21:0::1;-1:-1:-1::0;;;;;30676:39:0::1;;30716:2;30676:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30676:43:0::1;-1:-1:-1::0;;;;;30676:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30676:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30676:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30676:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30654:168;;;;-1:-1:-1::0;;;30654:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15753:1;30122:708:::0;;;;;;;:::o;31683:834::-;31950:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32009:4:0::1;31984:29;:4:::0;;-1:-1:-1;;31989:15:0;;31984:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31984:21:0::1;-1:-1:-1::0;;;;;31984:29:0::1;;31976:68;;;::::0;;-1:-1:-1;;;31976:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31976:68:0;;;;;;;;;;;;;::::1;;32055:136;32101:4;;32106:1;32101:7;;;;;;32055:136;32202:55;32237:4;;32202:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32251:4:0::1;::::0;-1:-1:-1;32202:34:0::1;::::0;-1:-1:-1;;32202:55:0:i:1;:::-;32285:37;::::0;;-1:-1:-1;;;32285:37:0;;32316:4:::1;32285:37;::::0;::::1;::::0;;;32268:14:::1;::::0;-1:-1:-1;;;;;32292:4:0::1;32285:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32285:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32285:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32285:37:0;;-1:-1:-1;32341:25:0;;::::1;;32333:78;;;;-1:-1:-1::0;;;32333:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32428:4;-1:-1:-1::0;;;;;32422:20:0::1;;32443:9;32422:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32422:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32422:31:0;;;;32464:45;32495:2;32499:9;32464:30;:45::i;25618:685::-:0;25834:21;25806:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;25892:4:::1;-1:-1:-1::0;;;;;25881:15:0::1;:4;;25886:1;25881:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25881:7:0::1;-1:-1:-1::0;;;;;25881:15:0::1;;25873:54;;;::::0;;-1:-1:-1;;;25873:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25873:54:0;;;;;;;;;;;;;::::1;;25948:53;25976:7;25985:9;25996:4;;25948:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25948:27:0::1;::::0;-1:-1:-1;;;25948:53:0:i:1;:::-;25938:63;;26051:12;26020:7;26045:1;26028:7;:14;:18;26020:27;;;;;;;;;;;;;;:43;;26012:96;;;;-1:-1:-1::0;;;26012:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26125:4;-1:-1:-1::0;;;;;26119:19:0::1;;26146:7;26154:1;26146:10;;;;;;;;;;;;;;26119:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26119:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26119:40:0;;;;;26183:4;-1:-1:-1::0;;;;;26177:20:0::1;;26198:48;26220:7;26229:4;;26234:1;26229:7;;;;;;26198:48;26248:7;26256:1;26248:10;;;;;;;;;;;;;;26177:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;26177:82:0::1;-1:-1:-1::0;;;;;26177:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26177:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26177:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26177:82:0;26170:90:::1;;;;26271:24;26277:7;26286:4;;26271:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26292:2:0;;-1:-1:-1;26271:5:0::1;::::0;-1:-1:-1;;26271:24:0:i:1;:::-;25618:685:::0;;;;;;;;:::o;33021:258::-;33174:13;33212:59;33238:9;33249;33260:10;33212:25;:59::i;25015:597::-;25239:21;25220:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;25283:52:::1;25310:7;25319:9;25330:4;;25283:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25283:26:0::1;::::0;-1:-1:-1;;;25283:52:0:i:1;:::-;25273:62;;25368:11;25354:7;25362:1;25354:10;;;;;;;;;;;;;;:25;;25346:74;;;;-1:-1:-1::0;;;25346:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15592:38:::0;;;:::o;32561:185::-;32658:12;32690:48;32710:7;32719:8;32729;32690:19;:48::i;22132:700::-;22398:14;22379:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;22441:196:::1;22471:5;22491:4;22510:9;22534:14;22563:12;22598:4;22618:8;22441:15;:196::i;:::-;22687:38;::::0;;-1:-1:-1;;;22687:38:0;;22719:4:::1;22687:38;::::0;::::1;::::0;;;22425:212;;-1:-1:-1;22648:78:0::1;::::0;-1:-1:-1;22676:5:0;;22683:2;;-1:-1:-1;;;;;22687: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;22687:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22687:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22687:38:0;22648:27:::1;:78::i;:::-;22743:4;-1:-1:-1::0;;;;;22737:20:0::1;;22758:9;22737:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22737:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22737:31:0;;;;22779:45;22810:2;22814:9;22779:30;:45::i;30836:841::-:0;31096:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;31141:4:::1;-1:-1:-1::0;;;;;31130:15:0::1;:4;;31135:1;31130:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31130:7:0::1;-1:-1:-1::0;;;;;31130:15:0::1;;31122:54;;;::::0;;-1:-1:-1;;;31122:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31122:54:0;;;;;;;;;;;;;::::1;;31187:13;31203:9;31187:25;;31229:4;-1:-1:-1::0;;;;;31223:19:0::1;;31250:8;31223:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31223:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31223:38:0;;;;;31285:4;-1:-1:-1::0;;;;;31279:20:0::1;;31300:48;31322:7;31331:4;;31336:1;31331:7;;;;;;31300:48;31350:8;31279:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;31279:80:0::1;-1:-1:-1::0;;;;;31279:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31279:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31279:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31279:80:0;31272:88:::1;;;;31371:18;31399:4:::0;;-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;31446:44:::1;::::0;;31392:43:::1;31446:44:::0;;::::1;::::0;;;;;;;;;;;31392:43;;-1:-1:-1;31446:44:0::1;::::0;;;31481:4;;;;;;31446:44;::::1;::::0;31481:4;;31446:44;31481:4;31446:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31487:2:0;;-1:-1:-1;31446:34:0::1;::::0;-1:-1:-1;;31446:44:0:i:1;:::-;31589:12:::0;31523:62:::1;31571:13:::0;31530:4;;-1:-1:-1;;31535:15:0;;31530:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31530:21:0::1;-1:-1:-1::0;;;;;31523:39:0::1;;31563:2;31523:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31523:43:0::1;-1:-1:-1::0;;;;;31523:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19181:847:0::0;19435:12;19449;19416:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;19474:12:::1;19489:46;19511:7;19520:6;19528;19489:21;:46::i;:::-;19546:59;::::0;;-1:-1:-1;;;19546:59:0;;19577:10:::1;19546:59;::::0;::::1;::::0;-1:-1:-1;;;;;19546:30:0;::::1;:59:::0;;;;;;;;;;;;;;19474:61;;-1:-1:-1;19546:30:0;;::::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19546:30:0;:59;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19546:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19546:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19673:26:0::1;::::0;;-1:-1:-1;;;19673:26:0;;-1:-1:-1;;;;;19673:26:0;;::::1;;::::0;::::1;::::0;;;19643:12:::1;::::0;;;19673:22;;::::1;::::0;::::1;::::0;:26;;;;;;;;;;;19643:12;19673:22;:26;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19673:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19673:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19673:26:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19673:26:0;-1:-1:-1;19711:14:0::1;19730:40;19755:6:::0;19763;19730:24:::1;:40::i;:::-;19710:60;;;19812:6;-1:-1:-1::0;;;;;19802:16:0::1;:6;-1:-1:-1::0;;;;;19802:16:0::1;;:58;;19843:7;19852;19802:58;;;19822:7;19831;19802:58;19781:79:::0;;-1:-1:-1;19781:79:0;-1:-1:-1;19879:21:0;;::::1;;19871:69;;;;-1:-1:-1::0;;;19871:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19970:10;19959:7;:21;;19951:69;;;;-1:-1:-1::0;;;19951:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15753:1;;;;19181:847:::0;;;;;;;;;;;:::o;15544:41::-;;;:::o;33287:250::-;33431:21;33477:52;33505:7;33514:8;33524:4;33477:27;:52::i;21390:663::-;21679:16;21697:14;21724:12;21739:43;21761:7;21770:5;21777:4;21739:21;:43::i;:::-;21724:58;;21793:10;21806;:33;;21830:9;21806:33;;;-1:-1:-1;;21806:33:0;21850:77;;;-1:-1:-1;;;21850:77:0;;21875:10;21850:77;;;;21895:4;21850:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21793:46;;-1:-1:-1;;;;;;21850:24:0;;;;;:77;;;;;-1:-1:-1;;21850:77:0;;;;;;;;-1:-1:-1;21850:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;21850:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21850:77:0;;;;21965:80;21984:5;21991:9;22002:14;22018:12;22032:2;22036:8;21965:18;:80::i;:::-;21938:107;;;;-1:-1:-1;21390:663:0;-1:-1:-1;;;;;;;;;;;;;21390:663:0:o;17432:732::-;17720:12;17734;17748:14;17701:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;17796:85:::1;17810:6;17818;17826:14;17842;17858:10;17870;17796:13;:85::i;:::-;17775:106:::0;;-1:-1:-1;17775:106:0;-1:-1:-1;17892:12:0::1;17907:46;17929:7;17938:6:::0;17946;17907:21:::1;:46::i;:::-;17892:61;;17964:66;17996:6;18004:10;18016:4;18022:7;17964:31;:66::i;:::-;18041;18073:6;18081:10;18093:4;18099:7;18041:31;:66::i;:::-;18142:4;-1:-1:-1::0;;;;;18130:22:0::1;;18153:2;18130:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;18130:26:0::1;-1:-1:-1::0;;;;;18130:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18130:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18130:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18130:26:0;17432:732;;;;-1:-1:-1;18130:26:0;;-1:-1:-1;17432:732:0;;-1:-1:-1;;;;;;;;;17432:732:0:o;18170:968::-;18423:16;18441:14;18457;18404:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;18511:176:::1;18539:5;18559:4;18578:18;18611:9;18635:14;18664:12;18511:13;:176::i;:::-;18484:203:::0;;-1:-1:-1;18484:203:0;-1:-1:-1;18698:12:0::1;18713:43;18735:7;18744:5:::0;18751:4:::1;18713:21;:43::i;:::-;18698:58;;18767:69;18799:5;18806:10;18818:4;18824:11;18767:31;:69::i;:::-;18853:4;-1:-1:-1::0;;;;;18847:19:0::1;;18874:9;18847:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18847:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18847:39:0;;;;;18910:4;-1:-1:-1::0;;;;;18904:20:0::1;;18925:4;18931:9;18904:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18904:37:0::1;-1:-1:-1::0;;;;;18904:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18904:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18904:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18904:37:0;18897:45:::1;;;;18977:4;-1:-1:-1::0;;;;;18965:22:0::1;;18988:2;18965:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;18965:26:0::1;-1:-1:-1::0;;;;;18965:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18965:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18965:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18965:26:0;;-1:-1:-1;19042:9:0::1;:21:::0;-1:-1:-1;19038:92:0::1;;;19065:65;19096:10;19120:9;19108;:21;19065:30;:65::i;:::-;15753:1;18170:968:::0;;;;;;;;;;;:::o;27975:798::-;28188:21;28160:8;15701:15;15689:8;:27;;15681:61;;;;;-1:-1:-1;;;15681:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15681:61:0;;;;;;;;;;;;;;;28246:4:::1;-1:-1:-1::0;;;;;28235:15:0::1;:4;;28240:1;28235:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28235:7:0::1;-1:-1:-1::0;;;;;28235:15:0::1;;28227:54;;;::::0;;-1:-1:-1;;;28227:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28227:54:0;;;;;;;;;;;;;::::1;;28302:52;28329:7;28338:9;28349:4;;28302:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28302:26:0::1;::::0;-1:-1:-1;;;28302:52:0:i:1;:::-;28292:62;;28387:9;28373:7;28381:1;28373:10;;;;;;;;;;;;;;:23;;28365:72;;;;-1:-1:-1::0;;;28365:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28454:4;-1:-1:-1::0;;;;;28448:19:0::1;;28475:7;28483:1;28475:10;;;;;;;;;;;;;;28448:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28448:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28448:40:0;;;;;28512:4;-1:-1:-1::0;;;;;28506:20:0::1;;28527:48;28549:7;28558:4;;28563:1;28558:7;;;;;;28527:48;28577:7;28585:1;28577:10;;;;;;;;;;;;;;28506:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;28506:82:0::1;-1:-1:-1::0;;;;;28506:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28506:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28506:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28506:82:0;28499:90:::1;;;;28600:24;28606:7;28615:4;;28600:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28621:2:0;;-1:-1:-1;28600:5:0::1;::::0;-1:-1:-1;;28600:24:0:i:1;:::-;28687:7;28695:1;28687:10;;;;;;;;;;;;;;28675:9;:22;28671:94;;;28699:66;28730:10;28754:7;28762:1;28754:10;;;;;;;;;;;;;;28742:9;:22;28699:30;:66::i;1222:361::-:0;1417:45;;;-1:-1:-1;;;;;1417:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1417:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1406:57:0;;;;1371:12;;1385:17;;1406:10;;;;1417:45;1406:57;;;25:18:-1;1406: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;;;1406: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;;1370:93:0;;;;1482:7;:57;;;;-1:-1:-1;1494:11:0;;:16;;:44;;;1525:4;1514:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1514:24:0;1494:44;1474:101;;;;;-1:-1:-1;;;1474:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1222:361;;;;;:::o;2001:195::-;2109:12;;;2071;2109;;;;;;;;;-1:-1:-1;;;;;2088:7:0;;;2102:5;;2088: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;;;2088: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;;2070:52:0;;;2141:7;2133:55;;;;-1:-1:-1;;;2133:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2001:195;;;:::o;12168:511::-;12261:14;12307:1;12296:8;:12;12288:65;;;;-1:-1:-1;;;12288:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12384:1;12372:9;:13;:31;;;;;12402:1;12389:10;:14;12372:31;12364:81;;;;-1:-1:-1;;;12364:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12456:20;12479:17;:8;12492:3;12479:17;:12;:17;:::i;:::-;12456:40;-1:-1:-1;12507:14:0;12524:31;12456:40;12544:10;12524:31;:19;:31;:::i;:::-;12507:48;-1:-1:-1;12566:16:0;12585:40;12609:15;12585:19;:9;12599:4;12585:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12566:59;;12660:11;12648:9;:23;;;;;;;12168:511;-1:-1:-1;;;;;;;12168:511:0:o;13348:508::-;13449:21;13506:1;13491:4;:11;:16;;13483:56;;;;;-1:-1:-1;;;13483:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13571:4;:11;13560:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13560:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13560:23:0;;13550:33;;13607:8;13594:7;13602:1;13594:10;;;;;;;;;;;;;:21;;;;;13631:6;13626:223;13657:1;13643:4;:11;:15;13639:1;:19;13626:223;;;13681:14;13697:15;13716:42;13728:7;13737:4;13742:1;13737:7;;;;;;;;;;;;;;13746:4;13751:1;13755;13751:5;13746:11;;;;;;;;;;;;;;13716;:42::i;:::-;13680:78;;;;13790:47;13803:7;13811:1;13803:10;;;;;;;;;;;;;;13815:9;13826:10;13790:12;:47::i;:::-;13773:7;13781:1;13785;13781:5;13773:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13660:3:0;;13626:223;;;;13348:508;;;;;:::o;10651:478::-;10740:12;10766:14;10782;10800:26;10811:6;10819;10800:10;:26::i;:::-;10964:32;;;-1:-1:-1;;10964:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10964:32:0;;;;;10954:43;;;;;;-1:-1:-1;;;;;;10867:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10867:251:0;;;;;;;10857:262;;;;;;;;;10651:478;-1:-1:-1;;;;;10651:478:0:o;1591:402::-;1816:51;;;-1:-1:-1;;;;;1816:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1816:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1805:63:0;;;;1770:12;;1784:17;;1805:10;;;;1816:51;1805:63;;;25:18:-1;1805: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;;;1805: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;;1769:99:0;;;;1887:7;:57;;;;-1:-1:-1;1899:11:0;;:16;;:44;;;1930:4;1919:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1919:24:0;1899:44;1879:106;;;;-1:-1:-1;;;1879:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1591:402;;;;;;:::o;23661:723::-;23768:6;23763:614;23794:1;23780:4;:11;:15;23776:1;:19;23763:614;;;23818:13;23833:14;23852:4;23857:1;23852:7;;;;;;;;;;;;;;23861:4;23866:1;23870;23866:5;23861:11;;;;;;;;;;;;;;23817:56;;;;23889:14;23908:39;23933:5;23940:6;23908:24;:39::i;:::-;23888:59;;;23962:14;23979:7;23987:1;23991;23987:5;23979:14;;;;;;;;;;;;;;23962:31;;24009:15;24026;24054:6;-1:-1:-1;;;;;24045:15:0;:5;-1:-1:-1;;;;;24045:15:0;;:61;;24087:9;24103:1;24045:61;;;24069:1;24073:9;24045:61;24008:98;;;;24121:10;24152:1;24138:4;:11;:15;24134:1;:19;:79;;24210:3;24134:79;;;24156:51;24178:7;24187:6;24195:4;24200:1;24204;24200:5;24195:11;;;;;;;;;;;;;;24156:21;:51::i;:::-;24121:92;;24240:45;24262:7;24271:5;24278:6;24240:21;:45::i;:::-;-1:-1:-1;;;;;24228:63:0;;24310:10;24322;24334:2;24348:1;24338:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24338:12:0;87:42:-1;143:17;;-1:-1;24338:12:0;;24228:137;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24228:137:0;-1:-1:-1;;;;;24228:137: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;24228:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24228:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23797:3:0;;;;;-1:-1:-1;23763:614:0;;-1:-1:-1;;;;;;;;23763:614:0;;;23661:723;;;:::o;13937:529::-;14038:21;14095:1;14080:4;:11;:16;;14072:56;;;;;-1:-1:-1;;;14072:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14160:4;:11;14149:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14149:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14149:23:0;;14139:33;;14213:9;14183:7;14208:1;14191:7;:14;:18;14183:27;;;;;;;;;;;;;;;;;:39;14247:11;;-1:-1:-1;;14247:15:0;14233:226;14264:5;;14233:226;;14292:14;14308:15;14327:42;14339:7;14348:4;14357:1;14353;:5;14348:11;;;;;;;;;;;;;;14361:4;14366:1;14361:7;;;;;;;14327:42;14291:78;;;;14401:46;14413:7;14421:1;14413:10;;;;;;;;;;;;;;14425:9;14436:10;14401:11;:46::i;:::-;14384:7;14396:1;14392;:5;14384:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14271:3:0;14233:226;;28920:1196;29033:6;29028:1081;29059:1;29045:4;:11;:15;29041:1;:19;29028:1081;;;29083:13;29098:14;29117:4;29122:1;29117:7;;;;;;;;;;;;;;29126:4;29131:1;29135;29131:5;29126:11;;;;;;;;;;;;;;29082:56;;;;29154:14;29173:39;29198:5;29205:6;29173:24;:39::i;:::-;29153:59;;;29227:16;29258:45;29280:7;29289:5;29296:6;29258:21;:45::i;:::-;29227:77;;29319:16;29350:17;29438:13;29453;29471:4;-1:-1:-1;;;;;29471:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29471:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29471:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29471:18:0;;;;;;;-1:-1:-1;;;;;29437:52:0;;;;-1:-1:-1;29437:52:0;;-1:-1:-1;29505:17:0;;-1:-1:-1;;;;;29546:15:0;;;;;;;:61;;29588:8;29598;29546:61;;;29565:8;29575;29546:61;29504:103;;;;29636:56;29679:12;29643:5;-1:-1:-1;;;;;29636:23:0;;29668:4;29636:38;;;;;;;;;;;;;-1:-1:-1;;;;;29636:38:0;-1:-1:-1;;;;;29636:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29636:56:0;29622:70;;29722:68;29749:11;29762:12;29776:13;29722:26;:68::i;:::-;29707:83;;29028:1081;;;;29821:15;29838;29866:6;-1:-1:-1;;;;;29857:15:0;:5;-1:-1:-1;;;;;29857:15:0;;:67;;29902:12;29921:1;29857:67;;;29881:1;29885:12;29857:67;29820:104;;;;29939:10;29970:1;29956:4;:11;:15;29952:1;:19;:79;;30028:3;29952:79;;;29974:51;29996:7;30005:6;30013:4;30018:1;30022;30018:5;30013:11;;;;;;;29974:51;30084:12;;;30094:1;30084:12;;;;;;;;;;-1:-1:-1;;;30046:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30046:51:0;;;;;;;;;;;;;;;;;;;;;;29939:92;;-1:-1:-1;30046:9:0;;;;;;30056:10;;30068;;29939:92;;30084:12;;30046:51;;;;;;;;30084:12;;30046:51;;;;30084: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;30046:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30046:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29062:3:0;;;;;-1:-1:-1;29028:1081:0;;-1:-1:-1;;;;;;;;;;29028:1081:0;9768:129;9852:5;;;9847:16;;;;9839:50;;;;;-1:-1:-1;;;9839:50:0;;;;;;;;;;;;-1:-1:-1;;;9839:50:0;;;;;;;;;;;;;;12800:466;12893:13;12939:1;12927:9;:13;12919:67;;;;-1:-1:-1;;;12919:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13017:1;13005:9;:13;:31;;;;;13035:1;13022:10;:14;13005:31;12997:81;;;;-1:-1:-1;;;12997:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13089:14;13106:34;13135:4;13106:24;:9;13120;13106:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13089:51;-1:-1:-1;13151:16:0;13170:34;13200:3;13170:25;:10;13185:9;13170:25;:14;:25;:::i;:34::-;13151:53;;13226:32;13256:1;13239:11;13227:9;:23;;;;;;;13226:32;:29;:32;:::i;:::-;13215:43;12800:466;-1:-1:-1;;;;;;12800:466:0:o;11731:315::-;11813:12;11856:1;11846:7;:11;11838:58;;;;-1:-1:-1;;;11838:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11926:1;11915:8;:12;:28;;;;;11942:1;11931:8;:12;11915:28;11907:78;;;;-1:-1:-1;;;11907:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12030:8;12006:21;:7;12018:8;12006:21;:11;:21;:::i;:::-;:32;;;;;;;11731:315;-1:-1:-1;;;;11731:315:0:o;10216:343::-;10291:14;10307;10352:6;-1:-1:-1;;;;;10342:16:0;:6;-1:-1:-1;;;;;10342:16:0;;;10334:63;;;;-1:-1:-1;;;10334:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10436:6;-1:-1:-1;;;;;10427:15:0;:6;-1:-1:-1;;;;;10427:15:0;;:53;;10465:6;10473;10427:53;;;10446:6;10454;10427:53;10408:72;;-1:-1:-1;10408:72:0;-1:-1:-1;;;;;;10499:20:0;;10491:60;;;;;-1:-1:-1;;;10491:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10216:343;;;;;:::o;16057:1369::-;16370:47;;;-1:-1:-1;;;16370:47:0;;-1:-1:-1;;;;;16370:47:0;;;;;;;;;;;;;;;;16275:12;;;;;;16385:7;16370:31;;;;;;:47;;;;;;;;;;;;;;;:31;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;16370:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16370:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16370:47:0;-1:-1:-1;;;;;16370:61:0;;16366:144;;;16448:50;;;-1:-1:-1;;;16448:50:0;;-1:-1:-1;;;;;16448:50:0;;;;;;;;;;;;;;;;16463:7;16448:34;;;;;;:50;;;;;;;;;;;;;;;-1:-1:-1;16448:34:0;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;16448:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16448:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16366:144:0;16521:13;16536;16553:50;16579:7;16588:6;16596;16553:25;:50::i;:::-;16520:83;;;;16618:8;16630:1;16618:13;:30;;;;-1:-1:-1;16635:13:0;;16618:30;16614:805;;;16687:14;;-1:-1:-1;16703:14:0;;-1:-1:-1;16614:805:0;;;16751:19;16773:55;16793:14;16809:8;16819;16773:19;:55::i;:::-;16751:77;;16865:14;16847;:32;16843:565;;16926:10;16908:14;:28;;16900:76;;;;-1:-1:-1;;;16900:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17017:14;;-1:-1:-1;17033:14:0;-1:-1:-1;17033:14:0;16843:565;;;17089:19;17111:55;17131:14;17147:8;17157;17111:19;:55::i;:::-;17089:77;;17210:14;17192;:32;;17185:40;;;;17270:10;17252:14;:28;;17244:76;;;;-1:-1:-1;;;17244:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17361:14;-1:-1:-1;17377:14:0;;-1:-1:-1;16843:565:0;16614:805;;16057:1369;;;;;;;;;;;:::o;9905:142::-;9957:6;9984;;;:30;;-1:-1:-1;;9999:5:0;;;10013:1;10008;9999:5;10008:1;9994:15;;;;;:20;9984:30;9976:63;;;;;-1:-1:-1;;;9976:63:0;;;;;;;;;;;;-1:-1:-1;;;9976:63:0;;;;;;;;;;;;;;9632:128;9716:5;;;9711:16;;;;9703:49;;;;;-1:-1:-1;;;9703:49:0;;;;;;;;;;;;-1:-1:-1;;;9703:49:0;;;;;;;;;;;;;;11187:431;11280:13;11295;11322:14;11341:26;11352:6;11360;11341:10;:26::i;:::-;11321:46;;;11378:32;11386:7;11395:6;11403;11378:7;:32::i;:::-;;11422:13;11437;11467:32;11475:7;11484:6;11492;11467:7;:32::i;:::-;-1:-1:-1;;;;;11455:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11455:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11455:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11455:59:0;;;;;;;-1:-1:-1;;;;;11421:93:0;;;;-1:-1:-1;11421:93:0;;-1:-1:-1;;;;;;11548:16:0;;;;;;;:62;;11591:8;11601;11548:62;;;11568:8;11578;11548:62;11525:85;;;;-1:-1:-1;11187:431:0;-1:-1:-1;;;;;;;11187:431:0:o

Swarm Source

ipfs://96ad3d68e6477ab9e8d8990b9dca99b9a2faeb54320cddb45b6cb9bb0eeaea93
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.