Contract 0xd30d3ac04e2325e19a2227cfe6bc860376ba20b1

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x24f4cbf9220c021a23407c81ae06088dc9c6669b697a85ab8f6c6c19a1f3b09dSwap ETH For Exa...67611162023-02-01 11:16:562 days 2 hrs ago0xc3fc5d55ee9efb54d56ae22728b27e0324e5da99 IN  Crow Finance: Router2.085266891298538 CRO0.8195744703550
0x1e6e3651b184ec5b5d420085ba3e798aec6fa12a946ca0cdd3cea5cb0764fec8Swap Exact Token...67558822023-02-01 3:04:162 days 10 hrs ago0xb110c61e8c565b7c287e8e02ff1a3d8889eb75ec IN  Crow Finance: Router0 CRO0.5333867492690
0xc8eb3549591d40bb84ee48669783f86cad90a3d5d1b2efae96c94ea6fce6a830Swap Exact ETH F...67456622023-01-31 11:01:433 days 2 hrs ago0x19b6570ef11a46b127dcb508c95104c2f282996f IN  Crow Finance: Router2.218889174075224 CRO0.7837837920770
0x0dfdeebd3f631174284f68838e6e6f95b4d79f377551ea1d964d8cb5eab8f5fdRemove Liquidity...67293642023-01-30 9:21:124 days 4 hrs ago0x0368b68f8ad53e781014a96481ea1841c8810496 IN  Crow Finance: Router0 CRO1.1546150
0x10a6b10a0245138065c54682d5f50379ab0108f2d11fa7738ea8a7bc40fd3464Swap Exact ETH F...67094432023-01-29 1:59:015 days 11 hrs ago0xc05f6e693a727aca4c605dd413a6b751b2ca87c3 IN  Crow Finance: Router3 CRO0.6014350
0x07c6d4208d2901ef615c4db3364de3be8acd532592d15d781fb89baa0fe1be97Swap Exact ETH F...65927942023-01-21 10:28:4413 days 3 hrs ago0x117ff876a668eb7b6387f6cb0c461e832afec388 IN  Crow Finance: Router1,000 CRO0.510100070151 4,830.264382852
0x4637750ed5effd0c77c218900cdbb57da0eed5edc78f365cca5a10e0caa85954Swap Exact Token...65927902023-01-21 10:28:2213 days 3 hrs ago0x117ff876a668eb7b6387f6cb0c461e832afec388 IN  Crow Finance: Router0 CRO0.471849223972 4,830.264561683
0x158c2077db6a03ce856b447186ea7afb024d986c3d75984a5d21531562869d0cSwap Exact Token...65163072023-01-16 9:46:3318 days 3 hrs ago0xc0887c4691f656bec2b4a89946e7eaf27f32c50e IN  Crow Finance: Router0 CRO0.963669 7,000
0xb1ed4b56bdf304feaae1858553b08c383af49e0e1b331132984ce8d83964a08eSwap Exact Token...65163002023-01-16 9:45:5418 days 3 hrs ago0xc0887c4691f656bec2b4a89946e7eaf27f32c50e IN  Crow Finance: Router0 CRO0.96418 7,000
0xe6d502ddb9b85ac96a7478f903dfecd1d4401be6247e9206ff93b8b440719dacSwap Exact ETH F...64804652023-01-14 1:30:4820 days 12 hrs ago0xe6534d13c852e2985343f8b9f1f20b84e3dc6dcd IN  Crow Finance: Router1,000 CRO0.670201524838 4,835.334402358
0xb44e0cd62a35258bad85e670fdcbec99d329082c4b0217410353f02019fd05b4Swap Exact Token...64171702023-01-09 21:54:3724 days 15 hrs ago0x67c087ba6a6915d36a6ab21d6170359259d8aa2c IN  Crow Finance: Router0 CRO1.239965 5,000
0xd72fdbd0f9f16409b4d483ed7e27275031c5799cde017d6fc63930a78e715d2cSwap Exact Token...64171632023-01-09 21:53:5724 days 15 hrs ago0x67c087ba6a6915d36a6ab21d6170359259d8aa2c IN  Crow Finance: Router0 CRO1.239965 5,000
0x911502e13c7c1f320b80273e5cdc2223fc9edaba7faaeda25ea3d8f3b0bc06b6Swap Exact Token...64171572023-01-09 21:53:2424 days 15 hrs ago0x67c087ba6a6915d36a6ab21d6170359259d8aa2c IN  Crow Finance: Router0 CRO1.2399650
0xb6e5be4538741fed64a4860d4ad5133796cf745cfac268bc649e85c5f6365e90Swap Exact Token...64032392023-01-09 0:02:2125 days 13 hrs ago0xe6534d13c852e2985343f8b9f1f20b84e3dc6dcd IN  Crow Finance: Router0 CRO1.620120779649 4,838.882539355
0xf97fafafa63c95e0ae2c8642aa3167604939bd35eea388162c1c1db2be2dba19Swap Exact ETH F...63066732023-01-02 16:21:1331 days 21 hrs ago0x4d377bafa37e899bb4174c5bd0fcdb8c2633234f IN  Crow Finance: Router25 CRO0.735935 5,000
0xecb16f64bfa3b58ad86ef8e69d089869d64600e346ae8ef4ba1a8768850cc9aaSwap Exact Token...62525372022-12-30 3:26:5435 days 10 hrs ago0x48f40252603762505c25f2258548d36235ce9c52 IN  Crow Finance: Router0 CRO0.70185 5,000
0x322120e605e4d0e0981936e45a10c3209b02b777177d6f32a8551d83c9cb235cSwap Exact Token...62300742022-12-28 16:13:1336 days 21 hrs ago0x81a2ad0d730cfdacc5c0347f21a3a7985074fa1e IN  Crow Finance: Router0 CRO0.70156 5,000
0x9663b1f240510b9e79e435ae438462bcf7ac4b73a40b0f7257050e8db377153fSwap Exact Token...61931332022-12-26 6:11:3239 days 7 hrs ago0xfbc23ee0040fb47d557ac200db0551da834e03ff IN  Crow Finance: Router0 CRO0.6802406237730
0x3c4ae3be89df20f541e67b03cb3e47697238eb07ec04834ecf76a313265b40afSwap Exact ETH F...61740702022-12-25 0:15:4540 days 13 hrs ago0xef38aa663d11b1df138f36531314ce860900f8e7 IN  Crow Finance: Router1 CRO1.154845 5,000
0x31d52a5e2c048990a40ea0fbe1045815cda86d5d431141c86cc697f739fa6729Swap Exact Token...60978152022-12-20 0:34:4445 days 12 hrs ago0x9b122b1fd26ed560e904114328ff0fb4c43cb065 IN  Crow Finance: Router0 CRO0.67369 5,000
0x597d277ae7ca4f1335e4f45a0454d64d39a28cf3df99918b62fb30f117283c97Swap Exact ETH F...60506552022-12-16 22:32:0948 days 15 hrs ago0x91a1edecbd252d3628fa3644f677a447f59b61e1 IN  Crow Finance: Router4 CRO0.6609350
0xf74d7e06fd8782cda43d0d800ecda47a1e5a8cf369f4ac5384eab4bb17893d7dSwap Exact Token...60388222022-12-16 3:55:0749 days 9 hrs ago0xf479fb0059ef196470578849e78858111dac64cb IN  Crow Finance: Router0 CRO0.673545 5,000
0x60dd1688623ed3e3cbb38a04a46c1f55f3963c820f4542a22a90572aa07f7c3dSwap Exact Token...60285462022-12-15 11:46:0250 days 1 hr ago0x8b1fb40796146f19b5eaa1a5cb30b89753e2af91 IN  Crow Finance: Router0 CRO0.673640
0x42ca11b1dd8c4d7744afc97b94f53c418353eb470c9ed8a0d78ef115ee94a4ebSwap Exact ETH F...60285122022-12-15 11:42:4950 days 1 hr ago0x8b1fb40796146f19b5eaa1a5cb30b89753e2af91 IN  Crow Finance: Router79 CRO0.6602450
0x790b2f48d457f21b447311d18572b27ac74f4c5202d428f74b7ecb10db6278a3Swap Exact Token...60232442022-12-15 3:26:5950 days 10 hrs ago0xf479fb0059ef196470578849e78858111dac64cb IN  Crow Finance: Router0 CRO0.673595 5,000
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc012b2006fd3185cfd08cec7b5319a001b99a1e77f906ee4a79385ac1d4d40ee67773522023-02-02 12:48:261 day 45 mins ago Crow Finance: Router 0x1c3755958472b573af3ad9b6a9deac415056e8e524.697993471374152343 CRO
0xc012b2006fd3185cfd08cec7b5319a001b99a1e77f906ee4a79385ac1d4d40ee67773522023-02-02 12:48:261 day 45 mins ago Cronos: WCRO Token Crow Finance: Router24.697993471374152343 CRO
0x24f4cbf9220c021a23407c81ae06088dc9c6669b697a85ab8f6c6c19a1f3b09d67611162023-02-01 11:16:562 days 2 hrs ago Crow Finance: Router0xc3fc5d55ee9efb54d56ae22728b27e0324e5da990.012454142369789401 CRO
0x24f4cbf9220c021a23407c81ae06088dc9c6669b697a85ab8f6c6c19a1f3b09d67611162023-02-01 11:16:562 days 2 hrs ago Crow Finance: Router Cronos: WCRO Token2.072812748928749449 CRO
0x1e6e3651b184ec5b5d420085ba3e798aec6fa12a946ca0cdd3cea5cb0764fec867558822023-02-01 3:04:162 days 10 hrs ago Crow Finance: Router0xb110c61e8c565b7c287e8e02ff1a3d8889eb75ec116.022556903434506142 CRO
0x1e6e3651b184ec5b5d420085ba3e798aec6fa12a946ca0cdd3cea5cb0764fec867558822023-02-01 3:04:162 days 10 hrs ago Cronos: WCRO Token Crow Finance: Router116.022556903434506142 CRO
0xc8eb3549591d40bb84ee48669783f86cad90a3d5d1b2efae96c94ea6fce6a83067456622023-01-31 11:01:433 days 2 hrs ago Crow Finance: Router Cronos: WCRO Token2.218889174075224812 CRO
0x0dfdeebd3f631174284f68838e6e6f95b4d79f377551ea1d964d8cb5eab8f5fd67293642023-01-30 9:21:124 days 4 hrs ago Crow Finance: Router0x0368b68f8ad53e781014a96481ea1841c88104960.381180346742677053 CRO
0x0dfdeebd3f631174284f68838e6e6f95b4d79f377551ea1d964d8cb5eab8f5fd67293642023-01-30 9:21:124 days 4 hrs ago Cronos: WCRO Token Crow Finance: Router0.381180346742677053 CRO
0x062006fedc360202b2fbbcb685c4b6823caa529671cc7866f5306127cb67e60267145042023-01-29 9:56:595 days 3 hrs ago Crow Finance: Router 0x1c3755958472b573af3ad9b6a9deac415056e8e5150.511512511849166116 CRO
0x062006fedc360202b2fbbcb685c4b6823caa529671cc7866f5306127cb67e60267145042023-01-29 9:56:595 days 3 hrs ago Cronos: WCRO Token Crow Finance: Router150.511512511849166116 CRO
0x4ae640856d8e25fdab03e5611e832cf8b1f396942aa1f6c4a7a3f844714d8f8067102382023-01-29 3:13:595 days 10 hrs ago Crow Finance: Router Cronos: WCRO Token250 CRO
0x4ae640856d8e25fdab03e5611e832cf8b1f396942aa1f6c4a7a3f844714d8f8067102382023-01-29 3:13:595 days 10 hrs ago 0x1c3755958472b573af3ad9b6a9deac415056e8e5 Crow Finance: Router250 CRO
0x5587f22370b329c2e7503c7cb1c82d9c11c92fb6aaba152282e7fc3b682da66f67097762023-01-29 2:30:265 days 11 hrs ago Crow Finance: Router Cronos: WCRO Token610 CRO
0x5587f22370b329c2e7503c7cb1c82d9c11c92fb6aaba152282e7fc3b682da66f67097762023-01-29 2:30:265 days 11 hrs ago 0x1c3755958472b573af3ad9b6a9deac415056e8e5 Crow Finance: Router610 CRO
0x10a6b10a0245138065c54682d5f50379ab0108f2d11fa7738ea8a7bc40fd346467094432023-01-29 1:59:015 days 11 hrs ago Crow Finance: Router Cronos: WCRO Token3 CRO
0xbb70fbbd9289e500a858fdba55f5b4a53412ecd579c6842be8f44cb70901cca666727312023-01-26 16:07:237 days 21 hrs ago Crow Finance: Router Cronos: WCRO Token335 CRO
0xbb70fbbd9289e500a858fdba55f5b4a53412ecd579c6842be8f44cb70901cca666727312023-01-26 16:07:237 days 21 hrs ago 0x1c3755958472b573af3ad9b6a9deac415056e8e5 Crow Finance: Router335 CRO
0xc244cbcec0ed2f8479d50bd2b69ddf46c27589e64683445329b33cdf92a0966766720402023-01-26 15:01:497 days 22 hrs ago Crow Finance: Router Cronos: WCRO Token530.357407355079137417 CRO
0xc244cbcec0ed2f8479d50bd2b69ddf46c27589e64683445329b33cdf92a0966766720402023-01-26 15:01:497 days 22 hrs ago 0x1c3755958472b573af3ad9b6a9deac415056e8e5 Crow Finance: Router530.357407355079137417 CRO
0x188c3b097c3b29d07ceb0764f415c8df6235c4472ca3382bba99329fb2613b2766482792023-01-25 1:37:489 days 11 hrs ago Crow Finance: Router Cronos: WCRO Token415 CRO
0x188c3b097c3b29d07ceb0764f415c8df6235c4472ca3382bba99329fb2613b2766482792023-01-25 1:37:489 days 11 hrs ago 0x1c3755958472b573af3ad9b6a9deac415056e8e5 Crow Finance: Router415 CRO
0x292afd1ff0b1b14931283d80045ef323cfdc4f7c9ca83c8b24bd28b08b9f1e6d66409552023-01-24 14:06:289 days 23 hrs ago Crow Finance: Router Cronos: WCRO Token15.42068811111184091 CRO
0x292afd1ff0b1b14931283d80045ef323cfdc4f7c9ca83c8b24bd28b08b9f1e6d66409552023-01-24 14:06:289 days 23 hrs ago 0x1c3755958472b573af3ad9b6a9deac415056e8e5 Crow Finance: Router15.42068811111184091 CRO
0x44752b3d232cf9b12cc353f2a791d062573aa4fd049d79e05d7f52020e323ce066295272023-01-23 20:10:1710 days 17 hrs ago Crow Finance: Router Cronos: WCRO Token37.174384427544105454 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CrowRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-01-31
*/

pragma solidity =0.6.6;


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

library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        
        (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 {
        
        (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 {
        
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

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

interface ICrowRouter01 {
    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 ICrowRouter02 is ICrowRouter01 {
    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 ICrowPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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 CrowLibrary {
    using SafeMath for uint;

    
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'CrowLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'CrowLibrary: ZERO_ADDRESS');
    }

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

    
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = ICrowPair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'CrowLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'CrowLibrary: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'CrowLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CrowLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(998);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'CrowLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CrowLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(998);
        amountIn = (numerator / denominator).add(1);
    }

    
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'CrowLibrary: 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);
        }
    }

    
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'CrowLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

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

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

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

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

contract CrowRouter is ICrowRouter02 {
    using SafeMath for uint;

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

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

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

    receive() external payable {
        assert(msg.sender == WETH); 
    }

    
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        
        if (ICrowFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            ICrowFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = CrowLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = CrowLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'CrowRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = CrowLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'CrowRouter: 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 = CrowLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = ICrowPair(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 = CrowLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = ICrowPair(pair).mint(to);
        
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    
    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 = CrowLibrary.pairFor(factory, tokenA, tokenB);
        ICrowPair(pair).transferFrom(msg.sender, pair, liquidity); 
        (uint amount0, uint amount1) = ICrowPair(pair).burn(to);
        (address token0,) = CrowLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'CrowRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'CrowRouter: 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 = CrowLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        ICrowPair(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 = CrowLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICrowPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    
    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 = CrowLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICrowPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    
    
    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,) = CrowLibrary.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 ? CrowLibrary.pairFor(factory, output, path[i + 2]) : _to;
            ICrowPair(CrowLibrary.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 = CrowLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CrowLibrary.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 = CrowLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CrowRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CrowLibrary.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, 'CrowRouter: INVALID_PATH');
        amounts = CrowLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CrowLibrary.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, 'CrowRouter: INVALID_PATH');
        amounts = CrowLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CrowRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CrowLibrary.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, 'CrowRouter: INVALID_PATH');
        amounts = CrowLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CrowLibrary.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, 'CrowRouter: INVALID_PATH');
        amounts = CrowLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'CrowRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CrowLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    
    
    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,) = CrowLibrary.sortTokens(input, output);
            ICrowPair pair = ICrowPair(CrowLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { 
            (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 = CrowLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? CrowLibrary.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, CrowLibrary.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,
            'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'CrowRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(CrowLibrary.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,
            'CrowRouter: 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, 'CrowRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CrowLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return CrowLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract ABI

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

60c060405234801561001057600080fd5b506040516200472b3803806200472b8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145a6620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372a528061376d5280613a4c5280613bcb528061402752806140d5528061415552506145a66000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b031661345e565b85600081518110610fe657fe5b602002602001015161351e565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367b915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c1565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f61345e565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367b915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c192505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602281526020018061454f6022913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061345e565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a61351e565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139f5915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0016565b10156118935760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139f5915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367b915050565b5095945050505050565b6000610dbe848484613d50565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c192505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602281526020018061454f6022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e40565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139f5915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c61345e565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613f02565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b815260040180806020018281038252602181526020018061447a6021913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260218152602001806144136021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061345e565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613ff6565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e61345e565b90506128f88d33838861351e565b6129048c33838761351e565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613ff6565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061345e565b9050612a748b33838861351e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c192505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b815260040180806020018281038252602281526020018061454f6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367b915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144e86023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602681526020018061449b6026913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260238152602001806143f06023913960400191505060405180910390fd5b60006132c5856103e663ffffffff61426a16565b905060006132d9828563ffffffff61426a16565b905060006132ff836132f3886103e863ffffffff61426a16565b9063ffffffff6142cd16565b905080828161330a57fe5b04979650505050505050565b606060028251101561336b576040805162461bcd60e51b8152602060048201526019602482015278086e4deee98d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338357600080fd5b506040519080825280602002602001820160405280156133ad578160200160208202803683370190505b50905082816000815181106133be57fe5b60200260200101818152505060005b600183510381101561345657600080613410878685815181106133ec57fe5b602002602001015187866001018151811061340357fe5b602002602001015161431c565b9150915061343284848151811061342357fe5b60200260200101518383613226565b84846001018151811061344157fe5b602090810291909101015250506001016133cd565b509392505050565b600080600061346d8585613f02565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f4b79ce49ed81fea5264e35c2533dee5fcdd6a2261e78da994c40facc823dc396609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a35780518252601f199092019160209182019101613584565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613605576040519150601f19603f3d011682016040523d82523d6000602084013e61360a565b606091505b5091509150818015613638575080511580613638575080806020019051602081101561363557600080fd5b50515b6136735760405162461bcd60e51b815260040180806020018281038252602481526020018061452b6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bb5760008084838151811061369957fe5b60200260200101518584600101815181106136b057fe5b60200260200101519150915060006136c88383613f02565b50905060008785600101815181106136dc57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370a5782600061370e565b6000835b91509150600060028a510388106137255788613766565b6137667f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375957fe5b602002602001015161345e565b90506137937f0000000000000000000000000000000000000000000000000000000000000000888861345e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d0576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613841578181015183820152602001613829565b50505050905090810190601f16801561386e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389057600080fd5b505af11580156138a4573d6000803e3d6000fd5b50506001909901985061367e975050505050505050565b50505050565b6060600282511015613916576040805162461bcd60e51b8152602060048201526019602482015278086e4deee98d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561392e57600080fd5b50604051908082528060200260200182016040528015613958578160200160208202803683370190505b509050828160018351038151811061396c57fe5b60209081029190910101528151600019015b8015613456576000806139ae8786600186038151811061399a57fe5b602002602001015187868151811061340357fe5b915091506139d08484815181106139c157fe5b60200260200101518383613d50565b8460018503815181106139df57fe5b602090810291909101015250506000190161397e565b60005b600183510381101561322157600080848381518110613a1357fe5b6020026020010151858460010181518110613a2a57fe5b6020026020010151915091506000613a428383613f02565b5090506000613a727f0000000000000000000000000000000000000000000000000000000000000000858561345e565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ab357600080fd5b505afa158015613ac7573d6000803e3d6000fd5b505050506040513d6060811015613add57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b13578284613b16565b83835b91509150613b74828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b81868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bab57826000613baf565b6000835b91509150600060028c51038a10613bc6578a613bfa565b613bfa7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375957fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c84578181015183820152602001613c6c565b50505050905090810190601f168015613cb15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cd357600080fd5b505af1158015613ce7573d6000803e3d6000fd5b50506001909b019a506139f89950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d905760405162461bcd60e51b81526004018080602001828103825260278152602001806144c16027913960400191505060405180910390fd5b600083118015613da05750600082115b613ddb5760405162461bcd60e51b81526004018080602001828103825260238152602001806143f06023913960400191505060405180910390fd5b6000613dff6103e8613df3868863ffffffff61426a16565b9063ffffffff61426a16565b90506000613e196103e6613df3868963ffffffff613d0016565b9050613e366001828481613e2957fe5b049063ffffffff6142cd16565b9695505050505050565b6000808411613e96576040805162461bcd60e51b815260206004820181905260248201527f43726f774c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015613ea65750600082115b613ee15760405162461bcd60e51b81526004018080602001828103825260238152602001806143f06023913960400191505060405180910390fd5b82613ef2858463ffffffff61426a16565b81613ef957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f6c576040805162461bcd60e51b815260206004820181905260248201527f43726f774c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610613f8c578284613f8f565b83835b90925090506001600160a01b038216613fef576040805162461bcd60e51b815260206004820152601960248201527f43726f774c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561407057600080fd5b505afa158015614084573d6000803e3d6000fd5b505050506040513d602081101561409a57600080fd5b50516001600160a01b0316141561414d57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561412057600080fd5b505af1158015614134573d6000803e3d6000fd5b505050506040513d602081101561414a57600080fd5b50505b60008061417b7f00000000000000000000000000000000000000000000000000000000000000008b8b61431c565b9150915081600014801561418d575080155b1561419d5787935086925061425d565b60006141aa898484613e40565b90508781116141fd57858110156141f25760405162461bcd60e51b81526004018080602001828103825260218152602001806144136021913960400191505060405180910390fd5b88945092508261425b565b600061420a898486613e40565b90508981111561421657fe5b878110156142555760405162461bcd60e51b815260040180806020018281038252602181526020018061447a6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142855750508082028282828161428257fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080600061432b8585613f02565b50905061433986868661345e565b5060008061434888888861345e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561438057600080fd5b505afa158015614394573d6000803e3d6000fd5b505050506040513d60608110156143aa57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143dd5780826143e0565b81815b9099909850965050505050505056fe43726f774c6962726172793a20494e53554646494349454e545f4c495155494449545943726f77526f757465723a20494e53554646494349454e545f425f414d4f554e5443726f77526f757465723a20455850495245440000000000000000000000000043726f77526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5443726f77526f757465723a20494e53554646494349454e545f415f414d4f554e5443726f774c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5443726f774c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454443726f77526f757465723a20494e56414c49445f5041544800000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454443726f77526f757465723a204558434553534956455f494e5055545f414d4f554e54a26469706673582212207dadaf429efe5475acee106178323b9a8128908c14a279002909fd34fc540f9664736f6c63430006060033000000000000000000000000ddcf30c1a85e5a60d85310d6b0d3952a75a00db40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

000000000000000000000000ddcf30c1a85e5a60d85310d6b0d3952a75a00db40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ddcf30c1a85e5a60d85310d6b0d3952a75a00db4
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Deployed ByteCode Sourcemap

14311:17612:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14776:10;-1:-1:-1;;;;;14790:4:0;14776:18;;14769:26;;;;14311:17612;;12:1:-1;9;2:12;18639:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18639:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18639:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30887:257;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30887:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30887:257:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25532:830;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25532:830:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25532:830:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25532:830:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25532: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;25532:830:0;;-1:-1:-1;25532:830:0;-1:-1:-1;;;;;;25532: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;25532:830:0;;;;;;;;;;;;;;;;;31672:248;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31672:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31672:248:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31672:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31672:248: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;31672:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31672:248:0;;-1:-1:-1;31672:248:0;;-1:-1:-1;;;;;31672:248:0:i;19318:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19318:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19318:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22819:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22819:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22819:613:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22819:613:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22819:613: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;22819:613:0;;-1:-1:-1;22819:613:0;-1:-1:-1;;;;;;22819:613:0;;;;;;;;:::i;24718:808::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24718:808:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24718:808:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24718:808:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24718: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;24718:808:0;;-1:-1:-1;24718:808:0;-1:-1:-1;;;;;;24718:808:0;;;;;;;;:::i;21370:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21370:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21370:708:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28303:704::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28303:704:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28303:704:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28303:704:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28303: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;28303:704:0;;-1:-1:-1;28303:704:0;-1:-1:-1;;;;;;28303:704:0;;;;;;;;:::i;29854:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29854:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29854:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29854:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29854:828: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;29854:828:0;;-1:-1:-1;29854:828:0;-1:-1:-1;;;;;;29854:828:0;;;;;;;;:::i;24035:677::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24035:677:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24035:677:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24035: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;24035:677:0;;-1:-1:-1;24035:677:0;-1:-1:-1;;;;;;24035:677:0;;;;;;;;:::i;31152:256::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31152:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31152:256:0;;;;;;;;;;;;:::i;23438:591::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23438:591:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23438:591:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23438:591:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23438:591: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;23438:591:0;;-1:-1:-1;23438:591:0;-1:-1:-1;;;;;;23438:591:0;;;;;;;;:::i;14435:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14435:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;14435:38:0;;;;;;;;;;;;;;30696:183;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30696:183:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30696:183:0;;;;;;;;;;;;:::i;20664:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20664:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20664:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29013:835::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29013:835:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29013:835:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29013:835: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;29013:835:0;;-1:-1:-1;29013:835:0;-1:-1:-1;;;;;;29013:835:0;;;;;;;;:::i;17823:810::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17823:810:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17823:810:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14387:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14387:41:0;;;:::i;31416:248::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31416:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31416:248:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31416:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31416:248: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;31416:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31416:248:0;;-1:-1:-1;31416:248:0;;-1:-1:-1;;;;;31416:248:0:i;19991:659::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19991:659:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19991:659:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16137:728::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16137:728:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16137:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;16871:938;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16871:938:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26368:764::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26368:764:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26368:764:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26368:764: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;26368:764:0;;-1:-1:-1;26368:764:0;-1:-1:-1;;;;;;26368:764:0;;;;;;;;:::i;18639:673::-;18876:16;18894:14;18857:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;18948:196:::1;18978:5;18998:4;19017:9;19041:14;19070:12;19105:4;19125:8;18948:15;:196::i;:::-;18921:223:::0;;-1:-1:-1;18921:223:0;-1:-1:-1;19155:51:0::1;19183:5:::0;19190:2;18921:223;19155:27:::1;:51::i;:::-;19223:4;-1:-1:-1::0;;;;;19217:20:0::1;;19238:9;19217:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19217:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19217:31:0;;;;19259:45;19290:2;19294:9;19259:30;:45::i;:::-;18639:673:::0;;;;;;;;;;:::o;30887:257::-;31040:14;31079:57;31104:8;31114:9;31125:10;31079:24;:57::i;:::-;31072:64;30887:257;-1:-1:-1;;;;30887:257:0:o;25532:830::-;25746:21;25718:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25818:4:0::1;25793:29;:4:::0;;-1:-1:-1;;25798:15:0;;25793:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25793:21:0::1;-1:-1:-1::0;;;;;25793:29:0::1;;25785:66;;;::::0;;-1:-1:-1;;;25785:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25785:66:0;;;;;;;;;;;;;::::1;;25872:50;25898:7;25907:8;25917:4;;25872:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25872:25:0::1;::::0;-1:-1:-1;;;25872:50:0:i:1;:::-;25862:60;;25972:12;25941:7;25966:1;25949:7;:14;:18;25941:27;;;;;;;;;;;;;;:43;;25933:94;;;;-1:-1:-1::0;;;25933:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26038:136;26084:4;;26089:1;26084:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26084:7:0::1;26093:10;26105:46;26125:7;26134:4;;26139:1;26134:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26134:7:0::1;26143:4;;26148:1;26143:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26143:7:0::1;26105:19;:46::i;:::-;26153:7;26161:1;26153:10;;;;;;;;;;;;;;26038:31;:136::i;:::-;26185:35;26191:7;26200:4;;26185:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26214:4:0::1;::::0;-1:-1:-1;26185:5:0::1;::::0;-1:-1:-1;;26185:35:0:i:1;:::-;26237:4;-1:-1:-1::0;;;;;26231:20:0::1;;26252:7;26277:1;26260:7;:14;:18;26252:27;;;;;;;;;;;;;;26231:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26231:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26231:49:0;;;;26291:63;26322:2;26326:7;26351:1;26334:7;:14;:18;26326:27;;;;;;;;;;;;;;26291:30;:63::i;:::-;25532:830:::0;;;;;;;;;:::o;31672:248::-;31816:21;31862:50;31887:7;31896:9;31907:4;31862:24;:50::i;:::-;31855:57;;31672:248;;;;;:::o;19318:667::-;19624:12;19638;19663;19678:44;19698:7;19707:6;19715;19678:19;:44::i;:::-;19663:59;;19733:10;19746;:33;;19770:9;19746:33;;;-1:-1:-1;;19746:33:0;19790:75;;;-1:-1:-1;;;19790:75:0;;19813:10;19790:75;;;;19833:4;19790:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19733:46;;-1:-1:-1;;;;;;19790:22:0;;;;;:75;;;;;-1:-1:-1;;19790:75:0;;;;;;;;-1:-1:-1;19790:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;19790:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19790:75:0;;;;19897:80;19913:6;19921;19929:9;19940:10;19952;19964:2;19968:8;19897:15;:80::i;:::-;19876:101;;;;;;;;19318:667;;;;;;;;;;;;;;;;:::o;22819:613::-;23043:21;23024:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;23087:50:::1;23113:7;23122:8;23132:4;;23087:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23087:25:0::1;::::0;-1:-1:-1;;;23087:50:0:i:1;:::-;23077:60;;23187:12;23156:7;23181:1;23164:7;:14;:18;23156:27;;;;;;;;;;;;;;:43;;23148:94;;;;-1:-1:-1::0;;;23148:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23253:136;23299:4;;23304:1;23299:7;;;;;;23253:136;23400:24;23406:7;23415:4;;23400:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23421:2:0;;-1:-1:-1;23400:5:0::1;::::0;-1:-1:-1;;23400:24:0:i:1;24718:808::-:0;24932:21;24904:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25004:4:0::1;24979:29;:4:::0;;-1:-1:-1;;24984:15:0;;24979:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24979:21:0::1;-1:-1:-1::0;;;;;24979:29:0::1;;24971:66;;;::::0;;-1:-1:-1;;;24971:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24971:66:0;;;;;;;;;;;;;::::1;;25058:50;25083:7;25092:9;25103:4;;25058:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25058:24:0::1;::::0;-1:-1:-1;;;25058:50:0:i:1;:::-;25048:60;;25141:11;25127:7;25135:1;25127:10;;;;;;;;;;;;;;:25;;25119:72;;;;-1:-1:-1::0;;;25119:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21370:708:::0;21688:14;21715:12;21730:41;21750:7;21759:5;21766:4;21730:19;:41::i;:::-;21715:56;;21782:10;21795;:33;;21819:9;21795:33;;;-1:-1:-1;;21795:33:0;21839:75;;;-1:-1:-1;;;21839:75:0;;21862:10;21839:75;;;;21882:4;21839:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21782:46;;-1:-1:-1;;;;;;21839:22:0;;;;;:75;;;;;-1:-1:-1;;21839:75:0;;;;;;;;-1:-1:-1;21839:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;21839:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21839:75:0;;;;21937:133;21999:5;22006:9;22017:14;22033:12;22047:2;22051:8;21937:47;:133::i;:::-;21925:145;21370:708;-1:-1:-1;;;;;;;;;;;;;21370:708:0:o;28303:704::-;28537:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;28558:134:::1;28604:4;;28609:1;28604:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28604:7:0::1;28613:10;28625:46;28645:7;28654:4;;28659:1;28654:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28654:7:0::1;28663:4;;28668:1;28663:7;;;;;;28625:46;28673:8;28558:31;:134::i;:::-;28703:18;28731:4:::0;;-1:-1:-1;;28736:15:0;;28731:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28731:21:0::1;-1:-1:-1::0;;;;;28724:39:0::1;;28764:2;28724:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;28724:43:0::1;-1:-1:-1::0;;;;;28724:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28724:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28724:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28724:43:0;28778:44:::1;::::0;;28724:43:::1;28778:44:::0;;::::1;::::0;;;;;;;;;;;28724:43;;-1:-1:-1;28778:44:0::1;::::0;;;28813:4;;;;;;28778:44;::::1;::::0;28813:4;;28778:44;28813:4;28778:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28819:2:0;;-1:-1:-1;28778:34:0::1;::::0;-1:-1:-1;;28778:44:0:i:1;:::-;28921:12:::0;28855:62:::1;28903:13:::0;28862:4;;-1:-1:-1;;28867:15:0;;28862:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28862:21:0::1;-1:-1:-1::0;;;;;28855:39:0::1;;28895:2;28855:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;28855:43:0::1;-1:-1:-1::0;;;;;28855:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28855:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28855:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28855:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;28833:166;;;;-1:-1:-1::0;;;28833:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14594:1;28303:704:::0;;;;;;;:::o;29854:828::-;30121:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30180:4:0::1;30155:29;:4:::0;;-1:-1:-1;;30160:15:0;;30155:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30155:21:0::1;-1:-1:-1::0;;;;;30155:29:0::1;;30147:66;;;::::0;;-1:-1:-1;;;30147:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30147:66:0;;;;;;;;;;;;;::::1;;30224:134;30270:4;;30275:1;30270:7;;;;;;30224:134;30369:55;30404:4;;30369:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30418:4:0::1;::::0;-1:-1:-1;30369:34:0::1;::::0;-1:-1:-1;;30369:55:0:i:1;:::-;30452:37;::::0;;-1:-1:-1;;;30452:37:0;;30483:4:::1;30452:37;::::0;::::1;::::0;;;30435:14:::1;::::0;-1:-1:-1;;;;;30459:4:0::1;30452:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;30452:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30452:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30452:37:0;;-1:-1:-1;30508:25:0;;::::1;;30500:76;;;;-1:-1:-1::0;;;30500:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30593:4;-1:-1:-1::0;;;;;30587:20:0::1;;30608:9;30587:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30587:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30587:31:0;;;;30629:45;30660:2;30664:9;30629:30;:45::i;24035:677::-:0;24251:21;24223:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;24309:4:::1;-1:-1:-1::0;;;;;24298:15:0::1;:4;;24303:1;24298:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24298:7:0::1;-1:-1:-1::0;;;;;24298:15:0::1;;24290:52;;;::::0;;-1:-1:-1;;;24290:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24290:52:0;;;;;;;;;;;;;::::1;;24363:51;24389:7;24398:9;24409:4;;24363:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24363:25:0::1;::::0;-1:-1:-1;;;24363:51:0:i:1;:::-;24353:61;;24464:12;24433:7;24458:1;24441:7;:14;:18;24433:27;;;;;;;;;;;;;;:43;;24425:94;;;;-1:-1:-1::0;;;24425:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24536:4;-1:-1:-1::0;;;;;24530:19:0::1;;24557:7;24565:1;24557:10;;;;;;;;;;;;;;24530:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24530:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24530:40:0;;;;;24594:4;-1:-1:-1::0;;;;;24588:20:0::1;;24609:46;24629:7;24638:4;;24643:1;24638:7;;;;;;24609:46;24657:7;24665:1;24657:10;;;;;;;;;;;;;;24588:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;24588:80:0::1;-1:-1:-1::0;;;;;24588:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24588:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24588:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24588:80:0;24581:88:::1;;;;24680:24;24686:7;24695:4;;24680:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24701:2:0;;-1:-1:-1;24680:5:0::1;::::0;-1:-1:-1;;24680:24:0:i:1;:::-;24035:677:::0;;;;;;;;:::o;31152:256::-;31305:13;31343:57;31367:9;31378;31389:10;31343:23;:57::i;23438:591::-;23662:21;23643:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;23706:50:::1;23731:7;23740:9;23751:4;;23706:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23706:24:0::1;::::0;-1:-1:-1;;;23706:50:0:i:1;:::-;23696:60;;23789:11;23775:7;23783:1;23775:10;;;;;;;;;;;;;;:25;;23767:72;;;;-1:-1:-1::0;;;23767:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14435:38:::0;;;:::o;30696:183::-;30793:12;30825:46;30843:7;30852:8;30862;30825:17;:46::i;20664:700::-;20930:14;20911:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;20973:196:::1;21003:5;21023:4;21042:9;21066:14;21095:12;21130:4;21150:8;20973:15;:196::i;:::-;21219:38;::::0;;-1:-1:-1;;;21219:38:0;;21251:4:::1;21219:38;::::0;::::1;::::0;;;20957:212;;-1:-1:-1;21180:78:0::1;::::0;-1:-1:-1;21208:5:0;;21215:2;;-1:-1:-1;;;;;21219: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;21219:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21219:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21219:38:0;21180:27:::1;:78::i;:::-;21275:4;-1:-1:-1::0;;;;;21269:20:0::1;;21290:9;21269:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21269:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21269:31:0;;;;21311:45;21342:2;21346:9;21311:30;:45::i;29013:835::-:0;29273:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;29318:4:::1;-1:-1:-1::0;;;;;29307:15:0::1;:4;;29312:1;29307:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29307:7:0::1;-1:-1:-1::0;;;;;29307:15:0::1;;29299:52;;;::::0;;-1:-1:-1;;;29299:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29299:52:0;;;;;;;;;;;;;::::1;;29362:13;29378:9;29362:25;;29404:4;-1:-1:-1::0;;;;;29398:19:0::1;;29425:8;29398:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29398:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29398:38:0;;;;;29460:4;-1:-1:-1::0;;;;;29454:20:0::1;;29475:46;29495:7;29504:4;;29509:1;29504:7;;;;;;29475:46;29523:8;29454:78;;;;;;;;;;;;;-1:-1:-1::0;;;;;29454:78:0::1;-1:-1:-1::0;;;;;29454:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29454:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29454:78:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29454:78:0;29447:86:::1;;;;29544:18;29572:4:::0;;-1:-1:-1;;29577:15:0;;29572:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29572:21:0::1;-1:-1:-1::0;;;;;29565:39:0::1;;29605:2;29565:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;29565:43:0::1;-1:-1:-1::0;;;;;29565:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29565:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29565:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29565:43:0;29619:44:::1;::::0;;29565:43:::1;29619:44:::0;;::::1;::::0;;;;;;;;;;;29565:43;;-1:-1:-1;29619:44:0::1;::::0;;;29654:4;;;;;;29619:44;::::1;::::0;29654:4;;29619:44;29654:4;29619:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29660:2:0;;-1:-1:-1;29619:34:0::1;::::0;-1:-1:-1;;29619:44:0:i:1;:::-;29762:12:::0;29696:62:::1;29744:13:::0;29703:4;;-1:-1:-1;;29708:15:0;;29703:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29703:21:0::1;-1:-1:-1::0;;;;;29696:39:0::1;;29736:2;29696:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;29696:43:0::1;-1:-1:-1::0;;;;;29696:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;17823:810:0::0;18077:12;18091;18058:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;18116:12:::1;18131:44;18151:7;18160:6;18168;18131:19;:44::i;:::-;18186:57;::::0;;-1:-1:-1;;;18186:57:0;;18215:10:::1;18186:57;::::0;::::1;::::0;-1:-1:-1;;;;;18186:28:0;::::1;:57:::0;;;;;;;;;;;;;;18116:59;;-1:-1:-1;18186:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;18186:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18186:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18186:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;18286:24:0::1;::::0;;-1:-1:-1;;;18286:24:0;;-1:-1:-1;;;;;18286:24:0;;::::1;;::::0;::::1;::::0;;;18256:12:::1;::::0;;;18286:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;18256:12;18286:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18286:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18286:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18286:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;18286:24:0;-1:-1:-1;18322:14:0::1;18341:38;18364:6:::0;18372;18341:22:::1;:38::i;:::-;18321:58;;;18421:6;-1:-1:-1::0;;;;;18411:16:0::1;:6;-1:-1:-1::0;;;;;18411:16:0::1;;:58;;18452:7;18461;18411:58;;;18431:7;18440;18411:58;18390:79:::0;;-1:-1:-1;18390:79:0;-1:-1:-1;18488:21:0;;::::1;;18480:67;;;;-1:-1:-1::0;;;18480:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18577:10;18566:7;:21;;18558:67;;;;-1:-1:-1::0;;;18558:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14594:1;;;;17823:810:::0;;;;;;;;;;;:::o;14387:41::-;;;:::o;31416:248::-;31560:21;31606:50;31632:7;31641:8;31651:4;31606:25;:50::i;19991:659::-;20280:16;20298:14;20325:12;20340:41;20360:7;20369:5;20376:4;20340:19;:41::i;:::-;20325:56;;20392:10;20405;:33;;20429:9;20405:33;;;-1:-1:-1;;20405:33:0;20449:75;;;-1:-1:-1;;;20449:75:0;;20472:10;20449:75;;;;20492:4;20449:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20392:46;;-1:-1:-1;;;;;;20449:22:0;;;;;:75;;;;;-1:-1:-1;;20449:75:0;;;;;;;;-1:-1:-1;20449:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;20449:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20449:75:0;;;;20562:80;20581:5;20588:9;20599:14;20615:12;20629:2;20633:8;20562:18;:80::i;:::-;20535:107;;;;-1:-1:-1;19991:659:0;-1:-1:-1;;;;;;;;;;;;;19991:659:0:o;16137:728::-;16425:12;16439;16453:14;16406:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;16501:85:::1;16515:6;16523;16531:14;16547;16563:10;16575;16501:13;:85::i;:::-;16480:106:::0;;-1:-1:-1;16480:106:0;-1:-1:-1;16597:12:0::1;16612:44;16632:7;16641:6:::0;16649;16612:19:::1;:44::i;:::-;16597:59;;16667:66;16699:6;16707:10;16719:4;16725:7;16667:31;:66::i;:::-;16744;16776:6;16784:10;16796:4;16802:7;16744:31;:66::i;:::-;16843:4;-1:-1:-1::0;;;;;16833:20:0::1;;16854:2;16833:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;16833:24:0::1;-1:-1:-1::0;;;;;16833:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16833:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16833:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16833:24:0;16137:728;;;;-1:-1:-1;16833:24:0;;-1:-1:-1;16137:728:0;;-1:-1:-1;;;;;;;;;16137:728:0:o;16871:938::-;17124:16;17142:14;17158;17105:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;17212:176:::1;17240:5;17260:4;17279:18;17312:9;17336:14;17365:12;17212:13;:176::i;:::-;17185:203:::0;;-1:-1:-1;17185:203:0;-1:-1:-1;17399:12:0::1;17414:41;17434:7;17443:5:::0;17450:4:::1;17414:19;:41::i;:::-;17399:56;;17466:69;17498:5;17505:10;17517:4;17523:11;17466:31;:69::i;:::-;17552:4;-1:-1:-1::0;;;;;17546:19:0::1;;17573:9;17546:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17546:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17546:39:0;;;;;17609:4;-1:-1:-1::0;;;;;17603:20:0::1;;17624:4;17630:9;17603:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;17603:37:0::1;-1:-1:-1::0;;;;;17603:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17603:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17603:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17603:37:0;17596:45:::1;;;;17674:4;-1:-1:-1::0;;;;;17664:20:0::1;;17685:2;17664:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;17664:24:0::1;-1:-1:-1::0;;;;;17664:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17664:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17664:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17664:24:0;;-1:-1:-1;17713:9:0::1;:21:::0;-1:-1:-1;17709:92:0::1;;;17736:65;17767:10;17791:9;17779;:21;17736:30;:65::i;:::-;14594:1;16871:938:::0;;;;;;;;;;;:::o;26368:764::-;26581:21;26553:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;26639:4:::1;-1:-1:-1::0;;;;;26628:15:0::1;:4;;26633:1;26628:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26628:7:0::1;-1:-1:-1::0;;;;;26628:15:0::1;;26620:52;;;::::0;;-1:-1:-1;;;26620:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26620:52:0;;;;;;;;;;;;;::::1;;26693:50;26718:7;26727:9;26738:4;;26693:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26693:24:0::1;::::0;-1:-1:-1;;;26693:50:0:i:1;:::-;26683:60;;26776:9;26762:7;26770:1;26762:10;;;;;;;;;;;;;;:23;;26754:70;;;;-1:-1:-1::0;;;26754:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26841:4;-1:-1:-1::0;;;;;26835:19:0::1;;26862:7;26870:1;26862:10;;;;;;;;;;;;;;26835:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26835:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26835:40:0;;;;;26899:4;-1:-1:-1::0;;;;;26893:20:0::1;;26914:46;26934:7;26943:4;;26948:1;26943:7;;;;;;26914:46;26962:7;26970:1;26962:10;;;;;;;;;;;;;;26893:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;26893:80:0::1;-1:-1:-1::0;;;;;26893:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26893:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26893:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26893:80:0;26886:88:::1;;;;26985:24;26991:7;27000:4;;26985:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27006:2:0;;-1:-1:-1;26985:5:0::1;::::0;-1:-1:-1;;26985:24:0:i:1;:::-;27046:7;27054:1;27046:10;;;;;;;;;;;;;;27034:9;:22;27030:94;;;27058:66;27089:10;27113:7;27121:1;27113:10;;;;;;;;;;;;;;27101:9;:22;27058:30;:66::i;1016:304::-:0;1154:45;;;-1:-1:-1;;;;;1154:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1154:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1143:57:0;;;;1108:12;;1122:17;;1143:10;;;;1154:45;1143:57;;;25:18:-1;1143: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;;;1143: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;;1107:93:0;;;;1219:7;:57;;;;-1:-1:-1;1231:11:0;;:16;;:44;;;1262:4;1251:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1251:24:0;1231:44;1211:101;;;;;-1:-1:-1;;;1211:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1016:304;;;;;:::o;1669:195::-;1777:12;;;1739;1777;;;;;;;;;-1:-1:-1;;;;;1756:7:0;;;1770:5;;1756: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;;;1756: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;;1738:52:0;;;1809:7;1801:55;;;;-1:-1:-1;;;1801:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1669:195;;;:::o;11269:507::-;11362:14;11408:1;11397:8;:12;11389:63;;;;-1:-1:-1;;;11389:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11483:1;11471:9;:13;:31;;;;;11501:1;11488:10;:14;11471:31;11463:79;;;;-1:-1:-1;;;11463:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11553:20;11576:17;:8;11589:3;11576:17;:12;:17;:::i;:::-;11553:40;-1:-1:-1;11604:14:0;11621:31;11553:40;11641:10;11621:31;:19;:31;:::i;:::-;11604:48;-1:-1:-1;11663:16:0;11682:40;11706:15;11682:19;:9;11696:4;11682:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;11663:59;;11757:11;11745:9;:23;;;;;;;11269:507;-1:-1:-1;;;;;;;11269:507:0:o;12266:506::-;12367:21;12424:1;12409:4;:11;:16;;12401:54;;;;;-1:-1:-1;;;12401:54:0;;;;;;;;;;;;-1:-1:-1;;;12401:54:0;;;;;;;;;;;;;;;12487:4;:11;12476:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12476:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12476:23:0;;12466:33;;12523:8;12510:7;12518:1;12510:10;;;;;;;;;;;;;:21;;;;;12547:6;12542:223;12573:1;12559:4;:11;:15;12555:1;:19;12542:223;;;12597:14;12613:15;12632:42;12644:7;12653:4;12658:1;12653:7;;;;;;;;;;;;;;12662:4;12667:1;12671;12667:5;12662:11;;;;;;;;;;;;;;12632;:42::i;:::-;12596:78;;;;12706:47;12719:7;12727:1;12719:10;;;;;;;;;;;;;;12731:9;12742:10;12706:12;:47::i;:::-;12689:7;12697:1;12701;12697:5;12689:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;12576:3:0;;12542:223;;;;12266:506;;;;;:::o;10026:461::-;10115:12;10141:14;10157;10175:26;10186:6;10194;10175:10;:26::i;:::-;10339:32;;;-1:-1:-1;;10339:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10339:32:0;;;;;10329:43;;;;;;-1:-1:-1;;;;;;10242:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10242:234:0;;;;;;;10232:245;;;;;;;;;10026:461;-1:-1:-1;;;;;10026:461:0:o;1328:333::-;1484:51;;;-1:-1:-1;;;;;1484:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1484:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1473:63:0;;;;1438:12;;1452:17;;1473:10;;;;1484:51;1473:63;;;25:18:-1;1473: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;;;1473: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;;1437:99:0;;;;1555:7;:57;;;;-1:-1:-1;1567:11:0;;:16;;:44;;;1598:4;1587:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1587:24:0;1567:44;1547:106;;;;-1:-1:-1;;;1547:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1328:333;;;;;;:::o;22098:715::-;22205:6;22200:606;22231:1;22217:4;:11;:15;22213:1;:19;22200:606;;;22255:13;22270:14;22289:4;22294:1;22289:7;;;;;;;;;;;;;;22298:4;22303:1;22307;22303:5;22298:11;;;;;;;;;;;;;;22254:56;;;;22326:14;22345:37;22368:5;22375:6;22345:22;:37::i;:::-;22325:57;;;22397:14;22414:7;22422:1;22426;22422:5;22414:14;;;;;;;;;;;;;;22397:31;;22444:15;22461;22489:6;-1:-1:-1;;;;;22480:15:0;:5;-1:-1:-1;;;;;22480:15:0;;:61;;22522:9;22538:1;22480:61;;;22504:1;22508:9;22480:61;22443:98;;;;22556:10;22587:1;22573:4;:11;:15;22569:1;:19;:77;;22643:3;22569:77;;;22591:49;22611:7;22620:6;22628:4;22633:1;22637;22633:5;22628:11;;;;;;;;;;;;;;22591:19;:49::i;:::-;22556:90;;22671:43;22691:7;22700:5;22707:6;22671:19;:43::i;:::-;-1:-1:-1;;;;;22661:59:0;;22739:10;22751;22763:2;22777:1;22767:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;22767:12:0;87:42:-1;143:17;;-1:-1;22767:12:0;;22661:133;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22661:133:0;-1:-1:-1;;;;;22661:133: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;22661:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22661:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22234:3:0;;;;;-1:-1:-1;22200:606:0;;-1:-1:-1;;;;;;;;22200:606:0;;;22098:715;;;:::o;12786:527::-;12887:21;12944:1;12929:4;:11;:16;;12921:54;;;;;-1:-1:-1;;;12921:54:0;;;;;;;;;;;;-1:-1:-1;;;12921:54:0;;;;;;;;;;;;;;;13007:4;:11;12996:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12996:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12996:23:0;;12986:33;;13060:9;13030:7;13055:1;13038:7;:14;:18;13030:27;;;;;;;;;;;;;;;;;:39;13094:11;;-1:-1:-1;;13094:15:0;13080:226;13111:5;;13080:226;;13139:14;13155:15;13174:42;13186:7;13195:4;13204:1;13200;:5;13195:11;;;;;;;;;;;;;;13208:4;13213:1;13208:7;;;;;;;13174:42;13138:78;;;;13248:46;13260:7;13268:1;13260:10;;;;;;;;;;;;;;13272:9;13283:10;13248:11;:46::i;:::-;13231:7;13243:1;13239;:5;13231:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;13118:3:0;13080:226;;27152:1145;27265:6;27260:1030;27291:1;27277:4;:11;:15;27273:1;:19;27260:1030;;;27315:13;27330:14;27349:4;27354:1;27349:7;;;;;;;;;;;;;;27358:4;27363:1;27367;27363:5;27358:11;;;;;;;;;;;;;;27314:56;;;;27386:14;27405:37;27428:5;27435:6;27405:22;:37::i;:::-;27385:57;;;27457:14;27484:43;27504:7;27513:5;27520:6;27484:19;:43::i;:::-;27457:71;;27543:16;27574:17;27623:13;27638;27656:4;-1:-1:-1;;;;;27656:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27656:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27656:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27656:18:0;;;;;;;-1:-1:-1;;;;;27622:52:0;;;;-1:-1:-1;27622:52:0;;-1:-1:-1;27690:17:0;;-1:-1:-1;;;;;27731:15:0;;;;;;;:61;;27773:8;27783;27731:61;;;27750:8;27760;27731:61;27689:103;;;;27821:56;27864:12;27828:5;-1:-1:-1;;;;;27821:23:0;;27853:4;27821:38;;;;;;;;;;;;;-1:-1:-1;;;;;27821:38:0;-1:-1:-1;;;;;27821:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;27821:56:0;27807:70;;27907:66;27932:11;27945:12;27959:13;27907:24;:66::i;:::-;27892:81;;27260:1030;;;;28004:15;28021;28049:6;-1:-1:-1;;;;;28040:15:0;:5;-1:-1:-1;;;;;28040:15:0;;:67;;28085:12;28104:1;28040:67;;;28064:1;28068:12;28040:67;28003:104;;;;28122:10;28153:1;28139:4;:11;:15;28135:1;:19;:77;;28209:3;28135:77;;;28157:49;28177:7;28186:6;28194:4;28199:1;28203;28199:5;28194:11;;;;;;;28157:49;28265:12;;;28275:1;28265:12;;;;;;;;;;-1:-1:-1;;;28227:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;28227:51:0;;;;;;;;;;;;;;;;;;;;;;28122:90;;-1:-1:-1;28227:9:0;;;;;;28237:10;;28249;;28122:90;;28265:12;;28227:51;;;;;;;;28265:12;;28227:51;;;;28265: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;28227:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28227:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27294:3:0;;;;;-1:-1:-1;27260:1030:0;;-1:-1:-1;;;;;;;;;;27260:1030:0;9322:129;9406:5;;;9401:16;;;;9393:50;;;;;-1:-1:-1;;;9393:50:0;;;;;;;;;;;;-1:-1:-1;;;9393:50:0;;;;;;;;;;;;;;11790:462;11883:13;11929:1;11917:9;:13;11909:65;;;;-1:-1:-1;;;11909:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12005:1;11993:9;:13;:31;;;;;12023:1;12010:10;:14;11993:31;11985:79;;;;-1:-1:-1;;;11985:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12075:14;12092:34;12121:4;12092:24;:9;12106;12092:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;12075:51;-1:-1:-1;12137:16:0;12156:34;12186:3;12156:25;:10;12171:9;12156:25;:14;:25;:::i;:34::-;12137:53;;12212:32;12242:1;12225:11;12213:9;:23;;;;;;;12212:32;:29;:32;:::i;:::-;12201:43;11790:462;-1:-1:-1;;;;;;11790:462:0:o;10944:311::-;11026:12;11069:1;11059:7;:11;11051:56;;;;;-1:-1:-1;;;11051:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11137:1;11126:8;:12;:28;;;;;11153:1;11142:8;:12;11126:28;11118:76;;;;-1:-1:-1;;;11118:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11239:8;11215:21;:7;11227:8;11215:21;:11;:21;:::i;:::-;:32;;;;;;;10944:311;-1:-1:-1;;;;10944:311:0:o;9673:339::-;9748:14;9764;9809:6;-1:-1:-1;;;;;9799:16:0;:6;-1:-1:-1;;;;;9799:16:0;;;9791:61;;;;;-1:-1:-1;;;9791:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9891:6;-1:-1:-1;;;;;9882:15:0;:6;-1:-1:-1;;;;;9882:15:0;;:53;;9920:6;9928;9882:53;;;9901:6;9909;9882:53;9863:72;;-1:-1:-1;9863:72:0;-1:-1:-1;;;;;;9954:20:0;;9946:58;;;;;-1:-1:-1;;;9946:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9673:339;;;;;:::o;14818:1313::-;15089:45;;;-1:-1:-1;;;15089:45:0;;-1:-1:-1;;;;;15089:45:0;;;;;;;;;;;;;;;;15036:12;;;;;;15102:7;15089:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;15089:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15089:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15089:45:0;-1:-1:-1;;;;;15089:59:0;;15085:140;;;15165:48;;;-1:-1:-1;;;15165:48:0;;-1:-1:-1;;;;;15165:48:0;;;;;;;;;;;;;;;;15178:7;15165:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;15165:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;15165:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15165:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;15085:140:0;15236:13;15251;15268:48;15292:7;15301:6;15309;15268:23;:48::i;:::-;15235:81;;;;15331:8;15343:1;15331:13;:30;;;;-1:-1:-1;15348:13:0;;15331:30;15327:797;;;15400:14;;-1:-1:-1;15416:14:0;;-1:-1:-1;15327:797:0;;;15464:19;15486:53;15504:14;15520:8;15530;15486:17;:53::i;:::-;15464:75;;15576:14;15558;:32;15554:559;;15637:10;15619:14;:28;;15611:74;;;;-1:-1:-1;;;15611:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15726:14;;-1:-1:-1;15742:14:0;-1:-1:-1;15742:14:0;15554:559;;;15798:19;15820:53;15838:14;15854:8;15864;15820:17;:53::i;:::-;15798:75;;15917:14;15899;:32;;15892:40;;;;15977:10;15959:14;:28;;15951:74;;;;-1:-1:-1;;;15951:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16066:14;-1:-1:-1;16082:14:0;;-1:-1:-1;15554:559:0;15327:797;;14818:1313;;;;;;;;;;;:::o;9459:142::-;9511:6;9538;;;:30;;-1:-1:-1;;9553:5:0;;;9567:1;9562;9553:5;9562:1;9548:15;;;;;:20;9538:30;9530:63;;;;;-1:-1:-1;;;9530:63:0;;;;;;;;;;;;-1:-1:-1;;;9530:63:0;;;;;;;;;;;;;;9186:128;9270:5;;;9265:16;;;;9257:49;;;;;-1:-1:-1;;;9257:49:0;;;;;;;;;;;;-1:-1:-1;;;9257:49:0;;;;;;;;;;;;;;10501:429;10594:13;10609;10636:14;10655:26;10666:6;10674;10655:10;:26::i;:::-;10635:46;;;10692:32;10700:7;10709:6;10717;10692:7;:32::i;:::-;;10736:13;10751;10779:32;10787:7;10796:6;10804;10779:7;:32::i;:::-;-1:-1:-1;;;;;10769:55:0;;:57;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10769:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10769:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10769:57:0;;;;;;;-1:-1:-1;;;;;10735:91:0;;;;-1:-1:-1;10735:91:0;;-1:-1:-1;;;;;;10860:16:0;;;;;;;:62;;10903:8;10913;10860:62;;;10880:8;10890;10860:62;10837:85;;;;-1:-1:-1;10501:429:0;-1:-1:-1;;;;;;;10501:429:0:o

Swarm Source

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