Contract 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 1

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x65d9b442d9aecf3189019d23029dc8a821362ef0512aaaa84614b96e66c81091Swap Exact Token...196521322023-03-24 23:49:0455 mins ago0xff44a66470bde20b651714f8d376fcd4dbcf7629 IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT27.1914
0xc1c9e4b9883bd260c94a9b9a25f81f46895c789bbccf7d9e438e5fd6a4719aadSwap Exact Token...196433152023-03-24 18:45:585 hrs 58 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT49.4964
0xd3b52a18a0dda00feafab2183dce0d1888348429cefb188341c4a1c391a62ac2Add Liquidity196433022023-03-24 18:45:325 hrs 59 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT47.1387
0xe8d1c679351435721330e71b78175da8d145ed9ad6a2300b85a0c7bcf52c2fa0Swap Exact Token...196432812023-03-24 18:44:505 hrs 59 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT31.5609
0x77fad63a6c9966b0ea6f232fbcfec412a896bac71c05d4e8218694050acb75adSwap Exact Token...196432672023-03-24 18:44:226 hrs ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT31.5609
0xf6e90b3a19e880bd353ba55a6a8b5a9fcde50ceead43b1124b57f975ee3b9c0bSwap Exact Token...196432542023-03-24 18:43:526 hrs ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT65.2695
0x7473eecec8d6e6853a5730856556ac49967e84e3cb133ba2e0b2717155a584ecAdd Liquidity196432322023-03-24 18:43:086 hrs 1 min ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT51.0912
0x48141f3cc80f32e60c9e615d6ef989de7e5bd767258cd210fd3205c4b161db0aSwap Exact Token...196432102023-03-24 18:42:246 hrs 2 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT32.0028
0x4e9e82398e4bb1739d86520e7349669b4afeb6e2bd134202c12a7d78eca5bdc2Add Liquidity196431982023-03-24 18:41:566 hrs 2 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT656.2851
0x55948263288698cc368676741a3f412b319a6e032eea1910f07c47e70076bf2eSwap Exact Token...196431742023-03-24 18:41:086 hrs 3 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT48.8544
0xd0e74ba0d1c98d762f005d4bc37c7f7b077b72745dbb894fd13651ae50ae3453Swap Exact Token...196429912023-03-24 18:34:506 hrs 9 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT48.8544
0x3567337c58371eef3f3e28a2a7f5c92d6d995dc8a90a8485006a35da3dc562b1Swap Exact Token...196429782023-03-24 18:34:246 hrs 10 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT48.8544
0x9ca76c3f8a5e672f2691ec7eea2d1217d5aead17b5af4adfadef0797e7fa4bceSwap Exact Token...196429632023-03-24 18:33:546 hrs 10 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT48.8544
0xe0fca96c2d9c643d837cb7ac8057eacf0cde2b0b607415aac0892c35a611ba2dSwap Exact Token...196429492023-03-24 18:33:266 hrs 11 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT48.8544
0x9f4ae8f7e576a4e1c924e55598f8567b0ab68d17cdeab9efaae83270bee3a0efSwap Exact Token...196429312023-03-24 18:32:466 hrs 12 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT53.8251
0x5f900f132f6de09fc19733824022cd7514e0e5035fd137041a6c62c53c56a118Swap Exact Token...196427982023-03-24 18:28:126 hrs 16 mins ago0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT36.0177
0x11cab655f2e28248913fcf0bea1951590f27f99484aea8c3b18ab9d6bb7bb8cfSwap Exact Token...196373792023-03-24 15:21:589 hrs 22 mins ago0xf9c8451cebc3ad3fde9a9d3eb3fac2583d3992fd IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT27.3372
0x543aa53643cd67361b1c279c6b58d8beff6a93b07f33484c44c2842b1954e3d1Add Liquidity196329202023-03-24 12:48:4011 hrs 56 mins ago0x488ef110425d2f080a7f8f58898b9933369765a1 IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT46.9674
0x717d9735422dd28881b09b6e6dda5007dbf23b9f165d20239b2198bf9c48ce00Swap Exact Token...196267672023-03-24 9:17:1015 hrs 27 mins ago0xf9c8451cebc3ad3fde9a9d3eb3fac2583d3992fd IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT48.9519
0xa4935110f0bddfb2c4ca2c7d51572c2aec892092cbf45daae8c59766698f929fSwap Exact Token...196267592023-03-24 9:16:5415 hrs 27 mins ago0xf9c8451cebc3ad3fde9a9d3eb3fac2583d3992fd IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT12.3177
0x60421e93d1a255d1255696e35f7140780c8c29dd6d13016cad1a75084cb2faa1Swap Exact Token...196267462023-03-24 9:16:2415 hrs 28 mins ago0xf9c8451cebc3ad3fde9a9d3eb3fac2583d3992fd IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT31.8336
0x54432b51b49d17abb2641ebadd7be71125112675c0e8ce0e65bd9ca05c261e78Swap Exact Token...196251682023-03-24 8:22:1216 hrs 22 mins ago0xf9c8451cebc3ad3fde9a9d3eb3fac2583d3992fd IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT31.8336
0x9e9c9ea8701f75f18a2a1e9ce74876bdc0aa0f5ff2a06636569a6f2e70d37721Swap Exact Token...196251602023-03-24 8:21:5616 hrs 22 mins ago0xf9c8451cebc3ad3fde9a9d3eb3fac2583d3992fd IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT33.0018
0xde69843feb5238d63fdb0caf6143207c99d41a1b9f526ced9d02e74d1cfd1da3Swap Exact Token...196251512023-03-24 8:21:3416 hrs 23 mins ago0xf9c8451cebc3ad3fde9a9d3eb3fac2583d3992fd IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT31.8336
0x95de4b29b12813fc7182e9557956d10bf80c031d0a8b07cdf845a62d04e4dd2eSwap Exact Token...196251422023-03-24 8:21:1616 hrs 23 mins ago0xf9c8451cebc3ad3fde9a9d3eb3fac2583d3992fd IN  0xe8b5cf1324f0933fabbe940e30330ce34160eefb0 BTT31.8336
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5f900f132f6de09fc19733824022cd7514e0e5035fd137041a6c62c53c56a118196427982023-03-24 18:28:126 hrs 16 mins ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece926,459.210623138811531013 BTT
0x5f900f132f6de09fc19733824022cd7514e0e5035fd137041a6c62c53c56a118196427982023-03-24 18:28:126 hrs 16 mins ago 0x23181f21dea5936e24163ffaba4ea3b316b57f3c 0xe8b5cf1324f0933fabbe940e30330ce34160eefb926,459.210623138811531013 BTT
0x878ec827aaddfdaeaa531a24f2c79a4a0db44723564c14b6a12ff4fde703b67b195966472023-03-23 16:01:461 day 8 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c22,856,787.068149249706486112 BTT
0xf29cf98211500e7ee56cc2ae61fe1c99f566cbd622fa2b12c7cadfee7050ceb2195966342023-03-23 16:01:201 day 8 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0x488ef110425d2f080a7f8f58898b9933369765a13,386.639280530709837175 BTT
0xf29cf98211500e7ee56cc2ae61fe1c99f566cbd622fa2b12c7cadfee7050ceb2195966342023-03-23 16:01:201 day 8 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c22,967,562.695637993482754073 BTT
0x4790f205052e979f9d9fbaea2cbe9870c2adc49434b832a2138baed46493f3e7195966202023-03-23 16:00:521 day 8 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0x488ef110425d2f080a7f8f58898b9933369765a120,547.571321010901792176 BTT
0x4790f205052e979f9d9fbaea2cbe9870c2adc49434b832a2138baed46493f3e7195966202023-03-23 16:00:521 day 8 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c23,169,379.289512216481802386 BTT
0x1fd1af3b63b7be443dfcff3d4d3a9185441874e40f0c43618351b911bdaa318a195966092023-03-23 16:00:301 day 8 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0x488ef110425d2f080a7f8f58898b9933369765a1113,871.530232997487289583 BTT
0x1fd1af3b63b7be443dfcff3d4d3a9185441874e40f0c43618351b911bdaa318a195966092023-03-23 16:00:301 day 8 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c22,774,306.04659949745791669 BTT
0x6f9c4201eff9aa1cc0625f3d0a47d27e8d8158b171b5bd469fcb05d501cbeeed195501682023-03-22 13:24:042 days 11 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c9,193,953.948356938466116029 BTT
0x78789af974dbbfec4645d454ce4e6daee5e8957e261e154a903cfec6137c9e0a195493432023-03-22 12:55:422 days 11 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c5,132,672.318958200872515215 BTT
0x94a396cb3e4d515a57d8b50a3fb8aeb7f1bfac1fde3b8370a7fd075431a040c9195493282023-03-22 12:55:122 days 11 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c2,258,423.959967816035662404 BTT
0x380dc1957849a83d49b2b09e1d815be63961a1eea9d2c73f90ac5428acec7eff195442332023-03-22 10:00:022 days 14 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c12,760,165.68010320056822044 BTT
0x8f65e491e2e9b1b6b50f4f154b30ee953e587f29f92afa84e386fd99731f78fd194995842023-03-21 8:25:163 days 16 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece12,996.233407752025707066 BTT
0x8f65e491e2e9b1b6b50f4f154b30ee953e587f29f92afa84e386fd99731f78fd194995842023-03-21 8:25:163 days 16 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c2,599,246.681550405141413272 BTT
0x16ef16cb783927471bafd58db118f5c49c0f55d7f14594a6f5e63f1bee4eeb14194995432023-03-21 8:23:503 days 16 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c2,591,174.497116873027485696 BTT
0xe1c770ca534b9377eea81f490f40074219564105fd6b401646e872e5740861fe194757632023-03-20 18:46:224 days 5 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0x1fef9673568c30528446cdef3378186db8319a810.007541004839929318 BTT
0xe1c770ca534b9377eea81f490f40074219564105fd6b401646e872e5740861fe194757632023-03-20 18:46:224 days 5 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c6,999,999.992458995160070682 BTT
0x0e5964e78e7571b7037744b3f14e579be3d2068f65545df96861a4793bd8ee18194756772023-03-20 18:43:264 days 6 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0x1fef9673568c30528446cdef3378186db8319a817,189,561.081365840448439406 BTT
0x0e5964e78e7571b7037744b3f14e579be3d2068f65545df96861a4793bd8ee18194756772023-03-20 18:43:264 days 6 hrs ago 0x23181f21dea5936e24163ffaba4ea3b316b57f3c 0xe8b5cf1324f0933fabbe940e30330ce34160eefb7,189,561.081365840448439406 BTT
0xfd48baf2b3de957a2b5411574c9e7adafc211432c4477c01885386a48c356f24194756362023-03-20 18:42:004 days 6 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0x1fef9673568c30528446cdef3378186db8319a810.025211386674550917 BTT
0xfd48baf2b3de957a2b5411574c9e7adafc211432c4477c01885386a48c356f24194756362023-03-20 18:42:004 days 6 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb 0x23181f21dea5936e24163ffaba4ea3b316b57f3c10,999,999.974788613325449083 BTT
0x52f21823df2ad6e89275df819b9f8d77c11982ad8ee9be90afdb5fbed21a2aaa194754232023-03-20 18:34:424 days 6 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0x1fef9673568c30528446cdef3378186db8319a816,514,410.483282669563227308 BTT
0x52f21823df2ad6e89275df819b9f8d77c11982ad8ee9be90afdb5fbed21a2aaa194754232023-03-20 18:34:424 days 6 hrs ago 0x23181f21dea5936e24163ffaba4ea3b316b57f3c 0xe8b5cf1324f0933fabbe940e30330ce34160eefb6,514,410.483282669563227308 BTT
0xd2a3589df7392bacf4eb072455879c391540d5b5f9e93c5de1465621b3eb9f7b194691662023-03-20 14:59:364 days 9 hrs ago 0xe8b5cf1324f0933fabbe940e30330ce34160eefb0xb6ac943bb1f3beb33e92b9819bc81557d4f92ece1,092,312.9928124458588994 BTT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
IswapV1Router02

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 bttcscan.com on 2022-05-10
*/

/**
 *Submitted for verification at BscScan.com on 2022-05-09
*/

/*! IswapRouterV1.sol | SPDX-License-Identifier: MIT License */

pragma solidity >=0.6.0;

// helper methods for interacting with BRC20 tokens and sending BTT 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 safeTransferTRX(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: TRX_TRANSFER_FAILED');
    }
}

// Iswap Router01 Contract Interface

interface IIswapV1Router01 {
    function factory() external pure returns (address);
    function WTRX() 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 addLiquidityTRX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountTRX, 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 removeLiquidityTRX(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountTRX);
    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 removeLiquidityTRXWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountTRX);
    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 swapExactTRXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactTRX(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForTRX(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapTRXForExactTokens(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 IIswapV1Router02 is IIswapV1Router01 {
    function removeLiquidityTRXSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline
    ) external returns (uint amountTRX);
    function removeLiquidityTRXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountTRX);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTRXForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTRXSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

//   Iswap Factory Contract Interface

interface IIswapV1Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;

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

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

// Iswap Pair Contract Interface
interface IIswapV1Pair {
    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;
}

// IswapLibrary 

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

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

//  IERC20 Contract Interface

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

// WTRX Interface 
interface IWTRX {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

// Iswap Router02 Contract

contract IswapV1Router02 is IIswapV1Router02 {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WTRX;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'IswapV1Router: EXPIRED');
        _;
    }

    constructor(address _factory, address _WTRX) public {
        factory = _factory;
        WTRX = _WTRX;
    }

    receive() external payable {
        assert(msg.sender == WTRX); // only accept TRX via fallback from the WTRX 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 (IIswapV1Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IIswapV1Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = IswapV1Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = IswapV1Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'IswapV1Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = IswapV1Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'IswapV1Router: 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 = IswapV1Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IIswapV1Pair(pair).mint(to);
    }
    function addLiquidityTRX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountTRX, uint liquidity) {
        (amountToken, amountTRX) = _addLiquidity(
            token,
            WTRX,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountTRXMin
        );
        address pair = IswapV1Library.pairFor(factory, token, WTRX);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWTRX(WTRX).deposit{value: amountTRX}();
        assert(IWTRX(WTRX).transfer(pair, amountTRX));
        liquidity = IIswapV1Pair(pair).mint(to);
        // refund dust trx, if any
        if (msg.value > amountTRX) TransferHelper.safeTransferTRX(msg.sender, msg.value - amountTRX);
    }

    // **** 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 = IswapV1Library.pairFor(factory, tokenA, tokenB);
        IIswapV1Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IIswapV1Pair(pair).burn(to);
        (address token0,) = IswapV1Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'IswapV1Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'IswapV1Router: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityTRX(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountTRX) {
        (amountToken, amountTRX) = removeLiquidity(
            token,
            WTRX,
            liquidity,
            amountTokenMin,
            amountTRXMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWTRX(WTRX).withdraw(amountTRX);
        TransferHelper.safeTransferTRX(to, amountTRX);
    }
    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 = IswapV1Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IIswapV1Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityTRXWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountTRX) {
        address pair = IswapV1Library.pairFor(factory, token, WTRX);
        uint value = approveMax ? uint(-1) : liquidity;
        IIswapV1Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountTRX) = removeLiquidityTRX(token, liquidity, amountTokenMin, amountTRXMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityTRXSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountTRX) {
        (, amountTRX) = removeLiquidity(
            token,
            WTRX,
            liquidity,
            amountTokenMin,
            amountTRXMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWTRX(WTRX).withdraw(amountTRX);
        TransferHelper.safeTransferTRX(to, amountTRX);
    }
    function removeLiquidityTRXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountTRXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountTRX) {
        address pair = IswapV1Library.pairFor(factory, token, WTRX);
        uint value = approveMax ? uint(-1) : liquidity;
        IIswapV1Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountTRX = removeLiquidityTRXSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountTRXMin, 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,) = IswapV1Library.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 ? IswapV1Library.pairFor(factory, output, path[i + 2]) : _to;
            IIswapV1Pair(IswapV1Library.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 = IswapV1Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'IswapV1Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, IswapV1Library.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 = IswapV1Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'IswapV1Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, IswapV1Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactTRXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WTRX, 'IswapV1Router: INVALID_PATH');
        amounts = IswapV1Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'IswapV1Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWTRX(WTRX).deposit{value: amounts[0]}();
        assert(IWTRX(WTRX).transfer(IswapV1Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactTRX(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] == WTRX, 'IswapV1Router: INVALID_PATH');
        amounts = IswapV1Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'IswapV1Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, IswapV1Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWTRX(WTRX).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferTRX(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForTRX(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] == WTRX, 'IswapV1Router: INVALID_PATH');
        amounts = IswapV1Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'IswapV1Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, IswapV1Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWTRX(WTRX).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferTRX(to, amounts[amounts.length - 1]);
    }
    function swapTRXForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WTRX, 'IswapV1Router: INVALID_PATH');
        amounts = IswapV1Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'IswapV1Router: EXCESSIVE_INPUT_AMOUNT');
        IWTRX(WTRX).deposit{value: amounts[0]}();
        assert(IWTRX(WTRX).transfer(IswapV1Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust trx, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferTRX(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,) = IswapV1Library.sortTokens(input, output);
            IIswapV1Pair pair = IIswapV1Pair(IswapV1Library.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 = IswapV1Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? IswapV1Library.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, IswapV1Library.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,
            'IswapV1Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTRXForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WTRX, 'IswapV1Router: INVALID_PATH');
        uint amountIn = msg.value;
        IWTRX(WTRX).deposit{value: amountIn}();
        assert(IWTRX(WTRX).transfer(IswapV1Library.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,
            'IswapV1Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForTRXSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WTRX, 'IswapV1Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, IswapV1Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WTRX).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'IswapV1Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWTRX(WTRX).withdraw(amountOut);
        TransferHelper.safeTransferTRX(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return IswapV1Library.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WTRX","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WTRX","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":"amountTRXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityTRX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountTRX","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":"amountTRXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityTRX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountTRX","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":"amountTRXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityTRXSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountTRX","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":"amountTRXMin","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":"removeLiquidityTRXWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountTRX","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":"amountTRXMin","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":"removeLiquidityTRXWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountTRX","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":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTRXForTokens","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":"swapExactTRXForTokensSupportingFeeOnTransferTokens","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":"swapExactTokensForTRX","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":"swapExactTokensForTRXSupportingFeeOnTransferTokens","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":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTRXForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","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":"swapTokensForExactTRX","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"}]

60c060405234801561001057600080fd5b5060405162004762380380620047628339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145dd620001856000398061015f5280610cd85280610e085280610f4e5280610fd652806112bd52806114005280611488528061162152806119245280611ab45280611e2d5280611e685280611f48528061204252806120f852806121ce528061245652806124eb528061255f52806127e852806128975280612bc15280612d6e5280612dc45280612df85280612e6c525080610cb65280610e9b5280611008528061114c5280611185528061135052806114ba52806115ff5280611750528061182752806119b25280611bd2528061225c5280612362528061259152806129785280612b705280612b995280612c465280612da2528061336f52806133b252806138ea5280613a69528061400352806140b1528061413152506145dd6000f3fe60806040526004361061014f5760003560e01c806382bcc5da116100b6578063baa2abde1161006f578063baa2abde14610a79578063c45a015514610ad6578063d06ca61f14610b07578063e07094f314610bbc578063e8e3370014610bd1578063f037219f14610c5157610188565b806382bcc5da1461080a57806385f8c259146108a05780638803dbee146108d657806389f6bd5d1461096c5780639bfe5e05146109f0578063ad615dec14610a4357610188565b806329dc09961161010857806329dc0996146104ec57806338ed17391461055f5780633ff82e32146105f55780635c11d7951461068b5780636d1eb334146107215780636f6534521461077457610188565b8063054d50d41461018d5780630cfedc68146101d55780631cf4401e146102615780631f00ca74146103355780632195995c146103ea578063246ea4131461046857610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101c3600480360360608110156101b057600080fd5b5080359060208101359060400135610c97565b60408051918252519081900360200190f35b3480156101e157600080fd5b5061024860048036036101408110156101f957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610cac565b6040805192835260208301919091528051918290030190f35b6102e56004803603608081101561027757600080fd5b81359190810190604081016020820135600160201b81111561029857600080fd5b8201836020820111156102aa57600080fd5b803590602001918460208302840111600160201b831117156102cb57600080fd5b91935091506001600160a01b038135169060200135610dc0565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610321578181015183820152602001610309565b505050509050019250505060405180910390f35b34801561034157600080fd5b506102e56004803603604081101561035857600080fd5b81359190810190604081016020820135600160201b81111561037957600080fd5b82018360208201111561038b57600080fd5b803590602001918460208302840111600160201b831117156103ac57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611145945050505050565b3480156103f657600080fd5b50610248600480360361016081101561040e57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561117b565b6102e56004803603608081101561047e57600080fd5b81359190810190604081016020820135600160201b81111561049f57600080fd5b8201836020820111156104b157600080fd5b803590602001918460208302840111600160201b831117156104d257600080fd5b91935091506001600160a01b038135169060200135611275565b3480156104f857600080fd5b506101c3600480360361014081101561051057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356115f7565b34801561056b57600080fd5b506102e5600480360360a081101561058257600080fd5b813591602081013591810190606081016040820135600160201b8111156105a857600080fd5b8201836020820111156105ba57600080fd5b803590602001918460208302840111600160201b831117156105db57600080fd5b91935091506001600160a01b038135169060200135611705565b34801561060157600080fd5b506102e5600480360360a081101561061857600080fd5b813591602081013591810190606081016040820135600160201b81111561063e57600080fd5b82018360208201111561065057600080fd5b803590602001918460208302840111600160201b8311171561067157600080fd5b91935091506001600160a01b0381351690602001356118d4565b34801561069757600080fd5b50610186600480360360a08110156106ae57600080fd5b813591602081013591810190606081016040820135600160201b8111156106d457600080fd5b8201836020820111156106e657600080fd5b803590602001918460208302840111600160201b8311171561070757600080fd5b91935091506001600160a01b038135169060200135611b68565b34801561072d57600080fd5b50610248600480360360c081101561074457600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611de0565b34801561078057600080fd5b50610186600480360360a081101561079757600080fd5b813591602081013591810190606081016040820135600160201b8111156107bd57600080fd5b8201836020820111156107cf57600080fd5b803590602001918460208302840111600160201b831117156107f057600080fd5b91935091506001600160a01b038135169060200135611efa565b34801561081657600080fd5b506102e5600480360360a081101561082d57600080fd5b813591602081013591810190606081016040820135600160201b81111561085357600080fd5b82018360208201111561086557600080fd5b803590602001918460208302840111600160201b8311171561088657600080fd5b91935091506001600160a01b03813516906020013561217e565b3480156108ac57600080fd5b506101c3600480360360608110156108c357600080fd5b508035906020810135906040013561230a565b3480156108e257600080fd5b506102e5600480360360a08110156108f957600080fd5b813591602081013591810190606081016040820135600160201b81111561091f57600080fd5b82018360208201111561093157600080fd5b803590602001918460208302840111600160201b8311171561095257600080fd5b91935091506001600160a01b038135169060200135612317565b6101866004803603608081101561098257600080fd5b81359190810190604081016020820135600160201b8111156109a357600080fd5b8201836020820111156109b557600080fd5b803590602001918460208302840111600160201b831117156109d657600080fd5b91935091506001600160a01b038135169060200135612410565b3480156109fc57600080fd5b506101c3600480360360c0811015610a1357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561279c565b348015610a4f57600080fd5b506101c360048036036060811015610a6657600080fd5b508035906020810135906040013561291d565b348015610a8557600080fd5b50610248600480360360e0811015610a9c57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c0013561292a565b348015610ae257600080fd5b50610aeb612b6e565b604080516001600160a01b039092168252519081900360200190f35b348015610b1357600080fd5b506102e560048036036040811015610b2a57600080fd5b81359190810190604081016020820135600160201b811115610b4b57600080fd5b820183602082011115610b5d57600080fd5b803590602001918460208302840111600160201b83111715610b7e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612b92945050505050565b348015610bc857600080fd5b50610aeb612bbf565b348015610bdd57600080fd5b50610c336004803603610100811015610bf557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612be3565b60408051938452602084019290925282820152519081900360600190f35b610c33600480360360c0811015610c6757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612d1f565b6000610ca4848484612fc4565b949350505050565b6000806000610cfc7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006130b4565b9050600087610d0b578c610d0f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610d8557600080fd5b505af1158015610d99573d6000803e3d6000fd5b50505050610dab8e8e8e8e8e8e611de0565b909f909e509c50505050505050505050505050565b60608142811015610e06576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110610e3d57fe5b905060200201356001600160a01b03166001600160a01b031614610e96576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fd833981519152604482015290519081900360640190fd5b610ef47f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061317492505050565b91508682600184510381518110610f0757fe5b60200260200101511015610f4c5760405162461bcd60e51b815260040180806020018281038252602981526020018061448d6029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110610f8857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6110667f00000000000000000000000000000000000000000000000000000000000000008989600081811061103457fe5b905060200201356001600160a01b03168a8a600181811061105157fe5b905060200201356001600160a01b03166130b4565b8460008151811061107357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156110ca57600080fd5b505af11580156110de573d6000803e3d6000fd5b505050506040513d60208110156110f457600080fd5b50516110fc57fe5b61113b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506132c0915050565b5095945050505050565b60606111727f00000000000000000000000000000000000000000000000000000000000000008484613506565b90505b92915050565b60008060006111ab7f00000000000000000000000000000000000000000000000000000000000000008f8f6130b4565b90506000876111ba578c6111be565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561123457600080fd5b505af1158015611248573d6000803e3d6000fd5b5050505061125b8f8f8f8f8f8f8f61292a565b809450819550505050509b509b9950505050505050505050565b606081428110156112bb576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106112f257fe5b905060200201356001600160a01b03166001600160a01b03161461134b576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fd833981519152604482015290519081900360640190fd5b6113a97f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350692505050565b915034826000815181106113b957fe5b602002602001015111156113fe5760405162461bcd60e51b815260040180806020018281038252602581526020018061441f6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061143a57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561146d57600080fd5b505af1158015611481573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6114e67f00000000000000000000000000000000000000000000000000000000000000008989600081811061103457fe5b846000815181106114f357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561154a57600080fd5b505af115801561155e573d6000803e3d6000fd5b505050506040513d602081101561157457600080fd5b505161157c57fe5b6115bb828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506132c0915050565b816000815181106115c857fe5b602002602001015134111561113b5761113b33836000815181106115e857fe5b6020026020010151340361363e565b6000806116457f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006130b4565b9050600086611654578b611658565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156116ce57600080fd5b505af11580156116e2573d6000803e3d6000fd5b505050506116f48d8d8d8d8d8d61279c565b9d9c50505050505050505050505050565b6060814281101561174b576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b6117a97f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061317492505050565b915086826001845103815181106117bc57fe5b602002602001015110156118015760405162461bcd60e51b815260040180806020018281038252602981526020018061448d6029913960400191505060405180910390fd5b61188a8686600081811061181157fe5b905060200201356001600160a01b0316336118707f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061185357fe5b905060200201356001600160a01b03168b8b600181811061105157fe5b8560008151811061187d57fe5b6020026020010151613736565b6118c9828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506132c0915050565b509695505050505050565b6060814281101561191a576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061195457fe5b905060200201356001600160a01b03166001600160a01b0316146119ad576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fd833981519152604482015290519081900360640190fd5b611a0b7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061317492505050565b91508682600184510381518110611a1e57fe5b60200260200101511015611a635760405162461bcd60e51b815260040180806020018281038252602981526020018061448d6029913960400191505060405180910390fd5b611a738686600081811061181157fe5b611ab2828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506132c0915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d83600185510381518110611af157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b2f57600080fd5b505af1158015611b43573d6000803e3d6000fd5b505050506118c98483600185510381518110611b5b57fe5b602002602001015161363e565b8042811015611bac576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b611c0485856000818110611bbc57fe5b905060200201356001600160a01b031633611bfe7f00000000000000000000000000000000000000000000000000000000000000008989600081811061103457fe5b8a613736565b600085856000198101818110611c1657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611c7b57600080fd5b505afa158015611c8f573d6000803e3d6000fd5b505050506040513d6020811015611ca557600080fd5b50516040805160208881028281018201909352888252929350611ce7929091899189918291850190849080828437600092019190915250889250613893915050565b86611d998288886000198101818110611cfc57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d6157600080fd5b505afa158015611d75573d6000803e3d6000fd5b505050506040513d6020811015611d8b57600080fd5b50519063ffffffff613b9e16565b1015611dd65760405162461bcd60e51b815260040180806020018281038252602981526020018061448d6029913960400191505060405180910390fd5b5050505050505050565b6000808242811015611e27576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b611e56897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a61292a565b9093509150611e66898685613bee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ecc57600080fd5b505af1158015611ee0573d6000803e3d6000fd5b50505050611eee858361363e565b50965096945050505050565b8042811015611f3e576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611f7857fe5b905060200201356001600160a01b03166001600160a01b031614611fd1576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fd833981519152604482015290519081900360640190fd5b611fe185856000818110611bbc57fe5b61201f858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613893915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561208957600080fd5b505afa15801561209d573d6000803e3d6000fd5b505050506040513d60208110156120b357600080fd5b50519050868110156120f65760405162461bcd60e51b815260040180806020018281038252602981526020018061448d6029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561215c57600080fd5b505af1158015612170573d6000803e3d6000fd5b50505050611dd6848261363e565b606081428110156121c4576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106121fe57fe5b905060200201356001600160a01b03166001600160a01b031614612257576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fd833981519152604482015290519081900360640190fd5b6122b57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350692505050565b915086826000815181106122c557fe5b60200260200101511115611a635760405162461bcd60e51b815260040180806020018281038252602581526020018061441f6025913960400191505060405180910390fd5b6000610ca4848484613d58565b6060814281101561235d576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b6123bb7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350692505050565b915086826000815181106123cb57fe5b602002602001015111156118015760405162461bcd60e51b815260040180806020018281038252602581526020018061441f6025913960400191505060405180910390fd5b8042811015612454576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061248b57fe5b905060200201356001600160a01b03166001600160a01b0316146124e4576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fd833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561254457600080fd5b505af1158015612558573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6125bd7f00000000000000000000000000000000000000000000000000000000000000008989600081811061103457fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561260d57600080fd5b505af1158015612621573d6000803e3d6000fd5b505050506040513d602081101561263757600080fd5b505161263f57fe5b60008686600019810181811061265157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156126b657600080fd5b505afa1580156126ca573d6000803e3d6000fd5b505050506040513d60208110156126e057600080fd5b505160408051602089810282810182019093528982529293506127229290918a918a918291850190849080828437600092019190915250899250613893915050565b87611d99828989600019810181811061273757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d6157600080fd5b600081428110156127e2576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b612811887f0000000000000000000000000000000000000000000000000000000000000000898989308961292a565b604080516370a0823160e01b8152306004820152905191945061289592508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561286457600080fd5b505afa158015612878573d6000803e3d6000fd5b505050506040513d602081101561288e57600080fd5b5051613bee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156128fb57600080fd5b505af115801561290f573d6000803e3d6000fd5b505050506118c9848361363e565b6000610ca4848484613e48565b6000808242811015612971576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b600061299e7f00000000000000000000000000000000000000000000000000000000000000008c8c6130b4565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156129f957600080fd5b505af1158015612a0d573d6000803e3d6000fd5b505050506040513d6020811015612a2357600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612a7057600080fd5b505af1158015612a84573d6000803e3d6000fd5b505050506040513d6040811015612a9a57600080fd5b50805160209091015190925090506000612ab48e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612ad7578183612ada565b82825b90975095508a871015612b1e5760405162461bcd60e51b81526004018080602001828103825260248152602001806144b66024913960400191505060405180910390fd5b89861015612b5d5760405162461bcd60e51b81526004018080602001828103825260248152602001806145846024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111727f00000000000000000000000000000000000000000000000000000000000000008484613174565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060008342811015612c2c576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b612c3a8c8c8c8c8c8c613fd2565b90945092506000612c6c7f00000000000000000000000000000000000000000000000000000000000000008e8e6130b4565b9050612c7a8d338388613736565b612c868c338387613736565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612cde57600080fd5b505af1158015612cf2573d6000803e3d6000fd5b505050506040513d6020811015612d0857600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612d68576040805162461bcd60e51b8152602060048201526016602482015260008051602061451d833981519152604482015290519081900360640190fd5b612d968a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612de87f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006130b4565b9050612df68b338388613736565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612eea57600080fd5b505af1158015612efe573d6000803e3d6000fd5b505050506040513d6020811015612f1457600080fd5b5051612f1c57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612f7457600080fd5b505af1158015612f88573d6000803e3d6000fd5b505050506040513d6020811015612f9e57600080fd5b5051925034841015612fb657612fb63385340361363e565b505096509650969350505050565b60008084116130045760405162461bcd60e51b81526004018080602001828103825260298152602001806143f66029913960400191505060405180910390fd5b6000831180156130145750600082115b61304f5760405162461bcd60e51b81526004018080602001828103825260268152602001806144446026913960400191505060405180910390fd5b6000613063856126f263ffffffff61424616565b90506000613077828563ffffffff61424616565b9050600061309d836130918861271063ffffffff61424616565b9063ffffffff6142a916565b90508082816130a857fe5b04979650505050505050565b60008060006130c38585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f60f789a9725c5fe1810418f27e47c92f2754fcbffcc1fcf3b24618b4714c0faa609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60606002825110156131cd576040805162461bcd60e51b815260206004820152601c60248201527f497377617056314c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156131e557600080fd5b5060405190808252806020026020018201604052801561320f578160200160208202803683370190505b509050828160008151811061322057fe5b60200260200101818152505060005b60018351038110156132b8576000806132728786858151811061324e57fe5b602002602001015187866001018151811061326557fe5b60200260200101516142f8565b9150915061329484848151811061328557fe5b60200260200101518383612fc4565b8484600101815181106132a357fe5b6020908102919091010152505060010161322f565b509392505050565b60005b6001835103811015613500576000808483815181106132de57fe5b60200260200101518584600101815181106132f557fe5b602002602001015191509150600061330d8383613ef4565b509050600087856001018151811061332157fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461334f57826000613353565b6000835b91509150600060028a5103881061336a57886133ab565b6133ab7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061339e57fe5b60200260200101516130b4565b90506133d87f000000000000000000000000000000000000000000000000000000000000000088886130b4565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613415576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561348657818101518382015260200161346e565b50505050905090810190601f1680156134b35780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156134d557600080fd5b505af11580156134e9573d6000803e3d6000fd5b5050600190990198506132c3975050505050505050565b50505050565b606060028251101561355f576040805162461bcd60e51b815260206004820152601c60248201527f497377617056314c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561357757600080fd5b506040519080825280602002602001820160405280156135a1578160200160208202803683370190505b50905082816001835103815181106135b557fe5b60209081029190910101528151600019015b80156132b8576000806135f7878660018603815181106135e357fe5b602002602001015187868151811061326557fe5b9150915061361984848151811061360a57fe5b60200260200101518383613d58565b84600185038151811061362857fe5b60209081029190910101525050600019016135c7565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061368a5780518252601f19909201916020918201910161366b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146136ec576040519150601f19603f3d011682016040523d82523d6000602084013e6136f1565b606091505b50509050806137315760405162461bcd60e51b815260040180806020018281038252602381526020018061453d6023913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106137bb5780518252601f19909201916020918201910161379c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461381d576040519150601f19603f3d011682016040523d82523d6000602084013e613822565b606091505b5091509150818015613850575080511580613850575080806020019051602081101561384d57600080fd5b50515b61388b5760405162461bcd60e51b81526004018080602001828103825260248152602001806145606024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613731576000808483815181106138b157fe5b60200260200101518584600101815181106138c857fe5b60200260200101519150915060006138e08383613ef4565b50905060006139107f000000000000000000000000000000000000000000000000000000000000000085856130b4565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561395157600080fd5b505afa158015613965573d6000803e3d6000fd5b505050506040513d606081101561397b57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a8116908916146139b15782846139b4565b83835b91509150613a12828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d6157600080fd5b9550613a1f868383612fc4565b945050505050600080856001600160a01b0316886001600160a01b031614613a4957826000613a4d565b6000835b91509150600060028c51038a10613a64578a613a98565b613a987f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061339e57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613b22578181015183820152602001613b0a565b50505050905090810190601f168015613b4f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b7157600080fd5b505af1158015613b85573d6000803e3d6000fd5b50506001909b019a506138969950505050505050505050565b80820382811115611175576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613c6b5780518252601f199092019160209182019101613c4c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ccd576040519150601f19603f3d011682016040523d82523d6000602084013e613cd2565b606091505b5091509150818015613d00575080511580613d005750808060200190516020811015613cfd57600080fd5b50515b613d51576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602a8152602001806143cc602a913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260268152602001806144446026913960400191505060405180910390fd5b6000613e07612710613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216126f2613dfb868963ffffffff613b9e16565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260238152602001806144da6023913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260268152602001806144446026913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b815260040180806020018281038252602381526020018061446a6023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601c60248201527f497377617056314c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806145846024913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260248152602001806144b66024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611175576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611175576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b5090506143158686866130b4565b506000806143248888886130b4565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe497377617056314c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54497377617056314c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5449737761705631526f757465723a204558434553534956455f494e5055545f414d4f554e54497377617056314c6962726172793a20494e53554646494349454e545f4c4951554944495459497377617056314c6962726172793a204944454e544943414c5f41444452455353455349737761705631526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5449737761705631526f757465723a20494e53554646494349454e545f415f414d4f554e54497377617056314c6962726172793a20494e53554646494349454e545f414d4f554e5449737761705631526f757465723a20494e56414c49445f50415448000000000049737761705631526f757465723a2045585049524544000000000000000000005472616e7366657248656c7065723a205452585f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454449737761705631526f757465723a20494e53554646494349454e545f425f414d4f554e54a2646970667358221220cd02dd339b2244ac1fea286acfbc915ddbadd3da7d312c064beec9f48cefa42664736f6c634300060600330000000000000000000000000cee0dfb5c680e3ccaa46fa28d5057f204e24f0a00000000000000000000000023181f21dea5936e24163ffaba4ea3b316b57f3c

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

0000000000000000000000000cee0dfb5c680e3ccaa46fa28d5057f204e24f0a00000000000000000000000023181f21dea5936e24163ffaba4ea3b316b57f3c

-----Decoded View---------------
Arg [0] : _factory (address): 0x0cee0dfb5c680e3ccaa46fa28d5057f204e24f0a
Arg [1] : _WTRX (address): 0x23181f21dea5936e24163ffaba4ea3b316b57f3c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000cee0dfb5c680e3ccaa46fa28d5057f204e24f0a
Arg [1] : 00000000000000000000000023181f21dea5936e24163ffaba4ea3b316b57f3c


Deployed ByteCode Sourcemap

15876:18407:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16352:10;-1:-1:-1;;;;;16366:4:0;16352:18;;16345:26;;;;15876:18407;;12:1:-1;9;2:12;33235:260:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33235:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33235:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21826:665;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21826:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21826:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26068:689;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26068:689:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26068:689:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26068:689: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;26068:689:0;;-1:-1:-1;26068:689:0;-1:-1:-1;;;;;;26068:689: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;26068:689:0;;;;;;;;;;;;;;;;;34029:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34029:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34029:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34029:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34029:251: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;34029:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34029:251:0;;-1:-1:-1;34029:251:0;;-1:-1:-1;;;;;34029:251:0:i;21147:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21147:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21147:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28437:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28437:802:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28437:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28437:802: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;28437:802:0;;-1:-1:-1;28437:802:0;-1:-1:-1;;;;;;28437:802:0;;;;;;;;:::i;23276:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23276:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23276:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24834:622::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24834:622:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24834:622:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24834:622:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24834:622: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;24834:622:0;;-1:-1:-1;24834:622:0;-1:-1:-1;;;;;;24834:622:0;;;;;;;;:::i;27589:842::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27589:842:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27589:842:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27589:842:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27589:842: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;27589:842:0;;-1:-1:-1;27589:842:0;-1:-1:-1;;;;;;27589:842:0;;;;;;;;:::i;30594:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30594:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30594:710:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30594:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30594:710: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;30594:710:0;;-1:-1:-1;30594:710:0;-1:-1:-1;;;;;;30594:710:0;;;;;;;;:::i;20468:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20468:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20468:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32160:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32160:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32160:837:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32160:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32160:837: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;32160:837:0;;-1:-1:-1;32160:837:0;-1:-1:-1;;;;;;32160:837:0;;;;;;;;:::i;26763:820::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26763:820:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26763:820:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26763:820:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26763:820: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;26763:820:0;;-1:-1:-1;26763:820:0;-1:-1:-1;;;;;;26763:820:0;;;;;;;;:::i;33503:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33503:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33503:259:0;;;;;;;;;;;;:::i;25462:600::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25462:600:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25462:600:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25462:600:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25462:600: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;25462:600:0;;-1:-1:-1;25462:600:0;-1:-1:-1;;;;;;25462:600:0;;;;;;;;:::i;31310:844::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31310:844:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31310:844:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31310:844: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;31310:844:0;;-1:-1:-1;31310:844:0;-1:-1:-1;;;;;;31310:844:0;;;;;;;;:::i;22570:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22570:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22570:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33041:186::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33041:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33041:186:0;;;;;;;;;;;;:::i;19609:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19609:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19609:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15960:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15960:41:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15960:41:0;;;;;;;;;;;;;;33770:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33770:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33770:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33770:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33770:251: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;33770:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33770:251:0;;-1:-1:-1;33770:251:0;;-1:-1:-1;;;;;33770:251:0:i;16008:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16008:38:0;;;:::i;17856:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17856:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17856:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18596:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18596:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33235:260::-;33388:14;33427:60;33455:8;33465:9;33476:10;33427:27;:60::i;:::-;33420:67;33235:260;-1:-1:-1;;;;33235:260:0:o;21826:665::-;22115:16;22133:14;22160:12;22175:44;22198:7;22207:5;22214:4;22175:22;:44::i;:::-;22160:59;;22230:10;22243;:33;;22267:9;22243:33;;;-1:-1:-1;;22243:33:0;22287:78;;;-1:-1:-1;;;22287:78:0;;22313:10;22287:78;;;;22333:4;22287:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22230:46;;-1:-1:-1;;;;;;22287:25:0;;;;;:78;;;;;-1:-1:-1;;22287:78:0;;;;;;;;-1:-1:-1;22287:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22287:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22287:78:0;;;;22403:80;22422:5;22429:9;22440:14;22456:12;22470:2;22474:8;22403:18;:80::i;:::-;22376:107;;;;-1:-1:-1;21826:665:0;-1:-1:-1;;;;;;;;;;;;;21826:665:0:o;26068:689::-;26284:21;26256:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;26342:4:::1;-1:-1:-1::0;;;;;26331:15:0::1;:4;;26336:1;26331:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26331:7:0::1;-1:-1:-1::0;;;;;26331:15:0::1;;26323:55;;;::::0;;-1:-1:-1;;;26323:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26323:55:0;;;;;;;;;;;;;::::1;;26399:54;26428:7;26437:9;26448:4;;26399:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26399:28:0::1;::::0;-1:-1:-1;;;26399:54:0:i:1;:::-;26389:64;;26503:12;26472:7;26497:1;26480:7;:14;:18;26472:27;;;;;;;;;;;;;;:43;;26464:97;;;;-1:-1:-1::0;;;26464:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26578:4;-1:-1:-1::0;;;;;26572:19:0::1;;26599:7;26607:1;26599:10;;;;;;;;;;;;;;26572:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26572:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26572:40:0;;;;;26636:4;-1:-1:-1::0;;;;;26630:20:0::1;;26651:49;26674:7;26683:4;;26688:1;26683:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26683:7:0::1;26692:4;;26697:1;26692:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26692:7:0::1;26651:22;:49::i;:::-;26702:7;26710:1;26702:10;;;;;;;;;;;;;;26630:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26630:83:0::1;-1:-1:-1::0;;;;;26630:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26630:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26630:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26630:83:0;26623:91:::1;;;;26725:24;26731:7;26740:4;;26725:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26746:2:0;;-1:-1:-1;26725:5:0::1;::::0;-1:-1:-1;;26725:24:0:i:1;:::-;26068:689:::0;;;;;;;;:::o;34029:251::-;34173:21;34219:53;34247:7;34256:9;34267:4;34219:27;:53::i;:::-;34212:60;;34029:251;;;;;:::o;21147:673::-;21453:12;21467;21492;21507:47;21530:7;21539:6;21547;21507:22;:47::i;:::-;21492:62;;21565:10;21578;:33;;21602:9;21578:33;;;-1:-1:-1;;21578:33:0;21622:78;;;-1:-1:-1;;;21622:78:0;;21648:10;21622:78;;;;21668:4;21622:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21565:46;;-1:-1:-1;;;;;;21622:25:0;;;;;:78;;;;;-1:-1:-1;;21622:78:0;;;;;;;;-1:-1:-1;21622:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21622:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21622:78:0;;;;21732:80;21748:6;21756;21764:9;21775:10;21787;21799:2;21803:8;21732:15;:80::i;:::-;21711:101;;;;;;;;21147:673;;;;;;;;;;;;;;;;:::o;28437:802::-;28650:21;28622:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;28708:4:::1;-1:-1:-1::0;;;;;28697:15:0::1;:4;;28702:1;28697:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28697:7:0::1;-1:-1:-1::0;;;;;28697:15:0::1;;28689:55;;;::::0;;-1:-1:-1;;;28689:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28689:55:0;;;;;;;;;;;;;::::1;;28765:53;28793:7;28802:9;28813:4;;28765:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28765:27:0::1;::::0;-1:-1:-1;;;28765:53:0:i:1;:::-;28755:63;;28851:9;28837:7;28845:1;28837:10;;;;;;;;;;;;;;:23;;28829:73;;;;-1:-1:-1::0;;;28829:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28919:4;-1:-1:-1::0;;;;;28913:19:0::1;;28940:7;28948:1;28940:10;;;;;;;;;;;;;;28913:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28913:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28913:40:0;;;;;28977:4;-1:-1:-1::0;;;;;28971:20:0::1;;28992:49;29015:7;29024:4;;29029:1;29024:7;;;;;;28992:49;29043:7;29051:1;29043:10;;;;;;;;;;;;;;28971:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;28971:83:0::1;-1:-1:-1::0;;;;;28971:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28971:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28971:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28971:83:0;28964:91:::1;;;;29066:24;29072:7;29081:4;;29066:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29087:2:0;;-1:-1:-1;29066:5:0::1;::::0;-1:-1:-1;;29066:24:0:i:1;:::-;29153:7;29161:1;29153:10;;;;;;;;;;;;;;29141:9;:22;29137:94;;;29165:66;29196:10;29220:7;29228:1;29220:10;;;;;;;;;;;;;;29208:9;:22;29165:30;:66::i;23276:714::-:0;23594:14;23621:12;23636:44;23659:7;23668:5;23675:4;23636:22;:44::i;:::-;23621:59;;23691:10;23704;:33;;23728:9;23704:33;;;-1:-1:-1;;23704:33:0;23748:78;;;-1:-1:-1;;;23748:78:0;;23774:10;23748:78;;;;23794:4;23748:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23691:46;;-1:-1:-1;;;;;;23748:25:0;;;;;:78;;;;;-1:-1:-1;;23748:78:0;;;;;;;;-1:-1:-1;23748:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23748:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23748:78:0;;;;23849:133;23911:5;23918:9;23929:14;23945:12;23959:2;23963:8;23849:47;:133::i;:::-;23837:145;23276:714;-1:-1:-1;;;;;;;;;;;;;23276:714:0:o;24834:622::-;25058:21;25039:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;25102:53:::1;25131:7;25140:8;25150:4;;25102:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25102:28:0::1;::::0;-1:-1:-1;;;25102:53:0:i:1;:::-;25092:63;;25205:12;25174:7;25199:1;25182:7;:14;:18;25174:27;;;;;;;;;;;;;;:43;;25166:97;;;;-1:-1:-1::0;;;25166:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25274:139;25320:4;;25325:1;25320:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25320:7:0::1;25329:10;25341:49;25364:7;25373:4;;25378:1;25373:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25373:7:0::1;25382:4;;25387:1;25382:7;;;;;;25341:49;25392:7;25400:1;25392:10;;;;;;;;;;;;;;25274:31;:139::i;:::-;25424:24;25430:7;25439:4;;25424:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25445:2:0;;-1:-1:-1;25424:5:0::1;::::0;-1:-1:-1;;25424:24:0:i:1;:::-;24834:622:::0;;;;;;;;;:::o;27589:842::-;27803:21;27775:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27875:4:0::1;27850:29;:4:::0;;-1:-1:-1;;27855:15:0;;27850:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27850:21:0::1;-1:-1:-1::0;;;;;27850:29:0::1;;27842:69;;;::::0;;-1:-1:-1;;;27842:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27842:69:0;;;;;;;;;;;;;::::1;;27932:53;27961:7;27970:8;27980:4;;27932:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27932:28:0::1;::::0;-1:-1:-1;;;27932:53:0:i:1;:::-;27922:63;;28035:12;28004:7;28029:1;28012:7;:14;:18;28004:27;;;;;;;;;;;;;;:43;;27996:97;;;;-1:-1:-1::0;;;27996:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28104:139;28150:4;;28155:1;28150:7;;;;;;28104:139;28254:35;28260:7;28269:4;;28254:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28283:4:0::1;::::0;-1:-1:-1;28254:5:0::1;::::0;-1:-1:-1;;28254:35:0:i:1;:::-;28306:4;-1:-1:-1::0;;;;;28300:20:0::1;;28321:7;28346:1;28329:7;:14;:18;28321:27;;;;;;;;;;;;;;28300:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28300:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28300:49:0;;;;28360:63;28391:2;28395:7;28420:1;28403:7;:14;:18;28395:27;;;;;;;;;;;;;;28360:30;:63::i;30594:710::-:0;30828:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;30849:137:::1;30895:4;;30900:1;30895:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30895:7:0::1;30904:10;30916:49;30939:7;30948:4;;30953:1;30948:7;;;;;;30916:49;30967:8;30849:31;:137::i;:::-;30997:18;31025:4:::0;;-1:-1:-1;;31030:15:0;;31025:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31025:21:0::1;-1:-1:-1::0;;;;;31018:39:0::1;;31058:2;31018:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31018:43:0::1;-1:-1:-1::0;;;;;31018:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31018:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31018:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31018:43:0;31072:44:::1;::::0;;31018:43:::1;31072:44:::0;;::::1;::::0;;;;;;;;;;;31018:43;;-1:-1:-1;31072:44:0::1;::::0;;;31107:4;;;;;;31072:44;::::1;::::0;31107:4;;31072:44;31107:4;31072:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31113:2:0;;-1:-1:-1;31072:34:0::1;::::0;-1:-1:-1;;31072:44:0:i:1;:::-;31215:12:::0;31149:62:::1;31197:13:::0;31156:4;;-1:-1:-1;;31161:15:0;;31156:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31156:21:0::1;-1:-1:-1::0;;;;;31149:39:0::1;;31189:2;31149:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31149:43:0::1;-1:-1:-1::0;;;;;31149:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31149:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31149:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31149:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31127:169;;;;-1:-1:-1::0;;;31127:169:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16170:1;30594:710:::0;;;;;;;:::o;20468:673::-;20705:16;20723:14;20686:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;20777:196:::1;20807:5;20827:4;20846:9;20870:14;20899:12;20934:4;20954:8;20777:15;:196::i;:::-;20750:223:::0;;-1:-1:-1;20750:223:0;-1:-1:-1;20984:51:0::1;21012:5:::0;21019:2;20750:223;20984:27:::1;:51::i;:::-;21052:4;-1:-1:-1::0;;;;;21046:20:0::1;;21067:9;21046:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21046:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21046:31:0;;;;21088:45;21119:2;21123:9;21088:30;:45::i;:::-;20468:673:::0;;;;;;;;;;:::o;32160:837::-;32427:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32486:4:0::1;32461:29;:4:::0;;-1:-1:-1;;32466:15:0;;32461:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32461:21:0::1;-1:-1:-1::0;;;;;32461:29:0::1;;32453:69;;;::::0;;-1:-1:-1;;;32453:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32453:69:0;;;;;;;;;;;;;::::1;;32533:137;32579:4;;32584:1;32579:7;;;;;;32533:137;32681:55;32716:4;;32681:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32730:4:0::1;::::0;-1:-1:-1;32681:34:0::1;::::0;-1:-1:-1;;32681:55:0:i:1;:::-;32764:37;::::0;;-1:-1:-1;;;32764:37:0;;32795:4:::1;32764:37;::::0;::::1;::::0;;;32747:14:::1;::::0;-1:-1:-1;;;;;32771:4:0::1;32764:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32764:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32764:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32764:37:0;;-1:-1:-1;32820:25:0;;::::1;;32812:79;;;;-1:-1:-1::0;;;32812:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32908:4;-1:-1:-1::0;;;;;32902:20:0::1;;32923:9;32902:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32902:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32902:31:0;;;;32944:45;32975:2;32979:9;32944:30;:45::i;26763:820::-:0;26977:21;26949:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27049:4:0::1;27024:29;:4:::0;;-1:-1:-1;;27029:15:0;;27024:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27024:21:0::1;-1:-1:-1::0;;;;;27024:29:0::1;;27016:69;;;::::0;;-1:-1:-1;;;27016:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27016:69:0;;;;;;;;;;;;;::::1;;27106:53;27134:7;27143:9;27154:4;;27106:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27106:27:0::1;::::0;-1:-1:-1;;;27106:53:0:i:1;:::-;27096:63;;27192:11;27178:7;27186:1;27178:10;;;;;;;;;;;;;;:25;;27170:75;;;;-1:-1:-1::0;;;27170:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33503:259:::0;33656:13;33694:60;33721:9;33732;33743:10;33694:26;:60::i;25462:600::-;25686:21;25667:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;25730:53:::1;25758:7;25767:9;25778:4;;25730:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25730:27:0::1;::::0;-1:-1:-1;;;25730:53:0:i:1;:::-;25720:63;;25816:11;25802:7;25810:1;25802:10;;;;;;;;;;;;;;:25;;25794:75;;;;-1:-1:-1::0;;;25794:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31310:844:::0;31570:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;31615:4:::1;-1:-1:-1::0;;;;;31604:15:0::1;:4;;31609:1;31604:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31604:7:0::1;-1:-1:-1::0;;;;;31604:15:0::1;;31596:55;;;::::0;;-1:-1:-1;;;31596:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31596:55:0;;;;;;;;;;;;;::::1;;31662:13;31678:9;31662:25;;31704:4;-1:-1:-1::0;;;;;31698:19:0::1;;31725:8;31698:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31698:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31698:38:0;;;;;31760:4;-1:-1:-1::0;;;;;31754:20:0::1;;31775:49;31798:7;31807:4;;31812:1;31807:7;;;;;;31775:49;31826:8;31754:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;31754:81:0::1;-1:-1:-1::0;;;;;31754:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31754:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31754:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31754:81:0;31747:89:::1;;;;31847:18;31875:4:::0;;-1:-1:-1;;31880:15:0;;31875:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31875:21:0::1;-1:-1:-1::0;;;;;31868:39:0::1;;31908:2;31868:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31868:43:0::1;-1:-1:-1::0;;;;;31868:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31868:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31868:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31868:43:0;31922:44:::1;::::0;;31868:43:::1;31922:44:::0;;::::1;::::0;;;;;;;;;;;31868:43;;-1:-1:-1;31922:44:0::1;::::0;;;31957:4;;;;;;31922:44;::::1;::::0;31957:4;;31922:44;31957:4;31922:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31963:2:0;;-1:-1:-1;31922:34:0::1;::::0;-1:-1:-1;;31922:44:0:i:1;:::-;32065:12:::0;31999:62:::1;32047:13:::0;32006:4;;-1:-1:-1;;32011:15:0;;32006:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32006:21:0::1;-1:-1:-1::0;;;;;31999:39:0::1;;32039:2;31999:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31999:43:0::1;-1:-1:-1::0;;;;;31999:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;22570:700:0::0;22836:14;22817:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;22879:196:::1;22909:5;22929:4;22948:9;22972:14;23001:12;23036:4;23056:8;22879:15;:196::i;:::-;23125:38;::::0;;-1:-1:-1;;;23125:38:0;;23157:4:::1;23125:38;::::0;::::1;::::0;;;22863:212;;-1:-1:-1;23086:78:0::1;::::0;-1:-1:-1;23114:5:0;;23121:2;;-1:-1:-1;;;;;23125: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;23125:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23125:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23125:38:0;23086:27:::1;:78::i;:::-;23181:4;-1:-1:-1::0;;;;;23175:20:0::1;;23196:9;23175:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23175:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23175:31:0;;;;23217:45;23248:2;23252:9;23217:30;:45::i;33041:186::-:0;33138:12;33170:49;33191:7;33200:8;33210;33170:20;:49::i;19609:853::-;19863:12;19877;19844:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;19902:12:::1;19917:47;19940:7;19949:6;19957;19917:22;:47::i;:::-;19975:60;::::0;;-1:-1:-1;;;19975:60:0;;20007:10:::1;19975:60;::::0;::::1;::::0;-1:-1:-1;;;;;19975:31:0;::::1;:60:::0;;;;;;;;;;;;;;19902:62;;-1:-1:-1;19975:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19975:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19975:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19975:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20103:27:0::1;::::0;;-1:-1:-1;;;20103:27:0;;-1:-1:-1;;;;;20103:27:0;;::::1;;::::0;::::1;::::0;;;20073:12:::1;::::0;;;20103:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;20073:12;20103:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20103:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20103:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20103:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20103:27:0;-1:-1:-1;20142:14:0::1;20161:41;20187:6:::0;20195;20161:25:::1;:41::i;:::-;20141:61;;;20244:6;-1:-1:-1::0;;;;;20234:16:0::1;:6;-1:-1:-1::0;;;;;20234:16:0::1;;:58;;20275:7;20284;20234:58;;;20254:7;20263;20234:58;20213:79:::0;;-1:-1:-1;20213:79:0;-1:-1:-1;20311:21:0;;::::1;;20303:70;;;;-1:-1:-1::0;;;20303:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20403:10;20392:7;:21;;20384:70;;;;-1:-1:-1::0;;;20384:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16170:1;;;;19609:853:::0;;;;;;;;;;;:::o;15960:41::-;;;:::o;33770:251::-;33914:21;33960:53;33989:7;33998:8;34008:4;33960:28;:53::i;16008:38::-;;;:::o;17856:734::-;18144:12;18158;18172:14;18125:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;18220:85:::1;18234:6;18242;18250:14;18266;18282:10;18294;18220:13;:85::i;:::-;18199:106:::0;;-1:-1:-1;18199:106:0;-1:-1:-1;18316:12:0::1;18331:47;18354:7;18363:6:::0;18371;18331:22:::1;:47::i;:::-;18316:62;;18389:66;18421:6;18429:10;18441:4;18447:7;18389:31;:66::i;:::-;18466;18498:6;18506:10;18518:4;18524:7;18466:31;:66::i;:::-;18568:4;-1:-1:-1::0;;;;;18555:23:0::1;;18579:2;18555:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18555:27:0::1;-1:-1:-1::0;;;;;18555:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18555:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18555:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18555:27:0;17856:734;;;;-1:-1:-1;18555:27:0;;-1:-1:-1;17856:734:0;;-1:-1:-1;;;;;;;;;17856:734:0:o;18596:970::-;18849:16;18867:14;18883;18830:8;16117:15;16105:8;:27;;16097:62;;;;;-1:-1:-1;;;16097:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16097:62:0;;;;;;;;;;;;;;;18937:176:::1;18965:5;18985:4;19004:18;19037:9;19061:14;19090:12;18937:13;:176::i;:::-;18910:203:::0;;-1:-1:-1;18910:203:0;-1:-1:-1;19124:12:0::1;19139:44;19162:7;19171:5:::0;19178:4:::1;19139:22;:44::i;:::-;19124:59;;19194:69;19226:5;19233:10;19245:4;19251:11;19194:31;:69::i;:::-;19280:4;-1:-1:-1::0;;;;;19274:19:0::1;;19301:9;19274:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19274:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19274:39:0;;;;;19337:4;-1:-1:-1::0;;;;;19331:20:0::1;;19352:4;19358:9;19331:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19331:37:0::1;-1:-1:-1::0;;;;;19331:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19331:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19331:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19331:37:0;19324:45:::1;;;;19405:4;-1:-1:-1::0;;;;;19392:23:0::1;;19416:2;19392:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19392:27:0::1;-1:-1:-1::0;;;;;19392:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19392:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19392:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19392:27:0;;-1:-1:-1;19470:9:0::1;:21:::0;-1:-1:-1;19466:92:0::1;;;19493:65;19524:10;19548:9;19536;:21;19493:30;:65::i;:::-;16170:1;18596:970:::0;;;;;;;;;;;:::o;12487:515::-;12580:14;12626:1;12615:8;:12;12607:66;;;;-1:-1:-1;;;12607:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12704:1;12692:9;:13;:31;;;;;12722:1;12709:10;:14;12692:31;12684:82;;;;-1:-1:-1;;;12684:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12777:20;12800:18;:8;12813:4;12800:18;:12;:18;:::i;:::-;12777:41;-1:-1:-1;12829:14:0;12846:31;12777:41;12866:10;12846:31;:19;:31;:::i;:::-;12829:48;-1:-1:-1;12888:16:0;12907:41;12932:15;12907:20;:9;12921:5;12907:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;12888:60;;12983:11;12971:9;:23;;;;;;;12487:515;-1:-1:-1;;;;;;;12487:515:0:o;10967:478::-;11056:12;11082:14;11098;11116:26;11127:6;11135;11116:10;:26::i;:::-;11280:32;;;-1:-1:-1;;11280:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11280:32:0;;;;;11270:43;;;;;;-1:-1:-1;;;;;;11183:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11183:251:0;;;;;;;11173:262;;;;;;;;;10967:478;-1:-1:-1;;;;;10967:478:0:o;13675:509::-;13776:21;13833:1;13818:4;:11;:16;;13810:57;;;;;-1:-1:-1;;;13810:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13899:4;:11;13888:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13888:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13888:23:0;;13878:33;;13935:8;13922:7;13930:1;13922:10;;;;;;;;;;;;;:21;;;;;13959:6;13954:223;13985:1;13971:4;:11;:15;13967:1;:19;13954:223;;;14009:14;14025:15;14044:42;14056:7;14065:4;14070:1;14065:7;;;;;;;;;;;;;;14074:4;14079:1;14083;14079:5;14074:11;;;;;;;;;;;;;;14044;:42::i;:::-;14008:78;;;;14118:47;14131:7;14139:1;14131:10;;;;;;;;;;;;;;14143:9;14154:10;14118:12;:47::i;:::-;14101:7;14109:1;14113;14109:5;14101:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13988:3:0;;13954:223;;;;13675:509;;;;;:::o;24101:727::-;24208:6;24203:618;24234:1;24220:4;:11;:15;24216:1;:19;24203:618;;;24258:13;24273:14;24292:4;24297:1;24292:7;;;;;;;;;;;;;;24301:4;24306:1;24310;24306:5;24301:11;;;;;;;;;;;;;;24257:56;;;;24329:14;24348:40;24374:5;24381:6;24348:25;:40::i;:::-;24328:60;;;24403:14;24420:7;24428:1;24432;24428:5;24420:14;;;;;;;;;;;;;;24403:31;;24450:15;24467;24495:6;-1:-1:-1;;;;;24486:15:0;:5;-1:-1:-1;;;;;24486:15:0;;:61;;24528:9;24544:1;24486:61;;;24510:1;24514:9;24486:61;24449:98;;;;24562:10;24593:1;24579:4;:11;:15;24575:1;:19;:80;;24652:3;24575:80;;;24597:52;24620:7;24629:6;24637:4;24642:1;24646;24642:5;24637:11;;;;;;;;;;;;;;24597:22;:52::i;:::-;24562:93;;24683:46;24706:7;24715:5;24722:6;24683:22;:46::i;:::-;-1:-1:-1;;;;;24670:65:0;;24754:10;24766;24778:2;24792:1;24782:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24782:12:0;87:42:-1;143:17;;-1:-1;24782:12:0;;24670:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24670:139:0;-1:-1:-1;;;;;24670:139: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;24670:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24670:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24237:3:0;;;;;-1:-1:-1;24203:618:0;;-1:-1:-1;;;;;;;;24203:618:0;;;24101:727;;;:::o;14265:530::-;14366:21;14423:1;14408:4;:11;:16;;14400:57;;;;;-1:-1:-1;;;14400:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14489:4;:11;14478:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14478:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14478:23:0;;14468:33;;14542:9;14512:7;14537:1;14520:7;:14;:18;14512:27;;;;;;;;;;;;;;;;;:39;14576:11;;-1:-1:-1;;14576:15:0;14562:226;14593:5;;14562:226;;14621:14;14637:15;14656:42;14668:7;14677:4;14686:1;14682;:5;14677:11;;;;;;;;;;;;;;14690:4;14695:1;14690:7;;;;;;;14656:42;14620:78;;;;14730:46;14742:7;14750:1;14742:10;;;;;;;;;;;;;;14754:9;14765:10;14730:11;:46::i;:::-;14713:7;14725:1;14721;:5;14713:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14600:3:0;14562:226;;1452:195;1560:12;;;1522;1560;;;;;;;;;-1:-1:-1;;;;;1539:7:0;;;1553:5;;1539: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;;;1539: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;;1521:52:0;;;1592:7;1584:55;;;;-1:-1:-1;;;1584:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1452:195;;;:::o;1042:402::-;1267:51;;;-1:-1:-1;;;;;1267:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1267:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1256:63:0;;;;1221:12;;1235:17;;1256:10;;;;1267:51;1256:63;;;25:18:-1;1256: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;;;1256: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;;1220:99:0;;;;1338:7;:57;;;;-1:-1:-1;1350:11:0;;:16;;:44;;;1381:4;1370:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1370:24:0;1350:44;1330:106;;;;-1:-1:-1;;;1330:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:402;;;;;;:::o;29386:1202::-;29499:6;29494:1087;29525:1;29511:4;:11;:15;29507:1;:19;29494:1087;;;29549:13;29564:14;29583:4;29588:1;29583:7;;;;;;;;;;;;;;29592:4;29597:1;29601;29597:5;29592:11;;;;;;;;;;;;;;29548:56;;;;29620:14;29639:40;29665:5;29672:6;29639:25;:40::i;:::-;29619:60;;;29694:17;29727:46;29750:7;29759:5;29766:6;29727:22;:46::i;:::-;29694:80;;29789:16;29820:17;29908:13;29923;29941:4;-1:-1:-1;;;;;29941:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29941:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29941:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29941:18:0;;;;;;;-1:-1:-1;;;;;29907:52:0;;;;-1:-1:-1;29907:52:0;;-1:-1:-1;29975:17:0;;-1:-1:-1;;;;;30016:15:0;;;;;;;:61;;30058:8;30068;30016:61;;;30035:8;30045;30016:61;29974:103;;;;30106:56;30149:12;30113:5;-1:-1:-1;;;;;30106:23:0;;30138:4;30106:38;;;;;;;;;;;;;-1:-1:-1;;;;;30106:38:0;-1:-1:-1;;;;;30106:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30106:56:0;30092:70;;30192:69;30220:11;30233:12;30247:13;30192:27;:69::i;:::-;30177:84;;29494:1087;;;;30292:15;30309;30337:6;-1:-1:-1;;;;;30328:15:0;:5;-1:-1:-1;;;;;30328:15:0;;:67;;30373:12;30392:1;30328:67;;;30352:1;30356:12;30328:67;30291:104;;;;30410:10;30441:1;30427:4;:11;:15;30423:1;:19;:80;;30500:3;30423:80;;;30445:52;30468:7;30477:6;30485:4;30490:1;30494;30490:5;30485:11;;;;;;;30445:52;30556:12;;;30566:1;30556:12;;;;;;;;;;-1:-1:-1;;;30518:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30518:51:0;;;;;;;;;;;;;;;;;;;;;;30410:93;;-1:-1:-1;30518:9:0;;;;;;30528:10;;30540;;30410:93;;30556:12;;30518:51;;;;;;;;30556:12;;30518:51;;;;30556: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;30518:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30518:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29528:3:0;;;;;-1:-1:-1;29494:1087:0;;-1:-1:-1;;;;;;;;;;29494:1087:0;7579:129;7663:5;;;7658:16;;;;7650:50;;;;;-1:-1:-1;;;7650:50:0;;;;;;;;;;;;-1:-1:-1;;;7650:50:0;;;;;;;;;;;;;;673:361;868:45;;;-1:-1:-1;;;;;868:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;868:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;857:57:0;;;;822:12;;836:17;;857:10;;;;868:45;857:57;;;25:18:-1;857: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;;;857: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;;821:93:0;;;;933:7;:57;;;;-1:-1:-1;945:11:0;;:16;;:44;;;976:4;965:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;965:24:0;945:44;925:101;;;;;-1:-1:-1;;;925:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;673:361;;;;;:::o;13123:470::-;13216:13;13262:1;13250:9;:13;13242:68;;;;-1:-1:-1;;;13242:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13341:1;13329:9;:13;:31;;;;;13359:1;13346:10;:14;13329:31;13321:82;;;;-1:-1:-1;;;13321:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13414:14;13431:35;13460:5;13431:24;:9;13445;13431:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13414:52;-1:-1:-1;13477:16:0;13496:35;13526:4;13496:25;:10;13511:9;13496:25;:14;:25;:::i;:35::-;13477:54;;13553:32;13583:1;13566:11;13554:9;:23;;;;;;;13553:32;:29;:32;:::i;:::-;13542:43;13123:470;-1:-1:-1;;;;;;13123:470:0:o;12048:317::-;12130:12;12173:1;12163:7;:11;12155:59;;;;-1:-1:-1;;;12155:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12244:1;12233:8;:12;:28;;;;;12260:1;12249:8;:12;12233:28;12225:79;;;;-1:-1:-1;;;12225:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12349:8;12325:21;:7;12337:8;12325:21;:11;:21;:::i;:::-;:32;;;;;;;12048:317;-1:-1:-1;;;;12048:317:0:o;10530:345::-;10605:14;10621;10666:6;-1:-1:-1;;;;;10656:16:0;:6;-1:-1:-1;;;;;10656:16:0;;;10648:64;;;;-1:-1:-1;;;10648:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10751:6;-1:-1:-1;;;;;10742:15:0;:6;-1:-1:-1;;;;;10742:15:0;;:53;;10780:6;10788;10742:53;;;10761:6;10769;10742:53;10723:72;;-1:-1:-1;10723:72:0;-1:-1:-1;;;;;;10814:20:0;;10806:61;;;;;-1:-1:-1;;;10806:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10530:345;;;;;:::o;16474:1376::-;16787:48;;;-1:-1:-1;;;16787:48:0;;-1:-1:-1;;;;;16787:48:0;;;;;;;;;;;;;;;;16692:12;;;;;;16803:7;16787:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16787:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16787:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16787:48:0;-1:-1:-1;;;;;16787:62:0;;16783:146;;;16866:51;;;-1:-1:-1;;;16866:51:0;;-1:-1:-1;;;;;16866:51:0;;;;;;;;;;;;;;;;16882:7;16866:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;16866:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16866:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16866:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16783:146:0;16940:13;16955;16972:51;16999:7;17008:6;17016;16972:26;:51::i;:::-;16939:84;;;;17038:8;17050:1;17038:13;:30;;;;-1:-1:-1;17055:13:0;;17038:30;17034:809;;;17107:14;;-1:-1:-1;17123:14:0;;-1:-1:-1;17034:809:0;;;17171:19;17193:56;17214:14;17230:8;17240;17193:20;:56::i;:::-;17171:78;;17286:14;17268;:32;17264:568;;17347:10;17329:14;:28;;17321:77;;;;-1:-1:-1;;;17321:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17439:14;;-1:-1:-1;17455:14:0;-1:-1:-1;17455:14:0;17264:568;;;17511:19;17533:56;17554:14;17570:8;17580;17533:20;:56::i;:::-;17511:78;;17633:14;17615;:32;;17608:40;;;;17693:10;17675:14;:28;;17667:77;;;;-1:-1:-1;;;17667:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17785:14;-1:-1:-1;17801:14:0;;-1:-1:-1;17264:568:0;17034:809;;16474:1376;;;;;;;;;;;:::o;7716:142::-;7768:6;7795;;;:30;;-1:-1:-1;;7810:5:0;;;7824:1;7819;7810:5;7819:1;7805:15;;;;;:20;7795:30;7787:63;;;;;-1:-1:-1;;;7787:63:0;;;;;;;;;;;;-1:-1:-1;;;7787:63:0;;;;;;;;;;;;;;7443:128;7527:5;;;7522:16;;;;7514:49;;;;;-1:-1:-1;;;7514:49:0;;;;;;;;;;;;-1:-1:-1;;;7514:49:0;;;;;;;;;;;;;;11503:432;11596:13;11611;11638:14;11657:26;11668:6;11676;11657:10;:26::i;:::-;11637:46;;;11694:32;11702:7;11711:6;11719;11694:7;:32::i;:::-;;11738:13;11753;11784:32;11792:7;11801:6;11809;11784:7;:32::i;:::-;-1:-1:-1;;;;;11771:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11771:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11771:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11771:60:0;;;;;;;-1:-1:-1;;;;;11737:94:0;;;;-1:-1:-1;11737:94:0;;-1:-1:-1;;;;;;11865:16:0;;;;;;;:62;;11908:8;11918;11865:62;;;11885:8;11895;11865:62;11842:85;;;;-1:-1:-1;11503:432:0;-1:-1:-1;;;;;;;11503:432:0:o

Swarm Source

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