Contract 0xb05A6B43020F67784275b2ce3be6c34c7D564c04

Contract Overview

Balance:
0 Ether
Txn Hash
Method
Block
From
To
Value
0xb2031a98ff5bb9590bd9460fa236612d56d1d1c60049d1bff60aa1576f5e7480Remove Liquidity110489512022-07-19 1:15:4873 days 20 hrs ago0x850e88b454ef6332cc51d21f3d203066238fd14b IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00017918 1.5
0xf873dd2f6564bfac89769396c2dffbc24315ca6b664d443469731672cc994e72Remove Liquidity110489362022-07-19 1:12:0373 days 20 hrs ago0x850e88b454ef6332cc51d21f3d203066238fd14b IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00017555 1.5
0x9edaccb3243eb5a0b94210d096901a6e8e92a3c32a68d7e3b374e255956a09e7Add Liquidity110487042022-07-19 0:14:0073 days 21 hrs ago0x850e88b454ef6332cc51d21f3d203066238fd14b IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00019044 1.5
0x65e0b6396c581205bb72a61d8965be77786d42be3655e743f7abe8a0508b319fSwap Exact Token...110407962022-07-17 15:13:5875 days 6 hrs ago0x7ae740d99f35d32b20538430f78dbbd3b88bf928 IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00018009 1.5
0x361f1422b1155b963880f72cfc2c4ac23e59a7c797f766b151850d7a0bb81fe0Swap Exact ETH F...110348722022-07-16 14:30:5676 days 7 hrs ago0x7910a6520e3cfe01b9bbe6c696e34c6f10dafe6f IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.01 Ether0.00017981 1.5
0xc4f536aeddda7d73b9c8dc5801d30706bae46bac123a925612b7983b0837d686Swap ETH For Exa...110331842022-07-16 7:28:1976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.26241274 Ether0.00018076 1.6005
0x62d906101a6b76a14631a2c9af67974994e79b435906f51d32b168dba4ff86faSwap Exact Token...110331822022-07-16 7:27:4976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00018289 1.5
0xe51759424aa06616e034e5983687eecb4df65a9893af935b5fc8ad0cc393eb07Swap ETH For Exa...110331812022-07-16 7:27:3476 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.26239558 Ether0.00016941 1.5
0xfd2a43637316a53caefbc59879801c6250fff883e3c7070ba52955b4be8e99f5Swap Exact Token...110331792022-07-16 7:27:0476 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00018289 1.5
0xbf747625ce5cf1ba0fadb433763c4cf8b81fd9637c33080f7f3c63f30c0925e8Swap ETH For Exa...110331782022-07-16 7:26:4976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.26820918 Ether0.0002391 2.11702501
0xcfebb77d32e5dee69e43028adcbff280ac62d57572309996b7fd61761bc8a9d9Swap Exact Token...110331762022-07-16 7:26:1976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00018289 1.5
0xc35a4c39289d933075530b3fe2b066e563324d5fc6b2a141f8713bcdcf64def6Swap ETH For Exa...110331742022-07-16 7:25:4976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.26236125 Ether0.00016941 1.5
0xf9944c42e69b37bdf820fa56b9544523d525c5ee3fe6937241e6579ceec828c2Swap ETH For Exa...110331722022-07-16 7:25:1976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.25670243 Ether0.00016941 1.5
0x4b0409b1c0e90c0026de579716b76f14d30a9c81d7d7106522d68841dbbcd7eeSwap ETH For Exa...110331702022-07-16 7:24:4976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.25122464 Ether0.00016941 1.5
0x72fdc80c6d03f2ae80eae62abe0115cc3416cae613058c204c7544b35957282fSwap Exact Token...110331662022-07-16 7:23:4976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00018289 1.5
0xa84b78b00b57b26f91fea5afcc91a63f75f0873b63286f09d6439107124a527cSwap Exact Token...110331642022-07-16 7:23:1976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00018289 1.5
0xf4d001a84f6aa1bfca91a5fe5b405fdeba9afd4fdd3f10acf0681f584412043eRemove Liquidity...110331582022-07-16 7:21:4976 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00025126 1.5
0xa33deef9bd8d30cc7c678ced6c132cd387af83598b0f13e9eee3faf31892166eSwap Exact Token...110331532022-07-16 7:20:3476 days 14 hrs ago0xeaad7f273605c3a7d27a20c41cc4829b0c14cd9b IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00018289 1.5
0x16854b6ceb057e95d6c40ba39df1e4dfa74960805e837494625276ec48fe4684Swap Exact ETH F...110331512022-07-16 7:20:0376 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.5 Ether0.00015831 1.5
0xfaa69b33b99ec12cc3722a22620ee39c6fda06e351c2bc64a14f301d70a96e2cSwap Exact ETH F...110331482022-07-16 7:19:1876 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.5 Ether0.00015831 1.5
0x44a7b5316444e72013dd278e65b302fdeb9fb8e266c80d749e0957949867a9faSwap Tokens For ...110331462022-07-16 7:18:4876 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00018291 1.5
0xb4f327fdcc63726539cdc6667573c950ae7a0595671affa9106b57d1642a16bbSwap Exact Token...110331442022-07-16 7:18:1876 days 14 hrs ago0xeaad7f273605c3a7d27a20c41cc4829b0c14cd9b IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.0000479 1.5
0xb39b9cd9a28b82958954a6f5c76dd1f4afd03c9c36df59e62955d45c40a03af7Swap Tokens For ...110331432022-07-16 7:18:0376 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether0.00018291 1.5
0x75bb3337e4c53a22179b10ce8129f774531d5d00a8c420e2cedd4f366ea6b7b9Swap Exact ETH F...110331412022-07-16 7:17:3376 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.5 Ether0.00015831 1.5
0xfe76e44c8087aa1aa3d0b8f558c5f526e7a9b780dfffb34ca6ca445ec1aba004Swap Exact ETH F...110331392022-07-16 7:17:0376 days 14 hrs ago0x21e501f102fd0d4b77b5c9aa63c0fd4c224dceab IN  0xb05a6b43020f67784275b2ce3be6c34c7d564c040.5 Ether0.00015831 1.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb2031a98ff5bb9590bd9460fa236612d56d1d1c60049d1bff60aa1576f5e7480110489512022-07-19 1:15:4873 days 20 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0x2da4fde88e751727561fa1de41d56403e2de20890 Ether
0xb2031a98ff5bb9590bd9460fa236612d56d1d1c60049d1bff60aa1576f5e7480110489512022-07-19 1:15:4873 days 20 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0x2da4fde88e751727561fa1de41d56403e2de20890 Ether
0xf873dd2f6564bfac89769396c2dffbc24315ca6b664d443469731672cc994e72110489362022-07-19 1:12:0373 days 20 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xb10dda4122271250c71b3a5d77be2fa10066014d0 Ether
0xf873dd2f6564bfac89769396c2dffbc24315ca6b664d443469731672cc994e72110489362022-07-19 1:12:0373 days 20 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xb10dda4122271250c71b3a5d77be2fa10066014d0 Ether
0x9edaccb3243eb5a0b94210d096901a6e8e92a3c32a68d7e3b374e255956a09e7110487042022-07-19 0:14:0073 days 21 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xb10dda4122271250c71b3a5d77be2fa10066014d0 Ether
0x9edaccb3243eb5a0b94210d096901a6e8e92a3c32a68d7e3b374e255956a09e7110487042022-07-19 0:14:0073 days 21 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xc7ad46e0b8a400bb3c915120d284aafba8fc47350 Ether
0x9edaccb3243eb5a0b94210d096901a6e8e92a3c32a68d7e3b374e255956a09e7110487042022-07-19 0:14:0073 days 21 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0x4c3edf49c3943faa14def11fea0e6f60578776ec0 Ether
0x9edaccb3243eb5a0b94210d096901a6e8e92a3c32a68d7e3b374e255956a09e7110487042022-07-19 0:14:0073 days 21 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xb10dda4122271250c71b3a5d77be2fa10066014d0 Ether
0x9edaccb3243eb5a0b94210d096901a6e8e92a3c32a68d7e3b374e255956a09e7110487042022-07-19 0:14:0073 days 21 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0x154719241ed12011c0a722ca5226ee2099a82d380 Ether
0x65e0b6396c581205bb72a61d8965be77786d42be3655e743f7abe8a0508b319f110407962022-07-17 15:13:5875 days 6 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0x2da4fde88e751727561fa1de41d56403e2de20890 Ether
0x65e0b6396c581205bb72a61d8965be77786d42be3655e743f7abe8a0508b319f110407962022-07-17 15:13:5875 days 6 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0x03948cd09d68a8a6e88f072f900e212121d94b890 Ether
0x65e0b6396c581205bb72a61d8965be77786d42be3655e743f7abe8a0508b319f110407962022-07-17 15:13:5875 days 6 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0x2da4fde88e751727561fa1de41d56403e2de20890 Ether
0x361f1422b1155b963880f72cfc2c4ac23e59a7c797f766b151850d7a0bb81fe0110348722022-07-16 14:30:5676 days 7 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xb9cac5436fdaa3addf2450e50555f23bf17d30bc0 Ether
0x361f1422b1155b963880f72cfc2c4ac23e59a7c797f766b151850d7a0bb81fe0110348722022-07-16 14:30:5676 days 7 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xc778417e063141139fce010982780140aa0cd5ab0 Ether
0x361f1422b1155b963880f72cfc2c4ac23e59a7c797f766b151850d7a0bb81fe0110348722022-07-16 14:30:5676 days 7 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xc778417e063141139fce010982780140aa0cd5ab0.01 Ether
0x361f1422b1155b963880f72cfc2c4ac23e59a7c797f766b151850d7a0bb81fe0110348722022-07-16 14:30:5676 days 7 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xb9cac5436fdaa3addf2450e50555f23bf17d30bc0 Ether
0x4065423b3ed279930fafaea19f43cf830d76c580bab914c7621328c0c55d8fad110342562022-07-16 11:56:4376 days 10 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xa71ea99abb7a34956da9fb35f96ca9d8b21fd5f50 Ether
0x4065423b3ed279930fafaea19f43cf830d76c580bab914c7621328c0c55d8fad110342562022-07-16 11:56:4376 days 10 hrs ago 0xfd8c1d4cbf1f92a1aabcf94e0c8c9f9da0902c83 0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether
0x4065423b3ed279930fafaea19f43cf830d76c580bab914c7621328c0c55d8fad110342562022-07-16 11:56:4376 days 10 hrs ago 0xfd8c1d4cbf1f92a1aabcf94e0c8c9f9da0902c83 0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether
0x186259b0e2bdec2a091db236ae567dcada22a240247ef592533d9739f4e13558110341532022-07-16 11:30:5676 days 10 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xa71ea99abb7a34956da9fb35f96ca9d8b21fd5f50 Ether
0x186259b0e2bdec2a091db236ae567dcada22a240247ef592533d9739f4e13558110341532022-07-16 11:30:5676 days 10 hrs ago 0x08eb513ee0841a6eab0dfbdbd2d170301aa7d6aa 0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether
0x186259b0e2bdec2a091db236ae567dcada22a240247ef592533d9739f4e13558110341532022-07-16 11:30:5676 days 10 hrs ago 0x08eb513ee0841a6eab0dfbdbd2d170301aa7d6aa 0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether
0x2f47e4d8500a51797d33dec088c3a9eb575882805bb3e423586cfce8f29aea02110340102022-07-16 10:55:0676 days 11 hrs ago 0xb05a6b43020f67784275b2ce3be6c34c7d564c04 0xa71ea99abb7a34956da9fb35f96ca9d8b21fd5f50 Ether
0x2f47e4d8500a51797d33dec088c3a9eb575882805bb3e423586cfce8f29aea02110340102022-07-16 10:55:0676 days 11 hrs ago 0x08eb513ee0841a6eab0dfbdbd2d170301aa7d6aa 0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether
0x2f47e4d8500a51797d33dec088c3a9eb575882805bb3e423586cfce8f29aea02110340102022-07-16 10:55:0676 days 11 hrs ago 0x08eb513ee0841a6eab0dfbdbd2d170301aa7d6aa 0xb05a6b43020f67784275b2ce3be6c34c7d564c040 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LitedexRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-24
*/

pragma solidity =0.6.6;

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

interface ILitedexPair {
    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 minLiquidity() 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;
}

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

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

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

interface ILitedexRouter02 is ILitedexRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

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

contract LitedexRouter is ILitedexRouter02 {
    using SafeMath for uint;

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

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

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (ILitedexFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            ILitedexFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = LitedexLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = LitedexLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'Litedex: Insufficient B Amount');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = LitedexLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'Litedex: 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 = LitedexLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = ILitedexPair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = LitedexLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = ILitedexPair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = LitedexLibrary.pairFor(factory, tokenA, tokenB);
        ILitedexPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = ILitedexPair(pair).burn(to);
        (address token0,) = LitedexLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'Litedex: Insufficient A Amount');
        require(amountB >= amountBMin, 'LitedexRouter: Insufficient B Amount');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = LitedexLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        ILitedexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = LitedexLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ILitedexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = LitedexLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ILitedexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = LitedexLibrary.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 ? LitedexLibrary.pairFor(factory, output, path[i + 2]) : _to;
            ILitedexPair(LitedexLibrary.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 = LitedexLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'Litedex: Insufficient Output Amount');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, LitedexLibrary.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 = LitedexLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'Litedex: Excessive Input Amount');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, LitedexLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'Litedex: Invalid Path');
        amounts = LitedexLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'Litedex: Insufficient Output Amount');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(LitedexLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'Litedex: Invalid Path');
        amounts = LitedexLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'Litedex: Excessive Input Amount');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, LitedexLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'Litedex: Invalid Path');
        amounts = LitedexLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'Litedex: Insufficient Output Amount');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, LitedexLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'Litedex: Invalid Path');
        amounts = LitedexLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'Litedex: Excessive Input Amount');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(LitedexLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = LitedexLibrary.sortTokens(input, output);
            ILitedexPair pair = ILitedexPair(LitedexLibrary.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 = LitedexLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? LitedexLibrary.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, LitedexLibrary.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,
            'Litedex: Insufficient Output Amount'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'Litedex: Invalid Path');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(LitedexLibrary.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,
            'Litedex: Insufficient Output Amount'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'Litedex: Invalid Path');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, LitedexLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'Litedex: Insufficient Output Amount');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

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

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

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

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

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

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

library LitedexLibrary {
    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, 'Litedex: Identical Address');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'Litedex: 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'a7063a6f6737c8f82ee9d7b2e4fae08e20e7c89ea589268f706f8a456e9fbb1d' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = ILitedexPair(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, 'Litedex: Insufficient Amount');
        require(reserveA > 0 && reserveB > 0, 'Litedex: 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, 'Litedex: Insufficient Input Amount');
        require(reserveIn > 0 && reserveOut > 0, 'Litedex: Insufficient Liquidity');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'Litedex: Insufficient Output Amount');
        require(reserveIn > 0 && reserveOut > 0, 'Litedex: Insufficient Liquidity');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'Litedex: 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, 'Litedex: 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);
        }
    }
}

// helper methods for interacting with HRC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b5060405162004756380380620047568339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145d1620001856000398061015f5280610ce95280610d245280610e20528061103e52806113d2528061154e528061191f5280611a195280611acf5280611ba25280611ce85280611d705280611fd0528061205052806120ff52806121d0528061226552806122d952806127f25280612a6f5280612ac55280612af95280612b6d5280612d125280612e6b5280612ef3525080610eae5280610f855280611104528061113d528061127d5280611460528061152c52806116a15280611c355280611da25280611f0a528061230b5280612569528061277752806127a052806127d052806129425280612aa35280612da55280612f2552806137d052806138135280613ae45280613c6352806140e35280614191528061421152506145d16000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db6565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dcb565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110fd945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611133565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b03813516906020013561122d565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561137d565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611524565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611632565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b0381351690602001356118cc565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b55565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611ead565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611eba565b34801561088157600080fd5b5061088a611fce565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611ff2565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fff565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b038135169060200135612185565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612516565b348015610a1c57600080fd5b5061088a612775565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612799945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356127c6565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356128da565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a1b565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612cc5565b6000808242811015610ce3576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b610d12897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612516565b9093509150610d22898685613062565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8857600080fd5b505af1158015610d9c573d6000803e3d6000fd5b50505050610daa85836131cc565b50965096945050505050565b6000610dc38484846132c4565b949350505050565b60608142811015610e16576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e5057fe5b905060200201356001600160a01b03166001600160a01b031614610ea9576040805162461bcd60e51b81526020600482015260156024820152600080516020614513833981519152604482015290519081900360640190fd5b610f077f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133ca92505050565b91508682600184510381518110610f1a57fe5b60200260200101511015610f5f5760405162461bcd60e51b81526004018080602001828103825260238152602001806144cc6023913960400191505060405180910390fd5b610ffd86866000818110610f6f57fe5b905060200201356001600160a01b031633610fe37f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fb157fe5b905060200201356001600160a01b03168b8b6001818110610fce57fe5b905060200201356001600160a01b0316613504565b85600081518110610ff057fe5b60200260200101516135c4565b61103c82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613721915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107b57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110b957600080fd5b505af11580156110cd573d6000803e3d6000fd5b505050506110f284836001855103815181106110e557fe5b60200260200101516131cc565b509695505050505050565b606061112a7f00000000000000000000000000000000000000000000000000000000000000008484613967565b90505b92915050565b60008060006111637f00000000000000000000000000000000000000000000000000000000000000008f8f613504565b9050600087611172578c611176565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111ec57600080fd5b505af1158015611200573d6000803e3d6000fd5b505050506112138f8f8f8f8f8f8f612516565b809450819550505050509b509b9950505050505050505050565b60608142811015611278576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b6112d67f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133ca92505050565b915086826001845103815181106112e957fe5b6020026020010151101561132e5760405162461bcd60e51b81526004018080602001828103825260238152602001806144cc6023913960400191505060405180910390fd5b61133e86866000818110610f6f57fe5b6110f282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613721915050565b606081428110156113c8576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061140257fe5b905060200201356001600160a01b03166001600160a01b03161461145b576040805162461bcd60e51b81526020600482015260156024820152600080516020614513833981519152604482015290519081900360640190fd5b6114b97f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061396792505050565b915086826000815181106114c957fe5b60200260200101511115610f5f576040805162461bcd60e51b815260206004820152601f60248201527f4c6974656465783a2045786365737369766520496e70757420416d6f756e7400604482015290519081900360640190fd5b6000806115727f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613504565b9050600086611581578b611585565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115fb57600080fd5b505af115801561160f573d6000803e3d6000fd5b505050506116218d8d8d8d8d8d611fff565b9d9c50505050505050505050505050565b804281101561167b576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b6116f08585600081811061168b57fe5b905060200201356001600160a01b0316336116ea7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116cd57fe5b905060200201356001600160a01b03168a8a6001818110610fce57fe5b8a6135c4565b60008585600019810181811061170257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561176757600080fd5b505afa15801561177b573d6000803e3d6000fd5b505050506040513d602081101561179157600080fd5b505160408051602088810282810182019093528882529293506117d3929091899189918291850190849080828437600092019190915250889250613a8d915050565b8661188582888860001981018181106117e857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561184d57600080fd5b505afa158015611861573d6000803e3d6000fd5b505050506040513d602081101561187757600080fd5b50519063ffffffff613d9816565b10156118c25760405162461bcd60e51b81526004018080602001828103825260238152602001806144cc6023913960400191505060405180910390fd5b5050505050505050565b8042811015611915576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061194f57fe5b905060200201356001600160a01b03166001600160a01b0316146119a8576040805162461bcd60e51b81526020600482015260156024820152600080516020614513833981519152604482015290519081900360640190fd5b6119b88585600081811061168b57fe5b6119f6858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a8d915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a6057600080fd5b505afa158015611a74573d6000803e3d6000fd5b505050506040513d6020811015611a8a57600080fd5b5051905086811015611acd5760405162461bcd60e51b81526004018080602001828103825260238152602001806144cc6023913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b3357600080fd5b505af1158015611b47573d6000803e3d6000fd5b505050506118c284826131cc565b60608142811015611ba0576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611bd757fe5b905060200201356001600160a01b03166001600160a01b031614611c30576040805162461bcd60e51b81526020600482015260156024820152600080516020614513833981519152604482015290519081900360640190fd5b611c8e7f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133ca92505050565b91508682600184510381518110611ca157fe5b60200260200101511015611ce65760405162461bcd60e51b81526004018080602001828103825260238152602001806144cc6023913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d2257fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d5557600080fd5b505af1158015611d69573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611dce7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116cd57fe5b84600081518110611ddb57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e3257600080fd5b505af1158015611e46573d6000803e3d6000fd5b505050506040513d6020811015611e5c57600080fd5b5051611e6457fe5b611ea382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613721915050565b5095945050505050565b6000610dc3848484613de8565b60608142811015611f05576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b611f637f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061396792505050565b91508682600081518110611f7357fe5b6020026020010151111561132e576040805162461bcd60e51b815260206004820152601f60248201527f4c6974656465783a2045786365737369766520496e70757420416d6f756e7400604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dc3848484613eee565b6000814281101561204a576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b612079887f00000000000000000000000000000000000000000000000000000000000000008989893089612516565b604080516370a0823160e01b815230600482015290519194506120fd92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156120cc57600080fd5b505afa1580156120e0573d6000803e3d6000fd5b505050506040513d60208110156120f657600080fd5b5051613062565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561216357600080fd5b505af1158015612177573d6000803e3d6000fd5b505050506110f284836131cc565b80428110156121ce576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061220557fe5b905060200201356001600160a01b03166001600160a01b03161461225e576040805162461bcd60e51b81526020600482015260156024820152600080516020614513833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122be57600080fd5b505af11580156122d2573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123377f0000000000000000000000000000000000000000000000000000000000000000898960008181106116cd57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561238757600080fd5b505af115801561239b573d6000803e3d6000fd5b505050506040513d60208110156123b157600080fd5b50516123b957fe5b6000868660001981018181106123cb57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561243057600080fd5b505afa158015612444573d6000803e3d6000fd5b505050506040513d602081101561245a57600080fd5b5051604080516020898102828101820190935289825292935061249c9290918a918a918291850190849080828437600092019190915250899250613a8d915050565b8761188582898960001981018181106124b157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561184d57600080fd5b6000808242811015612562576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b600061258f7f00000000000000000000000000000000000000000000000000000000000000008c8c613504565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156125ea57600080fd5b505af11580156125fe573d6000803e3d6000fd5b505050506040513d602081101561261457600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561266157600080fd5b505af1158015612675573d6000803e3d6000fd5b505050506040513d604081101561268b57600080fd5b508051602090910151909250905060006126a58e8e613fc6565b509050806001600160a01b03168e6001600160a01b0316146126c85781836126cb565b82825b90975095508a871015612725576040805162461bcd60e51b815260206004820152601e60248201527f4c6974656465783a20496e73756666696369656e74204120416d6f756e740000604482015290519081900360640190fd5b898610156127645760405162461bcd60e51b81526004018080602001828103825260248152602001806144ef6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b606061112a7f000000000000000000000000000000000000000000000000000000000000000084846133ca565b60008060006128167f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613504565b9050600087612825578c612829565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561289f57600080fd5b505af11580156128b3573d6000803e3d6000fd5b505050506128c58e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b60008060008342811015612928576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b6129368c8c8c8c8c8c6140b2565b909450925060006129687f00000000000000000000000000000000000000000000000000000000000000008e8e613504565b90506129768d3383886135c4565b6129828c3383876135c4565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156129da57600080fd5b505af11580156129ee573d6000803e3d6000fd5b505050506040513d6020811015612a0457600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a69576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b612a978a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6140b2565b90945092506000612ae97f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613504565b9050612af78b3383886135c4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b5257600080fd5b505af1158015612b66573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612beb57600080fd5b505af1158015612bff573d6000803e3d6000fd5b505050506040513d6020811015612c1557600080fd5b5051612c1d57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c7557600080fd5b505af1158015612c89573d6000803e3d6000fd5b505050506040513d6020811015612c9f57600080fd5b5051925034841015612cb757612cb7338534036131cc565b505096509650969350505050565b60608142811015612d10576040805162461bcd60e51b815260206004820152601060248201526f131a5d1959195e0e88115e1c1a5c995960821b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d4757fe5b905060200201356001600160a01b03166001600160a01b031614612da0576040805162461bcd60e51b81526020600482015260156024820152600080516020614513833981519152604482015290519081900360640190fd5b612dfe7f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061396792505050565b91503482600081518110612e0e57fe5b60200260200101511115612e69576040805162461bcd60e51b815260206004820152601f60248201527f4c6974656465783a2045786365737369766520496e70757420416d6f756e7400604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612ea557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ed857600080fd5b505af1158015612eec573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f517f0000000000000000000000000000000000000000000000000000000000000000898960008181106116cd57fe5b84600081518110612f5e57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612fb557600080fd5b505af1158015612fc9573d6000803e3d6000fd5b505050506040513d6020811015612fdf57600080fd5b5051612fe757fe5b61302682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613721915050565b8160008151811061303357fe5b6020026020010151341115611ea357611ea3338360008151811061305357fe5b602002602001015134036131cc565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130df5780518252601f1990920191602091820191016130c0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613141576040519150601f19603f3d011682016040523d82523d6000602084013e613146565b606091505b5091509150818015613174575080511580613174575080806020019051602081101561317157600080fd5b50515b6131c5576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106132185780518252601f1990920191602091820191016131f9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461327a576040519150601f19603f3d011682016040523d82523d6000602084013e61327f565b606091505b50509050806132bf5760405162461bcd60e51b81526004018080602001828103825260238152602001806145336023913960400191505060405180910390fd5b505050565b60008084116133045760405162461bcd60e51b81526004018080602001828103825260228152602001806145566022913960400191505060405180910390fd5b6000831180156133145750600082115b613365576040805162461bcd60e51b815260206004820152601f60248201527f4c6974656465783a20496e73756666696369656e74204c697175696469747900604482015290519081900360640190fd5b6000613379856103e563ffffffff61435216565b9050600061338d828563ffffffff61435216565b905060006133b3836133a7886103e863ffffffff61435216565b9063ffffffff6143b516565b90508082816133be57fe5b04979650505050505050565b6060600282511015613411576040805162461bcd60e51b81526020600482015260156024820152600080516020614513833981519152604482015290519081900360640190fd5b815167ffffffffffffffff8111801561342957600080fd5b50604051908082528060200260200182016040528015613453578160200160208202803683370190505b509050828160008151811061346457fe5b60200260200101818152505060005b60018351038110156134fc576000806134b68786858151811061349257fe5b60200260200101518786600101815181106134a957fe5b6020026020010151614404565b915091506134d88484815181106134c957fe5b602002602001015183836132c4565b8484600101815181106134e757fe5b60209081029190910101525050600101613473565b509392505050565b60008060006135138585613fc6565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fa7063a6f6737c8f82ee9d7b2e4fae08e20e7c89ea589268f706f8a456e9fbb1d609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106136495780518252601f19909201916020918201910161362a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136ab576040519150601f19603f3d011682016040523d82523d6000602084013e6136b0565b606091505b50915091508180156136de5750805115806136de57508080602001905160208110156136db57600080fd5b50515b6137195760405162461bcd60e51b81526004018080602001828103825260248152602001806145786024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139615760008084838151811061373f57fe5b602002602001015185846001018151811061375657fe5b602002602001015191509150600061376e8383613fc6565b509050600087856001018151811061378257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137b0578260006137b4565b6000835b91509150600060028a510388106137cb578861380c565b61380c7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106137ff57fe5b6020026020010151613504565b90506138397f00000000000000000000000000000000000000000000000000000000000000008888613504565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613876576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156138e75781810151838201526020016138cf565b50505050905090810190601f1680156139145780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561393657600080fd5b505af115801561394a573d6000803e3d6000fd5b505060019099019850613724975050505050505050565b50505050565b60606002825110156139ae576040805162461bcd60e51b81526020600482015260156024820152600080516020614513833981519152604482015290519081900360640190fd5b815167ffffffffffffffff811180156139c657600080fd5b506040519080825280602002602001820160405280156139f0578160200160208202803683370190505b5090508281600183510381518110613a0457fe5b60209081029190910101528151600019015b80156134fc57600080613a4687866001860381518110613a3257fe5b60200260200101518786815181106134a957fe5b91509150613a68848481518110613a5957fe5b60200260200101518383613de8565b846001850381518110613a7757fe5b6020908102919091010152505060001901613a16565b60005b60018351038110156132bf57600080848381518110613aab57fe5b6020026020010151858460010181518110613ac257fe5b6020026020010151915091506000613ada8383613fc6565b5090506000613b0a7f00000000000000000000000000000000000000000000000000000000000000008585613504565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b4b57600080fd5b505afa158015613b5f573d6000803e3d6000fd5b505050506040513d6060811015613b7557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613bab578284613bae565b83835b91509150613c0c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561184d57600080fd5b9550613c198683836132c4565b945050505050600080856001600160a01b0316886001600160a01b031614613c4357826000613c47565b6000835b91509150600060028c51038a10613c5e578a613c92565b613c927f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106137ff57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613d1c578181015183820152602001613d04565b50505050905090810190601f168015613d495780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613d6b57600080fd5b505af1158015613d7f573d6000803e3d6000fd5b50506001909b019a50613a909950505050505050505050565b8082038281111561112d576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613e285760405162461bcd60e51b81526004018080602001828103825260238152602001806144cc6023913960400191505060405180910390fd5b600083118015613e385750600082115b613e89576040805162461bcd60e51b815260206004820152601f60248201527f4c6974656465783a20496e73756666696369656e74204c697175696469747900604482015290519081900360640190fd5b6000613ead6103e8613ea1868863ffffffff61435216565b9063ffffffff61435216565b90506000613ec76103e5613ea1868963ffffffff613d9816565b9050613ee46001828481613ed757fe5b049063ffffffff6143b516565b9695505050505050565b6000808411613f44576040805162461bcd60e51b815260206004820152601c60248201527f4c6974656465783a20496e73756666696369656e7420416d6f756e7400000000604482015290519081900360640190fd5b600083118015613f545750600082115b613fa5576040805162461bcd60e51b815260206004820152601f60248201527f4c6974656465783a20496e73756666696369656e74204c697175696469747900604482015290519081900360640190fd5b82613fb6858463ffffffff61435216565b81613fbd57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614030576040805162461bcd60e51b815260206004820152601a60248201527f4c6974656465783a204964656e746963616c2041646472657373000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610614050578284614053565b83835b90925090506001600160a01b0382166140ab576040805162461bcd60e51b81526020600482015260156024820152744c6974656465783a205a65726f204164647265737360581b604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561412c57600080fd5b505afa158015614140573d6000803e3d6000fd5b505050506040513d602081101561415657600080fd5b50516001600160a01b0316141561420957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156141dc57600080fd5b505af11580156141f0573d6000803e3d6000fd5b505050506040513d602081101561420657600080fd5b50505b6000806142377f00000000000000000000000000000000000000000000000000000000000000008b8b614404565b91509150816000148015614249575080155b1561425957879350869250614345565b6000614266898484613eee565b90508781116142cf57858110156142c4576040805162461bcd60e51b815260206004820152601e60248201527f4c6974656465783a20496e73756666696369656e74204220416d6f756e740000604482015290519081900360640190fd5b889450925082614343565b60006142dc898486613eee565b9050898111156142e857fe5b8781101561433d576040805162461bcd60e51b815260206004820152601e60248201527f4c6974656465783a20496e73756666696369656e74204120416d6f756e740000604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b600081158061436d5750508082028282828161436a57fe5b04145b61112d576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b8082018281101561112d576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006144138585613fc6565b509050600080614424888888613504565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561445c57600080fd5b505afa158015614470573d6000803e3d6000fd5b505050506040513d606081101561448657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146144b95780826144bc565b81815b9099909850965050505050505056fe4c6974656465783a20496e73756666696369656e74204f757470757420416d6f756e744c697465646578526f757465723a20496e73756666696369656e74204220416d6f756e744c6974656465783a20496e76616c6964205061746800000000000000000000005472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444c6974656465783a20496e73756666696369656e7420496e70757420416d6f756e745472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a264697066735822122082a268574ae0e740ef558339d9bc80cc2264b93f5b1830dabd2d148501d0fd2a64736f6c63430006060033000000000000000000000000154719241ed12011c0a722ca5226ee2099a82d38000000000000000000000000c778417e063141139fce010982780140aa0cd5ab

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

000000000000000000000000154719241ed12011c0a722ca5226ee2099a82d38000000000000000000000000c778417e063141139fce010982780140aa0cd5ab

-----Decoded View---------------
Arg [0] : _factory (address): 0x154719241ed12011c0A722ca5226Ee2099a82D38
Arg [1] : _WETH (address): 0xc778417E063141139Fce010982780140Aa0cD5Ab

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000154719241ed12011c0a722ca5226ee2099a82d38
Arg [1] : 000000000000000000000000c778417e063141139fce010982780140aa0cd5ab


Deployed ByteCode Sourcemap

8966:18291:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9434:10;-1:-1:-1;;;;;9448:4:0;9434:18;;9427:26;;;;8966:18291;;12:1:-1;9;2:12;13532:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13532:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;13532:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26209:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26209:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26209:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20617:830;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20617:830:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20617:830:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20617:830:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20617:830:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;20617:830:0;;-1:-1:-1;20617:830:0;-1:-1:-1;;;;;;20617:830: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;20617:830:0;;;;;;;;;;;;;;;;;27003:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27003:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27003:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27003:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27003: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;27003:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;27003:251:0;;-1:-1:-1;27003:251:0;;-1:-1:-1;;;;;27003:251:0:i;14211:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14211:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14211:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17898:616::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17898:616:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;17898:616:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;17898:616:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;17898:616:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;17898:616:0;;-1:-1:-1;17898:616:0;-1:-1:-1;;;;;;17898:616:0;;;;;;;;:::i;19803:808::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19803:808:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;19803:808:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;19803:808:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19803:808: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;19803:808:0;;-1:-1:-1;19803:808:0;-1:-1:-1;;;;;;19803:808:0;;;;;;;;:::i;16340:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16340:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16340:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23598:704::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23598:704:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23598:704:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23598:704:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23598:704: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;23598:704:0;;-1:-1:-1;23598:704:0;-1:-1:-1;;;;;;23598:704:0;;;;;;;;:::i;25146:825::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25146:825:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25146:825:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25146:825:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25146:825: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;25146:825:0;;-1:-1:-1;25146:825:0;-1:-1:-1;;;;;;25146:825:0;;;;;;;;:::i;19120:677::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;19120:677:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;19120:677:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19120:677: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;19120:677:0;;-1:-1:-1;19120:677:0;-1:-1:-1;;;;;;19120:677:0;;;;;;;;:::i;26477:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26477:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26477:259:0;;;;;;;;;;;;:::i;18520:594::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18520:594:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;18520:594:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;18520:594:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18520:594:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18520:594:0;;-1:-1:-1;18520:594:0;-1:-1:-1;;;;;;18520:594:0;;;;;;;;:::i;9096:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9096:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;9096:38:0;;;;;;;;;;;;;;26015:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26015:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26015:186:0;;;;;;;;;;;;:::i;15634:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15634:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15634:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24308:832::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24308:832:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24308:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24308:832: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;24308:832:0;;-1:-1:-1;24308:832:0;-1:-1:-1;;;;;;24308:832:0;;;;;;;;:::i;12679:847::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12679:847:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;12679:847:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9048:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9048:41:0;;;:::i;26744:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26744:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;26744:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26744:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26744: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;26744:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;26744:251:0;;-1:-1:-1;26744:251:0;;-1:-1:-1;;;;;26744:251:0:i;14890:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14890:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14890:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10926:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10926:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;10926:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;11666:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;11666:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21453:790::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21453:790:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21453:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21453:790: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;21453:790:0;;-1:-1:-1;21453:790:0;-1:-1:-1;;;;;;21453:790:0;;;;;;;;:::i;13532:673::-;13769:16;13787:14;13750:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;13841:196:::1;13871:5;13891:4;13910:9;13934:14;13963:12;13998:4;14018:8;13841:15;:196::i;:::-;13814:223:::0;;-1:-1:-1;13814:223:0;-1:-1:-1;14048:51:0::1;14076:5:::0;14083:2;13814:223;14048:27:::1;:51::i;:::-;14116:4;-1:-1:-1::0;;;;;14110:20:0::1;;14131:9;14110:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14110:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14110:31:0;;;;14152:45;14183:2;14187:9;14152:30;:45::i;:::-;13532:673:::0;;;;;;;;;;:::o;26209:260::-;26362:14;26401:60;26429:8;26439:9;26450:10;26401:27;:60::i;:::-;26394:67;26209:260;-1:-1:-1;;;;26209:260:0:o;20617:830::-;20831:21;20803:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20903:4:0::1;20878:29;:4:::0;;-1:-1:-1;;20883:15:0;;20878:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;20878:21:0::1;-1:-1:-1::0;;;;;20878:29:0::1;;20870:63;;;::::0;;-1:-1:-1;;;20870:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;20870:63:0;;;;;;;;;;;;;::::1;;20954:53;20983:7;20992:8;21002:4;;20954:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20954:28:0::1;::::0;-1:-1:-1;;;20954:53:0:i:1;:::-;20944:63;;21057:12;21026:7;21051:1;21034:7;:14;:18;21026:27;;;;;;;;;;;;;;:43;;21018:91;;;;-1:-1:-1::0;;;21018:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21120:139;21166:4;;21171:1;21166:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21166:7:0::1;21175:10;21187:49;21210:7;21219:4;;21224:1;21219:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21219:7:0::1;21228:4;;21233:1;21228:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21228:7:0::1;21187:22;:49::i;:::-;21238:7;21246:1;21238:10;;;;;;;;;;;;;;21120:31;:139::i;:::-;21270:35;21276:7;21285:4;;21270:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21299:4:0::1;::::0;-1:-1:-1;21270:5:0::1;::::0;-1:-1:-1;;21270:35:0:i:1;:::-;21322:4;-1:-1:-1::0;;;;;21316:20:0::1;;21337:7;21362:1;21345:7;:14;:18;21337:27;;;;;;;;;;;;;;21316:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21316:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21316:49:0;;;;21376:63;21407:2;21411:7;21436:1;21419:7;:14;:18;21411:27;;;;;;;;;;;;;;21376:30;:63::i;:::-;20617:830:::0;;;;;;;;;:::o;27003:251::-;27147:21;27193:53;27221:7;27230:9;27241:4;27193:27;:53::i;:::-;27186:60;;27003:251;;;;;:::o;14211:673::-;14517:12;14531;14556;14571:47;14594:7;14603:6;14611;14571:22;:47::i;:::-;14556:62;;14629:10;14642;:33;;14666:9;14642:33;;;-1:-1:-1;;14642:33:0;14686:78;;;-1:-1:-1;;;14686:78:0;;14712:10;14686:78;;;;14732:4;14686:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14629:46;;-1:-1:-1;;;;;;14686:25:0;;;;;:78;;;;;-1:-1:-1;;14686:78:0;;;;;;;;-1:-1:-1;14686:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;14686:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14686:78:0;;;;14796:80;14812:6;14820;14828:9;14839:10;14851;14863:2;14867:8;14796:15;:80::i;:::-;14775:101;;;;;;;;14211:673;;;;;;;;;;;;;;;;:::o;17898:616::-;18122:21;18103:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;18166:53:::1;18195:7;18204:8;18214:4;;18166:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;18166:28:0::1;::::0;-1:-1:-1;;;18166:53:0:i:1;:::-;18156:63;;18269:12;18238:7;18263:1;18246:7;:14;:18;18238:27;;;;;;;;;;;;;;:43;;18230:91;;;;-1:-1:-1::0;;;18230:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18332:139;18378:4;;18383:1;18378:7;;;;;;18332:139;18482:24;18488:7;18497:4;;18482:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;18503:2:0;;-1:-1:-1;18482:5:0::1;::::0;-1:-1:-1;;18482:24:0:i:1;19803:808::-:0;20017:21;19989:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20089:4:0::1;20064:29;:4:::0;;-1:-1:-1;;20069:15:0;;20064:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;20064:21:0::1;-1:-1:-1::0;;;;;20064:29:0::1;;20056:63;;;::::0;;-1:-1:-1;;;20056:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;20056:63:0;;;;;;;;;;;;;::::1;;20140:53;20168:7;20177:9;20188:4;;20140:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20140:27:0::1;::::0;-1:-1:-1;;;20140:53:0:i:1;:::-;20130:63;;20226:11;20212:7;20220:1;20212:10;;;;;;;;;;;;;;:25;;20204:69;;;::::0;;-1:-1:-1;;;20204:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;16340:714:::0;16658:14;16685:12;16700:44;16723:7;16732:5;16739:4;16700:22;:44::i;:::-;16685:59;;16755:10;16768;:33;;16792:9;16768:33;;;-1:-1:-1;;16768:33:0;16812:78;;;-1:-1:-1;;;16812:78:0;;16838:10;16812:78;;;;16858:4;16812:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16755:46;;-1:-1:-1;;;;;;16812:25:0;;;;;:78;;;;;-1:-1:-1;;16812:78:0;;;;;;;;-1:-1:-1;16812:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;16812:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16812:78:0;;;;16913:133;16975:5;16982:9;16993:14;17009:12;17023:2;17027:8;16913:47;:133::i;:::-;16901:145;16340:714;-1:-1:-1;;;;;;;;;;;;;16340:714:0:o;23598:704::-;23832:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;23853:137:::1;23899:4;;23904:1;23899:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23899:7:0::1;23908:10;23920:49;23943:7;23952:4;;23957:1;23952:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23952:7:0::1;23961:4;;23966:1;23961:7;;;;;;23920:49;23971:8;23853:31;:137::i;:::-;24001:18;24029:4:::0;;-1:-1:-1;;24034:15:0;;24029:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24029:21:0::1;-1:-1:-1::0;;;;;24022:39:0::1;;24062:2;24022:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;24022:43:0::1;-1:-1:-1::0;;;;;24022:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24022:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24022:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24022:43:0;24076:44:::1;::::0;;24022:43:::1;24076:44:::0;;::::1;::::0;;;;;;;;;;;24022:43;;-1:-1:-1;24076:44:0::1;::::0;;;24111:4;;;;;;24076:44;::::1;::::0;24111:4;;24076:44;24111:4;24076:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24117:2:0;;-1:-1:-1;24076:34:0::1;::::0;-1:-1:-1;;24076:44:0:i:1;:::-;24219:12:::0;24153:62:::1;24201:13:::0;24160:4;;-1:-1:-1;;24165:15:0;;24160:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24160:21:0::1;-1:-1:-1::0;;;;;24153:39:0::1;;24193:2;24153:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;24153:43:0::1;-1:-1:-1::0;;;;;24153:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24153:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24153:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24153:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;24131:163;;;;-1:-1:-1::0;;;24131:163:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9252:1;23598:704:::0;;;;;;;:::o;25146:825::-;25413:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25472:4:0::1;25447:29;:4:::0;;-1:-1:-1;;25452:15:0;;25447:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25447:21:0::1;-1:-1:-1::0;;;;;25447:29:0::1;;25439:63;;;::::0;;-1:-1:-1;;;25439:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25439:63:0;;;;;;;;;;;;;::::1;;25513:137;25559:4;;25564:1;25559:7;;;;;;25513:137;25661:55;25696:4;;25661:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25710:4:0::1;::::0;-1:-1:-1;25661:34:0::1;::::0;-1:-1:-1;;25661:55:0:i:1;:::-;25744:37;::::0;;-1:-1:-1;;;25744:37:0;;25775:4:::1;25744:37;::::0;::::1;::::0;;;25727:14:::1;::::0;-1:-1:-1;;;;;25751:4:0::1;25744:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;25744:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25744:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25744:37:0;;-1:-1:-1;25800:25:0;;::::1;;25792:73;;;;-1:-1:-1::0;;;25792:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25882:4;-1:-1:-1::0;;;;;25876:20:0::1;;25897:9;25876:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25876:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25876:31:0;;;;25918:45;25949:2;25953:9;25918:30;:45::i;19120:677::-:0;19336:21;19308:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;19394:4:::1;-1:-1:-1::0;;;;;19383:15:0::1;:4;;19388:1;19383:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;19383:7:0::1;-1:-1:-1::0;;;;;19383:15:0::1;;19375:49;;;::::0;;-1:-1:-1;;;19375:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;19375:49:0;;;;;;;;;;;;;::::1;;19445:54;19474:7;19483:9;19494:4;;19445:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;19445:28:0::1;::::0;-1:-1:-1;;;19445:54:0:i:1;:::-;19435:64;;19549:12;19518:7;19543:1;19526:7;:14;:18;19518:27;;;;;;;;;;;;;;:43;;19510:91;;;;-1:-1:-1::0;;;19510:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19618:4;-1:-1:-1::0;;;;;19612:19:0::1;;19639:7;19647:1;19639:10;;;;;;;;;;;;;;19612:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19612:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19612:40:0;;;;;19676:4;-1:-1:-1::0;;;;;19670:20:0::1;;19691:49;19714:7;19723:4;;19728:1;19723:7;;;;;;19691:49;19742:7;19750:1;19742:10;;;;;;;;;;;;;;19670:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;19670:83:0::1;-1:-1:-1::0;;;;;19670:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19670:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19670:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19670:83:0;19663:91:::1;;;;19765:24;19771:7;19780:4;;19765:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;19786:2:0;;-1:-1:-1;19765:5:0::1;::::0;-1:-1:-1;;19765:24:0:i:1;:::-;19120:677:::0;;;;;;;;:::o;26477:259::-;26630:13;26668:60;26695:9;26706;26717:10;26668:26;:60::i;18520:594::-;18744:21;18725:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;18788:53:::1;18816:7;18825:9;18836:4;;18788:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;18788:27:0::1;::::0;-1:-1:-1;;;18788:53:0:i:1;:::-;18778:63;;18874:11;18860:7;18868:1;18860:10;;;;;;;;;;;;;;:25;;18852:69;;;::::0;;-1:-1:-1;;;18852:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;9096:38:::0;;;:::o;26015:186::-;26112:12;26144:49;26165:7;26174:8;26184;26144:20;:49::i;15634:700::-;15900:14;15881:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;15943:196:::1;15973:5;15993:4;16012:9;16036:14;16065:12;16100:4;16120:8;15943:15;:196::i;:::-;16189:38;::::0;;-1:-1:-1;;;16189:38:0;;16221:4:::1;16189:38;::::0;::::1;::::0;;;15927:212;;-1:-1:-1;16150:78:0::1;::::0;-1:-1:-1;16178:5:0;;16185:2;;-1:-1:-1;;;;;16189: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;16189:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16189:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16189:38:0;16150:27:::1;:78::i;:::-;16245:4;-1:-1:-1::0;;;;;16239:20:0::1;;16260:9;16239:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16239:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16239:31:0;;;;16281:45;16312:2;16316:9;16281:30;:45::i;24308:832::-:0;24568:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;24613:4:::1;-1:-1:-1::0;;;;;24602:15:0::1;:4;;24607:1;24602:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24602:7:0::1;-1:-1:-1::0;;;;;24602:15:0::1;;24594:49;;;::::0;;-1:-1:-1;;;24594:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24594:49:0;;;;;;;;;;;;;::::1;;24654:13;24670:9;24654:25;;24696:4;-1:-1:-1::0;;;;;24690:19:0::1;;24717:8;24690:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24690:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24690:38:0;;;;;24752:4;-1:-1:-1::0;;;;;24746:20:0::1;;24767:49;24790:7;24799:4;;24804:1;24799:7;;;;;;24767:49;24818:8;24746:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;24746:81:0::1;-1:-1:-1::0;;;;;24746:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24746:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24746:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24746:81:0;24739:89:::1;;;;24839:18;24867:4:::0;;-1:-1:-1;;24872:15:0;;24867:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24867:21:0::1;-1:-1:-1::0;;;;;24860:39:0::1;;24900:2;24860:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;24860:43:0::1;-1:-1:-1::0;;;;;24860:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24860:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24860:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24860:43:0;24914:44:::1;::::0;;24860:43:::1;24914:44:::0;;::::1;::::0;;;;;;;;;;;24860:43;;-1:-1:-1;24914:44:0::1;::::0;;;24949:4;;;;;;24914:44;::::1;::::0;24949:4;;24914:44;24949:4;24914:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24955:2:0;;-1:-1:-1;24914:34:0::1;::::0;-1:-1:-1;;24914:44:0:i:1;:::-;25057:12:::0;24991:62:::1;25039:13:::0;24998:4;;-1:-1:-1;;25003:15:0;;24998:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24998:21:0::1;-1:-1:-1::0;;;;;24991:39:0::1;;25031:2;24991:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;24991:43:0::1;-1:-1:-1::0;;;;;24991:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;12679:847:0::0;12933:12;12947;12914:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;12972:12:::1;12987:47;13010:7;13019:6;13027;12987:22;:47::i;:::-;13045:60;::::0;;-1:-1:-1;;;13045:60:0;;13077:10:::1;13045:60;::::0;::::1;::::0;-1:-1:-1;;;;;13045:31:0;::::1;:60:::0;;;;;;;;;;;;;;12972:62;;-1:-1:-1;13045:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;13045:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;13045:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13045:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;13173:27:0::1;::::0;;-1:-1:-1;;;13173:27:0;;-1:-1:-1;;;;;13173:27:0;;::::1;;::::0;::::1;::::0;;;13143:12:::1;::::0;;;13173:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;13143:12;13173:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;13173:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13173:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13173:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13173:27:0;-1:-1:-1;13212:14:0::1;13231:41;13257:6:::0;13265;13231:25:::1;:41::i;:::-;13211:61;;;13314:6;-1:-1:-1::0;;;;;13304:16:0::1;:6;-1:-1:-1::0;;;;;13304:16:0::1;;:58;;13345:7;13354;13304:58;;;13324:7;13333;13304:58;13283:79:::0;;-1:-1:-1;13283:79:0;-1:-1:-1;13381:21:0;;::::1;;13373:64;;;::::0;;-1:-1:-1;;;13373:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13467:10;13456:7;:21;;13448:70;;;;-1:-1:-1::0;;;13448:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9252:1;;;;12679:847:::0;;;;;;;;;;;:::o;9048:41::-;;;:::o;26744:251::-;26888:21;26934:53;26963:7;26972:8;26982:4;26934:28;:53::i;14890:665::-;15179:16;15197:14;15224:12;15239:44;15262:7;15271:5;15278:4;15239:22;:44::i;:::-;15224:59;;15294:10;15307;:33;;15331:9;15307:33;;;-1:-1:-1;;15307:33:0;15351:78;;;-1:-1:-1;;;15351:78:0;;15377:10;15351:78;;;;15397:4;15351:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15294:46;;-1:-1:-1;;;;;;15351:25:0;;;;;:78;;;;;-1:-1:-1;;15351:78:0;;;;;;;;-1:-1:-1;15351:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;15351:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15351:78:0;;;;15467:80;15486:5;15493:9;15504:14;15520:12;15534:2;15538:8;15467:18;:80::i;:::-;15440:107;;;;-1:-1:-1;14890:665:0;-1:-1:-1;;;;;;;;;;;;;14890:665:0:o;10926:734::-;11214:12;11228;11242:14;11195:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;11290:85:::1;11304:6;11312;11320:14;11336;11352:10;11364;11290:13;:85::i;:::-;11269:106:::0;;-1:-1:-1;11269:106:0;-1:-1:-1;11386:12:0::1;11401:47;11424:7;11433:6:::0;11441;11401:22:::1;:47::i;:::-;11386:62;;11459:66;11491:6;11499:10;11511:4;11517:7;11459:31;:66::i;:::-;11536;11568:6;11576:10;11588:4;11594:7;11536:31;:66::i;:::-;11638:4;-1:-1:-1::0;;;;;11625:23:0::1;;11649:2;11625:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;11625:27:0::1;-1:-1:-1::0;;;;;11625:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;11625:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;11625:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;11625:27:0;10926:734;;;;-1:-1:-1;11625:27:0;;-1:-1:-1;10926:734:0;;-1:-1:-1;;;;;;;;;10926:734:0:o;11666:970::-;11919:16;11937:14;11953;11900:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;12007:176:::1;12035:5;12055:4;12074:18;12107:9;12131:14;12160:12;12007:13;:176::i;:::-;11980:203:::0;;-1:-1:-1;11980:203:0;-1:-1:-1;12194:12:0::1;12209:44;12232:7;12241:5:::0;12248:4:::1;12209:22;:44::i;:::-;12194:59;;12264:69;12296:5;12303:10;12315:4;12321:11;12264:31;:69::i;:::-;12350:4;-1:-1:-1::0;;;;;12344:19:0::1;;12371:9;12344:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;12344:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12344:39:0;;;;;12407:4;-1:-1:-1::0;;;;;12401:20:0::1;;12422:4;12428:9;12401:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;12401:37:0::1;-1:-1:-1::0;;;;;12401:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;12401:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12401:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;12401:37:0;12394:45:::1;;;;12475:4;-1:-1:-1::0;;;;;12462:23:0::1;;12486:2;12462:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;12462:27:0::1;-1:-1:-1::0;;;;;12462:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;12462:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12462:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;12462:27:0;;-1:-1:-1;12540:9:0::1;:21:::0;-1:-1:-1;12536:92:0::1;;;12563:65;12594:10;12618:9;12606;:21;12563:30;:65::i;:::-;9252:1;11666:970:::0;;;;;;;;;;;:::o;21453:790::-;21666:21;21638:8;9205:15;9193:8;:27;;9185:56;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;-1:-1:-1;;;9185:56:0;;;;;;;;;;;;;;;21724:4:::1;-1:-1:-1::0;;;;;21713:15:0::1;:4;;21718:1;21713:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21713:7:0::1;-1:-1:-1::0;;;;;21713:15:0::1;;21705:49;;;::::0;;-1:-1:-1;;;21705:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;21705:49:0;;;;;;;;;;;;;::::1;;21775:53;21803:7;21812:9;21823:4;;21775:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21775:27:0::1;::::0;-1:-1:-1;;;21775:53:0:i:1;:::-;21765:63;;21861:9;21847:7;21855:1;21847:10;;;;;;;;;;;;;;:23;;21839:67;;;::::0;;-1:-1:-1;;;21839:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;21923:4;-1:-1:-1::0;;;;;21917:19:0::1;;21944:7;21952:1;21944:10;;;;;;;;;;;;;;21917:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21917:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21917:40:0;;;;;21981:4;-1:-1:-1::0;;;;;21975:20:0::1;;21996:49;22019:7;22028:4;;22033:1;22028:7;;;;;;21996:49;22047:7;22055:1;22047:10;;;;;;;;;;;;;;21975:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;21975:83:0::1;-1:-1:-1::0;;;;;21975:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21975:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21975:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21975:83:0;21968:91:::1;;;;22070:24;22076:7;22085:4;;22070:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22091:2:0;;-1:-1:-1;22070:5:0::1;::::0;-1:-1:-1;;22070:24:0:i:1;:::-;22157:7;22165:1;22157:10;;;;;;;;;;;;;;22145:9;:22;22141:94;;;22169:66;22200:10;22224:7;22232:1;22224:10;;;;;;;;;;;;;;22212:9;:22;22169:30;:66::i;32639:361::-:0;32834:45;;;-1:-1:-1;;;;;32834:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;32834:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;32823:57:0;;;;32788:12;;32802:17;;32823:10;;;;32834:45;32823:57;;;25:18:-1;32823: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;;;32823: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;;32787:93:0;;;;32899:7;:57;;;;-1:-1:-1;32911:11:0;;:16;;:44;;;32942:4;32931:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32931:24:0;32911:44;32891:101;;;;;-1:-1:-1;;;32891:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32639:361;;;;;:::o;33418:195::-;33526:12;;;33488;33526;;;;;;;;;-1:-1:-1;;;;;33505:7:0;;;33519:5;;33505: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;;;33505: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;;33487:52:0;;;33558:7;33550:55;;;;-1:-1:-1;;;33550:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33418:195;;;:::o;29862:499::-;29955:14;30001:1;29990:8;:12;29982:59;;;;-1:-1:-1;;;29982:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30072:1;30060:9;:13;:31;;;;;30090:1;30077:10;:14;30060:31;30052:75;;;;;-1:-1:-1;;;30052:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30138:20;30161:17;:8;30174:3;30161:17;:12;:17;:::i;:::-;30138:40;-1:-1:-1;30189:14:0;30206:31;30138:40;30226:10;30206:31;:19;:31;:::i;:::-;30189:48;-1:-1:-1;30248:16:0;30267:40;30291:15;30267:19;:9;30281:4;30267:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;30248:59;;30342:11;30330:9;:23;;;;;;;29862:499;-1:-1:-1;;;;;;;29862:499:0:o;31018:502::-;31119:21;31176:1;31161:4;:11;:16;;31153:50;;;;;-1:-1:-1;;;31153:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31153:50:0;;;;;;;;;;;;;;;31235:4;:11;31224:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31224:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;31224:23:0;;31214:33;;31271:8;31258:7;31266:1;31258:10;;;;;;;;;;;;;:21;;;;;31295:6;31290:223;31321:1;31307:4;:11;:15;31303:1;:19;31290:223;;;31345:14;31361:15;31380:42;31392:7;31401:4;31406:1;31401:7;;;;;;;;;;;;;;31410:4;31415:1;31419;31415:5;31410:11;;;;;;;;;;;;;;31380;:42::i;:::-;31344:78;;;;31454:47;31467:7;31475:1;31467:10;;;;;;;;;;;;;;31479:9;31490:10;31454:12;:47::i;:::-;31437:7;31445:1;31449;31445:5;31437:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;31324:3:0;;31290:223;;;;31018:502;;;;;:::o;28399:478::-;28488:12;28514:14;28530;28548:26;28559:6;28567;28548:10;:26::i;:::-;28712:32;;;-1:-1:-1;;28712:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;28712:32:0;;;;;28702:43;;;;;;-1:-1:-1;;;;;;28615:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28615:251:0;;;;;;;28605:262;;;;;;;;;28399:478;-1:-1:-1;;;;;28399:478:0:o;33008:402::-;33233:51;;;-1:-1:-1;;;;;33233:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;33233:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;33222:63:0;;;;33187:12;;33201:17;;33222:10;;;;33233:51;33222:63;;;25:18:-1;33222: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;;;33222: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;;33186:99:0;;;;33304:7;:57;;;;-1:-1:-1;33316:11:0;;:16;;:44;;;33347:4;33336:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33336:24:0;33316:44;33296:106;;;;-1:-1:-1;;;33296:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33008:402;;;;;;:::o;17165:727::-;17272:6;17267:618;17298:1;17284:4;:11;:15;17280:1;:19;17267:618;;;17322:13;17337:14;17356:4;17361:1;17356:7;;;;;;;;;;;;;;17365:4;17370:1;17374;17370:5;17365:11;;;;;;;;;;;;;;17321:56;;;;17393:14;17412:40;17438:5;17445:6;17412:25;:40::i;:::-;17392:60;;;17467:14;17484:7;17492:1;17496;17492:5;17484:14;;;;;;;;;;;;;;17467:31;;17514:15;17531;17559:6;-1:-1:-1;;;;;17550:15:0;:5;-1:-1:-1;;;;;17550:15:0;;:61;;17592:9;17608:1;17550:61;;;17574:1;17578:9;17550:61;17513:98;;;;17626:10;17657:1;17643:4;:11;:15;17639:1;:19;:80;;17716:3;17639:80;;;17661:52;17684:7;17693:6;17701:4;17706:1;17710;17706:5;17701:11;;;;;;;;;;;;;;17661:22;:52::i;:::-;17626:93;;17747:46;17770:7;17779:5;17786:6;17747:22;:46::i;:::-;-1:-1:-1;;;;;17734:65:0;;17818:10;17830;17842:2;17856:1;17846:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;17846:12:0;87:42:-1;143:17;;-1:-1;17846:12:0;;17734:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17734:139:0;-1:-1:-1;;;;;17734: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;17734:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17734:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;17301:3:0;;;;;-1:-1:-1;17267:618:0;;-1:-1:-1;;;;;;;;17267:618:0;;;17165:727;;;:::o;31601:523::-;31702:21;31759:1;31744:4;:11;:16;;31736:50;;;;;-1:-1:-1;;;31736:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31736:50:0;;;;;;;;;;;;;;;31818:4;:11;31807:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31807:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;31807:23:0;;31797:33;;31871:9;31841:7;31866:1;31849:7;:14;:18;31841:27;;;;;;;;;;;;;;;;;:39;31905:11;;-1:-1:-1;;31905:15:0;31891:226;31922:5;;31891:226;;31950:14;31966:15;31985:42;31997:7;32006:4;32015:1;32011;:5;32006:11;;;;;;;;;;;;;;32019:4;32024:1;32019:7;;;;;;;31985:42;31949:78;;;;32059:46;32071:7;32079:1;32071:10;;;;;;;;;;;;;;32083:9;32094:10;32059:11;:46::i;:::-;32042:7;32054:1;32050;:5;32042:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;31929:3:0;31891:226;;22390:1202;22503:6;22498:1087;22529:1;22515:4;:11;:15;22511:1;:19;22498:1087;;;22553:13;22568:14;22587:4;22592:1;22587:7;;;;;;;;;;;;;;22596:4;22601:1;22605;22601:5;22596:11;;;;;;;;;;;;;;22552:56;;;;22624:14;22643:40;22669:5;22676:6;22643:25;:40::i;:::-;22623:60;;;22698:17;22731:46;22754:7;22763:5;22770:6;22731:22;:46::i;:::-;22698:80;;22793:16;22824:17;22912:13;22927;22945:4;-1:-1:-1;;;;;22945:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22945:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22945:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22945:18:0;;;;;;;-1:-1:-1;;;;;22911:52:0;;;;-1:-1:-1;22911:52:0;;-1:-1:-1;22979:17:0;;-1:-1:-1;;;;;23020:15:0;;;;;;;:61;;23062:8;23072;23020:61;;;23039:8;23049;23020:61;22978:103;;;;23110:56;23153:12;23117:5;-1:-1:-1;;;;;23110:23:0;;23142:4;23110:38;;;;;;;;;;;;;-1:-1:-1;;;;;23110:38:0;-1:-1:-1;;;;;23110:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;23110:56:0;23096:70;;23196:69;23224:11;23237:12;23251:13;23196:27;:69::i;:::-;23181:84;;22498:1087;;;;23296:15;23313;23341:6;-1:-1:-1;;;;;23332:15:0;:5;-1:-1:-1;;;;;23332:15:0;;:67;;23377:12;23396:1;23332:67;;;23356:1;23360:12;23332:67;23295:104;;;;23414:10;23445:1;23431:4;:11;:15;23427:1;:19;:80;;23504:3;23427:80;;;23449:52;23472:7;23481:6;23489:4;23494:1;23498;23494:5;23489:11;;;;;;;23449:52;23560:12;;;23570:1;23560:12;;;;;;;;;;-1:-1:-1;;;23522:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;23522:51:0;;;;;;;;;;;;;;;;;;;;;;23414:93;;-1:-1:-1;23522:9:0;;;;;;23532:10;;23544;;23414:93;;23560:12;;23522:51;;;;;;;;23560:12;;23522:51;;;;23560: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;23522:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23522:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22532:3:0;;;;;-1:-1:-1;22498:1087:0;;-1:-1:-1;;;;;;;;;;22498:1087:0;27529:129;27613:5;;;27608:16;;;;27600:50;;;;;-1:-1:-1;;;27600:50:0;;;;;;;;;;;;-1:-1:-1;;;27600:50:0;;;;;;;;;;;;;;30482:454;30575:13;30621:1;30609:9;:13;30601:61;;;;-1:-1:-1;;;30601:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30693:1;30681:9;:13;:31;;;;;30711:1;30698:10;:14;30681:31;30673:75;;;;;-1:-1:-1;;;30673:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30759:14;30776:34;30805:4;30776:24;:9;30790;30776:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;30759:51;-1:-1:-1;30821:16:0;30840:34;30870:3;30840:25;:10;30855:9;30840:25;:14;:25;:::i;:34::-;30821:53;;30896:32;30926:1;30909:11;30897:9;:23;;;;;;;30896:32;:29;:32;:::i;:::-;30885:43;30482:454;-1:-1:-1;;;;;;30482:454:0:o;29437:303::-;29519:12;29562:1;29552:7;:11;29544:52;;;;;-1:-1:-1;;;29544:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29626:1;29615:8;:12;:28;;;;;29642:1;29631:8;:12;29615:28;29607:72;;;;;-1:-1:-1;;;29607:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29724:8;29700:21;:7;29712:8;29700:21;:11;:21;:::i;:::-;:32;;;;;;;29437:303;-1:-1:-1;;;;29437:303:0:o;27978:329::-;28053:14;28069;28114:6;-1:-1:-1;;;;;28104:16:0;:6;-1:-1:-1;;;;;28104:16:0;;;28096:55;;;;;-1:-1:-1;;;28096:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28190:6;-1:-1:-1;;;;;28181:15:0;:6;-1:-1:-1;;;;;28181:15:0;;:53;;28219:6;28227;28181:53;;;28200:6;28208;28181:53;28162:72;;-1:-1:-1;28162:72:0;-1:-1:-1;;;;;;28253:20:0;;28245:54;;;;;-1:-1:-1;;;28245:54:0;;;;;;;;;;;;-1:-1:-1;;;28245:54:0;;;;;;;;;;;;;;;27978:329;;;;;:::o;9556:1364::-;9869:48;;;-1:-1:-1;;;9869:48:0;;-1:-1:-1;;;;;9869:48:0;;;;;;;;;;;;;;;;9774:12;;;;;;9885:7;9869:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;9869:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9869:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9869:48:0;-1:-1:-1;;;;;9869:62:0;;9865:146;;;9948:51;;;-1:-1:-1;;;9948:51:0;;-1:-1:-1;;;;;9948:51:0;;;;;;;;;;;;;;;;9964:7;9948:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;9948:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;9948:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9948:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;9865:146:0;10022:13;10037;10054:51;10081:7;10090:6;10098;10054:26;:51::i;:::-;10021:84;;;;10120:8;10132:1;10120:13;:30;;;;-1:-1:-1;10137:13:0;;10120:30;10116:797;;;10189:14;;-1:-1:-1;10205:14:0;;-1:-1:-1;10116:797:0;;;10253:19;10275:56;10296:14;10312:8;10322;10275:20;:56::i;:::-;10253:78;;10368:14;10350;:32;10346:556;;10429:10;10411:14;:28;;10403:71;;;;;-1:-1:-1;;;10403:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10515:14;;-1:-1:-1;10531:14:0;-1:-1:-1;10531:14:0;10346:556;;;10587:19;10609:56;10630:14;10646:8;10656;10609:20;:56::i;:::-;10587:78;;10709:14;10691;:32;;10684:40;;;;10769:10;10751:14;:28;;10743:71;;;;;-1:-1:-1;;;10743:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10855:14;-1:-1:-1;10871:14:0;;-1:-1:-1;10346:556:0;10116:797;;9556:1364;;;;;;;;;;;:::o;27666:142::-;27718:6;27745;;;:30;;-1:-1:-1;;27760:5:0;;;27774:1;27769;27760:5;27769:1;27755:15;;;;;:20;27745:30;27737:63;;;;;-1:-1:-1;;;27737:63:0;;;;;;;;;;;;-1:-1:-1;;;27737:63:0;;;;;;;;;;;;;;27393:128;27477:5;;;27472:16;;;;27464:49;;;;;-1:-1:-1;;;27464:49:0;;;;;;;;;;;;-1:-1:-1;;;27464:49:0;;;;;;;;;;;;;;28935:389;29028:13;29043;29070:14;29089:26;29100:6;29108;29089:10;:26::i;:::-;29069:46;;;29127:13;29142;29173:32;29181:7;29190:6;29198;29173:7;:32::i;:::-;-1:-1:-1;;;;;29160:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29160:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29160:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29160:60:0;;;;;;;-1:-1:-1;;;;;29126:94:0;;;;-1:-1:-1;29126:94:0;;-1:-1:-1;;;;;;29254:16:0;;;;;;;:62;;29297:8;29307;29254:62;;;29274:8;29284;29254:62;29231:85;;;;-1:-1:-1;28935:389:0;-1:-1:-1;;;;;;;28935:389:0:o

Swarm Source

ipfs://82a268574ae0e740ef558339d9bc80cc2264b93f5b1830dabd2d148501d0fd2a
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.