Contract 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb 4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x4912d346980a43de7752135c50694b9972239761c6967759913af42763d24d00Swap Exact Token...77377782021-12-03 4:23:074 mins ago0xa5ad1d85df15ead6012811666ddb965cee882da1 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00378992930525.037684767
0xef20f16de18d8e96cd40eaa71ab4c14cf347bac7f3be7d1d50a28f86cb10cc71Swap Exact Token...77376912021-12-03 4:20:137 mins ago0xcc1a8f2fcef6a0d44c7203653038bd26efcafdb1 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00379608918225.078379212
0xe903186a705d633c4f4314ee96bf38a5f7b7e534194f22f43475bbc92780dde2Swap AVAX For Ex...77376262021-12-03 4:18:029 mins ago0x2203235320d8f1de3a5346913c7f26fe43f60acf IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb3.634578630908035 AVAX0.00438707527.5
0x422bc1f382e1bba28a75fbb025a2f3fee9926e13fc491cdeed49f6c0d0c459e7Swap Exact Token...77375752021-12-03 4:16:2011 mins ago0x727f5f635bf0cbc5765b10a97e73f89aad92cbfd IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00293959410425.045745509
0x058dcc2f4525642b7777cc7aaca74ee7db95adc65b647066c8cfb01e5b0ff53cSwap Exact Token...77375542021-12-03 4:15:3812 mins ago0x727f5f635bf0cbc5765b10a97e73f89aad92cbfd IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00297032525
0x94e32d294f9f061fac587615c12f57f0671f1593a605355e350952a52da33b4eRemove Liquidity77375302021-12-03 4:14:4912 mins ago0x727f5f635bf0cbc5765b10a97e73f89aad92cbfd IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.0040183525
0x3504c054d9d8fe0be830a1c811efc0ad602f406e2835361a520443e90ff370c2Swap Exact Token...77374552021-12-03 4:12:1315 mins ago0x870d6b5d181dd841805dd042a51ea4fb867b6c90 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00379317296625.0591136
0xba3378082316793aa5ad30bc98ccc975f0d617f46a225efea46d6b2e055d8b63Swap Exact Token...77373142021-12-03 4:07:3320 mins ago0xe93d50a5a97b1b55fcf6c4785a34d72913fb154e IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00378302525
0xaa03ec945c06791d1f01991679ca04b34d4f1386b5f4a53af8b95f253e3c8ea1Swap Exact AVAX ...77372812021-12-03 4:06:2621 mins ago0xe93d50a5a97b1b55fcf6c4785a34d72913fb154e IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb1.350248103892009 AVAX0.00380648155425.023051388
0x3958962560253c494605ab760d549e21a7b545a739de81253c1333bbc62d6ec1Swap Exact Token...77372202021-12-03 4:04:2223 mins ago0xd6f976267fdd1b61303e322be5c2290aa20123cf IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00519245257825.04692309
0xffcd74f446cfe0c836114b21900db232ed8fa5b43782e97a45ee8ca6b21b57d0Remove Liquidity...77371772021-12-03 4:02:5424 mins ago0xd6f976267fdd1b61303e322be5c2290aa20123cf IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00555065966825.121335972
0x298c98092475517f391029596fafd63726e2e223bd18cf95cc3879b36814da02Swap Exact AVAX ...77371762021-12-03 4:02:5124 mins ago0x4e8972ea6f20fd792daea9e93123ab29e510cd4b IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb1 AVAX0.00381768503125.096700817
0x71c72f1444f00cc4f83d0a3bd9272b6ee14ec9bc657f235826016dda28dabff0Swap Exact Token...77371512021-12-03 4:02:0125 mins ago0xb3788dd6ac1125cb59aef9369700dbf4b932916d IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00378362525
0x7743038eb6aff78c778a7af8293660c1716f1ff8885b6e9288b507daa54a600bSwap Exact Token...77369872021-12-03 3:56:2631 mins ago0x1c0f0e503e3d8a089faa1e72dc37e24d6ed1f5d3 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00378422525
0x129fe2fa08580722b3e8ea48e4d9dc83cd8e06b8ea4348b85d1e1cc7aeff73feSwap Exact Token...77369422021-12-03 3:54:4932 mins ago0x88b0ea576428da635d0fa9deb686765c90cfde2e IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00378302525
0x3bf67629b5dd9b3cb1b02df6a0cac8c41fb115530a46c5f14858e51ee1a13ec7Swap Exact AVAX ...77369022021-12-03 3:53:2634 mins ago0x59f9c88e819954f48565236ad5ac86e004d24f38 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.213801877282708 AVAX0.00380267525
0x7b88ed8561a9c128f3156f5d3589efde6f01a55ec8d3269a29cbc0de65fcfb0aSwap Exact Token...77368902021-12-03 3:53:0234 mins ago0xab0fdacb3fb80a70f510781df57211be25d8be00 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.005674987537.5
0x7b91623f2eb88d5caf64d72aa01f9fae57f21301d88071408ba9a2e504186764Swap Exact Token...77368012021-12-03 3:50:0137 mins ago0xb3788dd6ac1125cb59aef9369700dbf4b932916d IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00378272525
0x0de845098fc618976329e7a07ae53d85068979f18194f745ce337aee55668e6cSwap Exact AVAX ...77367862021-12-03 3:49:2838 mins ago0x05c9d8ca06c1ef05b3cdc9e9550be46aa0624bb8 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb2.162686408196784 AVAX0.00380297525
0x4bb9c793197d507a7607aa5053202cf1a7abed48229da11898d3ce49906f0a12Swap Exact AVAX ...77367762021-12-03 3:49:0838 mins ago0x90a7cd43eeb6774d676afd0cddcbe375b5702769 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.36 AVAX0.00337517525
0x534fe37b6aae3dadc4af68f4213e07563469044a359d26f2a85284b11d69e8a9Swap Exact Token...77367162021-12-03 3:47:0440 mins ago0x559a064c7df1f21fd3b38449d12b1793728fca9f IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00378392525
0x67304c51519b8a028d0e913f592fa394030696f2a3e80d34f060a9b6230e8b1aSwap Exact Token...77366342021-12-03 3:44:2143 mins ago0xc99ac3f6e78e3ff2d98c8c71de22ddce2d8207b4 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.0034025525
0x70e585fb35d4810ca4fb8c2e4406d0a6926bddaea1c747e29432bd549d3d0c1eSwap Exact AVAX ...77366322021-12-03 3:44:1743 mins ago0xb642f4cfc9ba413bad1bed89f9d7376e1af04e62 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb39.542085118767335 AVAX0.00380297525
0x5aed40fa790efede97a0fe2f2c7b14327b116a2ae01f08469c9101f8461d6b71Swap AVAX For Ex...77366002021-12-03 3:43:0744 mins ago0x88b0ea576428da635d0fa9deb686765c90cfde2e IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.445630483861668 AVAX0.0039876525
0xc6ef0e87b0c031b8f519bca3c1c074f4436c493eeca8d10c129cad72167a2c2cSwap Exact Token...77365292021-12-03 3:40:4246 mins ago0xca64d9e72ec188811af49d7f96ce53825e32dabc IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00378422525
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4912d346980a43de7752135c50694b9972239761c6967759913af42763d24d0077377782021-12-03 4:23:074 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0xa5ad1d85df15ead6012811666ddb965cee882da18.364809221499512427 AVAX
0x4912d346980a43de7752135c50694b9972239761c6967759913af42763d24d0077377782021-12-03 4:23:074 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb8.364809221499512427 AVAX
0x369083eca18359916418f561fed21f7c0938bac852d1bcb8962f1f1946df73fc77377262021-12-03 4:21:226 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0xa5ad1d85df15ead6012811666ddb965cee882da10.027130324291941093 AVAX
0x369083eca18359916418f561fed21f7c0938bac852d1bcb8962f1f1946df73fc77377262021-12-03 4:21:226 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.027130324291941093 AVAX
0xef20f16de18d8e96cd40eaa71ab4c14cf347bac7f3be7d1d50a28f86cb10cc7177376912021-12-03 4:20:137 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0xcc1a8f2fcef6a0d44c7203653038bd26efcafdb14.1733948446423299 AVAX
0xef20f16de18d8e96cd40eaa71ab4c14cf347bac7f3be7d1d50a28f86cb10cc7177376912021-12-03 4:20:137 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb4.1733948446423299 AVAX
0xe903186a705d633c4f4314ee96bf38a5f7b7e534194f22f43475bbc92780dde277376262021-12-03 4:18:029 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0x2203235320d8f1de3a5346913c7f26fe43f60acf0.007254647965884302 AVAX
0xe903186a705d633c4f4314ee96bf38a5f7b7e534194f22f43475bbc92780dde277376262021-12-03 4:18:029 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX3.627323982942151057 AVAX
0x439394478428aa72a23cc30e6d3784b2f2730d9732815737179a021e41ee7b1f77375922021-12-03 4:16:5210 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0xa5ad1d85df15ead6012811666ddb965cee882da10.027135446214789252 AVAX
0x439394478428aa72a23cc30e6d3784b2f2730d9732815737179a021e41ee7b1f77375922021-12-03 4:16:5210 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.027135446214789252 AVAX
0x3504c054d9d8fe0be830a1c811efc0ad602f406e2835361a520443e90ff370c277374552021-12-03 4:12:1315 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0x870d6b5d181dd841805dd042a51ea4fb867b6c904.292749840240180222 AVAX
0x3504c054d9d8fe0be830a1c811efc0ad602f406e2835361a520443e90ff370c277374552021-12-03 4:12:1315 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb4.292749840240180222 AVAX
0xba3378082316793aa5ad30bc98ccc975f0d617f46a225efea46d6b2e055d8b6377373142021-12-03 4:07:3320 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0xe93d50a5a97b1b55fcf6c4785a34d72913fb154e0.008151977983818466 AVAX
0xba3378082316793aa5ad30bc98ccc975f0d617f46a225efea46d6b2e055d8b6377373142021-12-03 4:07:3320 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.008151977983818466 AVAX
0xaa03ec945c06791d1f01991679ca04b34d4f1386b5f4a53af8b95f253e3c8ea177372812021-12-03 4:06:2621 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX1.350248103892009692 AVAX
0x298c98092475517f391029596fafd63726e2e223bd18cf95cc3879b36814da0277371762021-12-03 4:02:5124 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX1 AVAX
0x71c72f1444f00cc4f83d0a3bd9272b6ee14ec9bc657f235826016dda28dabff077371512021-12-03 4:02:0125 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0xb3788dd6ac1125cb59aef9369700dbf4b932916d0.302145298698311685 AVAX
0x71c72f1444f00cc4f83d0a3bd9272b6ee14ec9bc657f235826016dda28dabff077371512021-12-03 4:02:0125 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.302145298698311685 AVAX
0x7743038eb6aff78c778a7af8293660c1716f1ff8885b6e9288b507daa54a600b77369872021-12-03 3:56:2631 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0x1c0f0e503e3d8a089faa1e72dc37e24d6ed1f5d30.526619721325703619 AVAX
0x7743038eb6aff78c778a7af8293660c1716f1ff8885b6e9288b507daa54a600b77369872021-12-03 3:56:2631 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.526619721325703619 AVAX
0x129fe2fa08580722b3e8ea48e4d9dc83cd8e06b8ea4348b85d1e1cc7aeff73fe77369422021-12-03 3:54:4932 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0x88b0ea576428da635d0fa9deb686765c90cfde2e0.05024642125320253 AVAX
0x129fe2fa08580722b3e8ea48e4d9dc83cd8e06b8ea4348b85d1e1cc7aeff73fe77369422021-12-03 3:54:4932 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.05024642125320253 AVAX
0x3bf67629b5dd9b3cb1b02df6a0cac8c41fb115530a46c5f14858e51ee1a13ec777369022021-12-03 3:53:2634 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX0.213801877282708316 AVAX
0x5f106e07f38a6855a752b007e0675b318b2301c3d6ae65d9e8b0a2e4dc37cab077368952021-12-03 3:53:1234 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0x88b0ea576428da635d0fa9deb686765c90cfde2e0.027158696936016503 AVAX
0x5f106e07f38a6855a752b007e0675b318b2301c3d6ae65d9e8b0a2e4dc37cab077368952021-12-03 3:53:1234 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.027158696936016503 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ElkRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.0.6 https://hardhat.org

// File contracts/elk-core/interfaces/IElkFactory.sol

pragma solidity >=0.5.0;

interface IElkFactory {
    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/elk-lib/libraries/TransferHelper.sol

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending AVAX that do not consistently return true/false
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 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,
        uint256 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,
        uint256 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 safeTransferAVAX(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper: AVAX_TRANSFER_FAILED');
    }
}


// File contracts/elk-periphery/interfaces/IElkRouter.sol

pragma solidity >=0.6.2;

interface IElkRouter {
    function factory() external pure returns (address);
    function WAVAX() 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 addLiquidityAVAX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountAVAX, 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 removeLiquidityAVAX(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountAVAX);
    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 removeLiquidityAVAXWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountAVAX);
    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 swapExactAVAXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactAVAX(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForAVAX(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapAVAXForExactTokens(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);

    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external returns (uint amountAVAX);
    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountAVAX);

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


// File contracts/elk-core/interfaces/IElkPair.sol

pragma solidity >=0.5.0;

interface IElkPair {
    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/elk-periphery/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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


// File contracts/elk-periphery/libraries/ElkLibrary.sol

pragma solidity >=0.5.0;


library ElkLibrary {
    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, 'ElkLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'ElkLibrary: 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'33c4831a098654d3d20a78641a198ee6ffc1ceed49f2196b75bb244891c260e3' // init code hash
            ))));
    }

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

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

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

pragma solidity >=0.5.0;

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

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

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


// File contracts/elk-periphery/interfaces/IWAVAX.sol

pragma solidity >=0.5.0;

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


// File contracts/elk-periphery/ElkRouter.sol

pragma solidity =0.6.6;






contract ElkRouter is IElkRouter {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WAVAX;

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

    constructor(address _factory, address _WAVAX) public {
        factory = _factory;
        WAVAX = _WAVAX;
    }

    receive() external payable {
        assert(msg.sender == WAVAX); // only accept AVAX via fallback from the WAVAX 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 (IElkFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IElkFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = ElkLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = ElkLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'ElkRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = ElkLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'ElkRouter: 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 = ElkLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IElkPair(pair).mint(to);
    }
    function addLiquidityAVAX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountAVAX, uint liquidity) {
        (amountToken, amountAVAX) = _addLiquidity(
            token,
            WAVAX,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountAVAXMin
        );
        address pair = ElkLibrary.pairFor(factory, token, WAVAX);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWAVAX(WAVAX).deposit{value: amountAVAX}();
        assert(IWAVAX(WAVAX).transfer(pair, amountAVAX));
        liquidity = IElkPair(pair).mint(to);
        // refund dust AVAX, if any
        if (msg.value > amountAVAX) TransferHelper.safeTransferAVAX(msg.sender, msg.value - amountAVAX);
    }

    // **** 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 = ElkLibrary.pairFor(factory, tokenA, tokenB);
        IElkPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IElkPair(pair).burn(to);
        (address token0,) = ElkLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'ElkRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'ElkRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityAVAX(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountAVAX) {
        (amountToken, amountAVAX) = removeLiquidity(
            token,
            WAVAX,
            liquidity,
            amountTokenMin,
            amountAVAXMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWAVAX(WAVAX).withdraw(amountAVAX);
        TransferHelper.safeTransferAVAX(to, amountAVAX);
    }
    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 = ElkLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityAVAXWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountAVAX) {
        address pair = ElkLibrary.pairFor(factory, token, WAVAX);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountAVAX) = removeLiquidityAVAX(token, liquidity, amountTokenMin, amountAVAXMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountAVAX) {
        (, amountAVAX) = removeLiquidity(
            token,
            WAVAX,
            liquidity,
            amountTokenMin,
            amountAVAXMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWAVAX(WAVAX).withdraw(amountAVAX);
        TransferHelper.safeTransferAVAX(to, amountAVAX);
    }
    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountAVAX) {
        address pair = ElkLibrary.pairFor(factory, token, WAVAX);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountAVAX = removeLiquidityAVAXSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountAVAXMin, 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,) = ElkLibrary.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 ? ElkLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IElkPair(ElkLibrary.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 = ElkLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.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 = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactAVAXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WAVAX, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWAVAX(WAVAX).deposit{value: amounts[0]}();
        assert(IWAVAX(WAVAX).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactAVAX(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] == WAVAX, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWAVAX(WAVAX).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferAVAX(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForAVAX(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] == WAVAX, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWAVAX(WAVAX).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferAVAX(to, amounts[amounts.length - 1]);
    }
    function swapAVAXForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WAVAX, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        IWAVAX(WAVAX).deposit{value: amounts[0]}();
        assert(IWAVAX(WAVAX).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust AVAX, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferAVAX(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,) = ElkLibrary.sortTokens(input, output);
            IElkPair pair = IElkPair(ElkLibrary.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 = ElkLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? ElkLibrary.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, ElkLibrary.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,
            'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WAVAX, 'ElkRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWAVAX(WAVAX).deposit{value: amountIn}();
        assert(IWAVAX(WAVAX).transfer(ElkLibrary.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,
            'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WAVAX, 'ElkRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WAVAX).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWAVAX(WAVAX).withdraw(amountOut);
        TransferHelper.safeTransferAVAX(to, amountOut);
    }

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WAVAX","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WAVAX","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":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityAVAX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","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":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityAVAX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","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":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityAVAXSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountAVAX","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":"amountAVAXMin","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":"removeLiquidityAVAXWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","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":"amountAVAXMin","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":"removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountAVAX","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":"swapAVAXForExactTokens","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":"swapExactAVAXForTokens","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":"swapExactAVAXForTokensSupportingFeeOnTransferTokens","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":"swapExactTokensForAVAX","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":"swapExactTokensForAVAXSupportingFeeOnTransferTokens","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":"swapTokensForExactAVAX","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"}]

60c060405234801561001057600080fd5b50604051620048e0380380620048e08339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61475b620001856000398061019f5280610e5e5280610f9a5280610fd5528061154552806116e15280611797528061180c52806118bb52806119965280611a9c5280611b525280611c2f5280611ed3528061202252806120aa528061224d528061238052806124d2528061255a528061299b5280612a3c5280612ab05280612eb35280612f095280612f3d5280612fb1525080610d095280610d425280610e3c52806110b9528061119052806112c352806115df5280611cc95280611dd65280611f7252806120dc528061222b528061241f528061258c52806126ef528061292c5280612ae25280612cf45280612d845280612ee75280613a065280613a495280613bf45280613d7a528061421052806142d75280614357525061475b6000f3fe60806040526004361061018f5760003560e01c806385f8c259116100d6578063baa2abde1161007f578063d06ca61f11610059578063d06ca61f14610b70578063e8e3370014610c27578063f91b3f7214610ca7576101c8565b8063baa2abde14610a78578063c45a015514610ad5578063c57559dd14610aea576101c8565b80639fc27226116100b05780639fc2722614610949578063a2a1623d146109bc578063ad615dec14610a42576101c8565b806385f8c259146107f55780638803dbee1461082b5780638a657e67146108c3576101c8565b80635c11d7951161013857806373bc79cf1161011257806373bc79cf14610672578063762b1562146106c55780637a42416a1461075d576101c8565b80635c11d79514610511578063676528d1146105a957806373b295c214610641576101c8565b80632c407024116101695780632c407024146103b357806333c6b7251461042657806338ed173914610479576101c8565b8063054d50d4146101cd5780631f00ca74146102155780632195995c1461031c576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610203600480360360608110156101f057600080fd5b5080359060208101359060400135610ced565b60408051918252519081900360200190f35b34801561022157600080fd5b506102cc6004803603604081101561023857600080fd5b8135919081019060408101602082013564010000000081111561025a57600080fd5b82018360208201111561026c57600080fd5b8035906020019184602083028401116401000000008311171561028e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610d02945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103085781810151838201526020016102f0565b505050509050019250505060405180910390f35b34801561032857600080fd5b5061039a600480360361016081101561034057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610d38565b6040805192835260208301919091528051918290030190f35b3480156103bf57600080fd5b5061039a60048036036101408110156103d757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610e32565b34801561043257600080fd5b5061039a600480360360c081101561044957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610f46565b34801561048557600080fd5b506102cc600480360360a081101561049c57600080fd5b8135916020810135918101906060810160408201356401000000008111156104c357600080fd5b8201836020820111156104d557600080fd5b803590602001918460208302840111640100000000831117156104f757600080fd5b91935091506001600160a01b038135169060200135611067565b34801561051d57600080fd5b506101c6600480360360a081101561053457600080fd5b81359160208101359181019060608101604082013564010000000081111561055b57600080fd5b82018360208201111561056d57600080fd5b8035906020019184602083028401116401000000008311171561058f57600080fd5b91935091506001600160a01b038135169060200135611252565b3480156105b557600080fd5b506102cc600480360360a08110156105cc57600080fd5b8135916020810135918101906060810160408201356401000000008111156105f357600080fd5b82018360208201111561060557600080fd5b8035906020019184602083028401116401000000008311171561062757600080fd5b91935091506001600160a01b0381351690602001356114ee565b34801561064d57600080fd5b50610656611795565b604080516001600160a01b039092168252519081900360200190f35b34801561067e57600080fd5b50610203600480360360c081101561069557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356117b9565b3480156106d157600080fd5b506101c6600480360360a08110156106e857600080fd5b81359160208101359181019060608101604082013564010000000081111561070f57600080fd5b82018360208201111561072157600080fd5b8035906020019184602083028401116401000000008311171561074357600080fd5b91935091506001600160a01b038135169060200135611941565b34801561076957600080fd5b506102cc600480360360a081101561078057600080fd5b8135916020810135918101906060810160408201356401000000008111156107a757600080fd5b8201836020820111156107b957600080fd5b803590602001918460208302840111640100000000831117156107db57600080fd5b91935091506001600160a01b038135169060200135611bd8565b34801561080157600080fd5b506102036004803603606081101561081857600080fd5b5080359060208101359060400135611d77565b34801561083757600080fd5b506102cc600480360360a081101561084e57600080fd5b81359160208101359181019060608101604082013564010000000081111561087557600080fd5b82018360208201111561088757600080fd5b803590602001918460208302840111640100000000831117156108a957600080fd5b91935091506001600160a01b038135169060200135611d84565b6102cc600480360360808110156108d957600080fd5b813591908101906040810160208201356401000000008111156108fb57600080fd5b82018360208201111561090d57600080fd5b8035906020019184602083028401116401000000008311171561092f57600080fd5b91935091506001600160a01b038135169060200135611e84565b34801561095557600080fd5b50610203600480360361014081101561096d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612223565b6102cc600480360360808110156109d257600080fd5b813591908101906040810160208201356401000000008111156109f457600080fd5b820183602082011115610a0657600080fd5b80359060200191846020830284011164010000000083111715610a2857600080fd5b91935091506001600160a01b038135169060200135612331565b348015610a4e57600080fd5b5061020360048036036060811015610a6557600080fd5b508035906020810135906040013561268d565b348015610a8457600080fd5b5061039a600480360360e0811015610a9b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c0013561269a565b348015610ae157600080fd5b5061065661292a565b6101c660048036036080811015610b0057600080fd5b81359190810190604081016020820135640100000000811115610b2257600080fd5b820183602082011115610b3457600080fd5b80359060200191846020830284011164010000000083111715610b5657600080fd5b91935091506001600160a01b03813516906020013561294e565b348015610b7c57600080fd5b506102cc60048036036040811015610b9357600080fd5b81359190810190604081016020820135640100000000811115610bb557600080fd5b820183602082011115610bc757600080fd5b80359060200191846020830284011164010000000083111715610be957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612ced945050505050565b348015610c3357600080fd5b50610c896004803603610100811015610c4b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612d1a565b60408051938452602084019290925282820152519081900360600190f35b610c89600480360360c0811015610cbd57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612e5d565b6000610cfa848484613109565b949350505050565b6060610d2f7f000000000000000000000000000000000000000000000000000000000000000084846131f9565b90505b92915050565b6000806000610d687f00000000000000000000000000000000000000000000000000000000000000008f8f613346565b9050600087610d77578c610d7b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610df157600080fd5b505af1158015610e05573d6000803e3d6000fd5b50505050610e188f8f8f8f8f8f8f61269a565b809450819550505050509b509b9950505050505050505050565b6000806000610e827f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613346565b9050600087610e91578c610e95565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610f0b57600080fd5b505af1158015610f1f573d6000803e3d6000fd5b50505050610f318e8e8e8e8e8e610f46565b909f909e509c50505050505050505050505050565b6000808242811015610f94576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b610fc3897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a61269a565b9093509150610fd389868561341e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561103957600080fd5b505af115801561104d573d6000803e3d6000fd5b5050505061105b85836135b6565b50965096945050505050565b606081428110156110b4576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6111127f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136ae92505050565b9150868260018451038151811061112557fe5b6020026020010151101561116a5760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b6112088686600081811061117a57fe5b905060200201356001600160a01b0316336111ee7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111bc57fe5b905060200201356001600160a01b03168b8b60018181106111d957fe5b905060200201356001600160a01b0316613346565b856000815181106111fb57fe5b60200260200101516137e5565b61124782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613957915050565b509695505050505050565b804281101561129d576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611312858560008181106112ad57fe5b905060200201356001600160a01b03163361130c7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ef57fe5b905060200201356001600160a01b03168a8a60018181106111d957fe5b8a6137e5565b60008585600019810181811061132457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d60208110156113b357600080fd5b505160408051602088810282810182019093528882529293506113f5929091899189918291850190849080828437600092019190915250889250613b9d915050565b866114a7828888600019810181811061140a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561146f57600080fd5b505afa158015611483573d6000803e3d6000fd5b505050506040513d602081101561149957600080fd5b50519063ffffffff613ec816565b10156114e45760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b5050505050505050565b6060814281101561153b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061157557fe5b905060200201356001600160a01b03166001600160a01b0316146115da576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b6116387f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136ae92505050565b9150868260018451038151811061164b57fe5b602002602001015110156116905760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b6116a08686600081811061117a57fe5b6116df82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613957915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061171e57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50505050611247848360018551038151811061178857fe5b60200260200101516135b6565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008142811015611806576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611835887f0000000000000000000000000000000000000000000000000000000000000000898989308961269a565b604080516370a0823160e01b815230600482015290519194506118b992508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561188857600080fd5b505afa15801561189c573d6000803e3d6000fd5b505050506040513d60208110156118b257600080fd5b505161341e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561191f57600080fd5b505af1158015611933573d6000803e3d6000fd5b5050505061124784836135b6565b804281101561198c576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858560001981018181106119c657fe5b905060200201356001600160a01b03166001600160a01b031614611a2b576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611a3b858560008181106112ad57fe5b611a79858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b9d915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611ae357600080fd5b505afa158015611af7573d6000803e3d6000fd5b505050506040513d6020811015611b0d57600080fd5b5051905086811015611b505760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611bb657600080fd5b505af1158015611bca573d6000803e3d6000fd5b505050506114e484826135b6565b60608142811015611c25576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110611c5f57fe5b905060200201356001600160a01b03166001600160a01b031614611cc4576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611d227f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131f992505050565b91508682600081518110611d3257fe5b602002602001015111156116905760405162461bcd60e51b815260040180806020018281038252602181526020018061469a6021913960400191505060405180910390fd5b6000610cfa848484613f20565b60608142811015611dd1576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611e2f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131f992505050565b91508682600081518110611e3f57fe5b6020026020010151111561116a5760405162461bcd60e51b815260040180806020018281038252602181526020018061469a6021913960400191505060405180910390fd5b60608142811015611ed1576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611f0857fe5b905060200201356001600160a01b03166001600160a01b031614611f6d576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611fcb7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131f992505050565b91503482600081518110611fdb57fe5b602002602001015111156120205760405162461bcd60e51b815260040180806020018281038252602181526020018061469a6021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061205c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561208f57600080fd5b505af11580156120a3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6121087f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ef57fe5b8460008151811061211557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561216c57600080fd5b505af1158015612180573d6000803e3d6000fd5b505050506040513d602081101561219657600080fd5b505161219e57fe5b6121dd82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613957915050565b816000815181106121ea57fe5b602002602001015134111561221957612219338360008151811061220a57fe5b602002602001015134036135b6565b5095945050505050565b6000806122717f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613346565b9050600086612280578b612284565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156122fa57600080fd5b505af115801561230e573d6000803e3d6000fd5b505050506123208d8d8d8d8d8d6117b9565b9d9c50505050505050505050505050565b6060814281101561237e576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106123b557fe5b905060200201356001600160a01b03166001600160a01b03161461241a576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b6124787f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136ae92505050565b9150868260018451038151811061248b57fe5b602002602001015110156124d05760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061250c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561253f57600080fd5b505af1158015612553573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6125b87f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ef57fe5b846000815181106125c557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050506040513d602081101561264657600080fd5b505161264e57fe5b61221982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613957915050565b6000610cfa848484614010565b60008082428110156126e8576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b60006127157f00000000000000000000000000000000000000000000000000000000000000008c8c613346565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050506040513d602081101561279a57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561280057600080fd5b505af1158015612814573d6000803e3d6000fd5b505050506040513d604081101561282a57600080fd5b508051602090910151909250905060006128448e8e6140d2565b509050806001600160a01b03168e6001600160a01b03161461286757818361286a565b82825b90975095508a8710156128c4576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612919576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b8042811015612999576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106129d057fe5b905060200201356001600160a01b03166001600160a01b031614612a35576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9557600080fd5b505af1158015612aa9573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612b0e7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ef57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b5e57600080fd5b505af1158015612b72573d6000803e3d6000fd5b505050506040513d6020811015612b8857600080fd5b5051612b9057fe5b600086866000198101818110612ba257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612c0757600080fd5b505afa158015612c1b573d6000803e3d6000fd5b505050506040513d6020811015612c3157600080fd5b50516040805160208981028281018201909352898252929350612c739290918a918a918291850190849080828437600092019190915250899250613b9d915050565b876114a78289896000198101818110612c8857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561146f57600080fd5b6060610d2f7f000000000000000000000000000000000000000000000000000000000000000084846136ae565b60008060008342811015612d6a576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b612d788c8c8c8c8c8c6141c6565b90945092506000612daa7f00000000000000000000000000000000000000000000000000000000000000008e8e613346565b9050612db88d3383886137e5565b612dc48c3383876137e5565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612e1c57600080fd5b505af1158015612e30573d6000803e3d6000fd5b505050506040513d6020811015612e4657600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612ead576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b612edb8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6141c6565b90945092506000612f2d7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613346565b9050612f3b8b3383886137e5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f9657600080fd5b505af1158015612faa573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b505050506040513d602081101561305957600080fd5b505161306157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156130b957600080fd5b505af11580156130cd573d6000803e3d6000fd5b505050506040513d60208110156130e357600080fd5b50519250348410156130fb576130fb338534036135b6565b505096509650969350505050565b60008084116131495760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b6000831180156131595750600082115b6131945760405162461bcd60e51b81526004018080602001828103825260228152602001806146bb6022913960400191505060405180910390fd5b60006131a8856103e563ffffffff61449816565b905060006131bc828563ffffffff61449816565b905060006131e2836131d6886103e863ffffffff61449816565b9063ffffffff61450416565b90508082816131ed57fe5b04979650505050505050565b6060600282511015613252576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561326a57600080fd5b50604051908082528060200260200182016040528015613294578160200160208202803683370190505b50905082816001835103815181106132a857fe5b60209081029190910101528151600019015b801561333e576000806132f7878660018603815181106132d657fe5b60200260200101518786815181106132ea57fe5b602002602001015161455c565b9150915061331984848151811061330a57fe5b60200260200101518383613f20565b84600185038151811061332857fe5b60209081029190910101525050600019016132ba565b509392505050565b600080600061335585856140d2565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f33c4831a098654d3d20a78641a198ee6ffc1ceed49f2196b75bb244891c260e3609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106134c95780518252601f1990920191602091820191016134aa565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461352b576040519150601f19603f3d011682016040523d82523d6000602084013e613530565b606091505b509150915081801561355e57508051158061355e575080806020019051602081101561355b57600080fd5b50515b6135af576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106136025780518252601f1990920191602091820191016135e3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613664576040519150601f19603f3d011682016040523d82523d6000602084013e613669565b606091505b50509050806136a95760405162461bcd60e51b81526004018080602001828103825260248152602001806146506024913960400191505060405180910390fd5b505050565b6060600282511015613707576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561371f57600080fd5b50604051908082528060200260200182016040528015613749578160200160208202803683370190505b509050828160008151811061375a57fe5b60200260200101818152505060005b600183510381101561333e5760008061379f8786858151811061378857fe5b60200260200101518786600101815181106132ea57fe5b915091506137c18484815181106137b257fe5b60200260200101518383613109565b8484600101815181106137d057fe5b60209081029190910101525050600101613769565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061387f5780518252601f199092019160209182019101613860565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146138e1576040519150601f19603f3d011682016040523d82523d6000602084013e6138e6565b606091505b5091509150818015613914575080511580613914575080806020019051602081101561391157600080fd5b50515b61394f5760405162461bcd60e51b81526004018080602001828103825260248152602001806146dd6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613b975760008084838151811061397557fe5b602002602001015185846001018151811061398c57fe5b60200260200101519150915060006139a483836140d2565b50905060008785600101815181106139b857fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146139e6578260006139ea565b6000835b91509150600060028a51038810613a015788613a42565b613a427f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110613a3557fe5b6020026020010151613346565b9050613a6f7f00000000000000000000000000000000000000000000000000000000000000008888613346565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613aac576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613b1d578181015183820152602001613b05565b50505050905090810190601f168015613b4a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b6c57600080fd5b505af1158015613b80573d6000803e3d6000fd5b50506001909901985061395a975050505050505050565b50505050565b60005b60018351038110156136a957600080848381518110613bbb57fe5b6020026020010151858460010181518110613bd257fe5b6020026020010151915091506000613bea83836140d2565b5090506000613c1a7f00000000000000000000000000000000000000000000000000000000000000008585613346565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613c5b57600080fd5b505afa158015613c6f573d6000803e3d6000fd5b505050506040513d6060811015613c8557600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613cc2578284613cc5565b83835b91509150613d23828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561146f57600080fd5b9550613d30868383613109565b945050505050600080856001600160a01b0316886001600160a01b031614613d5a57826000613d5e565b6000835b91509150600060028c51038a10613d75578a613da9565b613da97f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110613a3557fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e4c578181015183820152602001613e34565b50505050905090810190601f168015613e795780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613e9b57600080fd5b505af1158015613eaf573d6000803e3d6000fd5b50506001909b019a50613ba09950505050505050505050565b80820382811115610d32576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613f605760405162461bcd60e51b81526004018080602001828103825260268152602001806146746026913960400191505060405180910390fd5b600083118015613f705750600082115b613fab5760405162461bcd60e51b81526004018080602001828103825260228152602001806146bb6022913960400191505060405180910390fd5b6000613fcf6103e8613fc3868863ffffffff61449816565b9063ffffffff61449816565b90506000613fe96103e5613fc3868963ffffffff613ec816565b90506140066001828481613ff957fe5b049063ffffffff61450416565b9695505050505050565b6000808411614066576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b6000831180156140765750600082115b6140b15760405162461bcd60e51b81526004018080602001828103825260228152602001806146bb6022913960400191505060405180910390fd5b826140c2858463ffffffff61449816565b816140c957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561413c576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061415c57828461415f565b83835b90925090506001600160a01b0382166141bf576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d602081101561428357600080fd5b50516001600160a01b0316141561434f57604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561432257600080fd5b505af1158015614336573d6000803e3d6000fd5b505050506040513d602081101561434c57600080fd5b50505b60008061437d7f00000000000000000000000000000000000000000000000000000000000000008b8b61455c565b9150915081600014801561438f575080155b1561439f5787935086925061448b565b60006143ac898484614010565b9050878111614415578581101561440a576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b889450925082614489565b6000614422898486614010565b90508981111561442e57fe5b87811015614483576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806144b3575050808202828282816144b057fe5b04145b610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061456b85856140d2565b50905060008061457c888888613346565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b457600080fd5b505afa1580156145c8573d6000803e3d6000fd5b505050506040513d60608110156145de57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461461857808261461b565b81815b9099909850965050505050505056fe456c6b4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a20415641585f5452414e534645525f4641494c4544456c6b4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54456c6b526f757465723a204558434553534956455f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544456c6b526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a26469706673582212205abc44606df65c7756eddddb8736799fc016813138b14a22110b48e3287baf2064736f6c63430006060033000000000000000000000000091d35d7f63487909c863001ddca481c6de47091000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

000000000000000000000000091d35d7f63487909c863001ddca481c6de47091000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Decoded View---------------
Arg [0] : _factory (address): 0x091d35d7f63487909c863001ddca481c6de47091
Arg [1] : _WAVAX (address): 0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000091d35d7f63487909c863001ddca481c6de47091
Arg [1] : 000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7


Deployed ByteCode Sourcemap

16312:18215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16776:10;-1:-1:-1;;;;;16790:5:0;16776:19;;16769:27;;;;16312:18215;;12:1:-1;9;2:12;33495:256:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33495:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33495:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34277:247;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34277:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34277:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34277:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34277:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34277:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34277:247:0;;-1:-1:-1;34277:247:0;;-1:-1:-1;;;;;34277:247: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;34277:247:0;;;;;;;;;;;;;;;;;21534:665;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21534:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21534:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22205:664;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22205:664:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22205:664:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20844:684::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20844:684:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20844:684:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25206:610::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25206:610:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25206:610:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25206:610:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25206:610:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25206:610:0;;-1:-1:-1;25206:610:0;-1:-1:-1;;;;;;25206:610:0;;;;;;;;:::i;30878:702::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30878:702:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30878:702:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30878:702:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30878:702:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30878:702:0;;-1:-1:-1;30878:702:0;-1:-1:-1;;;;;;30878:702:0;;;;;;;;:::i;27916:831::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27916:831:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27916:831:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27916:831:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27916:831:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27916:831:0;;-1:-1:-1;27916:831:0;-1:-1:-1;;;;;;27916:831:0;;;;;;;;:::i;16432:39::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16432:39:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16432:39:0;;;;;;;;;;;;;;22948:711;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22948:711:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22948:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32430:831::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32430:831:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32430:831:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32430:831:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32430:831:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32430:831:0;;-1:-1:-1;32430:831:0;-1:-1:-1;;;;;;32430:831:0;;;;;;;;:::i;27101:809::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27101:809:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27101:809:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27101:809:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27101:809:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27101:809:0;;-1:-1:-1;27101:809:0;-1:-1:-1;;;;;;27101:809:0;;;;;;;;:::i;33759:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33759:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33759:255:0;;;;;;;;;;;;:::i;25822:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25822:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25822:588:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25822:588:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25822:588:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25822:588:0;;-1:-1:-1;25822:588:0;-1:-1:-1;;;;;;25822:588:0;;;;;;;;:::i;28753:794::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28753:794:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28753:794:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28753:794:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28753:794:0;;-1:-1:-1;28753:794:0;-1:-1:-1;;;;;;28753:794:0;;;;;;;;:::i;23665:713::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23665:713:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23665:713:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26416:679::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26416:679:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26416:679:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26416:679:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26416:679:0;;-1:-1:-1;26416:679:0;-1:-1:-1;;;;;;26416:679:0;;;;;;;;:::i;33305:182::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33305:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33305:182:0;;;;;;;;;;;;:::i;20009:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20009:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20009:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16384:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16384:41:0;;;:::i;31586:838::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31586:838:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31586:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31586:838:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31586:838:0;;-1:-1:-1;31586:838:0;-1:-1:-1;;;;;;31586:838:0;;;;;;;;:::i;34022:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34022:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34022:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34022:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34022:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34022:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34022:247:0;;-1:-1:-1;34022:247:0;;-1:-1:-1;;;;;34022:247:0:i;18255:726::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18255:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18255:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18987:979;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18987:979:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33495:256::-;33648:14;33687:56;33711:8;33721:9;33732:10;33687:23;:56::i;:::-;33680:63;33495:256;-1:-1:-1;;;;33495:256:0:o;34277:247::-;34421:21;34467:49;34491:7;34500:9;34511:4;34467:23;:49::i;:::-;34460:56;;34277:247;;;;;:::o;21534:665::-;21840:12;21854;21879;21894:43;21913:7;21922:6;21930;21894:18;:43::i;:::-;21879:58;;21948:10;21961;:33;;21985:9;21961:33;;;-1:-1:-1;;21961:33:0;22005:74;;;-1:-1:-1;;;22005:74:0;;22027:10;22005:74;;;;22047:4;22005:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21948:46;;-1:-1:-1;;;;;;22005:21:0;;;;;:74;;;;;-1:-1:-1;;22005:74:0;;;;;;;;-1:-1:-1;22005:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22005:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22005:74:0;;;;22111:80;22127:6;22135;22143:9;22154:10;22166;22178:2;22182:8;22111:15;:80::i;:::-;22090:101;;;;;;;;21534:665;;;;;;;;;;;;;;;;:::o;22205:664::-;22496:16;22514:15;22542:12;22557:41;22576:7;22585:5;22592;22557:18;:41::i;:::-;22542:56;;22609:10;22622;:33;;22646:9;22622:33;;;-1:-1:-1;;22622:33:0;22666:74;;;-1:-1:-1;;;22666:74:0;;22688:10;22666:74;;;;22708:4;22666:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22609:46;;-1:-1:-1;;;;;;22666:21:0;;;;;:74;;;;;-1:-1:-1;;22666:74:0;;;;;;;;-1:-1:-1;22666:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22666:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22666:74:0;;;;22779:82;22799:5;22806:9;22817:14;22833:13;22848:2;22852:8;22779:19;:82::i;:::-;22751:110;;;;-1:-1:-1;22205:664:0;-1:-1:-1;;;;;;;;;;;;;22205:664:0:o;20844:684::-;21083:16;21101:15;21064:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;21157:198:::1;21187:5;21207;21227:9;21251:14;21280:13;21316:4;21336:8;21157:15;:198::i;:::-;21129:226:::0;;-1:-1:-1;21129:226:0;-1:-1:-1;21366:51:0::1;21394:5:::0;21401:2;21129:226;21366:27:::1;:51::i;:::-;21435:5;-1:-1:-1::0;;;;;21428:22:0::1;;21451:10;21428:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21428:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21428:34:0;;;;21473:47;21505:2;21509:10;21473:31;:47::i;:::-;20844:684:::0;;;;;;;;;;:::o;25206:610::-;25430:21;25411:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;25474:49:::1;25499:7;25508:8;25518:4;;25474:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25474:24:0::1;::::0;-1:-1:-1;;;25474:49:0:i:1;:::-;25464:59;;25573:12;25542:7;25567:1;25550:7;:14;:18;25542:27;;;;;;;;;;;;;;:43;;25534:93;;;;-1:-1:-1::0;;;25534:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25638:135;25684:4;;25689:1;25684:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25684:7:0::1;25693:10;25705:45;25724:7;25733:4;;25738:1;25733:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25733:7:0::1;25742:4;;25747:1;25742:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25742:7:0::1;25705:18;:45::i;:::-;25752:7;25760:1;25752:10;;;;;;;;;;;;;;25638:31;:135::i;:::-;25784:24;25790:7;25799:4;;25784:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25805:2:0;;-1:-1:-1;25784:5:0::1;::::0;-1:-1:-1;;25784:24:0:i:1;:::-;25206:610:::0;;;;;;;;;:::o;30878:702::-;31112:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;31133:133:::1;31179:4;;31184:1;31179:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31179:7:0::1;31188:10;31200:45;31219:7;31228:4;;31233:1;31228:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31228:7:0::1;31237:4;;31242:1;31237:7;;;;;;31200:45;31247:8;31133:31;:133::i;:::-;31277:18;31305:4:::0;;-1:-1:-1;;31310:15:0;;31305:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31305:21:0::1;-1:-1:-1::0;;;;;31298:39:0::1;;31338:2;31298:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31298:43:0::1;-1:-1:-1::0;;;;;31298:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31298:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31298:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31298:43:0;31352:44:::1;::::0;;31298:43:::1;31352:44:::0;;::::1;::::0;;;;;;;;;;;31298:43;;-1:-1:-1;31352:44:0::1;::::0;;;31387:4;;;;;;31352:44;::::1;::::0;31387:4;;31352:44;31387:4;31352:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31393:2:0;;-1:-1:-1;31352:34:0::1;::::0;-1:-1:-1;;31352:44:0:i:1;:::-;31495:12:::0;31429:62:::1;31477:13:::0;31436:4;;-1:-1:-1;;31441:15:0;;31436:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31436:21:0::1;-1:-1:-1::0;;;;;31429:39:0::1;;31469:2;31429:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31429:43:0::1;-1:-1:-1::0;;;;;31429:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31429:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31429:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31429:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31407:165;;;;-1:-1:-1::0;;;31407:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16591:1;30878:702:::0;;;;;;;:::o;27916:831::-;28131:21;28103:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28203:5:0::1;28178:30;:4:::0;;-1:-1:-1;;28183:15:0;;28178:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28178:21:0::1;-1:-1:-1::0;;;;;28178:30:0::1;;28170:66;;;::::0;;-1:-1:-1;;;28170:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28170:66:0;;;;;;;;;;;;;::::1;;28257:49;28282:7;28291:8;28301:4;;28257:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28257:24:0::1;::::0;-1:-1:-1;;;28257:49:0:i:1;:::-;28247:59;;28356:12;28325:7;28350:1;28333:7;:14;:18;28325:27;;;;;;;;;;;;;;:43;;28317:93;;;;-1:-1:-1::0;;;28317:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28421:135;28467:4;;28472:1;28467:7;;;;;;28421:135;28567:35;28573:7;28582:4;;28567:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28596:4:0::1;::::0;-1:-1:-1;28567:5:0::1;::::0;-1:-1:-1;;28567:35:0:i:1;:::-;28620:5;-1:-1:-1::0;;;;;28613:22:0::1;;28636:7;28661:1;28644:7;:14;:18;28636:27;;;;;;;;;;;;;;28613:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28613:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28613:51:0;;;;28675:64;28707:2;28711:7;28736:1;28719:7;:14;:18;28711:27;;;;;;;;;;;;;;28675:31;:64::i;16432:39::-:0;;;:::o;22948:711::-;23216:15;23197:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;23261:198:::1;23291:5;23311;23331:9;23355:14;23384:13;23420:4;23440:8;23261:15;:198::i;:::-;23509:38;::::0;;-1:-1:-1;;;23509:38:0;;23541:4:::1;23509:38;::::0;::::1;::::0;;;23244:215;;-1:-1:-1;23470:78:0::1;::::0;-1:-1:-1;23498:5:0;;23505:2;;-1:-1:-1;;;;;23509: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;23509:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23509:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23509:38:0;23470:27:::1;:78::i;:::-;23566:5;-1:-1:-1::0;;;;;23559:22:0::1;;23582:10;23559:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23559:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23559:34:0;;;;23604:47;23636:2;23640:10;23604:31;:47::i;32430:831::-:0;32698:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32757:5:0::1;32732:30;:4:::0;;-1:-1:-1;;32737:15:0;;32732:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32732:21:0::1;-1:-1:-1::0;;;;;32732:30:0::1;;32724:66;;;::::0;;-1:-1:-1;;;32724:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32724:66:0;;;;;;;;;;;;;::::1;;32801:133;32847:4;;32852:1;32847:7;;;;;;32801:133;32945:55;32980:4;;32945:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32994:4:0::1;::::0;-1:-1:-1;32945:34:0::1;::::0;-1:-1:-1;;32945:55:0:i:1;:::-;33028:38;::::0;;-1:-1:-1;;;33028:38:0;;33060:4:::1;33028:38;::::0;::::1;::::0;;;33011:14:::1;::::0;-1:-1:-1;;;;;33035:5:0::1;33028:23;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33028:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33028:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33028:38:0;;-1:-1:-1;33085:25:0;;::::1;;33077:75;;;;-1:-1:-1::0;;;33077:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33170:5;-1:-1:-1::0;;;;;33163:22:0::1;;33186:9;33163:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33163:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33163:33:0;;;;33207:46;33239:2;33243:9;33207:31;:46::i;27101:809::-:0;27316:21;27288:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27388:5:0::1;27363:30;:4:::0;;-1:-1:-1;;27368:15:0;;27363:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27363:21:0::1;-1:-1:-1::0;;;;;27363:30:0::1;;27355:66;;;::::0;;-1:-1:-1;;;27355:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27355:66:0;;;;;;;;;;;;;::::1;;27442:49;27466:7;27475:9;27486:4;;27442:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27442:23:0::1;::::0;-1:-1:-1;;;27442:49:0:i:1;:::-;27432:59;;27524:11;27510:7;27518:1;27510:10;;;;;;;;;;;;;;:25;;27502:71;;;;-1:-1:-1::0;;;27502:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33759:255:::0;33912:13;33950:56;33973:9;33984;33995:10;33950:22;:56::i;25822:588::-;26046:21;26027:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;26090:49:::1;26114:7;26123:9;26134:4;;26090:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26090:23:0::1;::::0;-1:-1:-1;;;26090:49:0:i:1;:::-;26080:59;;26172:11;26158:7;26166:1;26158:10;;;;;;;;;;;;;;:25;;26150:71;;;;-1:-1:-1::0;;;26150:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28753:794:::0;28967:21;28939:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;29025:5:::1;-1:-1:-1::0;;;;;29014:16:0::1;:4;;29019:1;29014:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29014:7:0::1;-1:-1:-1::0;;;;;29014:16:0::1;;29006:52;;;::::0;;-1:-1:-1;;;29006:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29006:52:0;;;;;;;;;;;;;::::1;;29079:49;29103:7;29112:9;29123:4;;29079:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29079:23:0::1;::::0;-1:-1:-1;;;29079:49:0:i:1;:::-;29069:59;;29161:9;29147:7;29155:1;29147:10;;;;;;;;;;;;;;:23;;29139:69;;;;-1:-1:-1::0;;;29139:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29226:5;-1:-1:-1::0;;;;;29219:21:0::1;;29248:7;29256:1;29248:10;;;;;;;;;;;;;;29219:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29219:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29219:42:0;;;;;29286:5;-1:-1:-1::0;;;;;29279:22:0::1;;29302:45;29321:7;29330:4;;29335:1;29330:7;;;;;;29302:45;29349:7;29357:1;29349:10;;;;;;;;;;;;;;29279:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;29279:81:0::1;-1:-1:-1::0;;;;;29279:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29279:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29279:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29279:81:0;29272:89:::1;;;;29372:24;29378:7;29387:4;;29372:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29393:2:0;;-1:-1:-1;29372:5:0::1;::::0;-1:-1:-1;;29372:24:0:i:1;:::-;29460:7;29468:1;29460:10;;;;;;;;;;;;;;29448:9;:22;29444:95;;;29472:67;29504:10;29528:7;29536:1;29528:10;;;;;;;;;;;;;;29516:9;:22;29472:31;:67::i;:::-;28753:794:::0;;;;;;;;:::o;23665:713::-;23985:15;24013:12;24028:41;24047:7;24056:5;24063;24028:18;:41::i;:::-;24013:56;;24080:10;24093;:33;;24117:9;24093:33;;;-1:-1:-1;;24093:33:0;24137:74;;;-1:-1:-1;;;24137:74:0;;24159:10;24137:74;;;;24179:4;24137:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24080:46;;-1:-1:-1;;;;;;24137:21:0;;;;;:74;;;;;-1:-1:-1;;24137:74:0;;;;;;;;-1:-1:-1;24137:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;24137:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24137:74:0;;;;24235:135;24298:5;24305:9;24316:14;24332:13;24347:2;24351:8;24235:48;:135::i;:::-;24222:148;23665:713;-1:-1:-1;;;;;;;;;;;;;23665:713:0:o;26416:679::-;26633:21;26605:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;26691:5:::1;-1:-1:-1::0;;;;;26680:16:0::1;:4;;26685:1;26680:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26680:7:0::1;-1:-1:-1::0;;;;;26680:16:0::1;;26672:52;;;::::0;;-1:-1:-1;;;26672:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26672:52:0;;;;;;;;;;;;;::::1;;26745:50;26770:7;26779:9;26790:4;;26745:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26745:24:0::1;::::0;-1:-1:-1;;;26745:50:0:i:1;:::-;26735:60;;26845:12;26814:7;26839:1;26822:7;:14;:18;26814:27;;;;;;;;;;;;;;:43;;26806:93;;;;-1:-1:-1::0;;;26806:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26917:5;-1:-1:-1::0;;;;;26910:21:0::1;;26939:7;26947:1;26939:10;;;;;;;;;;;;;;26910:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26910:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26910:42:0;;;;;26977:5;-1:-1:-1::0;;;;;26970:22:0::1;;26993:45;27012:7;27021:4;;27026:1;27021:7;;;;;;26993:45;27040:7;27048:1;27040:10;;;;;;;;;;;;;;26970:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;26970:81:0::1;-1:-1:-1::0;;;;;26970:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26970:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26970:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26970:81:0;26963:89:::1;;;;27063:24;27069:7;27078:4;;27063:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27084:2:0;;-1:-1:-1;27063:5:0::1;::::0;-1:-1:-1;;27063:24:0:i:1;33305:182::-:0;33402:12;33434:45;33451:7;33460:8;33470;33434:16;:45::i;20009:829::-;20263:12;20277;20244:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;20302:12:::1;20317:43;20336:7;20345:6;20353;20317:18;:43::i;:::-;20371:56;::::0;;-1:-1:-1;;;20371:56:0;;20399:10:::1;20371:56;::::0;::::1;::::0;-1:-1:-1;;;;;20371:27:0;::::1;:56:::0;;;;;;;;;;;;;;20302:58;;-1:-1:-1;20371:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20371:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20371:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20371:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20495:23:0::1;::::0;;;;;-1:-1:-1;;;;;20495:23:0;;::::1;;::::0;::::1;::::0;;;20465:12:::1;::::0;;;20495:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;20465:12;20495:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20495:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20495:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20495:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20495:23:0;-1:-1:-1;20530:14:0::1;20549:37;20571:6:::0;20579;20549:21:::1;:37::i;:::-;20529:57;;;20628:6;-1:-1:-1::0;;;;;20618:16:0::1;:6;-1:-1:-1::0;;;;;20618:16:0::1;;:58;;20659:7;20668;20618:58;;;20638:7;20647;20618:58;20597:79:::0;;-1:-1:-1;20597:79:0;-1:-1:-1;20695:21:0;;::::1;;20687:66;;;::::0;;-1:-1:-1;;;20687:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20783:10;20772:7;:21;;20764:66;;;::::0;;-1:-1:-1;;;20764:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16591:1;;;;20009:829:::0;;;;;;;;;;;:::o;16384:41::-;;;:::o;31586:838::-;31847:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;31892:5:::1;-1:-1:-1::0;;;;;31881:16:0::1;:4;;31886:1;31881:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31881:7:0::1;-1:-1:-1::0;;;;;31881:16:0::1;;31873:52;;;::::0;;-1:-1:-1;;;31873:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31873:52:0;;;;;;;;;;;;;::::1;;31936:13;31952:9;31936:25;;31979:5;-1:-1:-1::0;;;;;31972:21:0::1;;32001:8;31972:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31972:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31972:40:0;;;;;32037:5;-1:-1:-1::0;;;;;32030:22:0::1;;32053:45;32072:7;32081:4;;32086:1;32081:7;;;;;;32053:45;32100:8;32030:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;32030:79:0::1;-1:-1:-1::0;;;;;32030:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32030:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32030:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32030:79:0;32023:87:::1;;;;32121:18;32149:4:::0;;-1:-1:-1;;32154:15:0;;32149:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32149:21:0::1;-1:-1:-1::0;;;;;32142:39:0::1;;32182:2;32142:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32142:43:0::1;-1:-1:-1::0;;;;;32142:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32142:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32142:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32142:43:0;32196:44:::1;::::0;;32142:43:::1;32196:44:::0;;::::1;::::0;;;;;;;;;;;32142:43;;-1:-1:-1;32196:44:0::1;::::0;;;32231:4;;;;;;32196:44;::::1;::::0;32231:4;;32196:44;32231:4;32196:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32237:2:0;;-1:-1:-1;32196:34:0::1;::::0;-1:-1:-1;;32196:44:0:i:1;:::-;32339:12:::0;32273:62:::1;32321:13:::0;32280:4;;-1:-1:-1;;32285:15:0;;32280:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32280:21:0::1;-1:-1:-1::0;;;;;32273:39:0::1;;32313:2;32273:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32273:43:0::1;-1:-1:-1::0;;;;;32273:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;34022:247:0::0;34166:21;34212:49;34237:7;34246:8;34256:4;34212:24;:49::i;18255:726::-;18543:12;18557;18571:14;18524:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;18619:85:::1;18633:6;18641;18649:14;18665;18681:10;18693;18619:13;:85::i;:::-;18598:106:::0;;-1:-1:-1;18598:106:0;-1:-1:-1;18715:12:0::1;18730:43;18749:7;18758:6:::0;18766;18730:18:::1;:43::i;:::-;18715:58;;18784:66;18816:6;18824:10;18836:4;18842:7;18784:31;:66::i;:::-;18861;18893:6;18901:10;18913:4;18919:7;18861:31;:66::i;:::-;18959:4;-1:-1:-1::0;;;;;18950:19:0::1;;18970:2;18950:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;18950:23:0::1;-1:-1:-1::0;;;;;18950:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18950:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18950:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18950:23:0;18255:726;;;;-1:-1:-1;18950:23:0;;-1:-1:-1;18255:726:0;;-1:-1:-1;;;;;;;;;18255:726:0:o;18987:979::-;19242:16;19260:15;19277:14;19223:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;19332:178:::1;19360:5;19380;19400:18;19433:9;19457:14;19486:13;19332;:178::i;:::-;19304:206:::0;;-1:-1:-1;19304:206:0;-1:-1:-1;19521:12:0::1;19536:41;19555:7;19564:5:::0;19571::::1;19536:18;:41::i;:::-;19521:56;;19588:69;19620:5;19627:10;19639:4;19645:11;19588:31;:69::i;:::-;19675:5;-1:-1:-1::0;;;;;19668:21:0::1;;19697:10;19668:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19668:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19668:42:0;;;;;19735:5;-1:-1:-1::0;;;;;19728:22:0::1;;19751:4;19757:10;19728:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;19728:40:0::1;-1:-1:-1::0;;;;;19728:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19728:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19728:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19728:40:0;19721:48:::1;;;;19801:4;-1:-1:-1::0;;;;;19792:19:0::1;;19812:2;19792:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19792:23:0::1;-1:-1:-1::0;;;;;19792:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19792:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19792:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19792:23:0;;-1:-1:-1;19867:9:0::1;:22:::0;-1:-1:-1;19863:95:0::1;;;19891:67;19923:10;19947;19935:9;:22;19891:31;:67::i;:::-;16591:1;18987:979:::0;;;;;;;;;;;:::o;12771:505::-;12864:14;12910:1;12899:8;:12;12891:62;;;;-1:-1:-1;;;12891:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12984:1;12972:9;:13;:31;;;;;13002:1;12989:10;:14;12972:31;12964:78;;;;-1:-1:-1;;;12964:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13053:20;13076:17;:8;13089:3;13076:17;:12;:17;:::i;:::-;13053:40;-1:-1:-1;13104:14:0;13121:31;13053:40;13141:10;13121:31;:19;:31;:::i;:::-;13104:48;-1:-1:-1;13163:16:0;13182:40;13206:15;13182:19;:9;13196:4;13182:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13163:59;;13257:11;13245:9;:23;;;;;;;12771:505;-1:-1:-1;;;;;;;12771:505:0:o;14525:526::-;14626:21;14683:1;14668:4;:11;:16;;14660:53;;;;;-1:-1:-1;;;14660:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14745:4;:11;14734:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14734:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14734:23:0;;14724:33;;14798:9;14768:7;14793:1;14776:7;:14;:18;14768:27;;;;;;;;;;;;;;;;;:39;14832:11;;-1:-1:-1;;14832:15:0;14818:226;14849:5;;14818:226;;14877:14;14893:15;14912:42;14924:7;14933:4;14942:1;14938;:5;14933:11;;;;;;;;;;;;;;14946:4;14951:1;14946:7;;;;;;;;;;;;;;14912:11;:42::i;:::-;14876:78;;;;14986:46;14998:7;15006:1;14998:10;;;;;;;;;;;;;;15010:9;15021:10;14986:11;:46::i;:::-;14969:7;14981:1;14977;:5;14969:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14856:3:0;14818:226;;;;14525:526;;;;;:::o;11306:478::-;11395:12;11421:14;11437;11455:26;11466:6;11474;11455:10;:26::i;:::-;11619:32;;;-1:-1:-1;;11619:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11619:32:0;;;;;11609:43;;;;;;11522:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11522:251:0;;;;;;;11512:262;;;;;;;;;11306:478;-1:-1:-1;;;;;11306:478:0:o;1477:398::-;1709:45;;;-1:-1:-1;;;;;1709:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1709:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1709:45:0;179:29:-1;160:49;;1698:57:0;;;;1663:12;;1677:17;;1698:10;;;;1709:45;1698:57;;;25:18:-1;1698: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;;;1698: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;;1662:93:0;;;;1774:7;:57;;;;-1:-1:-1;1786:11:0;;:16;;:44;;;1817:4;1806:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1806:24:0;1786:44;1766:101;;;;;-1:-1:-1;;;1766:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1477:398;;;;;:::o;2339:202::-;2453:12;;;2413;2453;;;;;;;;;-1:-1:-1;;;;;2431:7:0;;;2446:5;;2431:35;;;;;;;;;;;;;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;;;2431:35: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;;2412:54:0;;;2485:7;2477:56;;;;-1:-1:-1;;;2477:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2339:202;;;:::o;13939:505::-;14040:21;14097:1;14082:4;:11;:16;;14074:53;;;;;-1:-1:-1;;;14074:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14159:4;:11;14148:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14148:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14148:23:0;;14138:33;;14195:8;14182:7;14190:1;14182:10;;;;;;;;;;;;;:21;;;;;14219:6;14214:223;14245:1;14231:4;:11;:15;14227:1;:19;14214:223;;;14269:14;14285:15;14304:42;14316:7;14325:4;14330:1;14325:7;;;;;;;;;;;;;;14334:4;14339:1;14343;14339:5;14334:11;;;;;;;14304:42;14268:78;;;;14378:47;14391:7;14399:1;14391:10;;;;;;;;;;;;;;14403:9;14414:10;14378:12;:47::i;:::-;14361:7;14369:1;14373;14369:5;14361:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14248:3:0;;14214:223;;1883:448;2154:51;;;-1:-1:-1;;;;;2154:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2154:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;2143:63:0;;;;2108:12;;2122:17;;2143:10;;;;2154:51;2143:63;;;25:18:-1;2143: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;;;2143: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;;2107:99:0;;;;2225:7;:57;;;;-1:-1:-1;2237:11:0;;:16;;:44;;;2268:4;2257:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2257:24:0;2237:44;2217:106;;;;-1:-1:-1;;;2217:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1883:448;;;;;;:::o;24489:711::-;24596:6;24591:602;24622:1;24608:4;:11;:15;24604:1;:19;24591:602;;;24646:13;24661:14;24680:4;24685:1;24680:7;;;;;;;;;;;;;;24689:4;24694:1;24698;24694:5;24689:11;;;;;;;;;;;;;;24645:56;;;;24717:14;24736:36;24758:5;24765:6;24736:21;:36::i;:::-;24716:56;;;24787:14;24804:7;24812:1;24816;24812:5;24804:14;;;;;;;;;;;;;;24787:31;;24834:15;24851;24879:6;-1:-1:-1;;;;;24870:15:0;:5;-1:-1:-1;;;;;24870:15:0;;:61;;24912:9;24928:1;24870:61;;;24894:1;24898:9;24870:61;24833:98;;;;24946:10;24977:1;24963:4;:11;:15;24959:1;:19;:76;;25032:3;24959:76;;;24981:48;25000:7;25009:6;25017:4;25022:1;25026;25022:5;25017:11;;;;;;;;;;;;;;24981:18;:48::i;:::-;24946:89;;25059:42;25078:7;25087:5;25094:6;25059:18;:42::i;:::-;-1:-1:-1;;;;;25050:57:0;;25126:10;25138;25150:2;25164:1;25154:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25154:12:0;87:42:-1;143:17;;-1:-1;25154:12:0;;25050:131;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25050:131:0;-1:-1:-1;;;;;25050:131: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;25050:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25050:131:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24625:3:0;;;;;-1:-1:-1;24591:602:0;;-1:-1:-1;;;;;;;;24591:602:0;;;24489:711;;;:::o;29694:1178::-;29807:6;29802:1063;29833:1;29819:4;:11;:15;29815:1;:19;29802:1063;;;29857:13;29872:14;29891:4;29896:1;29891:7;;;;;;;;;;;;;;29900:4;29905:1;29909;29905:5;29900:11;;;;;;;;;;;;;;29856:56;;;;29928:14;29947:36;29969:5;29976:6;29947:21;:36::i;:::-;29927:56;;;29998:13;30023:42;30042:7;30051:5;30058:6;30023:18;:42::i;:::-;29998:68;;30081:16;30112:17;30200:13;30215;30233:4;-1:-1:-1;;;;;30233:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30233:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30233:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30233:18:0;;;;;;;30199:52;;;;;-1:-1:-1;30199:52:0;;-1:-1:-1;30267:17:0;;-1:-1:-1;;;;;30308:15:0;;;;;;;:61;;30350:8;30360;30308:61;;;30327:8;30337;30308:61;30266:103;;;;30398:56;30441:12;30405:5;-1:-1:-1;;;;;30398:23:0;;30430:4;30398:38;;;;;;;;;;;;;-1:-1:-1;;;;;30398:38:0;-1:-1:-1;;;;;30398:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30398:56:0;30384:70;;30484:65;30508:11;30521:12;30535:13;30484:23;:65::i;:::-;30469:80;;29802:1063;;;;30580:15;30597;30625:6;-1:-1:-1;;;;;30616:15:0;:5;-1:-1:-1;;;;;30616:15:0;;:67;;30661:12;30680:1;30616:67;;;30640:1;30644:12;30616:67;30579:104;;;;30698:10;30729:1;30715:4;:11;:15;30711:1;:19;:76;;30784:3;30711:76;;;30733:48;30752:7;30761:6;30769:4;30774:1;30778;30774:5;30769:11;;;;;;;30733:48;30840:12;;;30850:1;30840:12;;;;;;;;;;30802:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;30802:51:0;;;;;;;;;;;;;;;;;;;;;;30698:89;;-1:-1:-1;30802:9:0;;;;;;30812:10;;30824;;30698:89;;30840:12;;30802:51;;;;;;;;30840:12;;30802:51;;;;30840: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;30802:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30802:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29836:3:0;;;;;-1:-1:-1;29802:1063:0;;-1:-1:-1;;;;;;;;;;29802:1063:0;10340:129;10424:5;;;10419:16;;;;10411:50;;;;;-1:-1:-1;;;10411:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13397:460;13490:13;13536:1;13524:9;:13;13516:64;;;;-1:-1:-1;;;13516:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13611:1;13599:9;:13;:31;;;;;13629:1;13616:10;:14;13599:31;13591:78;;;;-1:-1:-1;;;13591:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13680:14;13697:34;13726:4;13697:24;:9;13711;13697:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13680:51;-1:-1:-1;13742:16:0;13761:34;13791:3;13761:25;:10;13776:9;13761:25;:14;:25;:::i;:34::-;13742:53;;13817:32;13847:1;13830:11;13818:9;:23;;;;;;;13817:32;:29;:32;:::i;:::-;13806:43;13397:460;-1:-1:-1;;;;;;13397:460:0:o;12340:309::-;12422:12;12465:1;12455:7;:11;12447:55;;;;;-1:-1:-1;;;12447:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12532:1;12521:8;:12;:28;;;;;12548:1;12537:8;:12;12521:28;12513:75;;;;-1:-1:-1;;;12513:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12633:8;12609:21;:7;12621:8;12609:21;:11;:21;:::i;:::-;:32;;;;;;;12340:309;-1:-1:-1;;;;12340:309:0:o;10877:337::-;10952:14;10968;11013:6;-1:-1:-1;;;;;11003:16:0;:6;-1:-1:-1;;;;;11003:16:0;;;10995:60;;;;;-1:-1:-1;;;10995:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11094:6;-1:-1:-1;;;;;11085:15:0;:6;-1:-1:-1;;;;;11085:15:0;;:53;;11123:6;11131;11085:53;;;11104:6;11112;11085:53;11066:72;;-1:-1:-1;11066:72:0;-1:-1:-1;;;;;;11157:20:0;;11149:57;;;;;-1:-1:-1;;;11149:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10877:337;;;;;:::o;16901:1348::-;17214:44;;;;;;-1:-1:-1;;;;;17214:44:0;;;;;;;;;;;;;;;;17119:12;;;;;;17226:7;17214:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;17214:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17214:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17214:44:0;-1:-1:-1;;;;;17214:58:0;;17210:138;;;17289:47;;;;;;-1:-1:-1;;;;;17289:47:0;;;;;;;;;;;;;;;;17301:7;17289:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;17289:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17289:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17289:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17210:138:0;17359:13;17374;17391:47;17414:7;17423:6;17431;17391:22;:47::i;:::-;17358:80;;;;17453:8;17465:1;17453:13;:30;;;;-1:-1:-1;17470:13:0;;17453:30;17449:793;;;17522:14;;-1:-1:-1;17538:14:0;;-1:-1:-1;17449:793:0;;;17586:19;17608:52;17625:14;17641:8;17651;17608:16;:52::i;:::-;17586:74;;17697:14;17679;:32;17675:556;;17758:10;17740:14;:28;;17732:73;;;;;-1:-1:-1;;;17732:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17846:14;;-1:-1:-1;17862:14:0;-1:-1:-1;17862:14:0;17675:556;;;17918:19;17940:52;17957:14;17973:8;17983;17940:16;:52::i;:::-;17918:74;;18036:14;18018;:32;;18011:40;;;;18096:10;18078:14;:28;;18070:73;;;;;-1:-1:-1;;;18070:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18184:14;-1:-1:-1;18200:14:0;;-1:-1:-1;17675:556:0;17449:793;;16901:1348;;;;;;;;;;;:::o;10477:142::-;10529:6;10556;;;:30;;-1:-1:-1;;10571:5:0;;;10585:1;10580;10571:5;10580:1;10566:15;;;;;:20;10556:30;10548:63;;;;;-1:-1:-1;;;10548:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10204:128;10288:5;;;10283:16;;;;10275:49;;;;;-1:-1:-1;;;10275:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11842:385;11935:13;11950;11977:14;11996:26;12007:6;12015;11996:10;:26::i;:::-;11976:46;;;12034:13;12049;12076:32;12084:7;12093:6;12101;12076:7;:32::i;:::-;-1:-1:-1;;;;;12067:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12067:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12067:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12067:56:0;;;;;;;12033:90;;;;;-1:-1:-1;12033:90:0;;-1:-1:-1;;;;;;12157:16:0;;;;;;;:62;;12200:8;12210;12157:62;;;12177:8;12187;12157:62;12134:85;;;;-1:-1:-1;11842:385:0;-1:-1:-1;;;;;;;11842:385:0:o

Swarm Source

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