Contract 0x0c45FB63001b56a21e29c7dcc1727bfDA273a368 2

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5896ebec9ec91dc794fcb7cf3b620a3a8d197bb5381064f01a2ff4be4f9e2ef3Remove Liquidity...147932782022-05-17 1:02:1712 hrs 17 mins ago0xfdb7eec5ebf4c4ac7734748474123ac25c6edcc8 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0060076295 26.5
0x2ed0592f258703931d178a9231297c43a996987ecaa21ba6cf21c31792e1c9afSwap Exact Token...147931052022-05-17 0:56:3212 hrs 23 mins ago0xfdb7eec5ebf4c4ac7734748474123ac25c6edcc8 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0037741565 26.5
0x065dd6b0e7742dd136c98353b3fe2eabd8f44862bd3bf9ecfc1156a873b87dc8Remove Liquidity...147801592022-05-16 17:43:2619 hrs 36 mins ago0xcf4ad125da41f40916644f6b2c84ba04ff2526ef IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.006003469 26.5
0x6b4be549e802118eaaf858abd20afe7ede0879e9184edc1a7acbd844eab23ee3Remove Liquidity...147767052022-05-16 15:48:1221 hrs 31 mins ago0xc671f4392a47cf5fedffef2fec8e2dda7f1efd77 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.006122766 26
0x61ad0c8ee49aab363b2b00829b3e3520bb53b4ffbff5e92a41e1836914ca6effSwap Exact Token...147699622022-05-16 12:04:411 day 1 hr ago0x091bdd0d200617ec53b95f5b60e4f537e151ad13 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.003353787 26.5
0x068919a22ff7472468b16f1eb356a332c455a6f103e7300c89b660aebaafd44eSwap Exact Token...147410742022-05-15 20:01:501 day 17 hrs ago0x7845ea454a21986988b83352db5d62a8755d676f IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.004062860817 28.527119014
0x01ed5b289946440ad0d111a61b70701dc2f7a32841bbbcb397396e7498b268b7Add Liquidity147357762022-05-15 17:04:181 day 20 hrs ago0xcf4ad125da41f40916644f6b2c84ba04ff2526ef IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.004787861 26.5
0x061179f073a34ddf689a2e43d45dfe66029f6cc3c12e3c2550296ca1bdc75356Swap Tokens For ...147357152022-05-15 17:02:171 day 20 hrs ago0xcf4ad125da41f40916644f6b2c84ba04ff2526ef IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0029408905 26.5
0xaba04f8596bdbc5d4c6566938b877d13986b3ef297e6981ff4dd161c517d10b7Remove Liquidity...147352852022-05-15 16:48:051 day 20 hrs ago0x3e0390f0bce5e6d1e142097ec91bbd907730ada9 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0064601435 26.5
0x3c33ef49d8b3a9949335ec619b4e7d75acc1c12789b005c31c1a8554a18287ecSwap Exact Token...147350912022-05-15 16:41:391 day 20 hrs ago0x8f486ad5da783b0aa53ca4e6816e6f4121170968 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0037738385 26.5
0x00cc655219e804c3e7731b8bba521cc471121d6fd5318c88021f0968e2e8bf7eSwap Exact Token...147227312022-05-15 9:50:002 days 3 hrs ago0xab372f782d8c430e896ff02fc85a9b602f908919 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.02398788216
0x33aded2abcd0060fabd0984fe5f2a39b260fbefdc432230be7816d96f7a9e2f3Add Liquidity147217742022-05-15 9:18:052 days 4 hrs ago0xc4fcbb58e36e8f5c3b0e904cb20c3947af246891 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.004575278 26.5
0x518d8f7a3fc2f8b99a2422b9aaa7bc84ad6b9cfbde3c0f0d784f2803a5680f0bRemove Liquidity...147186562022-05-15 7:33:482 days 5 hrs ago0xaa40dadd5b5488bf312ef50e58f08c47b935c316 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0062472425 26.5
0xf47a7e8ec3385b39af9101545a7f92afe087b9d3ec25310773560fea160ada2aAdd Liquidity147173362022-05-15 6:49:332 days 6 hrs ago0xc671f4392a47cf5fedffef2fec8e2dda7f1efd77 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.00455878856 26.41
0x9e8a627306c9ec5357ec393ac2d586328d3aedf4fb233f8aa6963e3d306653a8Add Liquidity147167162022-05-15 6:28:472 days 6 hrs ago0xc671f4392a47cf5fedffef2fec8e2dda7f1efd77 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.004488016 26
0x3ef372c9e8e97f53609079bcb4f78d18f449309f87f6b293fce40eaa6546cea0Swap Exact Token...147157822022-05-15 5:57:312 days 7 hrs ago0x852fe74d45c772916823b88265c20a6463735b16 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0037735205 26.5
0x72449164e883dc09933428915e132e9ebc548dbc711143985de6954d10437797Add Liquidity147100502022-05-15 2:45:552 days 10 hrs ago0x4ec3fa22540f841657197440fee70b5967465aaa IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.004572946 26.5
0x223ca4248c4295513bde257c6e2befe7cbd59d1e99ea963f751832499aec70acAdd Liquidity147087692022-05-15 2:03:072 days 11 hrs ago0x0b42115d86b7cae44ee27e6adb2b13facb893a14 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.03161795 175
0xb879ba4d1a6a0c747955bf94697ca9f5e4a10122c9b1c32d242a6cb441157e73Swap Exact Token...147040572022-05-14 23:26:012 days 13 hrs ago0x65bab4f268286b9005d6053a177948dddc29bad3 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.006485200
0x1e091a273c14842e33a3ddc77a0fccc23f89917cf5107e9e19a412b08f5e5789Swap Exact Token...147040562022-05-14 23:25:592 days 13 hrs ago0xab372f782d8c430e896ff02fc85a9b602f908919 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.023529244212
0xa2001c95e3f5ffb1f516506b28b9798717fc793e4e8136edd0fc2ebb36d6c549Swap Exact Token...146995142022-05-14 20:54:302 days 16 hrs ago0xab372f782d8c430e896ff02fc85a9b602f908919 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.006258025193
0xfb1154256496686a09c34df63b6cfd3f36e2b4cf1e673795dd46d04107275503Swap Exact Token...146995142022-05-14 20:54:302 days 16 hrs ago0x65bab4f268286b9005d6053a177948dddc29bad3 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0221974200
0x43035791bfeaea624a88bb5448d3ced3e06917103141e731ddeb40093a5a09bcRemove Liquidity...146908562022-05-14 16:06:182 days 21 hrs ago0x1da868a87faff28b8abb1d4d36f4da6b9c737ed7 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0064595075 26.5
0x1748761e37452a8ddd1bed705fa702226795d933c27d01f72130f551d90a842aRemove Liquidity...146837012022-05-14 12:07:133 days 1 hr ago0x88e9062a33892dc2bef39a7fb8ce643396242340 IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.0064595075 26.5
0xa13cd186f1d4c081aaeabc846344efd9fd0d9105fac87a6ed7fcf363397f7d44Swap Exact Token...146817952022-05-14 11:03:423 days 2 hrs ago0x27f364a96cc92793263ee07214b38e68acad220f IN  0x0c45fb63001b56a21e29c7dcc1727bfda273a3680 AVAX0.002942746921 26.508606549
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2ed0592f258703931d178a9231297c43a996987ecaa21ba6cf21c31792e1c9af147931052022-05-17 0:56:3212 hrs 23 mins ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680xfdb7eec5ebf4c4ac7734748474123ac25c6edcc80.341462744786959602 AVAX
0x2ed0592f258703931d178a9231297c43a996987ecaa21ba6cf21c31792e1c9af147931052022-05-17 0:56:3212 hrs 23 mins ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680.341462744786959602 AVAX
0x068919a22ff7472468b16f1eb356a332c455a6f103e7300c89b660aebaafd44e147410742022-05-15 20:01:501 day 17 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680x7845ea454a21986988b83352db5d62a8755d676f0.225558310734836743 AVAX
0x068919a22ff7472468b16f1eb356a332c455a6f103e7300c89b660aebaafd44e147410742022-05-15 20:01:501 day 17 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680.225558310734836743 AVAX
0x3c33ef49d8b3a9949335ec619b4e7d75acc1c12789b005c31c1a8554a18287ec147350912022-05-15 16:41:391 day 20 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680x8f486ad5da783b0aa53ca4e6816e6f41211709680.07790366743951905 AVAX
0x3c33ef49d8b3a9949335ec619b4e7d75acc1c12789b005c31c1a8554a18287ec147350912022-05-15 16:41:391 day 20 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680.07790366743951905 AVAX
0x3ef372c9e8e97f53609079bcb4f78d18f449309f87f6b293fce40eaa6546cea0147157822022-05-15 5:57:312 days 7 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680x852fe74d45c772916823b88265c20a6463735b160.040264555178038788 AVAX
0x3ef372c9e8e97f53609079bcb4f78d18f449309f87f6b293fce40eaa6546cea0147157822022-05-15 5:57:312 days 7 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680.040264555178038788 AVAX
0x659d2b854040f47ebb016bc743dbbb6099ca78a964c4812ea6650fc281e95f29146763472022-05-14 8:02:353 days 5 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680xb6ec578ac004ec45c02e415542736cb55352396a0.126749648210470128 AVAX
0x659d2b854040f47ebb016bc743dbbb6099ca78a964c4812ea6650fc281e95f29146763472022-05-14 8:02:353 days 5 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680.126749648210470128 AVAX
0x881b7ae71e141d6358105d2005bb2aa97008d0c838b0dcc91b98d7216d813155146309192022-05-13 6:47:074 days 6 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680xcdee5108413e80af6c84bdd3ab0d328a3d63dda40.183206788608071883 AVAX
0x881b7ae71e141d6358105d2005bb2aa97008d0c838b0dcc91b98d7216d813155146309192022-05-13 6:47:074 days 6 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680.183206788608071883 AVAX
0xb3b879e70166def1688e38a502fcd4d24096e1b6d262f1dfb3a12847e1805531146017832022-05-12 14:38:314 days 22 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a368 Wrapped AVAX1.007239742699413727 AVAX
0xe1f4ed2891832cc5fdeb565a5046f6acf0ea26a365b43b0ed75ed73f940cb106146017452022-05-12 14:37:174 days 22 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a368 Wrapped AVAX1 AVAX
0xc16eb7e5ee4c631762819ffa2177907f345ec3b9832d7d44a50a49d05c82a0fd145902072022-05-12 8:19:465 days 5 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680xcdee5108413e80af6c84bdd3ab0d328a3d63dda40.187463410939610094 AVAX
0xc16eb7e5ee4c631762819ffa2177907f345ec3b9832d7d44a50a49d05c82a0fd145902072022-05-12 8:19:465 days 5 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680.187463410939610094 AVAX
0xc268e25f6a7e78456c13d5e437981a89dfc48e11833c4760eba5b086629d504d145448612022-05-11 7:12:116 days 6 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680x8f486ad5da783b0aa53ca4e6816e6f41211709680.162190520462501027 AVAX
0xc268e25f6a7e78456c13d5e437981a89dfc48e11833c4760eba5b086629d504d145448612022-05-11 7:12:116 days 6 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680.162190520462501027 AVAX
0x0afb9381b2efbea5a81748f42e117582cdbdb0afdfb42684a70c2dcee05a37fa145437502022-05-11 6:35:106 days 6 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680x06adc7167930fea8750c6ac212bd4a5a0b10b8752.258524521570988381 AVAX
0x0afb9381b2efbea5a81748f42e117582cdbdb0afdfb42684a70c2dcee05a37fa145437502022-05-11 6:35:106 days 6 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3682.258524521570988381 AVAX
0x9c1e99d86a266c9c7dae1b6e18db66145391c379d398ec9283ca645c0aa50a06145437262022-05-11 6:34:186 days 6 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680x06adc7167930fea8750c6ac212bd4a5a0b10b8752.311627290689669316 AVAX
0x9c1e99d86a266c9c7dae1b6e18db66145391c379d398ec9283ca645c0aa50a06145437262022-05-11 6:34:186 days 6 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3682.311627290689669316 AVAX
0xa56ca40596490061799998c52c9f8b22236c2b125b7d4d8c673873f555e64373145245422022-05-10 19:53:306 days 17 hrs ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680x75b0c9b712a82a88924871387c8fb2dfc31b24c80.03991894798956966 AVAX
0xa56ca40596490061799998c52c9f8b22236c2b125b7d4d8c673873f555e64373145245422022-05-10 19:53:306 days 17 hrs ago Wrapped AVAX 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680.03991894798956966 AVAX
0xb0aa79156bea209e485397a8affc5a91f844a1a6429dfcb8ce45b137e0390aa8145110792022-05-10 12:20:027 days 59 mins ago 0x0c45fb63001b56a21e29c7dcc1727bfda273a3680xcdee5108413e80af6c84bdd3ab0d328a3d63dda40.182164669489449757 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OliveRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-25
*/

// SPDX-License-Identifier: MIT
// File: contracts/farms/olive/swap/IOliveFactory.sol

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

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

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

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

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

// File: contracts/farms/olive/swap/IOliveRouter01.sol

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

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

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

// File: contracts/farms/olive/swap/IOliveRouter02.sol

interface IOliveRouter02 is IOliveRouter01 {
    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/farms/olive/swap/IOlivePair.sol

interface IOlivePair {
    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/farms/olive/swap/SafeMath.sol

// 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/farms/olive/swap/OliveLibrary.sol

pragma solidity ^0.6.0;



library OliveLibrary {
    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, 'OliveLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'OliveLibrary: 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'b7145948956af92afd2ae97eff039ada60998237282c1687ca23ce1ad5e1d282' // 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,) = IOlivePair(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, 'OliveLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'OliveLibrary: 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, 'OliveLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'OliveLibrary: 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, 'OliveLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'OliveLibrary: 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, 'OliveLibrary: 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, 'OliveLibrary: 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/farms/olive/swap/IERC20.sol

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/farms/olive/swap/IWETH.sol

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

// File: contracts/farms/olive/swap/TransferHelper.sol

// 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/farms/olive/swap/OliveRouter.sol

pragma solidity = 0.6.6;








contract OliveRouter is IOliveRouter02 {
    using SafeMath for uint;

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

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

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

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

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IOliveFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IOliveFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = OliveLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = OliveLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'OliveRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = OliveLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'OliveRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = OliveLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IOlivePair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = OliveLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IOlivePair(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 = OliveLibrary.pairFor(factory, tokenA, tokenB);
        IOlivePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IOlivePair(pair).burn(to);
        (address token0,) = OliveLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'OliveRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'OliveRouter: 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 = OliveLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IOlivePair(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 = OliveLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IOlivePair(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 = OliveLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IOlivePair(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,) = OliveLibrary.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 ? OliveLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IOlivePair(OliveLibrary.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 = OliveLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'OliveRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, OliveLibrary.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 = OliveLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'OliveRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, OliveLibrary.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, 'OliveRouter: INVALID_PATH');
        amounts = OliveLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'OliveRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(OliveLibrary.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, 'OliveRouter: INVALID_PATH');
        amounts = OliveLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'OliveRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, OliveLibrary.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, 'OliveRouter: INVALID_PATH');
        amounts = OliveLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'OliveRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, OliveLibrary.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, 'OliveRouter: INVALID_PATH');
        amounts = OliveLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'OliveRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(OliveLibrary.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,) = OliveLibrary.sortTokens(input, output);
            IOlivePair pair = IOlivePair(OliveLibrary.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 = OliveLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? OliveLibrary.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, OliveLibrary.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,
            'OliveRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'OliveRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(OliveLibrary.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,
            'OliveRouter: 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, 'OliveRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, OliveLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'OliveRouter: 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 OliveLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract ABI

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

60c060405234801561001057600080fd5b5060405162004804380380620048048339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61467f620001856000398061019f5280610d245280610d5f5280610e565280611082528061140c528061158052806119475280611a4f5280611b055280611bd35280611d275280611daf5280611ff4528061206f528061211e52806121ea528061228d528061230152806127ff5280612a725280612ac85280612afc5280612b705280612d105280612e615280612ee9525080610ef25280610fc95280611148528061118152806112bc52806114a8528061155e52806116ce5280611c745280611de15280611f445280612333528061258c528061278452806127ad52806127dd528061294a5280612aa65280612db15280612f1b52806137da528061381d5280613b005280613c8652806140be528061416c52806141ec525061467f6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610b8d578063f305d71914610c0d578063fb3bdb4114610c53576101c8565b8063c45a015514610a50578063d06ca61f14610a65578063ded9382a14610b1a576101c8565b8063af2979eb116100b0578063af2979eb1461091c578063b6f9de951461096f578063baa2abde146109f3576101c8565b80638803dbee1461081f578063ad5c4648146108b5578063ad615dec146108e6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106cf5780637ff36ab51461076557806385f8c259146107e9576101c8565b80634a25d94a146105305780635b0d5984146105c65780635c11d79514610639576101c8565b80631f00ca74116101695780631f00ca74146103675780632195995c1461041c57806338ed17391461049a576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cd7565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610df1565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610317600480360360a08110156102a457600080fd5b813591602081013591810190606081016040820135600160201b8111156102ca57600080fd5b8201836020820111156102dc57600080fd5b803590602001918460208302840111600160201b831117156102fd57600080fd5b91935091506001600160a01b038135169060200135610e06565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035357818101518382015260200161033b565b505050509050019250505060405180910390f35b34801561037357600080fd5b506103176004803603604081101561038a57600080fd5b81359190810190604081016020820135600160201b8111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460208302840111600160201b831117156103de57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611141945050505050565b34801561042857600080fd5b50610220600480360361016081101561044057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611177565b3480156104a657600080fd5b50610317600480360360a08110156104bd57600080fd5b813591602081013591810190606081016040820135600160201b8111156104e357600080fd5b8201836020820111156104f557600080fd5b803590602001918460208302840111600160201b8311171561051657600080fd5b91935091506001600160a01b038135169060200135611271565b34801561053c57600080fd5b50610317600480360360a081101561055357600080fd5b813591602081013591810190606081016040820135600160201b81111561057957600080fd5b82018360208201111561058b57600080fd5b803590602001918460208302840111600160201b831117156105ac57600080fd5b91935091506001600160a01b0381351690602001356113bc565b3480156105d257600080fd5b5061026f60048036036101408110156105ea57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611556565b34801561064557600080fd5b506101c6600480360360a081101561065c57600080fd5b813591602081013591810190606081016040820135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b91935091506001600160a01b038135169060200135611664565b3480156106db57600080fd5b506101c6600480360360a08110156106f257600080fd5b813591602081013591810190606081016040820135600160201b81111561071857600080fd5b82018360208201111561072a57600080fd5b803590602001918460208302840111600160201b8311171561074b57600080fd5b91935091506001600160a01b0381351690602001356118f9565b6103176004803603608081101561077b57600080fd5b81359190810190604081016020820135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460208302840111600160201b831117156107cf57600080fd5b91935091506001600160a01b038135169060200135611b8b565b3480156107f557600080fd5b5061026f6004803603606081101561080c57600080fd5b5080359060208101359060400135611eec565b34801561082b57600080fd5b50610317600480360360a081101561084257600080fd5b813591602081013591810190606081016040820135600160201b81111561086857600080fd5b82018360208201111561087a57600080fd5b803590602001918460208302840111600160201b8311171561089b57600080fd5b91935091506001600160a01b038135169060200135611ef9565b3480156108c157600080fd5b506108ca611ff2565b604080516001600160a01b039092168252519081900360200190f35b3480156108f257600080fd5b5061026f6004803603606081101561090957600080fd5b5080359060208101359060400135612016565b34801561092857600080fd5b5061026f600480360360c081101561093f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612023565b6101c66004803603608081101561098557600080fd5b81359190810190604081016020820135600160201b8111156109a657600080fd5b8201836020820111156109b857600080fd5b803590602001918460208302840111600160201b831117156109d957600080fd5b91935091506001600160a01b0381351690602001356121a4565b3480156109ff57600080fd5b50610220600480360360e0811015610a1657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c0013561253e565b348015610a5c57600080fd5b506108ca612782565b348015610a7157600080fd5b5061031760048036036040811015610a8857600080fd5b81359190810190604081016020820135600160201b811115610aa957600080fd5b820183602082011115610abb57600080fd5b803590602001918460208302840111600160201b83111715610adc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506127a6945050505050565b348015610b2657600080fd5b506102206004803603610140811015610b3e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356127d3565b348015610b9957600080fd5b50610bef6004803603610100811015610bb157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356128e7565b60408051938452602084019290925282820152519081900360600190f35b610bef600480360360c0811015610c2357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a23565b61031760048036036080811015610c6957600080fd5b81359190810190604081016020820135600160201b811115610c8a57600080fd5b820183602082011115610c9c57600080fd5b803590602001918460208302840111600160201b83111715610cbd57600080fd5b91935091506001600160a01b038135169060200135612cc8565b6000808242811015610d1e576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b610d4d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a61253e565b9093509150610d5d898685613058565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050610de585836131c2565b50965096945050505050565b6000610dfe8484846132ba565b949350505050565b60608142811015610e4c576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e8657fe5b905060200201356001600160a01b03166001600160a01b031614610eed576040805162461bcd60e51b815260206004820152601960248201527809ed8d2eccaa4deeae8cae47440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b610f4b7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133aa92505050565b91508682600184510381518110610f5e57fe5b60200260200101511015610fa35760405162461bcd60e51b81526004018080602001828103825260278152602001806146236027913960400191505060405180910390fd5b61104186866000818110610fb357fe5b905060200201356001600160a01b0316336110277f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610ff557fe5b905060200201356001600160a01b03168b8b600181811061101257fe5b905060200201356001600160a01b03166134f6565b8560008151811061103457fe5b60200260200101516135ce565b6110808287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061372b915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110bf57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110fd57600080fd5b505af1158015611111573d6000803e3d6000fd5b50505050611136848360018551038151811061112957fe5b60200260200101516131c2565b509695505050505050565b606061116e7f00000000000000000000000000000000000000000000000000000000000000008484613971565b90505b92915050565b60008060006111a77f00000000000000000000000000000000000000000000000000000000000000008f8f6134f6565b90506000876111b6578c6111ba565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561123057600080fd5b505af1158015611244573d6000803e3d6000fd5b505050506112578f8f8f8f8f8f8f61253e565b809450819550505050509b509b9950505050505050505050565b606081428110156112b7576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b6113157f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133aa92505050565b9150868260018451038151811061132857fe5b6020026020010151101561136d5760405162461bcd60e51b81526004018080602001828103825260278152602001806146236027913960400191505060405180910390fd5b61137d86866000818110610fb357fe5b6111368287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061372b915050565b60608142811015611402576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061143c57fe5b905060200201356001600160a01b03166001600160a01b0316146114a3576040805162461bcd60e51b815260206004820152601960248201527809ed8d2eccaa4deeae8cae47440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b6115017f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061397192505050565b9150868260008151811061151157fe5b60200260200101511115610fa35760405162461bcd60e51b81526004018080602001828103825260238152602001806145996023913960400191505060405180910390fd5b6000806115a47f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006134f6565b90506000866115b3578b6115b7565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561162d57600080fd5b505af1158015611641573d6000803e3d6000fd5b505050506116538d8d8d8d8d8d612023565b9d9c50505050505050505050505050565b80428110156116a8576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b61171d858560008181106116b857fe5b905060200201356001600160a01b0316336117177f0000000000000000000000000000000000000000000000000000000000000000898960008181106116fa57fe5b905060200201356001600160a01b03168a8a600181811061101257fe5b8a6135ce565b60008585600019810181811061172f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561179457600080fd5b505afa1580156117a8573d6000803e3d6000fd5b505050506040513d60208110156117be57600080fd5b50516040805160208881028281018201909352888252929350611800929091899189918291850190849080828437600092019190915250889250613aa9915050565b866118b2828888600019810181811061181557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561187a57600080fd5b505afa15801561188e573d6000803e3d6000fd5b505050506040513d60208110156118a457600080fd5b50519063ffffffff613dbb16565b10156118ef5760405162461bcd60e51b81526004018080602001828103825260278152602001806146236027913960400191505060405180910390fd5b5050505050505050565b804281101561193d576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061197757fe5b905060200201356001600160a01b03166001600160a01b0316146119de576040805162461bcd60e51b815260206004820152601960248201527809ed8d2eccaa4deeae8cae47440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b6119ee858560008181106116b857fe5b611a2c858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613aa9915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a9657600080fd5b505afa158015611aaa573d6000803e3d6000fd5b505050506040513d6020811015611ac057600080fd5b5051905086811015611b035760405162461bcd60e51b81526004018080602001828103825260278152602001806146236027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b6957600080fd5b505af1158015611b7d573d6000803e3d6000fd5b505050506118ef84826131c2565b60608142811015611bd1576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c0857fe5b905060200201356001600160a01b03166001600160a01b031614611c6f576040805162461bcd60e51b815260206004820152601960248201527809ed8d2eccaa4deeae8cae47440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b611ccd7f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133aa92505050565b91508682600184510381518110611ce057fe5b60200260200101511015611d255760405162461bcd60e51b81526004018080602001828103825260278152602001806146236027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d6157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d9457600080fd5b505af1158015611da8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e0d7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116fa57fe5b84600081518110611e1a57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e7157600080fd5b505af1158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b5051611ea357fe5b611ee28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061372b915050565b5095945050505050565b6000610dfe848484613e13565b60608142811015611f3f576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b611f9d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061397192505050565b91508682600081518110611fad57fe5b6020026020010151111561136d5760405162461bcd60e51b81526004018080602001828103825260238152602001806145996023913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dfe848484613f03565b60008142811015612069576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b612098887f0000000000000000000000000000000000000000000000000000000000000000898989308961253e565b604080516370a0823160e01b8152306004820152905191945061211c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156120eb57600080fd5b505afa1580156120ff573d6000803e3d6000fd5b505050506040513d602081101561211557600080fd5b5051613058565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b5050505061113684836131c2565b80428110156121e8576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061221f57fe5b905060200201356001600160a01b03166001600160a01b031614612286576040805162461bcd60e51b815260206004820152601960248201527809ed8d2eccaa4deeae8cae47440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122e657600080fd5b505af11580156122fa573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61235f7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116fa57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b505050506040513d60208110156123d957600080fd5b50516123e157fe5b6000868660001981018181106123f357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561245857600080fd5b505afa15801561246c573d6000803e3d6000fd5b505050506040513d602081101561248257600080fd5b505160408051602089810282810182019093528982529293506124c49290918a918a918291850190849080828437600092019190915250899250613aa9915050565b876118b282898960001981018181106124d957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561187a57600080fd5b6000808242811015612585576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b60006125b27f00000000000000000000000000000000000000000000000000000000000000008c8c6134f6565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561260d57600080fd5b505af1158015612621573d6000803e3d6000fd5b505050506040513d602081101561263757600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561268457600080fd5b505af1158015612698573d6000803e3d6000fd5b505050506040513d60408110156126ae57600080fd5b508051602090910151909250905060006126c88e8e613faf565b509050806001600160a01b03168e6001600160a01b0316146126eb5781836126ee565b82825b90975095508a8710156127325760405162461bcd60e51b81526004018080602001828103825260228152602001806144c86022913960400191505060405180910390fd5b898610156127715760405162461bcd60e51b81526004018080602001828103825260228152602001806144ea6022913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b606061116e7f000000000000000000000000000000000000000000000000000000000000000084846133aa565b60008060006128237f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006134f6565b9050600087612832578c612836565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156128ac57600080fd5b505af11580156128c0573d6000803e3d6000fd5b505050506128d28e8e8e8e8e8e610cd7565b909f909e509c50505050505050505050505050565b60008060008342811015612930576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b61293e8c8c8c8c8c8c61408d565b909450925060006129707f00000000000000000000000000000000000000000000000000000000000000008e8e6134f6565b905061297e8d3383886135ce565b61298a8c3383876135ce565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156129e257600080fd5b505af11580156129f6573d6000803e3d6000fd5b505050506040513d6020811015612a0c57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a6c576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b612a9a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61408d565b90945092506000612aec7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006134f6565b9050612afa8b3383886135ce565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b5557600080fd5b505af1158015612b69573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b505050506040513d6020811015612c1857600080fd5b5051612c2057fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c7857600080fd5b505af1158015612c8c573d6000803e3d6000fd5b505050506040513d6020811015612ca257600080fd5b5051925034841015612cba57612cba338534036131c2565b505096509650969350505050565b60608142811015612d0e576040805162461bcd60e51b815260206004820152601460248201526000805160206145df833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d4557fe5b905060200201356001600160a01b03166001600160a01b031614612dac576040805162461bcd60e51b815260206004820152601960248201527809ed8d2eccaa4deeae8cae47440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b612e0a7f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061397192505050565b91503482600081518110612e1a57fe5b60200260200101511115612e5f5760405162461bcd60e51b81526004018080602001828103825260238152602001806145996023913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e9b57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f477f0000000000000000000000000000000000000000000000000000000000000000898960008181106116fa57fe5b84600081518110612f5457fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612fab57600080fd5b505af1158015612fbf573d6000803e3d6000fd5b505050506040513d6020811015612fd557600080fd5b5051612fdd57fe5b61301c8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061372b915050565b8160008151811061302957fe5b6020026020010151341115611ee257611ee2338360008151811061304957fe5b602002602001015134036131c2565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130d55780518252601f1990920191602091820191016130b6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613137576040519150601f19603f3d011682016040523d82523d6000602084013e61313c565b606091505b509150915081801561316a57508051158061316a575080806020019051602081101561316757600080fd5b50515b6131bb576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061320e5780518252601f1990920191602091820191016131ef565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613270576040519150601f19603f3d011682016040523d82523d6000602084013e613275565b606091505b50509050806132b55760405162461bcd60e51b81526004018080602001828103825260238152602001806145bc6023913960400191505060405180910390fd5b505050565b60008084116132fa5760405162461bcd60e51b81526004018080602001828103825260278152602001806145726027913960400191505060405180910390fd5b60008311801561330a5750600082115b6133455760405162461bcd60e51b815260040180806020018281038252602481526020018061450c6024913960400191505060405180910390fd5b6000613359856103e663ffffffff61430116565b9050600061336d828563ffffffff61430116565b9050600061339383613387886103e863ffffffff61430116565b9063ffffffff61436d16565b905080828161339e57fe5b04979650505050505050565b6060600282511015613403576040805162461bcd60e51b815260206004820152601a60248201527f4f6c6976654c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561341b57600080fd5b50604051908082528060200260200182016040528015613445578160200160208202803683370190505b509050828160008151811061345657fe5b60200260200101818152505060005b60018351038110156134ee576000806134a88786858151811061348457fe5b602002602001015187866001018151811061349b57fe5b60200260200101516143c5565b915091506134ca8484815181106134bb57fe5b602002602001015183836132ba565b8484600101815181106134d957fe5b60209081029190910101525050600101613465565b509392505050565b60008060006135058585613faf565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fb7145948956af92afd2ae97eff039ada60998237282c1687ca23ce1ad5e1d282609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106136535780518252601f199092019160209182019101613634565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136b5576040519150601f19603f3d011682016040523d82523d6000602084013e6136ba565b606091505b50915091508180156136e85750805115806136e857508080602001905160208110156136e557600080fd5b50515b6137235760405162461bcd60e51b81526004018080602001828103825260248152602001806145ff6024913960400191505060405180910390fd5b505050505050565b60005b600183510381101561396b5760008084838151811061374957fe5b602002602001015185846001018151811061376057fe5b60200260200101519150915060006137788383613faf565b509050600087856001018151811061378c57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137ba578260006137be565b6000835b91509150600060028a510388106137d55788613816565b6138167f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061380957fe5b60200260200101516134f6565b90506138437f000000000000000000000000000000000000000000000000000000000000000088886134f6565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613880576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156138f15781810151838201526020016138d9565b50505050905090810190601f16801561391e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561394057600080fd5b505af1158015613954573d6000803e3d6000fd5b50506001909901985061372e975050505050505050565b50505050565b60606002825110156139ca576040805162461bcd60e51b815260206004820152601a60248201527f4f6c6976654c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156139e257600080fd5b50604051908082528060200260200182016040528015613a0c578160200160208202803683370190505b5090508281600183510381518110613a2057fe5b60209081029190910101528151600019015b80156134ee57600080613a6287866001860381518110613a4e57fe5b602002602001015187868151811061349b57fe5b91509150613a84848481518110613a7557fe5b60200260200101518383613e13565b846001850381518110613a9357fe5b6020908102919091010152505060001901613a32565b60005b60018351038110156132b557600080848381518110613ac757fe5b6020026020010151858460010181518110613ade57fe5b6020026020010151915091506000613af68383613faf565b5090506000613b267f000000000000000000000000000000000000000000000000000000000000000085856134f6565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b6757600080fd5b505afa158015613b7b573d6000803e3d6000fd5b505050506040513d6060811015613b9157600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613bce578284613bd1565b83835b91509150613c2f828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561187a57600080fd5b9550613c3c8683836132ba565b945050505050600080856001600160a01b0316886001600160a01b031614613c6657826000613c6a565b6000835b91509150600060028c51038a10613c81578a613cb5565b613cb57f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061380957fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613d3f578181015183820152602001613d27565b50505050905090810190601f168015613d6c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613d8e57600080fd5b505af1158015613da2573d6000803e3d6000fd5b50506001909b019a50613aac9950505050505050505050565b80820382811115611171576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613e535760405162461bcd60e51b81526004018080602001828103825260288152602001806144a06028913960400191505060405180910390fd5b600083118015613e635750600082115b613e9e5760405162461bcd60e51b815260040180806020018281038252602481526020018061450c6024913960400191505060405180910390fd5b6000613ec26103e8613eb6868863ffffffff61430116565b9063ffffffff61430116565b90506000613edc6103e6613eb6868963ffffffff613dbb16565b9050613ef96001828481613eec57fe5b049063ffffffff61436d16565b9695505050505050565b6000808411613f435760405162461bcd60e51b81526004018080602001828103825260218152602001806145516021913960400191505060405180910390fd5b600083118015613f535750600082115b613f8e5760405162461bcd60e51b815260040180806020018281038252602481526020018061450c6024913960400191505060405180910390fd5b82613f9f858463ffffffff61430116565b81613fa657fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156140035760405162461bcd60e51b81526004018080602001828103825260218152602001806145306021913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614023578284614026565b83835b90925090506001600160a01b038216614086576040805162461bcd60e51b815260206004820152601a60248201527f4f6c6976654c6962726172793a205a45524f5f41444452455353000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561410757600080fd5b505afa15801561411b573d6000803e3d6000fd5b505050506040513d602081101561413157600080fd5b50516001600160a01b031614156141e457604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156141b757600080fd5b505af11580156141cb573d6000803e3d6000fd5b505050506040513d60208110156141e157600080fd5b50505b6000806142127f00000000000000000000000000000000000000000000000000000000000000008b8b6143c5565b91509150816000148015614224575080155b15614234578793508692506142f4565b6000614241898484613f03565b905087811161429457858110156142895760405162461bcd60e51b81526004018080602001828103825260228152602001806144ea6022913960400191505060405180910390fd5b8894509250826142f2565b60006142a1898486613f03565b9050898111156142ad57fe5b878110156142ec5760405162461bcd60e51b81526004018080602001828103825260228152602001806144c86022913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061431c5750508082028282828161431957fe5b04145b611171576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611171576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006143d48585613faf565b5090506143e28686866134f6565b506000806143f18888886134f6565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561442957600080fd5b505afa15801561443d573d6000803e3d6000fd5b505050506040513d606081101561445357600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461448d578082614490565b81815b9099909850965050505050505056fe4f6c6976654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544f6c697665526f757465723a20494e53554646494349454e545f415f414d4f554e544f6c697665526f757465723a20494e53554646494349454e545f425f414d4f554e544f6c6976654c6962726172793a20494e53554646494349454e545f4c49515549444954594f6c6976654c6962726172793a204944454e544943414c5f4144445245535345534f6c6976654c6962726172793a20494e53554646494349454e545f414d4f554e544f6c6976654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544f6c697665526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444f6c697665526f757465723a20455850495245440000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45444f6c697665526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220a318ea7c4c09360b687ceaf47f22f594fe188172bf711520d9014bdffe31d10864736f6c634300060600330000000000000000000000004fe4d8b01a56706bc6cad26e8c59d0c7169976b3000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

0000000000000000000000004fe4d8b01a56706bc6cad26e8c59d0c7169976b3000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

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


Deployed ByteCode Sourcemap

15997:18263:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16465:10;-1:-1:-1;;;;;16479:4:0;16465:18;;16458:26;;;;15997:18263;;12:1:-1;9;2:12;20547:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20547:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20547:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33220:258;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33220:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33220:258:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27620:834;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27620:834:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27620:834:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27620:834:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27620:834:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27620:834:0;;-1:-1:-1;27620:834:0;-1:-1:-1;;;;;;27620: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;27620:834:0;;;;;;;;;;;;;;;;;34008:249;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34008:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34008:249:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34008:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34008:249:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34008:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34008:249:0;;-1:-1:-1;34008:249:0;;-1:-1:-1;;;;;34008:249:0:i;21226:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21226:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21226:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24893:616::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24893:616:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24893:616:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24893:616:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24893:616:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24893:616:0;;-1:-1:-1;24893:616:0;-1:-1:-1;;;;;;24893:616:0;;;;;;;;:::i;26802:812::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26802:812:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26802:812:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26802:812:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26802:812:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26802:812:0;;-1:-1:-1;26802:812:0;-1:-1:-1;;;;;;26802:812:0;;;;;;;;:::i;23347:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23347:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23347:710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30597:706::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30597:706:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30597:706:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30597:706:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30597:706:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30597:706:0;;-1:-1:-1;30597:706:0;-1:-1:-1;;;;;;30597:706:0;;;;;;;;:::i;32153:831::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32153:831:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32153:831:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32153:831:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32153:831:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32153:831:0;;-1:-1:-1;32153:831:0;-1:-1:-1;;;;;;32153:831:0;;;;;;;;:::i;26115:681::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26115:681:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26115:681:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26115:681:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26115:681:0;;-1:-1:-1;26115:681:0;-1:-1:-1;;;;;;26115:681:0;;;;;;;;:::i;33486:257::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33486:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33486:257:0;;;;;;;;;;;;:::i;25515:594::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25515:594:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25515:594:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25515:594:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25515:594:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25515:594:0;;-1:-1:-1;25515:594:0;-1:-1:-1;;;;;;25515:594:0;;;;;;;;:::i;16123:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16123:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16123:38:0;;;;;;;;;;;;;;33028:184;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33028:184:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33028:184:0;;;;;;;;;;;;:::i;22641:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22641:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22641:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31309:838::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31309:838:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31309:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31309:838:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31309:838:0;;-1:-1:-1;31309:838:0;-1:-1:-1;;;;;;31309:838:0;;;;;;;;:::i;19700:841::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19700:841:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19700:841:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16075:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16075:41:0;;;:::i;33751:249::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33751:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33751:249:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33751:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33751:249:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33751:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33751:249:0;;-1:-1:-1;33751:249:0;;-1:-1:-1;;;;;33751:249:0:i;21901:661::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21901:661:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21901:661:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17955:730::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17955:730:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17955:730:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18691:966;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18691:966:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28460:794::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28460:794:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28460:794:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28460:794:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28460:794:0;;-1:-1:-1;28460:794:0;-1:-1:-1;;;;;;28460:794:0;;;;;;;;:::i;20547:673::-;20784:16;20802:14;20765:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;20856:196:::1;20886:5;20906:4;20925:9;20949:14;20978:12;21013:4;21033:8;20856:15;:196::i;:::-;20829:223:::0;;-1:-1:-1;20829:223:0;-1:-1:-1;21063:51:0::1;21091:5:::0;21098:2;20829:223;21063:27:::1;:51::i;:::-;21131:4;-1:-1:-1::0;;;;;21125:20:0::1;;21146:9;21125:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21125:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21125:31:0;;;;21167:45;21198:2;21202:9;21167:30;:45::i;:::-;20547:673:::0;;;;;;;;;;:::o;33220:258::-;33373:14;33412:58;33438:8;33448:9;33459:10;33412:25;:58::i;:::-;33405:65;33220:258;-1:-1:-1;;;;33220:258:0:o;27620:834::-;27834:21;27806:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27906:4:0::1;27881:29;:4:::0;;-1:-1:-1;;27886:15:0;;27881:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27881:21:0::1;-1:-1:-1::0;;;;;27881:29:0::1;;27873:67;;;::::0;;-1:-1:-1;;;27873:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27873:67:0;;;;;;;;;;;;;::::1;;27961:51;27988:7;27997:8;28007:4;;27961:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27961:26:0::1;::::0;-1:-1:-1;;;27961:51:0:i:1;:::-;27951:61;;28062:12;28031:7;28056:1;28039:7;:14;:18;28031:27;;;;;;;;;;;;;;:43;;28023:95;;;;-1:-1:-1::0;;;28023:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28129:137;28175:4;;28180:1;28175:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28175:7:0::1;28184:10;28196:47;28217:7;28226:4;;28231:1;28226:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28226:7:0::1;28235:4;;28240:1;28235:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28235:7:0::1;28196:20;:47::i;:::-;28245:7;28253:1;28245:10;;;;;;;;;;;;;;28129:31;:137::i;:::-;28277:35;28283:7;28292:4;;28277:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28306:4:0::1;::::0;-1:-1:-1;28277:5:0::1;::::0;-1:-1:-1;;28277:35:0:i:1;:::-;28329:4;-1:-1:-1::0;;;;;28323:20:0::1;;28344:7;28369:1;28352:7;:14;:18;28344:27;;;;;;;;;;;;;;28323:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28323:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28323:49:0;;;;28383:63;28414:2;28418:7;28443:1;28426:7;:14;:18;28418:27;;;;;;;;;;;;;;28383:30;:63::i;:::-;27620:834:::0;;;;;;;;;:::o;34008:249::-;34152:21;34198:51;34224:7;34233:9;34244:4;34198:25;:51::i;:::-;34191:58;;34008:249;;;;;:::o;21226:669::-;21532:12;21546;21571;21586:45;21607:7;21616:6;21624;21586:20;:45::i;:::-;21571:60;;21642:10;21655;:33;;21679:9;21655:33;;;-1:-1:-1;;21655:33:0;21699:76;;;-1:-1:-1;;;21699:76:0;;21723:10;21699:76;;;;21743:4;21699:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21642:46;;-1:-1:-1;;;;;;21699:23:0;;;;;:76;;;;;-1:-1:-1;;21699:76:0;;;;;;;;-1:-1:-1;21699:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;21699:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21699:76:0;;;;21807:80;21823:6;21831;21839:9;21850:10;21862;21874:2;21878:8;21807:15;:80::i;:::-;21786:101;;;;;;;;21226:669;;;;;;;;;;;;;;;;:::o;24893:616::-;25117:21;25098:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;25161:51:::1;25188:7;25197:8;25207:4;;25161:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25161:26:0::1;::::0;-1:-1:-1;;;25161:51:0:i:1;:::-;25151:61;;25262:12;25231:7;25256:1;25239:7;:14;:18;25231:27;;;;;;;;;;;;;;:43;;25223:95;;;;-1:-1:-1::0;;;25223:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25329:137;25375:4;;25380:1;25375:7;;;;;;25329:137;25477:24;25483:7;25492:4;;25477:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25498:2:0;;-1:-1:-1;25477:5:0::1;::::0;-1:-1:-1;;25477:24:0:i:1;26802:812::-:0;27016:21;26988:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27088:4:0::1;27063:29;:4:::0;;-1:-1:-1;;27068:15:0;;27063:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27063:21:0::1;-1:-1:-1::0;;;;;27063:29:0::1;;27055:67;;;::::0;;-1:-1:-1;;;27055:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27055:67:0;;;;;;;;;;;;;::::1;;27143:51;27169:7;27178:9;27189:4;;27143:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27143:25:0::1;::::0;-1:-1:-1;;;27143:51:0:i:1;:::-;27133:61;;27227:11;27213:7;27221:1;27213:10;;;;;;;;;;;;;;:25;;27205:73;;;;-1:-1:-1::0;;;27205:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23347:710:::0;23665:14;23692:12;23707:42;23728:7;23737:5;23744:4;23707:20;:42::i;:::-;23692:57;;23760:10;23773;:33;;23797:9;23773:33;;;-1:-1:-1;;23773:33:0;23817:76;;;-1:-1:-1;;;23817:76:0;;23841:10;23817:76;;;;23861:4;23817:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23760:46;;-1:-1:-1;;;;;;23817:23:0;;;;;:76;;;;;-1:-1:-1;;23817:76:0;;;;;;;;-1:-1:-1;23817:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;23817:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23817:76:0;;;;23916:133;23978:5;23985:9;23996:14;24012:12;24026:2;24030:8;23916:47;:133::i;:::-;23904:145;23347:710;-1:-1:-1;;;;;;;;;;;;;23347:710:0:o;30597:706::-;30831:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;30852:135:::1;30898:4;;30903:1;30898:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30898:7:0::1;30907:10;30919:47;30940:7;30949:4;;30954:1;30949:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30949:7:0::1;30958:4;;30963:1;30958:7;;;;;;30919:47;30968:8;30852:31;:135::i;:::-;30998:18;31026:4:::0;;-1:-1:-1;;31031:15:0;;31026:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31026:21:0::1;-1:-1:-1::0;;;;;31019:39:0::1;;31059:2;31019:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31019:43:0::1;-1:-1:-1::0;;;;;31019:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31019:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31019:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31019:43:0;31073:44:::1;::::0;;31019:43:::1;31073:44:::0;;::::1;::::0;;;;;;;;;;;31019:43;;-1:-1:-1;31073:44:0::1;::::0;;;31108:4;;;;;;31073:44;::::1;::::0;31108:4;;31073:44;31108:4;31073:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31114:2:0;;-1:-1:-1;31073:34:0::1;::::0;-1:-1:-1;;31073:44:0:i:1;:::-;31216:12:::0;31150:62:::1;31198:13:::0;31157:4;;-1:-1:-1;;31162:15:0;;31157:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31157:21:0::1;-1:-1:-1::0;;;;;31150:39:0::1;;31190:2;31150:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31150:43:0::1;-1:-1:-1::0;;;;;31150:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31150:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31150:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31150:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31128:167;;;;-1:-1:-1::0;;;31128:167:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16283:1;30597:706:::0;;;;;;;:::o;32153:831::-;32420:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32479:4:0::1;32454:29;:4:::0;;-1:-1:-1;;32459:15:0;;32454:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32454:21:0::1;-1:-1:-1::0;;;;;32454:29:0::1;;32446:67;;;::::0;;-1:-1:-1;;;32446:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32446:67:0;;;;;;;;;;;;;::::1;;32524:135;32570:4;;32575:1;32570:7;;;;;;32524:135;32670:55;32705:4;;32670:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32719:4:0::1;::::0;-1:-1:-1;32670:34:0::1;::::0;-1:-1:-1;;32670:55:0:i:1;:::-;32753:37;::::0;;-1:-1:-1;;;32753:37:0;;32784:4:::1;32753:37;::::0;::::1;::::0;;;32736:14:::1;::::0;-1:-1:-1;;;;;32760:4:0::1;32753:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32753:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32753:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32753:37:0;;-1:-1:-1;32809:25:0;;::::1;;32801:77;;;;-1:-1:-1::0;;;32801:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32895:4;-1:-1:-1::0;;;;;32889:20:0::1;;32910:9;32889:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32889:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32889:31:0;;;;32931:45;32962:2;32966:9;32931:30;:45::i;26115:681::-:0;26331:21;26303:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;26389:4:::1;-1:-1:-1::0;;;;;26378:15:0::1;:4;;26383:1;26378:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26378:7:0::1;-1:-1:-1::0;;;;;26378:15:0::1;;26370:53;;;::::0;;-1:-1:-1;;;26370:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26370:53:0;;;;;;;;;;;;;::::1;;26444:52;26471:7;26480:9;26491:4;;26444:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26444:26:0::1;::::0;-1:-1:-1;;;26444:52:0:i:1;:::-;26434:62;;26546:12;26515:7;26540:1;26523:7;:14;:18;26515:27;;;;;;;;;;;;;;:43;;26507:95;;;;-1:-1:-1::0;;;26507:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26619:4;-1:-1:-1::0;;;;;26613:19:0::1;;26640:7;26648:1;26640:10;;;;;;;;;;;;;;26613:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26613:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26613:40:0;;;;;26677:4;-1:-1:-1::0;;;;;26671:20:0::1;;26692:47;26713:7;26722:4;;26727:1;26722:7;;;;;;26692:47;26741:7;26749:1;26741:10;;;;;;;;;;;;;;26671:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;26671:81:0::1;-1:-1:-1::0;;;;;26671:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26671:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26671:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26671:81:0;26664:89:::1;;;;26764:24;26770:7;26779:4;;26764:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26785:2:0;;-1:-1:-1;26764:5:0::1;::::0;-1:-1:-1;;26764:24:0:i:1;:::-;26115:681:::0;;;;;;;;:::o;33486:257::-;33639:13;33677:58;33702:9;33713;33724:10;33677:24;:58::i;25515:594::-;25739:21;25720:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;25783:51:::1;25809:7;25818:9;25829:4;;25783:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25783:25:0::1;::::0;-1:-1:-1;;;25783:51:0:i:1;:::-;25773:61;;25867:11;25853:7;25861:1;25853:10;;;;;;;;;;;;;;:25;;25845:73;;;;-1:-1:-1::0;;;25845:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16123:38:::0;;;:::o;33028:184::-;33125:12;33157:47;33176:7;33185:8;33195;33157:18;:47::i;22641:700::-;22907:14;22888:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;22950:196:::1;22980:5;23000:4;23019:9;23043:14;23072:12;23107:4;23127:8;22950:15;:196::i;:::-;23196:38;::::0;;-1:-1:-1;;;23196:38:0;;23228:4:::1;23196:38;::::0;::::1;::::0;;;22934:212;;-1:-1:-1;23157:78:0::1;::::0;-1:-1:-1;23185:5:0;;23192:2;;-1:-1:-1;;;;;23196: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;23196:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23196:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23196:38:0;23157:27:::1;:78::i;:::-;23252:4;-1:-1:-1::0;;;;;23246:20:0::1;;23267:9;23246:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23246:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23246:31:0;;;;23288:45;23319:2;23323:9;23288:30;:45::i;31309:838::-:0;31569:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;31614:4:::1;-1:-1:-1::0;;;;;31603:15:0::1;:4;;31608:1;31603:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31603:7:0::1;-1:-1:-1::0;;;;;31603:15:0::1;;31595:53;;;::::0;;-1:-1:-1;;;31595:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31595:53:0;;;;;;;;;;;;;::::1;;31659:13;31675:9;31659:25;;31701:4;-1:-1:-1::0;;;;;31695:19:0::1;;31722:8;31695:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31695:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31695:38:0;;;;;31757:4;-1:-1:-1::0;;;;;31751:20:0::1;;31772:47;31793:7;31802:4;;31807:1;31802:7;;;;;;31772:47;31821:8;31751:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;31751:79:0::1;-1:-1:-1::0;;;;;31751:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31751:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31751:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31751:79:0;31744:87:::1;;;;31842:18;31870:4:::0;;-1:-1:-1;;31875:15:0;;31870:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31870:21:0::1;-1:-1:-1::0;;;;;31863:39:0::1;;31903:2;31863:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31863:43:0::1;-1:-1:-1::0;;;;;31863:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31863:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31863:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31863:43:0;31917:44:::1;::::0;;31863:43:::1;31917:44:::0;;::::1;::::0;;;;;;;;;;;31863:43;;-1:-1:-1;31917:44:0::1;::::0;;;31952:4;;;;;;31917:44;::::1;::::0;31952:4;;31917:44;31952:4;31917:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31958:2:0;;-1:-1:-1;31917:34:0::1;::::0;-1:-1:-1;;31917:44:0:i:1;:::-;32060:12:::0;31994:62:::1;32042:13:::0;32001:4;;-1:-1:-1;;32006:15:0;;32001:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32001:21:0::1;-1:-1:-1::0;;;;;31994:39:0::1;;32034:2;31994:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31994:43:0::1;-1:-1:-1::0;;;;;31994:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19700:841:0::0;19954:12;19968;19935:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;19993:12:::1;20008:45;20029:7;20038:6;20046;20008:20;:45::i;:::-;20064:58;::::0;;-1:-1:-1;;;20064:58:0;;20094:10:::1;20064:58;::::0;::::1;::::0;-1:-1:-1;;;;;20064:29:0;::::1;:58:::0;;;;;;;;;;;;;;19993:60;;-1:-1:-1;20064:29:0;;::::1;::::0;:58;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20064:29:0;:58;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20064:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20064:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20190:25:0::1;::::0;;-1:-1:-1;;;20190:25:0;;-1:-1:-1;;;;;20190:25:0;;::::1;;::::0;::::1;::::0;;;20160:12:::1;::::0;;;20190:21;;::::1;::::0;::::1;::::0;:25;;;;;;;;;;;20160:12;20190:21;:25;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20190:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20190:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20190:25:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20190:25:0;-1:-1:-1;20227:14:0::1;20246:39;20270:6:::0;20278;20246:23:::1;:39::i;:::-;20226:59;;;20327:6;-1:-1:-1::0;;;;;20317:16:0::1;:6;-1:-1:-1::0;;;;;20317:16:0::1;;:58;;20358:7;20367;20317:58;;;20337:7;20346;20317:58;20296:79:::0;;-1:-1:-1;20296:79:0;-1:-1:-1;20394:21:0;;::::1;;20386:68;;;;-1:-1:-1::0;;;20386:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20484:10;20473:7;:21;;20465:68;;;;-1:-1:-1::0;;;20465:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16283:1;;;;19700:841:::0;;;;;;;;;;;:::o;16075:41::-;;;:::o;33751:249::-;33895:21;33941:51;33968:7;33977:8;33987:4;33941:26;:51::i;21901:661::-;22190:16;22208:14;22235:12;22250:42;22271:7;22280:5;22287:4;22250:20;:42::i;:::-;22235:57;;22303:10;22316;:33;;22340:9;22316:33;;;-1:-1:-1;;22316:33:0;22360:76;;;-1:-1:-1;;;22360:76:0;;22384:10;22360:76;;;;22404:4;22360:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22303:46;;-1:-1:-1;;;;;;22360:23:0;;;;;:76;;;;;-1:-1:-1;;22360:76:0;;;;;;;;-1:-1:-1;22360:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;22360:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22360:76:0;;;;22474:80;22493:5;22500:9;22511:14;22527:12;22541:2;22545:8;22474:18;:80::i;:::-;22447:107;;;;-1:-1:-1;21901:661:0;-1:-1:-1;;;;;;;;;;;;;21901:661:0:o;17955:730::-;18243:12;18257;18271:14;18224:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;18319:85:::1;18333:6;18341;18349:14;18365;18381:10;18393;18319:13;:85::i;:::-;18298:106:::0;;-1:-1:-1;18298:106:0;-1:-1:-1;18415:12:0::1;18430:45;18451:7;18460:6:::0;18468;18430:20:::1;:45::i;:::-;18415:60;;18486:66;18518:6;18526:10;18538:4;18544:7;18486:31;:66::i;:::-;18563;18595:6;18603:10;18615:4;18621:7;18563:31;:66::i;:::-;18663:4;-1:-1:-1::0;;;;;18652:21:0::1;;18674:2;18652:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;18652:25:0::1;-1:-1:-1::0;;;;;18652:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18652:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18652:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18652:25:0;17955:730;;;;-1:-1:-1;18652:25:0;;-1:-1:-1;17955:730:0;;-1:-1:-1;;;;;;;;;17955:730:0:o;18691:966::-;18944:16;18962:14;18978;18925:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;19032:176:::1;19060:5;19080:4;19099:18;19132:9;19156:14;19185:12;19032:13;:176::i;:::-;19005:203:::0;;-1:-1:-1;19005:203:0;-1:-1:-1;19219:12:0::1;19234:42;19255:7;19264:5:::0;19271:4:::1;19234:20;:42::i;:::-;19219:57;;19287:69;19319:5;19326:10;19338:4;19344:11;19287:31;:69::i;:::-;19373:4;-1:-1:-1::0;;;;;19367:19:0::1;;19394:9;19367:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19367:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19367:39:0;;;;;19430:4;-1:-1:-1::0;;;;;19424:20:0::1;;19445:4;19451:9;19424:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19424:37:0::1;-1:-1:-1::0;;;;;19424:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19424:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19424:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19424:37:0;19417:45:::1;;;;19496:4;-1:-1:-1::0;;;;;19485:21:0::1;;19507:2;19485:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;19485:25:0::1;-1:-1:-1::0;;;;;19485:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19485:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19485:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19485:25:0;;-1:-1:-1;19561:9:0::1;:21:::0;-1:-1:-1;19557:92:0::1;;;19584:65;19615:10;19639:9;19627;:21;19584:30;:65::i;:::-;16283:1;18691:966:::0;;;;;;;;;;;:::o;28460:794::-;28673:21;28645:8;16232:15;16220:8;:27;;16212:60;;;;;-1:-1:-1;;;16212:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16212:60:0;;;;;;;;;;;;;;;28731:4:::1;-1:-1:-1::0;;;;;28720:15:0::1;:4;;28725:1;28720:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28720:7:0::1;-1:-1:-1::0;;;;;28720:15:0::1;;28712:53;;;::::0;;-1:-1:-1;;;28712:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28712:53:0;;;;;;;;;;;;;::::1;;28786:51;28812:7;28821:9;28832:4;;28786:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28786:25:0::1;::::0;-1:-1:-1;;;28786:51:0:i:1;:::-;28776:61;;28870:9;28856:7;28864:1;28856:10;;;;;;;;;;;;;;:23;;28848:71;;;;-1:-1:-1::0;;;28848:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28936:4;-1:-1:-1::0;;;;;28930:19:0::1;;28957:7;28965:1;28957:10;;;;;;;;;;;;;;28930:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28930:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28930:40:0;;;;;28994:4;-1:-1:-1::0;;;;;28988:20:0::1;;29009:47;29030:7;29039:4;;29044:1;29039:7;;;;;;29009:47;29058:7;29066:1;29058:10;;;;;;;;;;;;;;28988:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;28988:81:0::1;-1:-1:-1::0;;;;;28988:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28988:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28988:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28988:81:0;28981:89:::1;;;;29081:24;29087:7;29096:4;;29081:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29102:2:0;;-1:-1:-1;29081:5:0::1;::::0;-1:-1:-1;;29081:24:0:i:1;:::-;29168:7;29176:1;29168:10;;;;;;;;;;;;;;29156:9;:22;29152:94;;;29180:66;29211:10;29235:7;29243:1;29235:10;;;;;;;;;;;;;;29223:9;:22;29180:30;:66::i;14919:361::-:0;15114:45;;;-1:-1:-1;;;;;15114:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15114:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15103:57:0;;;;15068:12;;15082:17;;15103:10;;;;15114:45;15103:57;;;25:18:-1;15103: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;;;15103: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;;15067:93:0;;;;15179:7;:57;;;;-1:-1:-1;15191:11:0;;:16;;:44;;;15222:4;15211:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15211:24:0;15191:44;15171:101;;;;;-1:-1:-1;;;15171:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14919:361;;;;;:::o;15698:195::-;15806:12;;;15768;15806;;;;;;;;;-1:-1:-1;;;;;15785:7:0;;;15799:5;;15785: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;;;15785: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;;15767:52:0;;;15838:7;15830:55;;;;-1:-1:-1;;;15830:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15698:195;;;:::o;10964:509::-;11057:14;11103:1;11092:8;:12;11084:64;;;;-1:-1:-1;;;11084:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11179:1;11167:9;:13;:31;;;;;11197:1;11184:10;:14;11167:31;11159:80;;;;-1:-1:-1;;;11159:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11250:20;11273:17;:8;11286:3;11273:17;:12;:17;:::i;:::-;11250:40;-1:-1:-1;11301:14:0;11318:31;11250:40;11338:10;11318:31;:19;:31;:::i;:::-;11301:48;-1:-1:-1;11360:16:0;11379:40;11403:15;11379:19;:9;11393:4;11379:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;11360:59;;11454:11;11442:9;:23;;;;;;;10964:509;-1:-1:-1;;;;;;;10964:509:0:o;12140:507::-;12241:21;12298:1;12283:4;:11;:16;;12275:55;;;;;-1:-1:-1;;;12275:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12362:4;:11;12351:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12351:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12351:23:0;;12341:33;;12398:8;12385:7;12393:1;12385:10;;;;;;;;;;;;;:21;;;;;12422:6;12417:223;12448:1;12434:4;:11;:15;12430:1;:19;12417:223;;;12472:14;12488:15;12507:42;12519:7;12528:4;12533:1;12528:7;;;;;;;;;;;;;;12537:4;12542:1;12546;12542:5;12537:11;;;;;;;;;;;;;;12507;:42::i;:::-;12471:78;;;;12581:47;12594:7;12602:1;12594:10;;;;;;;;;;;;;;12606:9;12617:10;12581:12;:47::i;:::-;12564:7;12572:1;12576;12572:5;12564:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;12451:3:0;;12417:223;;;;12140:507;;;;;:::o;9450:478::-;9539:12;9565:14;9581;9599:26;9610:6;9618;9599:10;:26::i;:::-;9763:32;;;-1:-1:-1;;9763:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;9763:32:0;;;;;9753:43;;;;;;9666:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9666:251:0;;;;;;;9656:262;;;;;;;;;9450:478;-1:-1:-1;;;;;9450:478:0:o;15288:402::-;15513:51;;;-1:-1:-1;;;;;15513:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15513:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15502:63:0;;;;15467:12;;15481:17;;15502:10;;;;15513:51;15502:63;;;25:18:-1;15502: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;;;15502: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;;15466:99:0;;;;15584:7;:57;;;;-1:-1:-1;15596:11:0;;:16;;:44;;;15627:4;15616:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15616:24:0;15596:44;15576:106;;;;-1:-1:-1;;;15576:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15288:402;;;;;;:::o;24168:719::-;24275:6;24270:610;24301:1;24287:4;:11;:15;24283:1;:19;24270:610;;;24325:13;24340:14;24359:4;24364:1;24359:7;;;;;;;;;;;;;;24368:4;24373:1;24377;24373:5;24368:11;;;;;;;;;;;;;;24324:56;;;;24396:14;24415:38;24439:5;24446:6;24415:23;:38::i;:::-;24395:58;;;24468:14;24485:7;24493:1;24497;24493:5;24485:14;;;;;;;;;;;;;;24468:31;;24515:15;24532;24560:6;-1:-1:-1;;;;;24551:15:0;:5;-1:-1:-1;;;;;24551:15:0;;:61;;24593:9;24609:1;24551:61;;;24575:1;24579:9;24551:61;24514:98;;;;24627:10;24658:1;24644:4;:11;:15;24640:1;:19;:78;;24715:3;24640:78;;;24662:50;24683:7;24692:6;24700:4;24705:1;24709;24705:5;24700:11;;;;;;;;;;;;;;24662:20;:50::i;:::-;24627:91;;24744:44;24765:7;24774:5;24781:6;24744:20;:44::i;:::-;-1:-1:-1;;;;;24733:61:0;;24813:10;24825;24837:2;24851:1;24841:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24841:12:0;87:42:-1;143:17;;-1:-1;24841:12:0;;24733:135;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24733:135:0;-1:-1:-1;;;;;24733: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;24733:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24733:135:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24304:3:0;;;;;-1:-1:-1;24270:610:0;;-1:-1:-1;;;;;;;;24270:610:0;;;24168:719;;;:::o;12728:528::-;12829:21;12886:1;12871:4;:11;:16;;12863:55;;;;;-1:-1:-1;;;12863:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12950:4;:11;12939:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12939:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12939:23:0;;12929:33;;13003:9;12973:7;12998:1;12981:7;:14;:18;12973:27;;;;;;;;;;;;;;;;;:39;13037:11;;-1:-1:-1;;13037:15:0;13023:226;13054:5;;13023:226;;13082:14;13098:15;13117:42;13129:7;13138:4;13147:1;13143;:5;13138:11;;;;;;;;;;;;;;13151:4;13156:1;13151:7;;;;;;;13117:42;13081:78;;;;13191:46;13203:7;13211:1;13203:10;;;;;;;;;;;;;;13215:9;13226:10;13191:11;:46::i;:::-;13174:7;13186:1;13182;:5;13174:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;13061:3:0;13023:226;;29401:1190;29514:6;29509:1075;29540:1;29526:4;:11;:15;29522:1;:19;29509:1075;;;29564:13;29579:14;29598:4;29603:1;29598:7;;;;;;;;;;;;;;29607:4;29612:1;29616;29612:5;29607:11;;;;;;;;;;;;;;29563:56;;;;29635:14;29654:38;29678:5;29685:6;29654:23;:38::i;:::-;29634:58;;;29707:15;29736:44;29757:7;29766:5;29773:6;29736:20;:44::i;:::-;29707:74;;29796:16;29827:17;29915:13;29930;29948:4;-1:-1:-1;;;;;29948:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29948:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29948:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29948:18:0;;;;;;;29914:52;;;;;-1:-1:-1;29914:52:0;;-1:-1:-1;29982:17:0;;-1:-1:-1;;;;;30023:15:0;;;;;;;:61;;30065:8;30075;30023:61;;;30042:8;30052;30023:61;29981:103;;;;30113:56;30156:12;30120:5;-1:-1:-1;;;;;30113:23:0;;30145:4;30113:38;;;;;;;;;;;;;-1:-1:-1;;;;;30113:38:0;-1:-1:-1;;;;;30113:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30113:56:0;30099:70;;30199:67;30225:11;30238:12;30252:13;30199:25;:67::i;:::-;30184:82;;29509:1075;;;;30297:15;30314;30342:6;-1:-1:-1;;;;;30333:15:0;:5;-1:-1:-1;;;;;30333:15:0;;:67;;30378:12;30397:1;30333:67;;;30357:1;30361:12;30333:67;30296:104;;;;30415:10;30446:1;30432:4;:11;:15;30428:1;:19;:78;;30503:3;30428:78;;;30450:50;30471:7;30480:6;30488:4;30493:1;30497;30493:5;30488:11;;;;;;;30450:50;30559:12;;;30569:1;30559:12;;;;;;;;;;-1:-1:-1;;;30521:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30521:51:0;;;;;;;;;;;;;;;;;;;;;;30415:91;;-1:-1:-1;30521:9:0;;;;;;30531:10;;30543;;30415:91;;30559:12;;30521:51;;;;;;;;30559:12;;30521:51;;;;30559: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;30521:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30521:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29543:3:0;;;;;-1:-1:-1;29509:1075:0;;-1:-1:-1;;;;;;;;;;29509:1075:0;8483:129;8567:5;;;8562:16;;;;8554:50;;;;;-1:-1:-1;;;8554:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11594:464;11687:13;11733:1;11721:9;:13;11713:66;;;;-1:-1:-1;;;11713:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11810:1;11798:9;:13;:31;;;;;11828:1;11815:10;:14;11798:31;11790:80;;;;-1:-1:-1;;;11790:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11881:14;11898:34;11927:4;11898:24;:9;11912;11898:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;11881:51;-1:-1:-1;11943:16:0;11962:34;11992:3;11962:25;:10;11977:9;11962:25;:14;:25;:::i;:34::-;11943:53;;12018:32;12048:1;12031:11;12019:9;:23;;;;;;;12018:32;:29;:32;:::i;:::-;12007:43;11594:464;-1:-1:-1;;;;;;11594:464:0:o;10529:313::-;10611:12;10654:1;10644:7;:11;10636:57;;;;-1:-1:-1;;;10636:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10723:1;10712:8;:12;:28;;;;;10739:1;10728:8;:12;10712:28;10704:77;;;;-1:-1:-1;;;10704:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10826:8;10802:21;:7;10814:8;10802:21;:11;:21;:::i;:::-;:32;;;;;;;10529:313;-1:-1:-1;;;;10529:313:0:o;9017:341::-;9092:14;9108;9153:6;-1:-1:-1;;;;;9143:16:0;:6;-1:-1:-1;;;;;9143:16:0;;;9135:62;;;;-1:-1:-1;;;9135:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9236:6;-1:-1:-1;;;;;9227:15:0;:6;-1:-1:-1;;;;;9227:15:0;;:53;;9265:6;9273;9227:53;;;9246:6;9254;9227:53;9208:72;;-1:-1:-1;9208:72:0;-1:-1:-1;;;;;;9299:20:0;;9291:59;;;;;-1:-1:-1;;;9291:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9017:341;;;;;:::o;16587:1362::-;16900:46;;;-1:-1:-1;;;16900:46:0;;-1:-1:-1;;;;;16900:46:0;;;;;;;;;;;;;;;;16805:12;;;;;;16914:7;16900:30;;;;;;:46;;;;;;;;;;;;;;;:30;:46;;;2:2:-1;;;;27:1;24;17:12;2:2;16900:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16900:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16900:46:0;-1:-1:-1;;;;;16900:60:0;;16896:142;;;16977:49;;;-1:-1:-1;;;16977:49:0;;-1:-1:-1;;;;;16977:49:0;;;;;;;;;;;;;;;;16991:7;16977:33;;;;;;:49;;;;;;;;;;;;;;;-1:-1:-1;16977:33:0;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;16977:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16977:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16896:142:0;17049:13;17064;17081:49;17106:7;17115:6;17123;17081:24;:49::i;:::-;17048:82;;;;17145:8;17157:1;17145:13;:30;;;;-1:-1:-1;17162:13:0;;17145:30;17141:801;;;17214:14;;-1:-1:-1;17230:14:0;;-1:-1:-1;17141:801:0;;;17278:19;17300:54;17319:14;17335:8;17345;17300:18;:54::i;:::-;17278:76;;17391:14;17373;:32;17369:562;;17452:10;17434:14;:28;;17426:75;;;;-1:-1:-1;;;17426:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17542:14;;-1:-1:-1;17558:14:0;-1:-1:-1;17558:14:0;17369:562;;;17614:19;17636:54;17655:14;17671:8;17681;17636:18;:54::i;:::-;17614:76;;17734:14;17716;:32;;17709:40;;;;17794:10;17776:14;:28;;17768:75;;;;-1:-1:-1;;;17768:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17884:14;-1:-1:-1;17900:14:0;;-1:-1:-1;17369:562:0;17141:801;;16587:1362;;;;;;;;;;;:::o;8620:142::-;8672:6;8699;;;:30;;-1:-1:-1;;8714:5:0;;;8728:1;8723;8714:5;8723:1;8709:15;;;;;:20;8699:30;8691:63;;;;;-1:-1:-1;;;8691:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8347:128;8431:5;;;8426:16;;;;8418:49;;;;;-1:-1:-1;;;8418:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9986:430;10079:13;10094;10121:14;10140:26;10151:6;10159;10140:10;:26::i;:::-;10120:46;;;10177:32;10185:7;10194:6;10202;10177:7;:32::i;:::-;;10221:13;10236;10265:32;10273:7;10282:6;10290;10265:7;:32::i;:::-;-1:-1:-1;;;;;10254:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10254:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10254:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10254:58:0;;;;;;;10220:92;;;;;-1:-1:-1;10220:92:0;;-1:-1:-1;;;;;;10346:16:0;;;;;;;:62;;10389:8;10399;10346:62;;;10366:8;10376;10346:62;10323:85;;;;-1:-1:-1;9986:430:0;-1:-1:-1;;;;;;;9986:430:0:o

Swarm Source

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