Contract 0x730aCC3bBf2443f2EaEaCFc7ac7b4d8DC9E32dB8 1

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7b9455dd68481bbfe42adf955bac8440a1f809113a8f87e55fcd821cc11649f6Swap Exact Token...121371482021-10-27 14:08:251 min ago0xa93b94b9827b05b95b609831fa1f5bc5b20dae9d IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.000560725
0x85af41fe32d042631631899e07c5bd8a3ae9ce6686c1779f6c0b33bf001222eeRemove Liquidity...121371412021-10-27 14:07:591 min ago0x74f1405b5c05849ebee700a23d37a809aaec9386 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.00078842
0xf2f220a5b70e150a452da5c08c709f221f3dc8c53fe43957733721ac71a7a449Add Liquidity121371382021-10-27 14:07:481 min ago0xd5bdc077ecaad9052838d6b0de613a55c8d0e6d0 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.00068292
0x7d17824e6cc91c444cb00e4591854d04ae99eb5458382cbeb20ac516945c589dSwap Exact Token...121371322021-10-27 14:07:292 mins ago0x95fece4e339d0d8ad34153838841d5233c924f9a IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.00120019
0x0a4bf2b14000887a93a939070c87d27f72728eeb93080c73b698b9cf2c3f5bd2Remove Liquidity...121371302021-10-27 14:07:232 mins ago0x6b2a085c062dee7bc65c0f89b672d84b022cd5f5 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.00093775
0xb79fd5858b16f2ef5959db39ad94c5a4472cc2df0acc4b68ae1b756545bc7d18Swap Exact Token...121371272021-10-27 14:07:112 mins ago0xd5bdc077ecaad9052838d6b0de613a55c8d0e6d0 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.000636145
0x9558037b7591189e5cc250a5eb34877e89b243616b66d3f4dd45c109e61a2a21Swap Exact Token...121371262021-10-27 14:07:082 mins ago0xc83e5a3846373005e4b1a3827fef0e12c07a4b69 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.000560665
0x56a9d2f33b6e01c853f17e6e30a5212a599a57f939f8f23abfd28ce54bd58fd9Add Liquidity ET...121371182021-10-27 14:06:413 mins ago0x387de14dca5583ba6501fc9dcc5a459375b022d9 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80.923659101910162 BNB0.00068026
0x59fb42342fdf6efc1a49be9cf86454962c909fef1d98a3172c34875ec6f937bcRemove Liquidity...121370862021-10-27 14:04:504 mins ago0x4191d2848d7913d62b0a79e0aff9eabdad3cb8dc IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.00091826
0xb63a7f0284a77c5abcb91d9ae1806757eb170cd39a5cddf1338c9b779c364314Add Liquidity121370812021-10-27 14:04:325 mins ago0xd5bdc077ecaad9052838d6b0de613a55c8d0e6d0 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.00068451
0x8514ee4d03a33ca17a88f571cc3eb25e7c86c8337b9b47406129c635e8a1fec1Swap Exact Token...121370802021-10-27 14:04:295 mins ago0x60a1550dd34c4821a4282165b3fcae82e927d6a2 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.000485605
0x3c3c9d47f24f4a73afbea14f0bf70af506283859260ca8f847d76d3a6772e3c4Swap Exact Token...121370692021-10-27 14:03:555 mins ago0xd5bdc077ecaad9052838d6b0de613a55c8d0e6d0 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.000561145
0xe784e57e059e3de76b11c6608b602546fd4c535eebbb9ef03e20e2bf675b66bcSwap Tokens For ...121370582021-10-27 14:03:176 mins ago0x65187a5b3c4df84aa8892c8f45d76c319df77e3d IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.00112299
0xd439f60c7bb96b6c4fbe933e9a36fe9d004d9e21995a5bc073cc49df82f1ca38Swap Exact Token...121370502021-10-27 14:02:467 mins ago0x1c6b2085be72aa1b859767adccf642404858ec36 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.000560605
0xd1ab81be716b1fc130d49ae31c9eca9982ec85860753472f19a08502c4a4c7cbAdd Liquidity ET...121370492021-10-27 14:02:437 mins ago0x803ca6b63116dc371c51bdc6c3ee4c6ecdddfcf9 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80.081109723947967 BNB0.00068044
0x0b5a3cdef33f8ebc83e19efe7082a7bf969e7e5d14f8deb0e71d1f047a4a572fAdd Liquidity ET...121370342021-10-27 14:01:438 mins ago0xc34e3c8e92965f8e0bae3fb18c85c94f6c83fca3 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80.547833162966471 BNB0.00076675
0x762cc0ef2b5f92d8dce84a8e67adce531b36f5eb3710ef0ac2a4b15cf7a8c77dRemove Liquidity...121370052021-10-27 14:00:079 mins ago0x1c6b2085be72aa1b859767adccf642404858ec36 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.00066237
0x9fb7f224bf868dd531631a221bb050833b93987d8c87ab294228706eaa1a6605Add Liquidity ET...121370032021-10-27 14:00:019 mins ago0x2d93d4add286b46a4fa3c07e9d147aca3ea00433 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db87.227875604267332 BNB0.000792995
0xc93ebf4bb370b022f4b7afb3cb1fb96be549b23987ab2bf6a8acec72f98251e2Swap Exact Token...121370032021-10-27 14:00:019 mins ago0xf6688fcb8272a2947c4d9b3b674d0627fee30188 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.000485785
0xd85afe755abfed147c3216afa731ac5f0a1bc9f9ce97aee82c3370cf010da8ecSwap Exact Token...121370022021-10-27 13:59:589 mins ago0xc34e3c8e92965f8e0bae3fb18c85c94f6c83fca3 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.001911375
0x38c808b57e471ba52487b5a1c1b1ac26d968bd7f7ad804c7ca2d652bb483633cSwap Exact Token...121370012021-10-27 13:59:559 mins ago0xef4695c5764d4f723d01e4a18d52692b1bc1092e IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.001206825
0x038539314d790b109a4b89cc8ed8188a2719ece23f2d877b5e07536ae9d09fd0Swap Exact Token...121369982021-10-27 13:59:4610 mins ago0xc1bf09e0018b8dd43cc08dd1422a5e02609530a7 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.001162435
0xfad063154f960d21dfada0590e2407fe14f79d83d817133c64b48132592e0445Swap Exact ETH F...121369912021-10-27 13:59:2410 mins ago0xc34e3c8e92965f8e0bae3fb18c85c94f6c83fca3 IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80.143 BNB0.00087449
0x1d87d0727eff0e037499734de0c1f5d31b152d73ef1e3691e86b88839805870aSwap Tokens For ...121369862021-10-27 13:59:0810 mins ago0xef4695c5764d4f723d01e4a18d52692b1bc1092e IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.000636495
0x0bb7b10a230105e6ef77b767cf7fe4ae5d09c36a99dc0a6b274f19f7f206c53fSwap Exact Token...121369812021-10-27 13:58:5210 mins ago0x95fece4e339d0d8ad34153838841d5233c924f9a IN  0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80 BNB0.001147815
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x85af41fe32d042631631899e07c5bd8a3ae9ce6686c1779f6c0b33bf001222ee121371412021-10-27 14:07:591 min ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80x74f1405b5c05849ebee700a23d37a809aaec93861.844817451219076786 BNB
0x85af41fe32d042631631899e07c5bd8a3ae9ce6686c1779f6c0b33bf001222ee121371412021-10-27 14:07:591 min ago Binance: WBNB Token 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db81.844817451219076786 BNB
0x0a4bf2b14000887a93a939070c87d27f72728eeb93080c73b698b9cf2c3f5bd2121371302021-10-27 14:07:232 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80x6b2a085c062dee7bc65c0f89b672d84b022cd5f50.074156333249997515 BNB
0x0a4bf2b14000887a93a939070c87d27f72728eeb93080c73b698b9cf2c3f5bd2121371302021-10-27 14:07:232 mins ago Binance: WBNB Token 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80.074156333249997515 BNB
0x56a9d2f33b6e01c853f17e6e30a5212a599a57f939f8f23abfd28ce54bd58fd9121371182021-10-27 14:06:413 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db8 Binance: WBNB Token0.923659101910162667 BNB
0x59fb42342fdf6efc1a49be9cf86454962c909fef1d98a3172c34875ec6f937bc121370862021-10-27 14:04:504 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80x4191d2848d7913d62b0a79e0aff9eabdad3cb8dc8.983517125678450478 BNB
0x59fb42342fdf6efc1a49be9cf86454962c909fef1d98a3172c34875ec6f937bc121370862021-10-27 14:04:504 mins ago Binance: WBNB Token 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db88.983517125678450478 BNB
0xd1ab81be716b1fc130d49ae31c9eca9982ec85860753472f19a08502c4a4c7cb121370492021-10-27 14:02:437 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db8 Binance: WBNB Token0.081109723947967091 BNB
0x0b5a3cdef33f8ebc83e19efe7082a7bf969e7e5d14f8deb0e71d1f047a4a572f121370342021-10-27 14:01:438 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db8 Binance: WBNB Token0.547833162966471169 BNB
0x9fb7f224bf868dd531631a221bb050833b93987d8c87ab294228706eaa1a6605121370032021-10-27 14:00:019 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80x2d93d4add286b46a4fa3c07e9d147aca3ea004331 wei
0x9fb7f224bf868dd531631a221bb050833b93987d8c87ab294228706eaa1a6605121370032021-10-27 14:00:019 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db8 Binance: WBNB Token7.227875604267332139 BNB
0xfad063154f960d21dfada0590e2407fe14f79d83d817133c64b48132592e0445121369912021-10-27 13:59:2410 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db8 Binance: WBNB Token0.143 BNB
0xb43cadd092ba7456c0c04a71f69669862a8dbafb6114a555b579dc0ca7f947e1121369542021-10-27 13:57:3112 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80x95fece4e339d0d8ad34153838841d5233c924f9a2.360150534037552684 BNB
0xb43cadd092ba7456c0c04a71f69669862a8dbafb6114a555b579dc0ca7f947e1121369542021-10-27 13:57:3112 mins ago Binance: WBNB Token 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db82.360150534037552684 BNB
0x5326141fcb593b039688e4196513c8ee0d28fd1907d4ba6095a28deb76050a42121369132021-10-27 13:55:2814 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80x9ddf3a0efa6dcb9b2942860cfe9b6aae356c230f7.342539416031418031 BNB
0x5326141fcb593b039688e4196513c8ee0d28fd1907d4ba6095a28deb76050a42121369132021-10-27 13:55:2814 mins ago Binance: WBNB Token 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db87.342539416031418031 BNB
0x1db96b4ac2dfe469937a0843792a92cb5d87ef1d385b34519bd601ea30824ae8121369072021-10-27 13:55:1014 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80xc9848f9146a56b6b5676b06f454a62a06a66cc033.271096588407738693 BNB
0x1db96b4ac2dfe469937a0843792a92cb5d87ef1d385b34519bd601ea30824ae8121369072021-10-27 13:55:1014 mins ago Binance: WBNB Token 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db83.271096588407738693 BNB
0x0f5582cb0d22bc3def818ef1576c696de0763c8eaa4dc67e3af560c1b542ef29121368752021-10-27 13:53:3416 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db8 Binance: WBNB Token5.463346513292286187 BNB
0xe02ac8fb4e87c3542852c6ff9b5de97a52f582e43592a7af53d62512d3412403121368682021-10-27 13:53:1316 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80xb39c8841504baaa8a2a17a8693aa53dc935643a81 wei
0xe02ac8fb4e87c3542852c6ff9b5de97a52f582e43592a7af53d62512d3412403121368682021-10-27 13:53:1316 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db8 Binance: WBNB Token0.529999999999999999 BNB
0x3c091a9ffb6072417021219c2a3db3f2b92c6a16043d124f8939350a468447ca121368652021-10-27 13:53:0416 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80x2d93d4add286b46a4fa3c07e9d147aca3ea004337.143536173364885943 BNB
0x3c091a9ffb6072417021219c2a3db3f2b92c6a16043d124f8939350a468447ca121368652021-10-27 13:53:0416 mins ago Binance: WBNB Token 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db87.143536173364885943 BNB
0xe7cab6f34219cc74d02a4b1eef55474c9bea6edd698a862886e680d0b7487321121368402021-10-27 13:51:4917 mins ago 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db80xc34e3c8e92965f8e0bae3fb18c85c94f6c83fca31.180399678063323918 BNB
0xe7cab6f34219cc74d02a4b1eef55474c9bea6edd698a862886e680d0b7487321121368402021-10-27 13:51:4917 mins ago Binance: WBNB Token 0x730acc3bbf2443f2eaeacfc7ac7b4d8dc9e32db81.180399678063323918 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AlitaRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-08-08
*/

// File: @uniswap/lib/contracts/libraries/TransferHelper.sol

pragma solidity >=0.6.0;

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

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

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

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

// File: contracts/interfaces/IAlitaFactory.sol

pragma solidity >=0.5.0;

interface IAlitaFactory {
    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, uint _startingSwapTime) external returns (address pair);

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

// File: contracts/interfaces/IAlitaRouter01.sol

pragma solidity >=0.6.2;

interface IAlitaRouter01 {
    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,
        uint startingSwapTime
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        uint startingSwapTime
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

// File: contracts/interfaces/IAlitaRouter02.sol

pragma solidity >=0.6.2;


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

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

// File: contracts/interfaces/IAlitaPair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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

// File: contracts/libraries/AlitaLibrary.sol

pragma solidity >=0.5.0;



library AlitaLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'AlitaLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'AlitaLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'5f9760f478719c0b49b3c28e68590b9257d807eaac42ec936e0f01349f95ca2e' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IAlitaPair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'AlitaLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'AlitaLibrary: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'AlitaLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'AlitaLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(998);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

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

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'AlitaLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'AlitaLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

// File: contracts/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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

// File: contracts/AlitaRouter.sol

pragma solidity =0.6.6;








contract AlitaRouter is IAlitaRouter02 {
    using SafeMath for uint;

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

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

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

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

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

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = AlitaLibrary.pairFor(factory, tokenA, tokenB);
        IAlitaPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IAlitaPair(pair).burn(to);
        (address token0,) = AlitaLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'AlitaRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'AlitaRouter: 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 = AlitaLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IAlitaPair(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 = AlitaLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IAlitaPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

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

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = AlitaLibrary.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 ? AlitaLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IAlitaPair(AlitaLibrary.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 = AlitaLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AlitaRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlitaLibrary.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 = AlitaLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'AlitaRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlitaLibrary.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, 'AlitaRouter: INVALID_PATH');
        amounts = AlitaLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AlitaRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(AlitaLibrary.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, 'AlitaRouter: INVALID_PATH');
        amounts = AlitaLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'AlitaRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlitaLibrary.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, 'AlitaRouter: INVALID_PATH');
        amounts = AlitaLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AlitaRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlitaLibrary.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, 'AlitaRouter: INVALID_PATH');
        amounts = AlitaLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'AlitaRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(AlitaLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = AlitaLibrary.sortTokens(input, output);
            IAlitaPair pair = IAlitaPair(AlitaLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = AlitaLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? AlitaLibrary.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, AlitaLibrary.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,
            'AlitaRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'AlitaRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(AlitaLibrary.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,
            'AlitaRouter: 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, 'AlitaRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlitaLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'AlitaRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

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

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

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

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

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

Contract Security Audit

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"},{"internalType":"uint256","name":"startingSwapTime","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"},{"internalType":"uint256","name":"startingSwapTime","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"}]

60c060405234801561001057600080fd5b5060405162004950380380620049508339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6147cb620001856000398061019f5280610d505280610d8b5280610e8b52806110bb528061145752806117165280611af05280611b475280611b7b5280611bef5280611d9f5280611eab5280611f61528061203852806121905280612218528061246652806124ea5280612599528061266e528061271552806127895280612ca95280612de25280612f375280612fbf525080610f2b5280611002528061118152806111ba52806112fe52806114f7528061161252806116f4528061186d5280611b2552806120dd528061224a52806123b652806127bb5280612a1d5280612c2e5280612c575280612c875280612e875280612ff152806138f352806139365280613c0c5280613cda5280613d5a5280613ec7528061404d52506147cb6000f3fe60806040526004361061018f5760003560e01c80637ff36ab5116100d6578063b6f9de951161007f578063d06ca61f11610059578063d06ca61f14610b4a578063ded9382a14610c01578063fb3bdb4114610c74576101c8565b8063b6f9de9514610a52578063baa2abde14610ad8578063c45a015514610b35576101c8565b8063ad5c4648116100b0578063ad5c464814610998578063ad615dec146109c9578063af2979eb146109ff576101c8565b80637ff36ab51461084457806385f8c259146108ca5780638803dbee14610900576101c8565b80634a25d94a116101385780635c11d795116101125780635c11d795146106c85780636bb6a6f614610760578063791ac947146107ac576101c8565b80634a25d94a1461053657806357528cca146105ce5780635b0d598414610655576101c8565b80631f00ca74116101695780631f00ca74146103695780632195995c1461042057806338ed17391461049e576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cfa565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610e1d565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610319600480360360a08110156102a457600080fd5b8135916020810135918101906060810160408201356401000000008111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460208302840111640100000000831117156102ff57600080fd5b91935091506001600160a01b038135169060200135610e32565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b34801561037557600080fd5b506103196004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111640100000000831117156103e257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061117a945050505050565b34801561042c57600080fd5b50610220600480360361016081101561044457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356111b0565b3480156104aa57600080fd5b50610319600480360360a08110156104c157600080fd5b8135916020810135918101906060810160408201356401000000008111156104e857600080fd5b8201836020820111156104fa57600080fd5b8035906020019184602083028401116401000000008311171561051c57600080fd5b91935091506001600160a01b0381351690602001356112aa565b34801561054257600080fd5b50610319600480360360a081101561055957600080fd5b81359160208101359181019060608101604082013564010000000081111561058057600080fd5b82018360208201111561059257600080fd5b803590602001918460208302840111640100000000831117156105b457600080fd5b91935091506001600160a01b0381351690602001356113fe565b3480156105da57600080fd5b5061063760048036036101208110156105f257600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e08101359061010001356115a5565b60408051938452602084019290925282820152519081900360600190f35b34801561066157600080fd5b5061026f600480360361014081101561067957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356116ec565b3480156106d457600080fd5b506101c6600480360360a08110156106eb57600080fd5b81359160208101359181019060608101604082013564010000000081111561071257600080fd5b82018360208201111561072457600080fd5b8035906020019184602083028401116401000000008311171561074657600080fd5b91935091506001600160a01b0381351690602001356117fa565b610637600480360360e081101561077657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c00135611a98565b3480156107b857600080fd5b506101c6600480360360a08110156107cf57600080fd5b8135916020810135918101906060810160408201356401000000008111156107f657600080fd5b82018360208201111561080857600080fd5b8035906020019184602083028401116401000000008311171561082a57600080fd5b91935091506001600160a01b038135169060200135611d48565b6103196004803603608081101561085a57600080fd5b8135919081019060408101602082013564010000000081111561087c57600080fd5b82018360208201111561088e57600080fd5b803590602001918460208302840111640100000000831117156108b057600080fd5b91935091506001600160a01b038135169060200135611fe7565b3480156108d657600080fd5b5061026f600480360360608110156108ed57600080fd5b5080359060208101359060400135612355565b34801561090c57600080fd5b50610319600480360360a081101561092357600080fd5b81359160208101359181019060608101604082013564010000000081111561094a57600080fd5b82018360208201111561095c57600080fd5b8035906020019184602083028401116401000000008311171561097e57600080fd5b91935091506001600160a01b038135169060200135612362565b3480156109a457600080fd5b506109ad612464565b604080516001600160a01b039092168252519081900360200190f35b3480156109d557600080fd5b5061026f600480360360608110156109ec57600080fd5b5080359060208101359060400135612488565b348015610a0b57600080fd5b5061026f600480360360c0811015610a2257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612495565b6101c660048036036080811015610a6857600080fd5b81359190810190604081016020820135640100000000811115610a8a57600080fd5b820183602082011115610a9c57600080fd5b80359060200191846020830284011164010000000083111715610abe57600080fd5b91935091506001600160a01b03813516906020013561261f565b348015610ae457600080fd5b50610220600480360360e0811015610afb57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356129c6565b348015610b4157600080fd5b506109ad612c2c565b348015610b5657600080fd5b5061031960048036036040811015610b6d57600080fd5b81359190810190604081016020820135640100000000811115610b8f57600080fd5b820183602082011115610ba157600080fd5b80359060200191846020830284011164010000000083111715610bc357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612c50945050505050565b348015610c0d57600080fd5b506102206004803603610140811015610c2557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612c7d565b61031960048036036080811015610c8a57600080fd5b81359190810190604081016020820135640100000000811115610cac57600080fd5b820183602082011115610cbe57600080fd5b80359060200191846020830284011164010000000083111715610ce057600080fd5b91935091506001600160a01b038135169060200135612d91565b6000808242811015610d4a576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b610d79897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6129c6565b9093509150610d8989868561312e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50505050610e1185836132c6565b50965096945050505050565b6000610e2a8484846133be565b949350505050565b60608142811015610e81576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610ebb57fe5b905060200201356001600160a01b03166001600160a01b031614610f26576040805162461bcd60e51b815260206004820152601960248201527f416c697461526f757465723a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b610f847f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134ae92505050565b91508682600184510381518110610f9757fe5b60200260200101511015610fdc5760405162461bcd60e51b815260040180806020018281038252602781526020018061460c6027913960400191505060405180910390fd5b61107a86866000818110610fec57fe5b905060200201356001600160a01b0316336110607f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061102e57fe5b905060200201356001600160a01b03168b8b600181811061104b57fe5b905060200201356001600160a01b03166135fa565b8560008151811061106d57fe5b60200260200101516136d2565b6110b982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613844915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110f857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561113657600080fd5b505af115801561114a573d6000803e3d6000fd5b5050505061116f848360018551038151811061116257fe5b60200260200101516132c6565b509695505050505050565b60606111a77f00000000000000000000000000000000000000000000000000000000000000008484613a8a565b90505b92915050565b60008060006111e07f00000000000000000000000000000000000000000000000000000000000000008f8f6135fa565b90506000876111ef578c6111f3565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561126957600080fd5b505af115801561127d573d6000803e3d6000fd5b505050506112908f8f8f8f8f8f8f6129c6565b809450819550505050509b509b9950505050505050505050565b606081428110156112f9576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b6113577f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134ae92505050565b9150868260018451038151811061136a57fe5b602002602001015110156113af5760405162461bcd60e51b815260040180806020018281038252602781526020018061460c6027913960400191505060405180910390fd5b6113bf86866000818110610fec57fe5b61116f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613844915050565b6060814281101561144d576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061148757fe5b905060200201356001600160a01b03166001600160a01b0316146114f2576040805162461bcd60e51b815260206004820152601960248201527f416c697461526f757465723a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b6115507f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a8a92505050565b9150868260008151811061156057fe5b60200260200101511115610fdc5760405162461bcd60e51b815260040180806020018281038252602381526020018061470a6023913960400191505060405180910390fd5b600080600084428110156115f7576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b6116068d8d8d8d8d8d8b613bc2565b909450925060006116387f00000000000000000000000000000000000000000000000000000000000000008f8f6135fa565b90506116468e3383886136d2565b6116528d3383876136d2565b806001600160a01b0316636a627842896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156116aa57600080fd5b505af11580156116be573d6000803e3d6000fd5b505050506040513d60208110156116d457600080fd5b5051949e939d50939b50919950505050505050505050565b60008061173a7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006135fa565b9050600086611749578b61174d565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156117c357600080fd5b505af11580156117d7573d6000803e3d6000fd5b505050506117e98d8d8d8d8d8d612495565b9d9c50505050505050505050505050565b8042811015611847576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b6118bc8585600081811061185757fe5b905060200201356001600160a01b0316336118b67f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b905060200201356001600160a01b03168a8a600181811061104b57fe5b8a6136d2565b6000858560001981018181106118ce57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561193357600080fd5b505afa158015611947573d6000803e3d6000fd5b505050506040513d602081101561195d57600080fd5b5051604080516020888102828101820190935288825292935061199f929091899189918291850190849080828437600092019190915250889250613e70915050565b86611a5182888860001981018181106119b457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b50519063ffffffff61419b16565b1015611a8e5760405162461bcd60e51b815260040180806020018281038252602781526020018061460c6027913960400191505060405180910390fd5b5050505050505050565b60008060008442811015611aea576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b611b198b7f00000000000000000000000000000000000000000000000000000000000000008c348d8d8b613bc2565b90945092506000611b6b7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006135fa565b9050611b798c3383886136d2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611bd457600080fd5b505af1158015611be8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611c6d57600080fd5b505af1158015611c81573d6000803e3d6000fd5b505050506040513d6020811015611c9757600080fd5b5051611c9f57fe5b806001600160a01b0316636a627842896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611cf757600080fd5b505af1158015611d0b573d6000803e3d6000fd5b505050506040513d6020811015611d2157600080fd5b5051925034841015611d3957611d39338534036132c6565b50509750975097945050505050565b8042811015611d95576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611dcf57fe5b905060200201356001600160a01b03166001600160a01b031614611e3a576040805162461bcd60e51b815260206004820152601960248201527f416c697461526f757465723a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b611e4a8585600081811061185757fe5b611e88858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613e70915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611ef257600080fd5b505afa158015611f06573d6000803e3d6000fd5b505050506040513d6020811015611f1c57600080fd5b5051905086811015611f5f5760405162461bcd60e51b815260040180806020018281038252602781526020018061460c6027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fc557600080fd5b505af1158015611fd9573d6000803e3d6000fd5b50505050611a8e84826132c6565b60608142811015612036576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061206d57fe5b905060200201356001600160a01b03166001600160a01b0316146120d8576040805162461bcd60e51b815260206004820152601960248201527f416c697461526f757465723a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b6121367f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134ae92505050565b9150868260018451038151811061214957fe5b6020026020010151101561218e5760405162461bcd60e51b815260040180806020018281038252602781526020018061460c6027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106121ca57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121fd57600080fd5b505af1158015612211573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122767f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b8460008151811061228357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156122da57600080fd5b505af11580156122ee573d6000803e3d6000fd5b505050506040513d602081101561230457600080fd5b505161230c57fe5b61234b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613844915050565b5095945050505050565b6000610e2a8484846141f3565b606081428110156123b1576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b61240f7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a8a92505050565b9150868260008151811061241f57fe5b602002602001015111156113af5760405162461bcd60e51b815260040180806020018281038252602381526020018061470a6023913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e2a8484846142e3565b600081428110156124e4576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b612513887f000000000000000000000000000000000000000000000000000000000000000089898930896129c6565b604080516370a0823160e01b8152306004820152905191945061259792508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561256657600080fd5b505afa15801561257a573d6000803e3d6000fd5b505050506040513d602081101561259057600080fd5b505161312e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156125fd57600080fd5b505af1158015612611573d6000803e3d6000fd5b5050505061116f84836132c6565b804281101561266c576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106126a357fe5b905060200201356001600160a01b03166001600160a01b03161461270e576040805162461bcd60e51b815260206004820152601960248201527f416c697461526f757465723a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6127e77f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561283757600080fd5b505af115801561284b573d6000803e3d6000fd5b505050506040513d602081101561286157600080fd5b505161286957fe5b60008686600019810181811061287b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d602081101561290a57600080fd5b5051604080516020898102828101820190935289825292935061294c9290918a918a918291850190849080828437600092019190915250899250613e70915050565b87611a51828989600019810181811061296157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a1957600080fd5b6000808242811015612a16576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b6000612a437f00000000000000000000000000000000000000000000000000000000000000008c8c6135fa565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612a9e57600080fd5b505af1158015612ab2573d6000803e3d6000fd5b505050506040513d6020811015612ac857600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612b2e57600080fd5b505af1158015612b42573d6000803e3d6000fd5b505050506040513d6040811015612b5857600080fd5b50805160209091015190925090506000612b728e8e61438f565b509050806001600160a01b03168e6001600160a01b031614612b95578183612b98565b82825b90975095508a871015612bdc5760405162461bcd60e51b815260040180806020018281038252602281526020018061472d6022913960400191505060405180910390fd5b89861015612c1b5760405162461bcd60e51b815260040180806020018281038252602281526020018061467e6022913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111a77f000000000000000000000000000000000000000000000000000000000000000084846134ae565b6000806000612ccd7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006135fa565b9050600087612cdc578c612ce0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612d5657600080fd5b505af1158015612d6a573d6000803e3d6000fd5b50505050612d7c8e8e8e8e8e8e610cfa565b909f909e509c50505050505050505050505050565b60608142811015612de0576040805162461bcd60e51b8152602060048201526014602482015273105b1a5d18549bdd5d195c8e881156141254915160621b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612e1757fe5b905060200201356001600160a01b03166001600160a01b031614612e82576040805162461bcd60e51b815260206004820152601960248201527f416c697461526f757465723a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b612ee07f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a8a92505050565b91503482600081518110612ef057fe5b60200260200101511115612f355760405162461bcd60e51b815260040180806020018281038252602381526020018061470a6023913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612f7157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612fa457600080fd5b505af1158015612fb8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61301d7f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b8460008151811061302a57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561308157600080fd5b505af1158015613095573d6000803e3d6000fd5b505050506040513d60208110156130ab57600080fd5b50516130b357fe5b6130f282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613844915050565b816000815181106130ff57fe5b602002602001015134111561234b5761234b338360008151811061311f57fe5b602002602001015134036132c6565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106131d95780518252601f1990920191602091820191016131ba565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461323b576040519150601f19603f3d011682016040523d82523d6000602084013e613240565b606091505b509150915081801561326e57508051158061326e575080806020019051602081101561326b57600080fd5b50515b6132bf576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106133125780518252601f1990920191602091820191016132f3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613374576040519150601f19603f3d011682016040523d82523d6000602084013e613379565b606091505b50509050806133b95760405162461bcd60e51b815260040180806020018281038252602381526020018061474f6023913960400191505060405180910390fd5b505050565b60008084116133fe5760405162461bcd60e51b81526004018080602001828103825260278152602001806146576027913960400191505060405180910390fd5b60008311801561340e5750600082115b6134495760405162461bcd60e51b81526004018080602001828103825260248152602001806146336024913960400191505060405180910390fd5b600061345d856103e663ffffffff61446d16565b90506000613471828563ffffffff61446d16565b905060006134978361348b886103e863ffffffff61446d16565b9063ffffffff6144d916565b90508082816134a257fe5b04979650505050505050565b6060600282511015613507576040805162461bcd60e51b815260206004820152601a60248201527f416c6974614c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561351f57600080fd5b50604051908082528060200260200182016040528015613549578160200160208202803683370190505b509050828160008151811061355a57fe5b60200260200101818152505060005b60018351038110156135f2576000806135ac8786858151811061358857fe5b602002602001015187866001018151811061359f57fe5b6020026020010151614531565b915091506135ce8484815181106135bf57fe5b602002602001015183836133be565b8484600101815181106135dd57fe5b60209081029190910101525050600101613569565b509392505050565b6000806000613609858561438f565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f5f9760f478719c0b49b3c28e68590b9257d807eaac42ec936e0f01349f95ca2e609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061376c5780518252601f19909201916020918201910161374d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146137ce576040519150601f19603f3d011682016040523d82523d6000602084013e6137d3565b606091505b509150915081801561380157508051158061380157508080602001905160208110156137fe57600080fd5b50515b61383c5760405162461bcd60e51b81526004018080602001828103825260248152602001806147726024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613a845760008084838151811061386257fe5b602002602001015185846001018151811061387957fe5b6020026020010151915091506000613891838361438f565b50905060008785600101815181106138a557fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146138d3578260006138d7565b6000835b91509150600060028a510388106138ee578861392f565b61392f7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061392257fe5b60200260200101516135fa565b905061395c7f000000000000000000000000000000000000000000000000000000000000000088886135fa565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613999576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613a0a5781810151838201526020016139f2565b50505050905090810190601f168015613a375780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613a5957600080fd5b505af1158015613a6d573d6000803e3d6000fd5b505060019099019850613847975050505050505050565b50505050565b6060600282511015613ae3576040805162461bcd60e51b815260206004820152601a60248201527f416c6974614c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613afb57600080fd5b50604051908082528060200260200182016040528015613b25578160200160208202803683370190505b5090508281600183510381518110613b3957fe5b60209081029190910101528151600019015b80156135f257600080613b7b87866001860381518110613b6757fe5b602002602001015187868151811061359f57fe5b91509150613b9d848481518110613b8e57fe5b602002602001015183836141f3565b846001850381518110613bac57fe5b6020908102919091010152505060001901613b4b565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015613c5557600080fd5b505afa158015613c69573d6000803e3d6000fd5b505050506040513d6020811015613c7f57600080fd5b50516001600160a01b03161415613d5257604080517f6b600d1c0000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301528a811660248301526044820186905291517f000000000000000000000000000000000000000000000000000000000000000090921691636b600d1c916064808201926020929091908290030181600087803b158015613d2557600080fd5b505af1158015613d39573d6000803e3d6000fd5b505050506040513d6020811015613d4f57600080fd5b50505b600080613d807f00000000000000000000000000000000000000000000000000000000000000008c8c614531565b91509150816000148015613d92575080155b15613da257889350879250613e62565b6000613daf8a84846142e3565b9050888111613e025786811015613df75760405162461bcd60e51b815260040180806020018281038252602281526020018061467e6022913960400191505060405180910390fd5b899450925082613e60565b6000613e0f8a84866142e3565b90508a811115613e1b57fe5b88811015613e5a5760405162461bcd60e51b815260040180806020018281038252602281526020018061472d6022913960400191505060405180910390fd5b94508893505b505b505097509795505050505050565b60005b60018351038110156133b957600080848381518110613e8e57fe5b6020026020010151858460010181518110613ea557fe5b6020026020010151915091506000613ebd838361438f565b5090506000613eed7f000000000000000000000000000000000000000000000000000000000000000085856135fa565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613f2e57600080fd5b505afa158015613f42573d6000803e3d6000fd5b505050506040513d6060811015613f5857600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613f95578284613f98565b83835b91509150613ff6828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a1957600080fd5b95506140038683836133be565b945050505050600080856001600160a01b0316886001600160a01b03161461402d57826000614031565b6000835b91509150600060028c51038a10614048578a61407c565b61407c7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061392257fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561411f578181015183820152602001614107565b50505050905090810190601f16801561414c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561416e57600080fd5b505af1158015614182573d6000803e3d6000fd5b50506001909b019a50613e739950505050505050505050565b808203828111156111aa576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b60008084116142335760405162461bcd60e51b81526004018080602001828103825260288152602001806146c16028913960400191505060405180910390fd5b6000831180156142435750600082115b61427e5760405162461bcd60e51b81526004018080602001828103825260248152602001806146336024913960400191505060405180910390fd5b60006142a26103e8614296868863ffffffff61446d16565b9063ffffffff61446d16565b905060006142bc6103e6614296868963ffffffff61419b16565b90506142d960018284816142cc57fe5b049063ffffffff6144d916565b9695505050505050565b60008084116143235760405162461bcd60e51b81526004018080602001828103825260218152602001806146a06021913960400191505060405180910390fd5b6000831180156143335750600082115b61436e5760405162461bcd60e51b81526004018080602001828103825260248152602001806146336024913960400191505060405180910390fd5b8261437f858463ffffffff61446d16565b8161438657fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156143e35760405162461bcd60e51b81526004018080602001828103825260218152602001806146e96021913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614403578284614406565b83835b90925090506001600160a01b038216614466576040805162461bcd60e51b815260206004820152601a60248201527f416c6974614c6962726172793a205a45524f5f41444452455353000000000000604482015290519081900360640190fd5b9250929050565b60008115806144885750508082028282828161448557fe5b04145b6111aa576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156111aa576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000614540858561438f565b50905061454e8686866135fa565b5060008061455d8888886135fa565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561459557600080fd5b505afa1580156145a9573d6000803e3d6000fd5b505050506040513d60608110156145bf57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b03878116908416146145f95780826145fc565b81815b9099909850965050505050505056fe416c697461526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54416c6974614c6962726172793a20494e53554646494349454e545f4c4951554944495459416c6974614c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54416c697461526f757465723a20494e53554646494349454e545f425f414d4f554e54416c6974614c6962726172793a20494e53554646494349454e545f414d4f554e54416c6974614c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54416c6974614c6962726172793a204944454e544943414c5f414444524553534553416c697461526f757465723a204558434553534956455f494e5055545f414d4f554e54416c697461526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220e8b01050233542857837910999d8ab00277bbd0e166e9fdcc88f7a6c6a6be52564736f6c63430006060033000000000000000000000000c7a506ab3ac668eab6bf9ecf971433d6cfef05d9000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000c7a506ab3ac668eab6bf9ecf971433d6cfef05d9000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _factory (address): 0xc7a506ab3ac668eab6bf9ecf971433d6cfef05d9
Arg [1] : _WETH (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c7a506ab3ac668eab6bf9ecf971433d6cfef05d9
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

16256:18426:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16724:10;-1:-1:-1;;;;;16738:4:0;16724:18;;16717:26;;;;16256:18426;;12:1:-1;9;2:12;20969:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20969:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20969:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33642:258;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33642:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33642:258:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28042:834;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28042:834:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28042:834:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28042:834:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28042:834:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28042:834:0;;-1:-1:-1;28042:834:0;-1:-1:-1;;;;;;28042:834:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28042:834:0;;;;;;;;;;;;;;;;;34430:249;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34430:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34430:249:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34430:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34430:249:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34430:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34430:249:0;;-1:-1:-1;34430:249:0;;-1:-1:-1;;;;;34430:249:0:i;21648:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21648:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21648:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25315:616::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25315:616:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25315:616:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25315:616:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25315:616:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25315:616:0;;-1:-1:-1;25315:616:0;-1:-1:-1;;;;;;25315:616:0;;;;;;;;:::i;27224:812::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27224:812:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27224:812:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27224:812:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27224:812:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27224:812:0;;-1:-1:-1;27224:812:0;-1:-1:-1;;;;;;27224:812:0;;;;;;;;:::i;18264:780::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18264:780:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18264:780:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;23769:710;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23769:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23769:710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31019:706::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31019:706:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31019:706:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31019:706:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31019:706:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31019:706:0;;-1:-1:-1;31019:706:0;-1:-1:-1;;;;;;31019:706:0;;;;;;;;:::i;19050:1029::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19050:1029:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32575:831::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32575:831:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32575:831:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32575:831:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32575:831:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32575:831:0;;-1:-1:-1;32575:831:0;-1:-1:-1;;;;;;32575:831:0;;;;;;;;:::i;26537:681::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26537:681:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26537:681:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26537:681:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26537:681:0;;-1:-1:-1;26537:681:0;-1:-1:-1;;;;;;26537:681:0;;;;;;;;:::i;33908:257::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33908:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33908:257:0;;;;;;;;;;;;:::i;25937:594::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25937:594:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25937:594:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25937:594:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25937:594:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25937:594:0;;-1:-1:-1;25937:594:0;-1:-1:-1;;;;;;25937:594:0;;;;;;;;:::i;16382:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16382:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16382:38:0;;;;;;;;;;;;;;33450:184;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33450:184:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33450:184:0;;;;;;;;;;;;:::i;23063:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23063:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23063:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31731:838::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31731:838:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31731:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31731:838:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31731:838:0;;-1:-1:-1;31731:838:0;-1:-1:-1;;;;;;31731:838:0;;;;;;;;:::i;20122:841::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20122:841:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20122:841:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16334:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16334:41:0;;;:::i;34173:249::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34173:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34173:249:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34173:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34173:249:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34173:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34173:249:0;;-1:-1:-1;34173:249:0;;-1:-1:-1;;;;;34173:249:0:i;22323:661::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22323:661:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22323:661:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28882:794::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28882:794:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28882:794:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28882:794:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28882:794:0;;-1:-1:-1;28882:794:0;-1:-1:-1;;;;;;28882:794:0;;;;;;;;:::i;20969:673::-;21206:16;21224:14;21187:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;21278:196:::1;21308:5;21328:4;21347:9;21371:14;21400:12;21435:4;21455:8;21278:15;:196::i;:::-;21251:223:::0;;-1:-1:-1;21251:223:0;-1:-1:-1;21485:51:0::1;21513:5:::0;21520:2;21251:223;21485:27:::1;:51::i;:::-;21553:4;-1:-1:-1::0;;;;;21547:20:0::1;;21568:9;21547:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21547:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21547:31:0;;;;21589:45;21620:2;21624:9;21589:30;:45::i;:::-;20969:673:::0;;;;;;;;;;:::o;33642:258::-;33795:14;33834:58;33860:8;33870:9;33881:10;33834:25;:58::i;:::-;33827:65;33642:258;-1:-1:-1;;;;33642:258:0:o;28042:834::-;28256:21;28228:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28328:4:0::1;28303:29;:4:::0;;-1:-1:-1;;28308:15:0;;28303:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28303:21:0::1;-1:-1:-1::0;;;;;28303:29:0::1;;28295:67;;;::::0;;-1:-1:-1;;;28295:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28383:51;28410:7;28419:8;28429:4;;28383:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28383:26:0::1;::::0;-1:-1:-1;;;28383:51:0:i:1;:::-;28373:61;;28484:12;28453:7;28478:1;28461:7;:14;:18;28453:27;;;;;;;;;;;;;;:43;;28445:95;;;;-1:-1:-1::0;;;28445:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28551:137;28597:4;;28602:1;28597:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28597:7:0::1;28606:10;28618:47;28639:7;28648:4;;28653:1;28648:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28648:7:0::1;28657:4;;28662:1;28657:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28657:7:0::1;28618:20;:47::i;:::-;28667:7;28675:1;28667:10;;;;;;;;;;;;;;28551:31;:137::i;:::-;28699:35;28705:7;28714:4;;28699:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28728:4:0::1;::::0;-1:-1:-1;28699:5:0::1;::::0;-1:-1:-1;;28699:35:0:i:1;:::-;28751:4;-1:-1:-1::0;;;;;28745:20:0::1;;28766:7;28791:1;28774:7;:14;:18;28766:27;;;;;;;;;;;;;;28745:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28745:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28745:49:0;;;;28805:63;28836:2;28840:7;28865:1;28848:7;:14;:18;28840:27;;;;;;;;;;;;;;28805:30;:63::i;:::-;28042:834:::0;;;;;;;;;:::o;34430:249::-;34574:21;34620:51;34646:7;34655:9;34666:4;34620:25;:51::i;:::-;34613:58;;34430:249;;;;;:::o;21648:669::-;21954:12;21968;21993;22008:45;22029:7;22038:6;22046;22008:20;:45::i;:::-;21993:60;;22064:10;22077;:33;;22101:9;22077:33;;;-1:-1:-1;;22077:33:0;22121:76;;;-1:-1:-1;;;22121:76:0;;22145:10;22121:76;;;;22165:4;22121:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22064:46;;-1:-1:-1;;;;;;22121:23:0;;;;;:76;;;;;-1:-1:-1;;22121:76:0;;;;;;;;-1:-1:-1;22121:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;22121:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22121:76:0;;;;22229:80;22245:6;22253;22261:9;22272:10;22284;22296:2;22300:8;22229:15;:80::i;:::-;22208:101;;;;;;;;21648:669;;;;;;;;;;;;;;;;:::o;25315:616::-;25539:21;25520:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;25583:51:::1;25610:7;25619:8;25629:4;;25583:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25583:26:0::1;::::0;-1:-1:-1;;;25583:51:0:i:1;:::-;25573:61;;25684:12;25653:7;25678:1;25661:7;:14;:18;25653:27;;;;;;;;;;;;;;:43;;25645:95;;;;-1:-1:-1::0;;;25645:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25751:137;25797:4;;25802:1;25797:7;;;;;;25751:137;25899:24;25905:7;25914:4;;25899:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25920:2:0;;-1:-1:-1;25899:5:0::1;::::0;-1:-1:-1;;25899:24:0:i:1;27224:812::-:0;27438:21;27410:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27510:4:0::1;27485:29;:4:::0;;-1:-1:-1;;27490:15:0;;27485:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27485:21:0::1;-1:-1:-1::0;;;;;27485:29:0::1;;27477:67;;;::::0;;-1:-1:-1;;;27477:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27565:51;27591:7;27600:9;27611:4;;27565:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27565:25:0::1;::::0;-1:-1:-1;;;27565:51:0:i:1;:::-;27555:61;;27649:11;27635:7;27643:1;27635:10;;;;;;;;;;;;;;:25;;27627:73;;;;-1:-1:-1::0;;;27627:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18264:780:::0;18584:12;18598;18612:14;18565:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;18660:103:::1;18674:6;18682;18690:14;18706;18722:10;18734;18746:16;18660:13;:103::i;:::-;18639:124:::0;;-1:-1:-1;18639:124:0;-1:-1:-1;18774:12:0::1;18789:45;18810:7;18819:6:::0;18827;18789:20:::1;:45::i;:::-;18774:60;;18845:66;18877:6;18885:10;18897:4;18903:7;18845:31;:66::i;:::-;18922;18954:6;18962:10;18974:4;18980:7;18922:31;:66::i;:::-;19022:4;-1:-1:-1::0;;;;;19011:21:0::1;;19033:2;19011:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;19011:25:0::1;-1:-1:-1::0;;;;;19011:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19011:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19011:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19011:25:0;18264:780;;;;-1:-1:-1;19011:25:0;;-1:-1:-1;18264:780:0;;-1:-1:-1;;;;;;;;;;18264:780:0:o;23769:710::-;24087:14;24114:12;24129:42;24150:7;24159:5;24166:4;24129:20;:42::i;:::-;24114:57;;24182:10;24195;:33;;24219:9;24195:33;;;-1:-1:-1;;24195:33:0;24239:76;;;-1:-1:-1;;;24239:76:0;;24263:10;24239:76;;;;24283:4;24239:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24182:46;;-1:-1:-1;;;;;;24239:23:0;;;;;:76;;;;;-1:-1:-1;;24239:76:0;;;;;;;;-1:-1:-1;24239:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;24239:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24239:76:0;;;;24338:133;24400:5;24407:9;24418:14;24434:12;24448:2;24452:8;24338:47;:133::i;:::-;24326:145;23769:710;-1:-1:-1;;;;;;;;;;;;;23769:710:0:o;31019:706::-;31253:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;31274:135:::1;31320:4;;31325:1;31320:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31320:7:0::1;31329:10;31341:47;31362:7;31371:4;;31376:1;31371:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31371:7:0::1;31380:4;;31385:1;31380:7;;;;;;31341:47;31390:8;31274:31;:135::i;:::-;31420:18;31448:4:::0;;-1:-1:-1;;31453:15:0;;31448:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31448:21:0::1;-1:-1:-1::0;;;;;31441:39:0::1;;31481:2;31441:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31441:43:0::1;-1:-1:-1::0;;;;;31441:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31441:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31441:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31441:43:0;31495:44:::1;::::0;;31441:43:::1;31495:44:::0;;::::1;::::0;;;;;;;;;;;31441:43;;-1:-1:-1;31495:44:0::1;::::0;;;31530:4;;;;;;31495:44;::::1;::::0;31530:4;;31495:44;31530:4;31495:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31536:2:0;;-1:-1:-1;31495:34:0::1;::::0;-1:-1:-1;;31495:44:0:i:1;:::-;31638:12:::0;31572:62:::1;31620:13:::0;31579:4;;-1:-1:-1;;31584:15:0;;31579:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31579:21:0::1;-1:-1:-1::0;;;;;31572:39:0::1;;31612:2;31572:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31572:43:0::1;-1:-1:-1::0;;;;;31572:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31572:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31572:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31572:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31550:167;;;;-1:-1:-1::0;;;31550:167:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16542:1;31019:706:::0;;;;;;;:::o;19050:1029::-;19335:16;19353:14;19369;19316:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;19423:207:::1;19451:5;19471:4;19490:18;19523:9;19547:14;19576:12;19603:16;19423:13;:207::i;:::-;19396:234:::0;;-1:-1:-1;19396:234:0;-1:-1:-1;19641:12:0::1;19656:42;19677:7;19686:5:::0;19693:4:::1;19656:20;:42::i;:::-;19641:57;;19709:69;19741:5;19748:10;19760:4;19766:11;19709:31;:69::i;:::-;19795:4;-1:-1:-1::0;;;;;19789:19:0::1;;19816:9;19789:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19789:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19789:39:0;;;;;19852:4;-1:-1:-1::0;;;;;19846:20:0::1;;19867:4;19873:9;19846:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19846:37:0::1;-1:-1:-1::0;;;;;19846:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19846:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19846:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19846:37:0;19839:45:::1;;;;19918:4;-1:-1:-1::0;;;;;19907:21:0::1;;19929:2;19907:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;19907:25:0::1;-1:-1:-1::0;;;;;19907:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19907:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19907:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19907:25:0;;-1:-1:-1;19983:9:0::1;:21:::0;-1:-1:-1;19979:92:0::1;;;20006:65;20037:10;20061:9;20049;:21;20006:30;:65::i;:::-;16542:1;19050:1029:::0;;;;;;;;;;;;:::o;32575:831::-;32842:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32901:4:0::1;32876:29;:4:::0;;-1:-1:-1;;32881:15:0;;32876:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32876:21:0::1;-1:-1:-1::0;;;;;32876:29:0::1;;32868:67;;;::::0;;-1:-1:-1;;;32868:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32946:135;32992:4;;32997:1;32992:7;;;;;;32946:135;33092:55;33127:4;;33092:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33141:4:0::1;::::0;-1:-1:-1;33092:34:0::1;::::0;-1:-1:-1;;33092:55:0:i:1;:::-;33175:37;::::0;;-1:-1:-1;;;33175:37:0;;33206:4:::1;33175:37;::::0;::::1;::::0;;;33158:14:::1;::::0;-1:-1:-1;;;;;33182:4:0::1;33175:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33175:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33175:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33175:37:0;;-1:-1:-1;33231:25:0;;::::1;;33223:77;;;;-1:-1:-1::0;;;33223:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33317:4;-1:-1:-1::0;;;;;33311:20:0::1;;33332:9;33311:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33311:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33311:31:0;;;;33353:45;33384:2;33388:9;33353:30;:45::i;26537:681::-:0;26753:21;26725:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;26811:4:::1;-1:-1:-1::0;;;;;26800:15:0::1;:4;;26805:1;26800:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26800:7:0::1;-1:-1:-1::0;;;;;26800:15:0::1;;26792:53;;;::::0;;-1:-1:-1;;;26792:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26866:52;26893:7;26902:9;26913:4;;26866:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26866:26:0::1;::::0;-1:-1:-1;;;26866:52:0:i:1;:::-;26856:62;;26968:12;26937:7;26962:1;26945:7;:14;:18;26937:27;;;;;;;;;;;;;;:43;;26929:95;;;;-1:-1:-1::0;;;26929:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27041:4;-1:-1:-1::0;;;;;27035:19:0::1;;27062:7;27070:1;27062:10;;;;;;;;;;;;;;27035:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27035:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27035:40:0;;;;;27099:4;-1:-1:-1::0;;;;;27093:20:0::1;;27114:47;27135:7;27144:4;;27149:1;27144:7;;;;;;27114:47;27163:7;27171:1;27163:10;;;;;;;;;;;;;;27093:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;27093:81:0::1;-1:-1:-1::0;;;;;27093:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27093:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27093:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27093:81:0;27086:89:::1;;;;27186:24;27192:7;27201:4;;27186:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27207:2:0;;-1:-1:-1;27186:5:0::1;::::0;-1:-1:-1;;27186:24:0:i:1;:::-;26537:681:::0;;;;;;;;:::o;33908:257::-;34061:13;34099:58;34124:9;34135;34146:10;34099:24;:58::i;25937:594::-;26161:21;26142:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;26205:51:::1;26231:7;26240:9;26251:4;;26205:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26205:25:0::1;::::0;-1:-1:-1;;;26205:51:0:i:1;:::-;26195:61;;26289:11;26275:7;26283:1;26275:10;;;;;;;;;;;;;;:25;;26267:73;;;;-1:-1:-1::0;;;26267:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16382:38:::0;;;:::o;33450:184::-;33547:12;33579:47;33598:7;33607:8;33617;33579:18;:47::i;23063:700::-;23329:14;23310:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;23372:196:::1;23402:5;23422:4;23441:9;23465:14;23494:12;23529:4;23549:8;23372:15;:196::i;:::-;23618:38;::::0;;-1:-1:-1;;;23618:38:0;;23650:4:::1;23618:38;::::0;::::1;::::0;;;23356:212;;-1:-1:-1;23579:78:0::1;::::0;-1:-1:-1;23607:5:0;;23614:2;;-1:-1:-1;;;;;23618: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;23618:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23618:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23618:38:0;23579:27:::1;:78::i;:::-;23674:4;-1:-1:-1::0;;;;;23668:20:0::1;;23689:9;23668:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23668:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23668:31:0;;;;23710:45;23741:2;23745:9;23710:30;:45::i;31731:838::-:0;31991:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;32036:4:::1;-1:-1:-1::0;;;;;32025:15:0::1;:4;;32030:1;32025:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32025:7:0::1;-1:-1:-1::0;;;;;32025:15:0::1;;32017:53;;;::::0;;-1:-1:-1;;;32017:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32081:13;32097:9;32081:25;;32123:4;-1:-1:-1::0;;;;;32117:19:0::1;;32144:8;32117:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32117:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32117:38:0;;;;;32179:4;-1:-1:-1::0;;;;;32173:20:0::1;;32194:47;32215:7;32224:4;;32229:1;32224:7;;;;;;32194:47;32243:8;32173:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;32173:79:0::1;-1:-1:-1::0;;;;;32173:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32173:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32173:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32173:79:0;32166:87:::1;;;;32264:18;32292:4:::0;;-1:-1:-1;;32297:15:0;;32292:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32292:21:0::1;-1:-1:-1::0;;;;;32285:39:0::1;;32325:2;32285:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32285:43:0::1;-1:-1:-1::0;;;;;32285:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32285:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32285:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32285:43:0;32339:44:::1;::::0;;32285:43:::1;32339:44:::0;;::::1;::::0;;;;;;;;;;;32285:43;;-1:-1:-1;32339:44:0::1;::::0;;;32374:4;;;;;;32339:44;::::1;::::0;32374:4;;32339:44;32374:4;32339:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32380:2:0;;-1:-1:-1;32339:34:0::1;::::0;-1:-1:-1;;32339:44:0:i:1;:::-;32482:12:::0;32416:62:::1;32464:13:::0;32423:4;;-1:-1:-1;;32428:15:0;;32423:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32423:21:0::1;-1:-1:-1::0;;;;;32416:39:0::1;;32456:2;32416:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32416:43:0::1;-1:-1:-1::0;;;;;32416:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20122:841:0::0;20376:12;20390;20357:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;20415:12:::1;20430:45;20451:7;20460:6;20468;20430:20;:45::i;:::-;20486:58;::::0;;-1:-1:-1;;;20486:58:0;;20516:10:::1;20486:58;::::0;::::1;::::0;-1:-1:-1;;;;;20486:29:0;::::1;:58:::0;;;;;;;;;;;;;;20415:60;;-1:-1:-1;20486:29:0;;::::1;::::0;:58;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20486:29:0;:58;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20486:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20486:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20612:25:0::1;::::0;;;;;-1:-1:-1;;;;;20612:25:0;;::::1;;::::0;::::1;::::0;;;20582:12:::1;::::0;;;20612:21;;::::1;::::0;::::1;::::0;:25;;;;;;;;;;;20582:12;20612:21;:25;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20612:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20612:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20612:25:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20612:25:0;-1:-1:-1;20649:14:0::1;20668:39;20692:6:::0;20700;20668:23:::1;:39::i;:::-;20648:59;;;20749:6;-1:-1:-1::0;;;;;20739:16:0::1;:6;-1:-1:-1::0;;;;;20739:16:0::1;;:58;;20780:7;20789;20739:58;;;20759:7;20768;20739:58;20718:79:::0;;-1:-1:-1;20718:79:0;-1:-1:-1;20816:21:0;;::::1;;20808:68;;;;-1:-1:-1::0;;;20808:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20906:10;20895:7;:21;;20887:68;;;;-1:-1:-1::0;;;20887:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16542:1;;;;20122:841:::0;;;;;;;;;;;:::o;16334:41::-;;;:::o;34173:249::-;34317:21;34363:51;34390:7;34399:8;34409:4;34363:26;:51::i;22323:661::-;22612:16;22630:14;22657:12;22672:42;22693:7;22702:5;22709:4;22672:20;:42::i;:::-;22657:57;;22725:10;22738;:33;;22762:9;22738:33;;;-1:-1:-1;;22738:33:0;22782:76;;;-1:-1:-1;;;22782:76:0;;22806:10;22782:76;;;;22826:4;22782:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22725:46;;-1:-1:-1;;;;;;22782:23:0;;;;;:76;;;;;-1:-1:-1;;22782:76:0;;;;;;;;-1:-1:-1;22782:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;22782:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22782:76:0;;;;22896:80;22915:5;22922:9;22933:14;22949:12;22963:2;22967:8;22896:18;:80::i;:::-;22869:107;;;;-1:-1:-1;22323:661:0;-1:-1:-1;;;;;;;;;;;;;22323:661:0:o;28882:794::-;29095:21;29067:8;16491:15;16479:8;:27;;16471:60;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;-1:-1:-1;;;16471:60:0;;;;;;;;;;;;;;;29153:4:::1;-1:-1:-1::0;;;;;29142:15:0::1;:4;;29147:1;29142:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29142:7:0::1;-1:-1:-1::0;;;;;29142:15:0::1;;29134:53;;;::::0;;-1:-1:-1;;;29134:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29208:51;29234:7;29243:9;29254:4;;29208:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29208:25:0::1;::::0;-1:-1:-1;;;29208:51:0:i:1;:::-;29198:61;;29292:9;29278:7;29286:1;29278:10;;;;;;;;;;;;;;:23;;29270:71;;;;-1:-1:-1::0;;;29270:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29358:4;-1:-1:-1::0;;;;;29352:19:0::1;;29379:7;29387:1;29379:10;;;;;;;;;;;;;;29352:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29352:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29352:40:0;;;;;29416:4;-1:-1:-1::0;;;;;29410:20:0::1;;29431:47;29452:7;29461:4;;29466:1;29461:7;;;;;;29431:47;29480:7;29488:1;29480:10;;;;;;;;;;;;;;29410:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;29410:81:0::1;-1:-1:-1::0;;;;;29410:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29410:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29410:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29410:81:0;29403:89:::1;;;;29503:24;29509:7;29518:4;;29503:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29524:2:0;;-1:-1:-1;29503:5:0::1;::::0;-1:-1:-1;;29503:24:0:i:1;:::-;29590:7;29598:1;29590:10;;;;;;;;;;;;;;29578:9;:22;29574:94;;;29602:66;29633:10;29657:7;29665:1;29657:10;;;;;;;;;;;;;;29645:9;:22;29602:30;:66::i;600:361::-:0;795:45;;;-1:-1:-1;;;;;795:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;795:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;795:45:0;179:29:-1;160:49;;784:57:0;;;;749:12;;763:17;;784:10;;;;795:45;784:57;;;25:18:-1;784:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;784:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;748:93:0;;;;860:7;:57;;;;-1:-1:-1;872:11:0;;:16;;:44;;;903:4;892:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;892:24:0;872:44;852:101;;;;;-1:-1:-1;;;852:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;600:361;;;;;:::o;1379:195::-;1487:12;;;1449;1487;;;;;;;;;-1:-1:-1;;;;;1466:7:0;;;1480:5;;1466:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1466:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1448:52:0;;;1519:7;1511:55;;;;-1:-1:-1;;;1511:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1379:195;;;:::o;12744:509::-;12837:14;12883:1;12872:8;:12;12864:64;;;;-1:-1:-1;;;12864:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12959:1;12947:9;:13;:31;;;;;12977:1;12964:10;:14;12947:31;12939:80;;;;-1:-1:-1;;;12939:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13030:20;13053:17;:8;13066:3;13053:17;:12;:17;:::i;:::-;13030:40;-1:-1:-1;13081:14:0;13098:31;13030:40;13118:10;13098:31;:19;:31;:::i;:::-;13081:48;-1:-1:-1;13140:16:0;13159:40;13183:15;13159:19;:9;13173:4;13159:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13140:59;;13234:11;13222:9;:23;;;;;;;12744:509;-1:-1:-1;;;;;;;12744:509:0:o;13920:507::-;14021:21;14078:1;14063:4;:11;:16;;14055:55;;;;;-1:-1:-1;;;14055:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14142:4;:11;14131:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14131:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14131:23:0;;14121:33;;14178:8;14165:7;14173:1;14165:10;;;;;;;;;;;;;:21;;;;;14202:6;14197:223;14228:1;14214:4;:11;:15;14210:1;:19;14197:223;;;14252:14;14268:15;14287:42;14299:7;14308:4;14313:1;14308:7;;;;;;;;;;;;;;14317:4;14322:1;14326;14322:5;14317:11;;;;;;;;;;;;;;14287;:42::i;:::-;14251:78;;;;14361:47;14374:7;14382:1;14374:10;;;;;;;;;;;;;;14386:9;14397:10;14361:12;:47::i;:::-;14344:7;14352:1;14356;14352:5;14344:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14231:3:0;;14197:223;;;;13920:507;;;;;:::o;11230:478::-;11319:12;11345:14;11361;11379:26;11390:6;11398;11379:10;:26::i;:::-;11543:32;;;-1:-1:-1;;11543:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11543:32:0;;;;;11533:43;;;;;;11446:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11446:251:0;;;;;;;11436:262;;;;;;;;;11230:478;-1:-1:-1;;;;;11230:478:0:o;969:402::-;1194:51;;;-1:-1:-1;;;;;1194:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1194:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;1183:63:0;;;;1148:12;;1162:17;;1183:10;;;;1194:51;1183:63;;;25:18:-1;1183:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1183:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1147:99:0;;;;1265:7;:57;;;;-1:-1:-1;1277:11:0;;:16;;:44;;;1308:4;1297:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1297:24:0;1277:44;1257:106;;;;-1:-1:-1;;;1257:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;969:402;;;;;;:::o;24590:719::-;24697:6;24692:610;24723:1;24709:4;:11;:15;24705:1;:19;24692:610;;;24747:13;24762:14;24781:4;24786:1;24781:7;;;;;;;;;;;;;;24790:4;24795:1;24799;24795:5;24790:11;;;;;;;;;;;;;;24746:56;;;;24818:14;24837:38;24861:5;24868:6;24837:23;:38::i;:::-;24817:58;;;24890:14;24907:7;24915:1;24919;24915:5;24907:14;;;;;;;;;;;;;;24890:31;;24937:15;24954;24982:6;-1:-1:-1;;;;;24973:15:0;:5;-1:-1:-1;;;;;24973:15:0;;:61;;25015:9;25031:1;24973:61;;;24997:1;25001:9;24973:61;24936:98;;;;25049:10;25080:1;25066:4;:11;:15;25062:1;:19;:78;;25137:3;25062:78;;;25084:50;25105:7;25114:6;25122:4;25127:1;25131;25127:5;25122:11;;;;;;;;;;;;;;25084:20;:50::i;:::-;25049:91;;25166:44;25187:7;25196:5;25203:6;25166:20;:44::i;:::-;-1:-1:-1;;;;;25155:61:0;;25235:10;25247;25259:2;25273:1;25263:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25263:12:0;87:42:-1;143:17;;-1:-1;25263:12:0;;25155:135;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25155:135:0;-1:-1:-1;;;;;25155:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25155:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25155:135:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24726:3:0;;;;;-1:-1:-1;24692:610:0;;-1:-1:-1;;;;;;;;24692:610:0;;;24590:719;;;:::o;14508:528::-;14609:21;14666:1;14651:4;:11;:16;;14643:55;;;;;-1:-1:-1;;;14643:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14730:4;:11;14719:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14719:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14719:23:0;;14709:33;;14783:9;14753:7;14778:1;14761:7;:14;:18;14753:27;;;;;;;;;;;;;;;;;:39;14817:11;;-1:-1:-1;;14817:15:0;14803:226;14834:5;;14803:226;;14862:14;14878:15;14897:42;14909:7;14918:4;14927:1;14923;:5;14918:11;;;;;;;;;;;;;;14931:4;14936:1;14931:7;;;;;;;14897:42;14861:78;;;;14971:46;14983:7;14991:1;14983:10;;;;;;;;;;;;;;14995:9;15006:10;14971:11;:46::i;:::-;14954:7;14966:1;14962;:5;14954:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14841:3:0;14803:226;;16846:1412;17191:46;;;;;;-1:-1:-1;;;;;17191:46:0;;;;;;;;;;;;;;;;17096:12;;;;;;17205:7;17191:30;;;;;;:46;;;;;;;;;;;;;;;:30;:46;;;2:2:-1;;;;27:1;24;17:12;2:2;17191:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17191:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17191:46:0;-1:-1:-1;;;;;17191:60:0;;17187:160;;;17268:67;;;;;;-1:-1:-1;;;;;17268:67:0;;;;;;;;;;;;;;;;;;;;;;17282:7;17268:33;;;;;;:67;;;;;;;;;;;;;;;-1:-1:-1;17268:33:0;:67;;;2:2:-1;;;;27:1;24;17:12;2:2;17268:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17268:67:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17187:160:0;17358:13;17373;17390:49;17415:7;17424:6;17432;17390:24;:49::i;:::-;17357:82;;;;17454:8;17466:1;17454:13;:30;;;;-1:-1:-1;17471:13:0;;17454:30;17450:801;;;17523:14;;-1:-1:-1;17539:14:0;;-1:-1:-1;17450:801:0;;;17587:19;17609:54;17628:14;17644:8;17654;17609:18;:54::i;:::-;17587:76;;17700:14;17682;:32;17678:562;;17761:10;17743:14;:28;;17735:75;;;;-1:-1:-1;;;17735:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17851:14;;-1:-1:-1;17867:14:0;-1:-1:-1;17867:14:0;17678:562;;;17923:19;17945:54;17964:14;17980:8;17990;17945:18;:54::i;:::-;17923:76;;18043:14;18025;:32;;18018:40;;;;18103:10;18085:14;:28;;18077:75;;;;-1:-1:-1;;;18077:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18193:14;-1:-1:-1;18209:14:0;;-1:-1:-1;17678:562:0;17450:801;;16846:1412;;;;;;;;;;;;:::o;29823:1190::-;29936:6;29931:1075;29962:1;29948:4;:11;:15;29944:1;:19;29931:1075;;;29986:13;30001:14;30020:4;30025:1;30020:7;;;;;;;;;;;;;;30029:4;30034:1;30038;30034:5;30029:11;;;;;;;;;;;;;;29985:56;;;;30057:14;30076:38;30100:5;30107:6;30076:23;:38::i;:::-;30056:58;;;30129:15;30158:44;30179:7;30188:5;30195:6;30158:20;:44::i;:::-;30129:74;;30218:16;30249:17;30337:13;30352;30370:4;-1:-1:-1;;;;;30370:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30370:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30370:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30370:18:0;;;;;;;30336:52;;;;;-1:-1:-1;30336:52:0;;-1:-1:-1;30404:17:0;;-1:-1:-1;;;;;30445:15:0;;;;;;;:61;;30487:8;30497;30445:61;;;30464:8;30474;30445:61;30403:103;;;;30535:56;30578:12;30542:5;-1:-1:-1;;;;;30535:23:0;;30567:4;30535:38;;;;;;;;;;;;;-1:-1:-1;;;;;30535:38:0;-1:-1:-1;;;;;30535:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30535:56:0;30521:70;;30621:67;30647:11;30660:12;30674:13;30621:25;:67::i;:::-;30606:82;;29931:1075;;;;30719:15;30736;30764:6;-1:-1:-1;;;;;30755:15:0;:5;-1:-1:-1;;;;;30755:15:0;;:67;;30800:12;30819:1;30755:67;;;30779:1;30783:12;30755:67;30718:104;;;;30837:10;30868:1;30854:4;:11;:15;30850:1;:19;:78;;30925:3;30850:78;;;30872:50;30893:7;30902:6;30910:4;30915:1;30919;30915:5;30910:11;;;;;;;30872:50;30981:12;;;30991:1;30981:12;;;;;;;;;;30943:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;30943:51:0;;;;;;;;;;;;;;;;;;;;;;30837:91;;-1:-1:-1;30943:9:0;;;;;;30953:10;;30965;;30837:91;;30981:12;;30943:51;;;;;;;;30981:12;;30943:51;;;;30981: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;30943:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30943:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29965:3:0;;;;;-1:-1:-1;29931:1075:0;;-1:-1:-1;;;;;;;;;;29931:1075:0;10269:129;10353:5;;;10348:16;;;;10340:50;;;;;-1:-1:-1;;;10340:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13374:464;13467:13;13513:1;13501:9;:13;13493:66;;;;-1:-1:-1;;;13493:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13590:1;13578:9;:13;:31;;;;;13608:1;13595:10;:14;13578:31;13570:80;;;;-1:-1:-1;;;13570:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13661:14;13678:34;13707:4;13678:24;:9;13692;13678:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13661:51;-1:-1:-1;13723:16:0;13742:34;13772:3;13742:25;:10;13757:9;13742:25;:14;:25;:::i;:34::-;13723:53;;13798:32;13828:1;13811:11;13799:9;:23;;;;;;;13798:32;:29;:32;:::i;:::-;13787:43;13374:464;-1:-1:-1;;;;;;13374:464:0:o;12309:313::-;12391:12;12434:1;12424:7;:11;12416:57;;;;-1:-1:-1;;;12416:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12503:1;12492:8;:12;:28;;;;;12519:1;12508:8;:12;12492:28;12484:77;;;;-1:-1:-1;;;12484:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12606:8;12582:21;:7;12594:8;12582:21;:11;:21;:::i;:::-;:32;;;;;;;12309:313;-1:-1:-1;;;;12309:313:0:o;10797:341::-;10872:14;10888;10933:6;-1:-1:-1;;;;;10923:16:0;:6;-1:-1:-1;;;;;10923:16:0;;;10915:62;;;;-1:-1:-1;;;10915:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11016:6;-1:-1:-1;;;;;11007:15:0;:6;-1:-1:-1;;;;;11007:15:0;;:53;;11045:6;11053;11007:53;;;11026:6;11034;11007:53;10988:72;;-1:-1:-1;10988:72:0;-1:-1:-1;;;;;;11079:20:0;;11071:59;;;;;-1:-1:-1;;;11071:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10797:341;;;;;:::o;10406:142::-;10458:6;10485;;;:30;;-1:-1:-1;;10500:5:0;;;10514:1;10509;10500:5;10509:1;10495:15;;;;;:20;10485:30;10477:63;;;;;-1:-1:-1;;;10477:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10133:128;10217:5;;;10212:16;;;;10204:49;;;;;-1:-1:-1;;;10204:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11766:430;11859:13;11874;11901:14;11920:26;11931:6;11939;11920:10;:26::i;:::-;11900:46;;;11957:32;11965:7;11974:6;11982;11957:7;:32::i;:::-;;12001:13;12016;12045:32;12053:7;12062:6;12070;12045:7;:32::i;:::-;-1:-1:-1;;;;;12034:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12034:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12034:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12034:58:0;;;;;;;12000:92;;;;;-1:-1:-1;12000:92:0;;-1:-1:-1;;;;;;12126:16:0;;;;;;;:62;;12169:8;12179;12126:62;;;12146:8;12156;12126:62;12103:85;;;;-1:-1:-1;11766:430:0;-1:-1:-1;;;;;;;11766:430:0:o

Swarm Source

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