Contract 0xf38a7a7ac2d745e2204c13f824c00139df831fff 3

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xeae26af2c6669128f8f0369b9858cf5c8fbf753017ef6219cafde4635198dcceSwap Exact MATIC...285433652022-05-20 9:27:4638 mins ago0x48baa0e1967df3a8329b1b402358eabc984838db IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff72 MATIC0.004222528 32
0xf194c2b53fc2bb287282da9f5c7cfb3cdc58cf26dc50a83dbbf479b6ba8a2cecSwap Exact Token...285416462022-05-20 8:25:411 hr 40 mins ago0x3e8476dd0276ecc918ff0768fa37561c25f3e3fa IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.004910432029 33.000215252
0xb34f6a7363a9f99ab5e596d92848c741de44e77c6d80cfd8412ed001b998994aSwap Exact Token...285413972022-05-20 8:16:591 hr 48 mins ago0x180d1994a0d0ce7c3f1490cf901133c2623f57cc IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.0109304 80
0x546306bf7c0e62544f9540fc7f3e2a43aa25193e66d3862d37705340db7256c4Swap Exact Token...285413342022-05-20 8:14:491 hr 51 mins ago0xdca6143e849247df9d1a32264fe5108fe31ae878 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.006884137266 58.000010674
0xfb018936f5f53ef6c2844597bc26ea5d2a1ba208166a53da4d5a5e017cddc5a0Swap Exact Token...285412652022-05-20 8:12:271 hr 53 mins ago0xe87b4ad75b1278c5ba1ed35781540e0f320d5167 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.004450135401 34.074543658
0x2941f0cf6a2af888d339d1a13a5a2fd0951d8dfa02440f02e676d5fc55113615Swap Exact Token...285412462022-05-20 8:11:451 hr 54 mins ago0x8816d6f82c988cd5bd81ca0de844d49e48e6054e IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.004244424905 35.00008168
0x62a94c91c5eee360afb168d1f818c6a294c1eacdad053367f878770884b80fe5Swap Exact Token...285411112022-05-20 8:06:511 hr 59 mins ago0x44d415eb35a52500fd7277f62c1e50273b4644af IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.005464353496 30.070016656
0x1da7844281f0c71d29d9bce88d860853483aa510ff635b27db8a3a022918e6f1Add Liquidity285404392022-05-20 7:39:452 hrs 26 mins ago0x4ed9736f883ace3ee6e11717a0396f86de29b6ab IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.005940524765 39.199999773
0x9427d4133976927ff0302bd27791bcf02e563cc2f9040d238fae83013472e2c8Swap Exact Token...285398542022-05-20 7:17:312 hrs 48 mins ago0x3e8476dd0276ecc918ff0768fa37561c25f3e3fa IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.00410251003 33.062627679
0x8d47436a12fa19cbbf0b38241b83fbbdb454db498ecc635b3e6b01b7206c78a4Swap Exact MATIC...285396882022-05-20 7:11:422 hrs 54 mins ago0x1aced5be2bd2edb556b53de46acaaa57aa8a3d67 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff65.626073061628933 MATIC0.003899293299 33.949999998
0x587a33272ee39ab4ffee82a5ff2048e2b00fa933e856e81bd7673b55a7abbb8dSwap Exact Token...285396612022-05-20 7:10:482 hrs 55 mins ago0xe59150cc54b28d55b9b1df175a3bdff10a29d1ba IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.004696597082 37.240000023
0xfff17c760dd250e0c6aa3343063932414035194bbea96a25edf0f304d1767443Swap Exact Token...285396272022-05-20 7:09:362 hrs 56 mins ago0x1aced5be2bd2edb556b53de46acaaa57aa8a3d67 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.008081462609 44.183693316
0xe059b892c3404f0778f6bea63da53a9aebc29231c5e66a02760ddef96345ee2cSwap Exact Token...285396062022-05-20 7:08:542 hrs 57 mins ago0x1aced5be2bd2edb556b53de46acaaa57aa8a3d67 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.005945564055 32.070748834
0xa5804e969adc30981d45f27fb6c470c66a45e97b5f114a91a688ca0504175239Add Liquidity285392452022-05-20 6:54:203 hrs 11 mins ago0xa469e74f4cb5da52040af68a617bbc15bae6d479 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.005244975584 33.015715328
0x609cea6e72cb408978a6dbce6cf0bf6900edbac51cd4a0fdc2c98650671dd3a3Swap Exact Token...285388502022-05-20 6:40:463 hrs 25 mins ago0xe59150cc54b28d55b9b1df175a3bdff10a29d1ba IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.005216862723 41.256002113
0xa3486ec22f2a11442fcba4ece2910415dea79fb827753095d35dc113b29c4c45Swap Exact Token...285384892022-05-20 6:28:133 hrs 37 mins ago0xb98ebcd072bda83b02d38a092fbf4e0bc6addc6f IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.004075385967 30.380000799
0x9179a88576d0e897fffa94e47d656d445c0808524539c45801a007023e997c94Add Liquidity285382482022-05-20 6:19:593 hrs 45 mins ago0x70e6185ed3b900b99d2d714a04f7580fedf6fe03 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.005017489362 32.085237003
0xe4fd0227d49f41ac965462cfd539b46a4bd51f099e5648147115d924005a10d5Add Liquidity285376862022-05-20 6:00:314 hrs 5 mins ago0xcc6a751a0e644b445984d74f176e9babf46b2a97 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.004632193292 30.070000013
0xd026c53e1f42457815377127773e0ce7066c6c59fe49293ea8d702ff3755eb63Add Liquidity285376142022-05-20 5:58:034 hrs 7 mins ago0xcc6a751a0e644b445984d74f176e9babf46b2a97 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.005822021632 38.416000002
0x41a98ebd6f4bf229addbc8ab338dda825c6f876e70e7afedc48b4f857e616351Add Liquidity285373532022-05-20 5:49:054 hrs 16 mins ago0xcc6a751a0e644b445984d74f176e9babf46b2a97 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.005187720789 34.221600012
0x27da74ba89be249c4d83b37700e29c1362861844e85e7c70b38a8459977b89f3Swap Exact Token...285362562022-05-20 5:11:194 hrs 54 mins ago0xe59150cc54b28d55b9b1df175a3bdff10a29d1ba IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.004005207963 31.673992012
0x05517d8631bb1d2071e8088cfc1d847b9fd6f6568739fbd9d7ee9f5f187e8e9cAdd Liquidity285360002022-05-20 5:02:315 hrs 3 mins ago0x7e8416ad4de6e12a807bc3a987ae53b0299c96fb IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.004884977213 31.720837236
0x3f47847d2fe3276ae852536348ffac8a63a8051328a0835e923391eec3bf6094Swap Exact Token...285354922022-05-20 4:44:435 hrs 21 mins ago0xe59150cc54b28d55b9b1df175a3bdff10a29d1ba IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.003997431623 31.693200003
0xd6492eefdbbe52dc9cf20fc9c5374cc5d394435d374874548a1d830584af65edSwap Exact Token...285352252022-05-20 4:35:295 hrs 30 mins ago0x559a064c7df1f21fd3b38449d12b1793728fca9f IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.003839988809 30.465221223
0xb1a8bf8527f2180471db6fb292abe8ce7e6f053fda2185fe1c72b821140697c3Swap Exact Token...285350492022-05-20 4:29:295 hrs 36 mins ago0x29d6bb1c67004e70a90bfd56609bca1ea1439566 IN  0xf38a7a7ac2d745e2204c13f824c00139df831fff0 MATIC0.004432544048 33.220493815
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xeae26af2c6669128f8f0369b9858cf5c8fbf753017ef6219cafde4635198dcce285433652022-05-20 9:27:4638 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token72 MATIC
0x2941f0cf6a2af888d339d1a13a5a2fd0951d8dfa02440f02e676d5fc55113615285412462022-05-20 8:11:451 hr 54 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x8816d6f82c988cd5bd81ca0de844d49e48e6054e272.321023774021917891 MATIC
0x2941f0cf6a2af888d339d1a13a5a2fd0951d8dfa02440f02e676d5fc55113615285412462022-05-20 8:11:451 hr 54 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff272.321023774021917891 MATIC
0x8d47436a12fa19cbbf0b38241b83fbbdb454db498ecc635b3e6b01b7206c78a4285396882022-05-20 7:11:422 hrs 54 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token65.626073061628933509 MATIC
0xfff17c760dd250e0c6aa3343063932414035194bbea96a25edf0f304d1767443285396272022-05-20 7:09:362 hrs 56 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x1aced5be2bd2edb556b53de46acaaa57aa8a3d6710.34826821736044711 MATIC
0xfff17c760dd250e0c6aa3343063932414035194bbea96a25edf0f304d1767443285396272022-05-20 7:09:362 hrs 56 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff10.34826821736044711 MATIC
0xe059b892c3404f0778f6bea63da53a9aebc29231c5e66a02760ddef96345ee2c285396062022-05-20 7:08:542 hrs 57 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x1aced5be2bd2edb556b53de46acaaa57aa8a3d6755.701806381459605695 MATIC
0xe059b892c3404f0778f6bea63da53a9aebc29231c5e66a02760ddef96345ee2c285396062022-05-20 7:08:542 hrs 57 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff55.701806381459605695 MATIC
0xd6492eefdbbe52dc9cf20fc9c5374cc5d394435d374874548a1d830584af65ed285352252022-05-20 4:35:295 hrs 30 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x559a064c7df1f21fd3b38449d12b1793728fca9f802.705333766321704296 MATIC
0xd6492eefdbbe52dc9cf20fc9c5374cc5d394435d374874548a1d830584af65ed285352252022-05-20 4:35:295 hrs 30 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff802.705333766321704296 MATIC
0x6774113a744b9029052014364e06036a0130194be11cac248375e7450af7181d285326862022-05-20 3:08:146 hrs 57 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token3.5 MATIC
0x71193a6afb42f70ffe3492252ee1b5e6f2180b76115031d72f4a522ff1928da7285311042022-05-20 2:13:507 hrs 52 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token77.758087076483580229 MATIC
0x9cc5f1da479227de6ca6506f2779d5c315f582b68fb54e048c3cf07495c68a47285307342022-05-20 1:58:588 hrs 6 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0xc7b531736fd4f34f058a6aadbe9b5b13d4414bb9119.34940804736804129 MATIC
0x9cc5f1da479227de6ca6506f2779d5c315f582b68fb54e048c3cf07495c68a47285307342022-05-20 1:58:588 hrs 6 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff119.34940804736804129 MATIC
0xa80bb4b6a406229ab169646ff2dbf7552e866287025ca9a3c070eab4e9e06e5a285302752022-05-20 1:43:118 hrs 22 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token15.3 MATIC
0x34457aa1f4773de5ce0c14e42d63e416106169d97a4afb5f56c7df9eced1f100285290952022-05-20 1:00:319 hrs 5 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x1cf044dd8a89babba6166566a2bcd4fa0e693da092.09128723769397705 MATIC
0x34457aa1f4773de5ce0c14e42d63e416106169d97a4afb5f56c7df9eced1f100285290952022-05-20 1:00:319 hrs 5 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff92.09128723769397705 MATIC
0x7ee565fc128c074b8b46fe62405742a41dc63b2857e2269813b4b8e0956702fd285289252022-05-20 0:54:399 hrs 11 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x1cf044dd8a89babba6166566a2bcd4fa0e693da016.44144666775820582 MATIC
0x7ee565fc128c074b8b46fe62405742a41dc63b2857e2269813b4b8e0956702fd285289252022-05-20 0:54:399 hrs 11 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff16.44144666775820582 MATIC
0xf410deffc8c5e0e6a03964902653b7419bd909e86b0b7700d44a9feaba9b5e24285286242022-05-20 0:43:479 hrs 22 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x51bb4cbab19c7f6ef65f825606c41059582e36fe92.956039182084770295 MATIC
0xf410deffc8c5e0e6a03964902653b7419bd909e86b0b7700d44a9feaba9b5e24285286242022-05-20 0:43:479 hrs 22 mins ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff92.956039182084770295 MATIC
0x137d6f3b9273220a9eeb1233a372ef870dfc4f32883fa71abc21223a4a89a89a285276322022-05-20 0:06:319 hrs 59 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token2.146257746628244566 MATIC
0x8053ae49d3043545e8d1b8c6eaf77d7fcb7ca9f94bf87da5ed1d15d1cb9e9a93285276082022-05-20 0:05:0510 hrs ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff0x2875968c02147188c68c719362d9e781a34444d72.051364318095974669 MATIC
0x8053ae49d3043545e8d1b8c6eaf77d7fcb7ca9f94bf87da5ed1d15d1cb9e9a93285276082022-05-20 0:05:0510 hrs ago Polygon: WMATIC Token 0xf38a7a7ac2d745e2204c13f824c00139df831fff2.051364318095974669 MATIC
0xec74cfa8aa7292e0041215baa53f05d532936d51c031c0a4dd0cce6ff8741fca285275042022-05-20 0:01:3310 hrs 4 mins ago 0xf38a7a7ac2d745e2204c13f824c00139df831fff Polygon: WMATIC Token14,053.647598341991813517 MATIC
[ 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 polygonscan.com on 2021-06-09
*/

// 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


pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending MATIC 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 safeTransferMATIC(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper: MATIC_TRANSFER_FAILED');
    }
}


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

pragma solidity >=0.6.2;

interface IElkRouter {
    function factory() external pure returns (address);
    function WMATIC() 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 addLiquidityMATIC(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountMATIC, 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 removeLiquidityMATIC(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountMATIC);
    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 removeLiquidityMATICWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountMATIC);
    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 swapExactMATICForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactMATIC(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForMATIC(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapMATICForExactTokens(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 removeLiquidityMATICSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) external returns (uint amountMATIC);
    function removeLiquidityMATICWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountMATIC);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactMATICForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForMATICSupportingFeeOnTransferTokens(
        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'84845e7ccb283dec564acfcd3d9287a491dec6d675705545a2ab8be22ad78f31' // 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/IWMATIC.sol

pragma solidity >=0.5.0;

interface IWMATIC {
    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 WMATIC;

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

    constructor(address _factory, address _WMATIC) public {
        factory = _factory;
        WMATIC = _WMATIC;
    }

    receive() external payable {
        assert(msg.sender == WMATIC); // only accept MATIC via fallback from the WMATIC 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 addLiquidityMATIC(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountMATIC, uint liquidity) {
        (amountToken, amountMATIC) = _addLiquidity(
            token,
            WMATIC,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountMATICMin
        );
        address pair = ElkLibrary.pairFor(factory, token, WMATIC);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWMATIC(WMATIC).deposit{value: amountMATIC}();
        assert(IWMATIC(WMATIC).transfer(pair, amountMATIC));
        liquidity = IElkPair(pair).mint(to);
        // refund dust MATIC, if any
        if (msg.value > amountMATIC) TransferHelper.safeTransferMATIC(msg.sender, msg.value - amountMATIC);
    }

    // **** 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 removeLiquidityMATIC(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountMATIC) {
        (amountToken, amountMATIC) = removeLiquidity(
            token,
            WMATIC,
            liquidity,
            amountTokenMin,
            amountMATICMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWMATIC(WMATIC).withdraw(amountMATIC);
        TransferHelper.safeTransferMATIC(to, amountMATIC);
    }
    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 removeLiquidityMATICWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountMATIC) {
        address pair = ElkLibrary.pairFor(factory, token, WMATIC);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountMATIC) = removeLiquidityMATIC(token, liquidity, amountTokenMin, amountMATICMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityMATICSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountMATIC) {
        (, amountMATIC) = removeLiquidity(
            token,
            WMATIC,
            liquidity,
            amountTokenMin,
            amountMATICMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWMATIC(WMATIC).withdraw(amountMATIC);
        TransferHelper.safeTransferMATIC(to, amountMATIC);
    }
    function removeLiquidityMATICWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountMATICMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountMATIC) {
        address pair = ElkLibrary.pairFor(factory, token, WMATIC);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountMATIC = removeLiquidityMATICSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountMATICMin, 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 swapExactMATICForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WMATIC, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWMATIC(WMATIC).deposit{value: amounts[0]}();
        assert(IWMATIC(WMATIC).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactMATIC(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] == WMATIC, '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));
        IWMATIC(WMATIC).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferMATIC(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForMATIC(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] == WMATIC, '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));
        IWMATIC(WMATIC).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferMATIC(to, amounts[amounts.length - 1]);
    }
    function swapMATICForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WMATIC, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        IWMATIC(WMATIC).deposit{value: amounts[0]}();
        assert(IWMATIC(WMATIC).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust MATIC, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferMATIC(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 swapExactMATICForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WMATIC, 'ElkRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWMATIC(WMATIC).deposit{value: amountIn}();
        assert(IWMATIC(WMATIC).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 swapExactTokensForMATICSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WMATIC, 'ElkRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WMATIC).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWMATIC(WMATIC).withdraw(amountOut);
        TransferHelper.safeTransferMATIC(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 Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WMATIC","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WMATIC","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":"amountMATICMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityMATIC","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountMATIC","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":"amountMATICMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityMATIC","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountMATIC","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":"amountMATICMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityMATICSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountMATIC","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":"amountMATICMin","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":"removeLiquidityMATICWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountMATIC","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":"amountMATICMin","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":"removeLiquidityMATICWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountMATIC","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":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactMATICForTokens","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":"swapExactMATICForTokensSupportingFeeOnTransferTokens","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":"swapExactTokensForMATIC","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":"swapExactTokensForMATICSupportingFeeOnTransferTokens","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":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapMATICForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","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":"swapTokensForExactMATIC","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"}]

60c060405234801561001057600080fd5b50604051620048e1380380620048e18339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61475c620001856000398061019f5280610d175280610e5d5280610efe5280610f7252806112b752806114cc528061170f528061174a528061197d5280611acc5280611b545280611ccf5280611d465280611e945280611f4a52806122ec5280612487528061253652806126125280612668528061269c52806127105280612b545280612ca65280612d2e5280612e8d525080610cf55280610fa452806113515280611428528061159252806115cb528061182e5280611a1c5280611b865280611e0152806121e75280612386528061264652806128ca5280612bf35280612d605280612e6b5280612f775280612fa05280613030528061332852806134ae52806139d35280613a09528061405a528061412152806141a1525061475c6000f3fe60806040526004361061018f5760003560e01c806385f8c259116100d6578063baa2abde1161007f578063c45a015511610059578063c45a015514610bbf578063d06ca61f14610bd4578063e8e3370014610c8b576101c8565b8063baa2abde14610a69578063bb47d99314610ac6578063bdc10c3414610b4c576101c8565b8063971ac4d5116100b0578063971ac4d51461097c5780639897c7e3146109cf578063ad615dec14610a33576101c8565b806385f8c259146108165780638803dbee1461084c5780638b9352c7146108e4576101c8565b806324a8e4e8116101385780634d95cad9116101125780634d95cad9146106b55780634f22d546146106e65780635c11d7951461077e576101c8565b806324a8e4e81461054457806338ed1739146105975780633e3f54651461062f576101c8565b80631dd16b86116101695780631dd16b861461030e5780631f00ca74146103f65780632195995c146104ad576101c8565b806304959ec5146101cd578063054d50d41461025257806307df936714610288576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b5061024060048036036101408110156101f157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610ced565b60408051918252519081900360200190f35b34801561025e57600080fd5b506102406004803603606081101561027557600080fd5b5080359060208101359060400135610dfb565b6101c66004803603608081101561029e57600080fd5b813591908101906040810160208201356401000000008111156102c057600080fd5b8201836020820111156102d257600080fd5b803590602001918460208302840111640100000000831117156102f457600080fd5b91935091506001600160a01b038135169060200135610e10565b34801561031a57600080fd5b506103a6600480360360a081101561033157600080fd5b81359160208101359181019060608101604082013564010000000081111561035857600080fd5b82018360208201111561036a57600080fd5b8035906020019184602083028401116401000000008311171561038c57600080fd5b91935091506001600160a01b038135169060200135611260565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103e25781810151838201526020016103ca565b505050509050019250505060405180910390f35b34801561040257600080fd5b506103a66004803603604081101561041957600080fd5b8135919081019060408101602082013564010000000081111561043b57600080fd5b82018360208201111561044d57600080fd5b8035906020019184602083028401116401000000008311171561046f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061158b945050505050565b3480156104b957600080fd5b5061052b60048036036101608110156104d157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356115c1565b6040805192835260208301919091528051918290030190f35b34801561055057600080fd5b5061052b600480360360c081101561056757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356116bb565b3480156105a357600080fd5b506103a6600480360360a08110156105ba57600080fd5b8135916020810135918101906060810160408201356401000000008111156105e157600080fd5b8201836020820111156105f357600080fd5b8035906020019184602083028401116401000000008311171561061557600080fd5b91935091506001600160a01b0381351690602001356117dc565b6103a66004803603608081101561064557600080fd5b8135919081019060408101602082013564010000000081111561066757600080fd5b82018360208201111561067957600080fd5b8035906020019184602083028401116401000000008311171561069b57600080fd5b91935091506001600160a01b03813516906020013561192e565b3480156106c157600080fd5b506106ca611ccd565b604080516001600160a01b039092168252519081900360200190f35b3480156106f257600080fd5b506101c6600480360360a081101561070957600080fd5b81359160208101359181019060608101604082013564010000000081111561073057600080fd5b82018360208201111561074257600080fd5b8035906020019184602083028401116401000000008311171561076457600080fd5b91935091506001600160a01b038135169060200135611cf1565b34801561078a57600080fd5b506101c6600480360360a08110156107a157600080fd5b8135916020810135918101906060810160408201356401000000008111156107c857600080fd5b8201836020820111156107da57600080fd5b803590602001918460208302840111640100000000831117156107fc57600080fd5b91935091506001600160a01b038135169060200135611fd0565b34801561082257600080fd5b506102406004803603606081101561083957600080fd5b5080359060208101359060400135612188565b34801561085857600080fd5b506103a6600480360360a081101561086f57600080fd5b81359160208101359181019060608101604082013564010000000081111561089657600080fd5b8201836020820111156108a857600080fd5b803590602001918460208302840111640100000000831117156108ca57600080fd5b91935091506001600160a01b038135169060200135612195565b3480156108f057600080fd5b506103a6600480360360a081101561090757600080fd5b81359160208101359181019060608101604082013564010000000081111561092e57600080fd5b82018360208201111561094057600080fd5b8035906020019184602083028401116401000000008311171561096257600080fd5b91935091506001600160a01b038135169060200135612295565b34801561098857600080fd5b50610240600480360360c081101561099f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612434565b610a15600480360360c08110156109e557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356125bc565b60408051938452602084019290925282820152519081900360600190f35b348015610a3f57600080fd5b5061024060048036036060811015610a5657600080fd5b5080359060208101359060400135612868565b348015610a7557600080fd5b5061052b600480360360e0811015610a8c57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612875565b6103a660048036036080811015610adc57600080fd5b81359190810190604081016020820135640100000000811115610afe57600080fd5b820183602082011115610b1057600080fd5b80359060200191846020830284011164010000000083111715610b3257600080fd5b91935091506001600160a01b038135169060200135612b05565b348015610b5857600080fd5b5061052b6004803603610140811015610b7057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612e61565b348015610bcb57600080fd5b506106ca612f75565b348015610be057600080fd5b506103a660048036036040811015610bf757600080fd5b81359190810190604081016020820135640100000000811115610c1957600080fd5b820183602082011115610c2b57600080fd5b80359060200191846020830284011164010000000083111715610c4d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612f99945050505050565b348015610c9757600080fd5b50610a156004803603610100811015610caf57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612fc6565b600080610d3b7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613109565b9050600086610d4a578b610d4e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610dc457600080fd5b505af1158015610dd8573d6000803e3d6000fd5b50505050610dea8d8d8d8d8d8d612434565b9d9c50505050505050505050505050565b6000610e088484846131e1565b949350505050565b8042811015610e5b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110610e9257fe5b905060200201356001600160a01b03166001600160a01b031614610ef7576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f5757600080fd5b505af1158015610f6b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6110027f000000000000000000000000000000000000000000000000000000000000000089896000818110610fd057fe5b905060200201356001600160a01b03168a8a6001818110610fed57fe5b905060200201356001600160a01b0316613109565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b505050506040513d602081101561107c57600080fd5b505161108457fe5b60008686600019810181811061109657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d602081101561112557600080fd5b505160408051602089810282810182019093528982529293506111679290918a918a9182918501908490808284376000920191909152508992506132d1915050565b87611219828989600019810181811061117c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111e157600080fd5b505afa1580156111f5573d6000803e3d6000fd5b505050506040513d602081101561120b57600080fd5b50519063ffffffff61360e16565b10156112565760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b5050505050505050565b606081428110156112ad576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106112e757fe5b905060200201356001600160a01b03166001600160a01b03161461134c576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b6113aa7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061366692505050565b915086826001845103815181106113bd57fe5b602002602001015110156114025760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b61148b8686600081811061141257fe5b905060200201356001600160a01b0316336114717f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061145457fe5b905060200201356001600160a01b03168b8b6001818110610fed57fe5b8560008151811061147e57fe5b60200260200101516137b2565b6114ca82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613924915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061150957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b50505050611580848360018551038151811061157357fe5b6020026020010151613b5d565b509695505050505050565b60606115b87f00000000000000000000000000000000000000000000000000000000000000008484613c50565b90505b92915050565b60008060006115f17f00000000000000000000000000000000000000000000000000000000000000008f8f613109565b9050600087611600578c611604565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561167a57600080fd5b505af115801561168e573d6000803e3d6000fd5b505050506116a18f8f8f8f8f8f8f612875565b809450819550505050509b509b9950505050505050505050565b6000808242811015611709576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611738897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612875565b9093509150611748898685613d88565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156117ae57600080fd5b505af11580156117c2573d6000803e3d6000fd5b505050506117d08583613b5d565b50965096945050505050565b60608142811015611829576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6118877f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061366692505050565b9150868260018451038151811061189a57fe5b602002602001015110156118df5760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b6118ef8686600081811061141257fe5b61158082878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613924915050565b6060814281101561197b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106119b257fe5b905060200201356001600160a01b03166001600160a01b031614611a17576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611a757f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c5092505050565b91503482600081518110611a8557fe5b60200260200101511115611aca5760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611b0657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611bb27f000000000000000000000000000000000000000000000000000000000000000089896000818110610fd057fe5b84600081518110611bbf57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611c1657600080fd5b505af1158015611c2a573d6000803e3d6000fd5b505050506040513d6020811015611c4057600080fd5b5051611c4857fe5b611c8782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613924915050565b81600081518110611c9457fe5b6020026020010151341115611cc357611cc33383600081518110611cb457fe5b60200260200101513403613b5d565b5095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b8042811015611d3c576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611d7657fe5b905060200201356001600160a01b03166001600160a01b031614611ddb576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611e3385856000818110611deb57fe5b905060200201356001600160a01b031633611e2d7f000000000000000000000000000000000000000000000000000000000000000089896000818110610fd057fe5b8a6137b2565b611e718585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506132d1915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611edb57600080fd5b505afa158015611eef573d6000803e3d6000fd5b505050506040513d6020811015611f0557600080fd5b5051905086811015611f485760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fae57600080fd5b505af1158015611fc2573d6000803e3d6000fd5b505050506112568482613b5d565b804281101561201b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b61202b85856000818110611deb57fe5b60008585600019810181811061203d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b5051604080516020888102828101820190935288825292935061210e9290918991899182918501908490808284376000920191909152508892506132d1915050565b86611219828888600019810181811061212357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111e157600080fd5b6000610e08848484613f20565b606081428110156121e2576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6122407f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c5092505050565b9150868260008151811061225057fe5b602002602001015111156118df5760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b606081428110156122e2576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061231c57fe5b905060200201356001600160a01b03166001600160a01b031614612381576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b6123df7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c5092505050565b915086826000815181106123ef57fe5b602002602001015111156114025760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b60008142811015612481576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6124b0887f00000000000000000000000000000000000000000000000000000000000000008989893089612875565b604080516370a0823160e01b8152306004820152905191945061253492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561250357600080fd5b505afa158015612517573d6000803e3d6000fd5b505050506040513d602081101561252d57600080fd5b5051613d88565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561259a57600080fd5b505af11580156125ae573d6000803e3d6000fd5b505050506115808483613b5d565b6000806000834281101561260c576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b61263a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614010565b9094509250600061268c7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613109565b905061269a8b3383886137b2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156126f557600080fd5b505af1158015612709573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561278e57600080fd5b505af11580156127a2573d6000803e3d6000fd5b505050506040513d60208110156127b857600080fd5b50516127c057fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561281857600080fd5b505af115801561282c573d6000803e3d6000fd5b505050506040513d602081101561284257600080fd5b505192503484101561285a5761285a33853403613b5d565b505096509650969350505050565b6000610e088484846142e2565b60008082428110156128c3576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b60006128f07f00000000000000000000000000000000000000000000000000000000000000008c8c613109565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561294b57600080fd5b505af115801561295f573d6000803e3d6000fd5b505050506040513d602081101561297557600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156129db57600080fd5b505af11580156129ef573d6000803e3d6000fd5b505050506040513d6040811015612a0557600080fd5b50805160209091015190925090506000612a1f8e8e6143a4565b509050806001600160a01b03168e6001600160a01b031614612a42578183612a45565b82825b90975095508a871015612a9f576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612af4576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b60608142811015612b52576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612b8957fe5b905060200201356001600160a01b03166001600160a01b031614612bee576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b612c4c7f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061366692505050565b91508682600184510381518110612c5f57fe5b60200260200101511015612ca45760405162461bcd60e51b81526004018080602001828103825260258152602001806147026025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612ce057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d1357600080fd5b505af1158015612d27573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612d8c7f000000000000000000000000000000000000000000000000000000000000000089896000818110610fd057fe5b84600081518110612d9957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612df057600080fd5b505af1158015612e04573d6000803e3d6000fd5b505050506040513d6020811015612e1a57600080fd5b5051612e2257fe5b611cc382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613924915050565b6000806000612eb17f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613109565b9050600087612ec0578c612ec4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612f3a57600080fd5b505af1158015612f4e573d6000803e3d6000fd5b50505050612f608e8e8e8e8e8e6116bb565b909f909e509c50505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606115b87f00000000000000000000000000000000000000000000000000000000000000008484613666565b60008060008342811015613016576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6130248c8c8c8c8c8c614010565b909450925060006130567f00000000000000000000000000000000000000000000000000000000000000008e8e613109565b90506130648d3383886137b2565b6130708c3383876137b2565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156130c857600080fd5b505af11580156130dc573d6000803e3d6000fd5b505050506040513d60208110156130f257600080fd5b5051949d939c50939a509198505050505050505050565b600080600061311885856143a4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f84845e7ccb283dec564acfcd3d9287a491dec6d675705545a2ab8be22ad78f31609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60008084116132215760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b6000831180156132315750600082115b61326c5760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b6000613280856103e563ffffffff61449816565b90506000613294828563ffffffff61449816565b905060006132ba836132ae886103e863ffffffff61449816565b9063ffffffff61450416565b90508082816132c557fe5b04979650505050505050565b60005b6001835103811015613609576000808483815181106132ef57fe5b602002602001015185846001018151811061330657fe5b602002602001015191509150600061331e83836143a4565b509050600061334e7f00000000000000000000000000000000000000000000000000000000000000008585613109565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561338f57600080fd5b505afa1580156133a3573d6000803e3d6000fd5b505050506040513d60608110156133b957600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a8116908916146133f65782846133f9565b83835b91509150613457828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111e157600080fd5b95506134648683836131e1565b945050505050600080856001600160a01b0316886001600160a01b03161461348e57826000613492565b6000835b91509150600060028c51038a106134a9578a6134ea565b6134ea7f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106134dd57fe5b6020026020010151613109565b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561358d578181015183820152602001613575565b50505050905090810190601f1680156135ba5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156135dc57600080fd5b505af11580156135f0573d6000803e3d6000fd5b50506001909b019a506132d49950505050505050505050565b505050565b808203828111156115bb576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b60606002825110156136bf576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156136d757600080fd5b50604051908082528060200260200182016040528015613701578160200160208202803683370190505b509050828160008151811061371257fe5b60200260200101818152505060005b60018351038110156137aa576000806137648786858151811061374057fe5b602002602001015187866001018151811061375757fe5b602002602001015161455c565b9150915061378684848151811061377757fe5b602002602001015183836131e1565b84846001018151811061379557fe5b60209081029190910101525050600101613721565b509392505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061384c5780518252601f19909201916020918201910161382d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146138ae576040519150601f19603f3d011682016040523d82523d6000602084013e6138b3565b606091505b50915091508180156138e15750805115806138e157508080602001905160208110156138de57600080fd5b50515b61391c5760405162461bcd60e51b81526004018080602001828103825260248152602001806146de6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613b575760008084838151811061394257fe5b602002602001015185846001018151811061395957fe5b602002602001015191509150600061397183836143a4565b509050600087856001018151811061398557fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146139b3578260006139b7565b6000835b91509150600060028a510388106139ce5788613a02565b613a027f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106134dd57fe5b9050613a2f7f00000000000000000000000000000000000000000000000000000000000000008888613109565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613a6c576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613add578181015183820152602001613ac5565b50505050905090810190601f168015613b0a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b2c57600080fd5b505af1158015613b40573d6000803e3d6000fd5b505060019099019850613927975050505050505050565b50505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613ba95780518252601f199092019160209182019101613b8a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613c0b576040519150601f19603f3d011682016040523d82523d6000602084013e613c10565b606091505b50509050806136095760405162461bcd60e51b81526004018080602001828103825260258152602001806146b96025913960400191505060405180910390fd5b6060600282511015613ca9576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613cc157600080fd5b50604051908082528060200260200182016040528015613ceb578160200160208202803683370190505b5090508281600183510381518110613cff57fe5b60209081029190910101528151600019015b80156137aa57600080613d4187866001860381518110613d2d57fe5b602002602001015187868151811061375757fe5b91509150613d63848481518110613d5457fe5b60200260200101518383613f20565b846001850381518110613d7257fe5b6020908102919091010152505060001901613d11565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613e335780518252601f199092019160209182019101613e14565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613e95576040519150601f19603f3d011682016040523d82523d6000602084013e613e9a565b606091505b5091509150818015613ec8575080511580613ec85750808060200190516020811015613ec557600080fd5b50515b613f19576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6000808411613f605760405162461bcd60e51b81526004018080602001828103825260268152602001806146506026913960400191505060405180910390fd5b600083118015613f705750600082115b613fab5760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b6000613fcf6103e8613fc3868863ffffffff61449816565b9063ffffffff61449816565b90506000613fe96103e5613fc3868963ffffffff61360e16565b90506140066001828481613ff957fe5b049063ffffffff61450416565b9695505050505050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b1580156140a357600080fd5b505afa1580156140b7573d6000803e3d6000fd5b505050506040513d60208110156140cd57600080fd5b50516001600160a01b0316141561419957604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561416c57600080fd5b505af1158015614180573d6000803e3d6000fd5b505050506040513d602081101561419657600080fd5b50505b6000806141c77f00000000000000000000000000000000000000000000000000000000000000008b8b61455c565b915091508160001480156141d9575080155b156141e9578793508692506142d5565b60006141f68984846142e2565b905087811161425f5785811015614254576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b8894509250826142d3565b600061426c8984866142e2565b90508981111561427857fe5b878110156142cd576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b6000808411614338576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b6000831180156143485750600082115b6143835760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b82614394858463ffffffff61449816565b8161439b57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561440e576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061442e578284614431565b83835b90925090506001600160a01b038216614491576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b60008115806144b3575050808202828282816144b057fe5b04145b6115bb576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156115bb576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061456b85856143a4565b50905060008061457c888888613109565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b457600080fd5b505afa1580156145c8573d6000803e3d6000fd5b505050506040513d60608110156145de57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461461857808261461b565b81815b9099909850965050505050505056fe456c6b4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54456c6b526f757465723a204558434553534956455f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a204d415449435f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544456c6b526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a26469706673582212208632b12cd6aab449245178ab7efbd3f783be77ff9bc18a930c0e89148144553964736f6c63430006060033000000000000000000000000e3bd06c7ac7e1ceb17bdd2e5ba83e40d1515af2a0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

000000000000000000000000e3bd06c7ac7e1ceb17bdd2e5ba83e40d1515af2a0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

-----Decoded View---------------
Arg [0] : _factory (address): 0xe3bd06c7ac7e1ceb17bdd2e5ba83e40d1515af2a
Arg [1] : _WMATIC (address): 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000e3bd06c7ac7e1ceb17bdd2e5ba83e40d1515af2a
Arg [1] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270


Deployed ByteCode Sourcemap

16293:18311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16761:10;-1:-1:-1;;;;;16775:6:0;16761:20;;16754:28;;;;16293:18311;;12:1:-1;9;2:12;23699:720:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23699:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23699:720:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33572:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33572:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33572:256:0;;;;;;;;;;;;:::i;31651:844::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31651:844:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31651:844:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31651:844: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;31651:844:0;;-1:-1:-1;31651:844:0;-1:-1:-1;;;;;;31651:844:0;;;;;;;;:::i;27968:836::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27968:836:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27968:836:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27968:836:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27968:836: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;27968:836:0;;-1:-1:-1;27968:836:0;-1:-1:-1;;;;;;27968:836: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;27968:836:0;;;;;;;;;;;;;;;;;34354:247;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34354:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34354:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34354:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34354: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;34354:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34354:247:0;;-1:-1:-1;34354:247:0;;-1:-1:-1;;;;;34354:247:0:i;21550:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21550:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21550:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20849:695;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20849:695:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20849:695:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25247:610::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25247:610:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25247:610:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25247:610:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25247: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;25247:610:0;;-1:-1:-1;25247:610:0;-1:-1:-1;;;;;;25247:610:0;;;;;;;;:::i;28810:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28810:802:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28810:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28810:802: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;28810:802:0;;-1:-1:-1;28810:802:0;-1:-1:-1;;;;;;28810:802:0;;;;;;;;:::i;16413:40::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16413:40:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16413:40:0;;;;;;;;;;;;;;32501:837;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32501:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32501:837:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32501:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32501:837: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;32501:837:0;;-1:-1:-1;32501:837:0;-1:-1:-1;;;;;;32501:837:0;;;;;;;;:::i;30943:702::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30943:702:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30943:702:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30943:702:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30943: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;30943:702:0;;-1:-1:-1;30943:702:0;-1:-1:-1;;;;;;30943:702:0;;;;;;;;:::i;33836:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33836:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33836:255:0;;;;;;;;;;;;:::i;25863:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25863:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25863:588:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25863:588:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25863: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;25863:588:0;;-1:-1:-1;25863:588:0;-1:-1:-1;;;;;;25863:588:0;;;;;;;;:::i;27148:814::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27148:814:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27148:814:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27148:814:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27148:814: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;27148:814:0;;-1:-1:-1;27148:814:0;-1:-1:-1;;;;;;27148:814:0;;;;;;;;:::i;22971:722::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22971:722:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22971:722:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18975:996::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18975:996:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;33382:182;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33382:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33382:182:0;;;;;;;;;;;;:::i;20014:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20014:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20014:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26457:685::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26457:685:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26457:685:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26457:685: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;26457:685:0;;-1:-1:-1;26457:685:0;-1:-1:-1;;;;;;26457:685:0;;;;;;;;:::i;22221:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22221:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22221:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16365:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16365:41:0;;;:::i;34099:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34099:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34099:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34099:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34099: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;34099:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34099:247:0;;-1:-1:-1;34099:247:0;;-1:-1:-1;;;;;34099:247:0:i;18243:726::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18243:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18243:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23699:720::-;24021:16;24050:12;24065:42;24084:7;24093:5;24100:6;24065:18;:42::i;:::-;24050:57;;24118:10;24131;:33;;24155:9;24131:33;;;-1:-1:-1;;24131:33:0;24175:74;;;-1:-1:-1;;;24175:74:0;;24197:10;24175:74;;;;24217:4;24175:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24118:46;;-1:-1:-1;;;;;;24175:21:0;;;;;:74;;;;;-1:-1:-1;;24175:74:0;;;;;;;;-1:-1:-1;24175:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;24175:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24175:74:0;;;;24274:137;24338:5;24345:9;24356:14;24372;24388:2;24392:8;24274:49;:137::i;:::-;24260:151;23699:720;-1:-1:-1;;;;;;;;;;;;;23699:720:0:o;33572:256::-;33725:14;33764:56;33788:8;33798:9;33809:10;33764:23;:56::i;:::-;33757:63;33572:256;-1:-1:-1;;;;33572:256:0:o;31651:844::-;31913:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;31958:6:::1;-1:-1:-1::0;;;;;31947:17:0::1;:4;;31952:1;31947:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31947:7:0::1;-1:-1:-1::0;;;;;31947:17:0::1;;31939:53;;;::::0;;-1:-1:-1;;;31939:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31939:53:0;;;;;;;;;;;;;::::1;;32003:13;32019:9;32003:25;;32047:6;-1:-1:-1::0;;;;;32039:23:0::1;;32070:8;32039:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32039:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32039:42:0;;;;;32107:6;-1:-1:-1::0;;;;;32099:24:0::1;;32124:45;32143:7;32152:4;;32157:1;32152:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32152:7:0::1;32161:4;;32166:1;32161:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32161:7:0::1;32124:18;:45::i;:::-;32171:8;32099:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;32099:81:0::1;-1:-1:-1::0;;;;;32099:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32099:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32099:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32099:81:0;32092:89:::1;;;;32192:18;32220:4:::0;;-1:-1:-1;;32225:15:0;;32220:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32220:21:0::1;-1:-1:-1::0;;;;;32213:39:0::1;;32253:2;32213:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32213:43:0::1;-1:-1:-1::0;;;;;32213:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32213:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32213:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32213:43:0;32267:44:::1;::::0;;32213:43:::1;32267:44:::0;;::::1;::::0;;;;;;;;;;;32213:43;;-1:-1:-1;32267:44:0::1;::::0;;;32302:4;;;;;;32267:44;::::1;::::0;32302:4;;32267:44;32302:4;32267:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32308:2:0;;-1:-1:-1;32267:34:0::1;::::0;-1:-1:-1;;32267:44:0:i:1;:::-;32410:12:::0;32344:62:::1;32392:13:::0;32351:4;;-1:-1:-1;;32356:15:0;;32351:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32351:21:0::1;-1:-1:-1::0;;;;;32344:39:0::1;;32384:2;32344:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32344:43:0::1;-1:-1:-1::0;;;;;32344:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32344:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32344:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32344:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;32322:165;;;;-1:-1:-1::0;;;32322:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16573:1;;31651:844:::0;;;;;;:::o;27968:836::-;28184:21;28156:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28256:6:0::1;28231:31;:4:::0;;-1:-1:-1;;28236:15:0;;28231:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28231:21:0::1;-1:-1:-1::0;;;;;28231:31:0::1;;28223:67;;;::::0;;-1:-1:-1;;;28223:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28223:67:0;;;;;;;;;;;;;::::1;;28311:49;28336:7;28345:8;28355:4;;28311:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28311:24:0::1;::::0;-1:-1:-1;;;28311:49:0:i:1;:::-;28301:59;;28410:12;28379:7;28404:1;28387:7;:14;:18;28379:27;;;;;;;;;;;;;;:43;;28371:93;;;;-1:-1:-1::0;;;28371:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28475:135;28521:4;;28526:1;28521:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28521:7:0::1;28530:10;28542:45;28561:7;28570:4;;28575:1;28570:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28570:7:0::1;28579:4;;28584:1;28579:7;;;;;;28542:45;28589:7;28597:1;28589:10;;;;;;;;;;;;;;28475:31;:135::i;:::-;28621:35;28627:7;28636:4;;28621:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28650:4:0::1;::::0;-1:-1:-1;28621:5:0::1;::::0;-1:-1:-1;;28621:35:0:i:1;:::-;28675:6;-1:-1:-1::0;;;;;28667:24:0::1;;28692:7;28717:1;28700:7;:14;:18;28692:27;;;;;;;;;;;;;;28667:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28667:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28667:53:0;;;;28731:65;28764:2;28768:7;28793:1;28776:7;:14;:18;28768:27;;;;;;;;;;;;;;28731:32;:65::i;:::-;27968:836:::0;;;;;;;;;:::o;34354:247::-;34498:21;34544:49;34568:7;34577:9;34588:4;34544:23;:49::i;:::-;34537:56;;34354:247;;;;;:::o;21550:665::-;21856:12;21870;21895;21910:43;21929:7;21938:6;21946;21910:18;:43::i;:::-;21895:58;;21964:10;21977;:33;;22001:9;21977:33;;;-1:-1:-1;;21977:33:0;22021:74;;;-1:-1:-1;;;22021:74:0;;22043:10;22021:74;;;;22063:4;22021:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21964:46;;-1:-1:-1;;;;;;22021:21:0;;;;;:74;;;;;-1:-1:-1;;22021:74:0;;;;;;;;-1:-1:-1;22021:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22021:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22021:74:0;;;;22127:80;22143:6;22151;22159:9;22170:10;22182;22194:2;22198:8;22127:15;:80::i;:::-;22106:101;;;;;;;;21550:665;;;;;;;;;;;;;;;;:::o;20849:695::-;21090:16;21108;21071:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;21166:200:::1;21196:5;21216:6;21237:9;21261:14;21290;21327:4;21347:8;21166:15;:200::i;:::-;21137:229:::0;;-1:-1:-1;21137:229:0;-1:-1:-1;21377:51:0::1;21405:5:::0;21412:2;21137:229;21377:27:::1;:51::i;:::-;21447:6;-1:-1:-1::0;;;;;21439:24:0::1;;21464:11;21439:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21439:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21439:37:0;;;;21487:49;21520:2;21524:11;21487:32;:49::i;:::-;20849:695:::0;;;;;;;;;;:::o;25247:610::-;25471:21;25452:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;25515:49:::1;25540:7;25549:8;25559:4;;25515:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25515:24:0::1;::::0;-1:-1:-1;;;25515:49:0:i:1;:::-;25505:59;;25614:12;25583:7;25608:1;25591:7;:14;:18;25583:27;;;;;;;;;;;;;;:43;;25575:93;;;;-1:-1:-1::0;;;25575:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25679:135;25725:4;;25730:1;25725:7;;;;;;25679:135;25825:24;25831:7;25840:4;;25825:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25846:2:0;;-1:-1:-1;25825:5:0::1;::::0;-1:-1:-1;;25825:24:0:i:1;28810:802::-:0;29025:21;28997:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;29083:6:::1;-1:-1:-1::0;;;;;29072:17:0::1;:4;;29077:1;29072:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29072:7:0::1;-1:-1:-1::0;;;;;29072:17:0::1;;29064:53;;;::::0;;-1:-1:-1;;;29064:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29064:53:0;;;;;;;;;;;;;::::1;;29138:49;29162:7;29171:9;29182:4;;29138:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29138:23:0::1;::::0;-1:-1:-1;;;29138:49:0:i:1;:::-;29128:59;;29220:9;29206:7;29214:1;29206:10;;;;;;;;;;;;;;:23;;29198:69;;;;-1:-1:-1::0;;;29198:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29286:6;-1:-1:-1::0;;;;;29278:23:0::1;;29309:7;29317:1;29309:10;;;;;;;;;;;;;;29278:44;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29278:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29278:44:0;;;;;29348:6;-1:-1:-1::0;;;;;29340:24:0::1;;29365:45;29384:7;29393:4;;29398:1;29393:7;;;;;;29365:45;29412:7;29420:1;29412:10;;;;;;;;;;;;;;29340:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;29340:83:0::1;-1:-1:-1::0;;;;;29340:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29340:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29340:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29340:83:0;29333:91:::1;;;;29435:24;29441:7;29450:4;;29435:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29456:2:0;;-1:-1:-1;29435:5:0::1;::::0;-1:-1:-1;;29435:24:0:i:1;:::-;29524:7;29532:1;29524:10;;;;;;;;;;;;;;29512:9;:22;29508:96;;;29536:68;29569:10;29593:7;29601:1;29593:10;;;;;;;;;;;;;;29581:9;:22;29536:32;:68::i;:::-;28810:802:::0;;;;;;;;:::o;16413:40::-;;;:::o;32501:837::-;32770:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32829:6:0::1;32804:31;:4:::0;;-1:-1:-1;;32809:15:0;;32804:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32804:21:0::1;-1:-1:-1::0;;;;;32804:31:0::1;;32796:67;;;::::0;;-1:-1:-1;;;32796:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32796:67:0;;;;;;;;;;;;;::::1;;32874:133;32920:4;;32925:1;32920:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32920:7:0::1;32929:10;32941:45;32960:7;32969:4;;32974:1;32969:7;;;;;;32941:45;32988:8;32874:31;:133::i;:::-;33018:55;33053:4;;33018:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33067:4:0::1;::::0;-1:-1:-1;33018:34:0::1;::::0;-1:-1:-1;;33018:55:0:i:1;:::-;33101:39;::::0;;-1:-1:-1;;;33101:39:0;;33134:4:::1;33101:39;::::0;::::1;::::0;;;33084:14:::1;::::0;-1:-1:-1;;;;;33108:6:0::1;33101:24;::::0;::::1;::::0;:39;;;;;::::1;::::0;;;;;;;;;:24;:39;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33101:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33101:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33101:39:0;;-1:-1:-1;33159:25:0;;::::1;;33151:75;;;;-1:-1:-1::0;;;33151:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33245:6;-1:-1:-1::0;;;;;33237:24:0::1;;33262:9;33237:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33237:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33237:35:0;;;;33283:47;33316:2;33320:9;33283:32;:47::i;30943:702::-:0;31177:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;31198:133:::1;31244:4;;31249:1;31244:7;;;;;;31198:133;31342:18;31370:4:::0;;-1:-1:-1;;31375:15:0;;31370:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31370:21:0::1;-1:-1:-1::0;;;;;31363:39:0::1;;31403:2;31363:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31363:43:0::1;-1:-1:-1::0;;;;;31363:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31363:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31363:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31363:43:0;31417:44:::1;::::0;;31363:43:::1;31417:44:::0;;::::1;::::0;;;;;;;;;;;31363:43;;-1:-1:-1;31417:44:0::1;::::0;;;31452:4;;;;;;31417:44;::::1;::::0;31452:4;;31417:44;31452:4;31417:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31458:2:0;;-1:-1:-1;31417:34:0::1;::::0;-1:-1:-1;;31417:44:0:i:1;:::-;31560:12:::0;31494:62:::1;31542:13:::0;31501:4;;-1:-1:-1;;31506:15:0;;31501:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31501:21:0::1;-1:-1:-1::0;;;;;31494:39:0::1;;31534:2;31494:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31494:43:0::1;-1:-1:-1::0;;;;;31494:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;33836:255:0::0;33989:13;34027:56;34050:9;34061;34072:10;34027:22;:56::i;25863:588::-;26087:21;26068:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;26131:49:::1;26155:7;26164:9;26175:4;;26131:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26131:23:0::1;::::0;-1:-1:-1;;;26131:49:0:i:1;:::-;26121:59;;26213:11;26199:7;26207:1;26199:10;;;;;;;;;;;;;;:25;;26191:71;;;;-1:-1:-1::0;;;26191:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27148:814:::0;27364:21;27336:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27436:6:0::1;27411:31;:4:::0;;-1:-1:-1;;27416:15:0;;27411:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27411:21:0::1;-1:-1:-1::0;;;;;27411:31:0::1;;27403:67;;;::::0;;-1:-1:-1;;;27403:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27403:67:0;;;;;;;;;;;;;::::1;;27491:49;27515:7;27524:9;27535:4;;27491:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27491:23:0::1;::::0;-1:-1:-1;;;27491:49:0:i:1;:::-;27481:59;;27573:11;27559:7;27567:1;27559:10;;;;;;;;;;;;;;:25;;27551:71;;;;-1:-1:-1::0;;;27551:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22971:722:::0;23241:16;23222:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;23288:200:::1;23318:5;23338:6;23359:9;23383:14;23412;23449:4;23469:8;23288:15;:200::i;:::-;23538:38;::::0;;-1:-1:-1;;;23538:38:0;;23570:4:::1;23538:38;::::0;::::1;::::0;;;23270:218;;-1:-1:-1;23499:78:0::1;::::0;-1:-1:-1;23527:5:0;;23534:2;;-1:-1:-1;;;;;23538: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;23538:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23538:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23538:38:0;23499:27:::1;:78::i;:::-;23596:6;-1:-1:-1::0;;;;;23588:24:0::1;;23613:11;23588:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23588:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23588:37:0;;;;23636:49;23669:2;23673:11;23636:32;:49::i;18975:996::-:0;19232:16;19250;19268:14;19213:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;19324:180:::1;19352:5;19372:6;19393:18;19426:9;19450:14;19479;19324:13;:180::i;:::-;19295:209:::0;;-1:-1:-1;19295:209:0;-1:-1:-1;19515:12:0::1;19530:42;19549:7;19558:5:::0;19565:6:::1;19530:18;:42::i;:::-;19515:57;;19583:69;19615:5;19622:10;19634:4;19640:11;19583:31;:69::i;:::-;19671:6;-1:-1:-1::0;;;;;19663:23:0::1;;19694:11;19663:45;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19663:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19663:45:0;;;;;19734:6;-1:-1:-1::0;;;;;19726:24:0::1;;19751:4;19757:11;19726:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;19726:43:0::1;-1:-1:-1::0;;;;;19726:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19726:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19726:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19726:43:0;19719:51:::1;;;;19802:4;-1:-1:-1::0;;;;;19793:19:0::1;;19813:2;19793:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19793:23:0::1;-1:-1:-1::0;;;;;19793:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19793:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19793:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19793:23:0;;-1:-1:-1;19869:9:0::1;:23:::0;-1:-1:-1;19865:98:0::1;;;19894:69;19927:10;19951:11;19939:9;:23;19894:32;:69::i;:::-;16573:1;18975:996:::0;;;;;;;;;;;:::o;33382:182::-;33479:12;33511:45;33528:7;33537:8;33547;33511:16;:45::i;20014:829::-;20268:12;20282;20249:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;20307:12:::1;20322:43;20341:7;20350:6;20358;20322:18;:43::i;:::-;20376:56;::::0;;-1:-1:-1;;;20376:56:0;;20404:10:::1;20376:56;::::0;::::1;::::0;-1:-1:-1;;;;;20376:27:0;::::1;:56:::0;;;;;;;;;;;;;;20307:58;;-1:-1:-1;20376:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20376:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20376:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20376:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20500:23:0::1;::::0;;;;;-1:-1:-1;;;;;20500:23:0;;::::1;;::::0;::::1;::::0;;;20470:12:::1;::::0;;;20500:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;20470:12;20500:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20500:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20500:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20500:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20500:23:0;-1:-1:-1;20535:14:0::1;20554:37;20576:6:::0;20584;20554:21:::1;:37::i;:::-;20534:57;;;20633:6;-1:-1:-1::0;;;;;20623:16:0::1;:6;-1:-1:-1::0;;;;;20623:16:0::1;;:58;;20664:7;20673;20623:58;;;20643:7;20652;20623:58;20602:79:::0;;-1:-1:-1;20602:79:0;-1:-1:-1;20700:21:0;;::::1;;20692:66;;;::::0;;-1:-1:-1;;;20692:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20788:10;20777:7;:21;;20769:66;;;::::0;;-1:-1:-1;;;20769:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16573:1;;;;20014:829:::0;;;;;;;;;;;:::o;26457:685::-;26675:21;26647:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;26733:6:::1;-1:-1:-1::0;;;;;26722:17:0::1;:4;;26727:1;26722:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26722:7:0::1;-1:-1:-1::0;;;;;26722:17:0::1;;26714:53;;;::::0;;-1:-1:-1;;;26714:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26714:53:0;;;;;;;;;;;;;::::1;;26788:50;26813:7;26822:9;26833:4;;26788:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26788:24:0::1;::::0;-1:-1:-1;;;26788:50:0:i:1;:::-;26778:60;;26888:12;26857:7;26882:1;26865:7;:14;:18;26857:27;;;;;;;;;;;;;;:43;;26849:93;;;;-1:-1:-1::0;;;26849:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26961:6;-1:-1:-1::0;;;;;26953:23:0::1;;26984:7;26992:1;26984:10;;;;;;;;;;;;;;26953:44;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26953:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26953:44:0;;;;;27023:6;-1:-1:-1::0;;;;;27015:24:0::1;;27040:45;27059:7;27068:4;;27073:1;27068:7;;;;;;27040:45;27087:7;27095:1;27087:10;;;;;;;;;;;;;;27015:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;27015:83:0::1;-1:-1:-1::0;;;;;27015:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27015:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27015:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27015:83:0;27008:91:::1;;;;27110:24;27116:7;27125:4;;27110:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27131:2:0;;-1:-1:-1;27110:5:0::1;::::0;-1:-1:-1;;27110:24:0:i:1;22221:671::-:0;22514:16;22532;22561:12;22576:42;22595:7;22604:5;22611:6;22576:18;:42::i;:::-;22561:57;;22629:10;22642;:33;;22666:9;22642:33;;;-1:-1:-1;;22642:33:0;22686:74;;;-1:-1:-1;;;22686:74:0;;22708:10;22686:74;;;;22728:4;22686:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22629:46;;-1:-1:-1;;;;;;22686:21:0;;;;;:74;;;;;-1:-1:-1;;22686:74:0;;;;;;;;-1:-1:-1;22686:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22686:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22686:74:0;;;;22800:84;22821:5;22828:9;22839:14;22855;22871:2;22875:8;22800:20;:84::i;:::-;22771:113;;;;-1:-1:-1;22221:671:0;-1:-1:-1;;;;;;;;;;;;;22221:671:0:o;16365:41::-;;;:::o;34099:247::-;34243:21;34289:49;34314:7;34323:8;34333:4;34289:24;:49::i;18243:726::-;18531:12;18545;18559:14;18512:8;16524:15;16512:8;:27;;16504:58;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;-1:-1:-1;;;16504:58:0;;;;;;;;;;;;;;;18607:85:::1;18621:6;18629;18637:14;18653;18669:10;18681;18607:13;:85::i;:::-;18586:106:::0;;-1:-1:-1;18586:106:0;-1:-1:-1;18703:12:0::1;18718:43;18737:7;18746:6:::0;18754;18718:18:::1;:43::i;:::-;18703:58;;18772:66;18804:6;18812:10;18824:4;18830:7;18772:31;:66::i;:::-;18849;18881:6;18889:10;18901:4;18907:7;18849:31;:66::i;:::-;18947:4;-1:-1:-1::0;;;;;18938:19:0::1;;18958:2;18938:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;18938:23:0::1;-1:-1:-1::0;;;;;18938:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18938:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18938:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18938:23:0;18243:726;;;;-1:-1:-1;18938:23:0;;-1:-1:-1;18243:726:0;;-1:-1:-1;;;;;;;;;18243:726:0:o;11285:478::-;11374:12;11400:14;11416;11434:26;11445:6;11453;11434:10;:26::i;:::-;11598:32;;;-1:-1:-1;;11598:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11598:32:0;;;;;11588:43;;;;;;11501:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11501:251:0;;;;;;;11491:262;;;;;;;;;11285:478;-1:-1:-1;;;;;11285:478:0:o;12750:505::-;12843:14;12889:1;12878:8;:12;12870:62;;;;-1:-1:-1;;;12870:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12963:1;12951:9;:13;:31;;;;;12981:1;12968:10;:14;12951:31;12943:78;;;;-1:-1:-1;;;12943:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13032:20;13055:17;:8;13068:3;13055:17;:12;:17;:::i;:::-;13032:40;-1:-1:-1;13083:14:0;13100:31;13032:40;13120:10;13100:31;:19;:31;:::i;:::-;13083:48;-1:-1:-1;13142:16:0;13161:40;13185:15;13161:19;:9;13175:4;13161:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13142:59;;13236:11;13224:9;:23;;;;;;;12750:505;-1:-1:-1;;;;;;;12750:505:0:o;29759:1178::-;29872:6;29867:1063;29898:1;29884:4;:11;:15;29880:1;:19;29867:1063;;;29922:13;29937:14;29956:4;29961:1;29956:7;;;;;;;;;;;;;;29965:4;29970:1;29974;29970:5;29965:11;;;;;;;;;;;;;;29921:56;;;;29993:14;30012:36;30034:5;30041:6;30012:21;:36::i;:::-;29992:56;;;30063:13;30088:42;30107:7;30116:5;30123:6;30088:18;:42::i;:::-;30063:68;;30146:16;30177:17;30265:13;30280;30298:4;-1:-1:-1;;;;;30298:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30298:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30298:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30298:18:0;;;;;;;30264:52;;;;;-1:-1:-1;30264:52:0;;-1:-1:-1;30332:17:0;;-1:-1:-1;;;;;30373:15:0;;;;;;;:61;;30415:8;30425;30373:61;;;30392:8;30402;30373:61;30331:103;;;;30463:56;30506:12;30470:5;-1:-1:-1;;;;;30463:23:0;;30495:4;30463:38;;;;;;;;;;;;;-1:-1:-1;;;;;30463:38:0;-1:-1:-1;;;;;30463:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30463:56:0;30449:70;;30549:65;30573:11;30586:12;30600:13;30549:23;:65::i;:::-;30534:80;;29867:1063;;;;30645:15;30662;30690:6;-1:-1:-1;;;;;30681:15:0;:5;-1:-1:-1;;;;;30681:15:0;;:67;;30726:12;30745:1;30681:67;;;30705:1;30709:12;30681:67;30644:104;;;;30763:10;30794:1;30780:4;:11;:15;30776:1;:19;:76;;30849:3;30776:76;;;30798:48;30817:7;30826:6;30834:4;30839:1;30843;30839:5;30834:11;;;;;;;;;;;;;;30798:18;:48::i;:::-;30905:12;;;30915:1;30905:12;;;;;;;;;;30867:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;30867:51:0;;;;;;;;;;;;;;;;;;;;;;30763:89;;-1:-1:-1;30867:9:0;;;;;;30877:10;;30889;;30763:89;;30905:12;;30867:51;;;;;;;;30905:12;;30867:51;;;;30905: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;30867:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30867:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29901:3:0;;;;;-1:-1:-1;29867:1063:0;;-1:-1:-1;;;;;;;;;;29867:1063:0;;;29759:1178;;:::o;10319:129::-;10403:5;;;10398:16;;;;10390:50;;;;;-1:-1:-1;;;10390:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13918:505;14019:21;14076:1;14061:4;:11;:16;;14053:53;;;;;-1:-1:-1;;;14053:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14138:4;:11;14127:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14127:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14127:23:0;;14117:33;;14174:8;14161:7;14169:1;14161:10;;;;;;;;;;;;;:21;;;;;14198:6;14193:223;14224:1;14210:4;:11;:15;14206:1;:19;14193:223;;;14248:14;14264:15;14283:42;14295:7;14304:4;14309:1;14304:7;;;;;;;;;;;;;;14313:4;14318:1;14322;14318:5;14313:11;;;;;;;;;;;;;;14283;:42::i;:::-;14247:78;;;;14357:47;14370:7;14378:1;14370:10;;;;;;;;;;;;;;14382:9;14393:10;14357:12;:47::i;:::-;14340:7;14348:1;14352;14348:5;14340:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14227:3:0;;14193:223;;;;13918:505;;;;;:::o;1838:448::-;2109:51;;;-1:-1:-1;;;;;2109:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2109:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;2098:63:0;;;;2063:12;;2077:17;;2098:10;;;;2109:51;2098:63;;;25:18:-1;2098: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;;;2098: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;;2062:99:0;;;;2180:7;:57;;;;-1:-1:-1;2192:11:0;;:16;;:44;;;2223:4;2212:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2212:24:0;2192:44;2172:106;;;;-1:-1:-1;;;2172:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1838:448;;;;;;:::o;24530:711::-;24637:6;24632:602;24663:1;24649:4;:11;:15;24645:1;:19;24632:602;;;24687:13;24702:14;24721:4;24726:1;24721:7;;;;;;;;;;;;;;24730:4;24735:1;24739;24735:5;24730:11;;;;;;;;;;;;;;24686:56;;;;24758:14;24777:36;24799:5;24806:6;24777:21;:36::i;:::-;24757:56;;;24828:14;24845:7;24853:1;24857;24853:5;24845:14;;;;;;;;;;;;;;24828:31;;24875:15;24892;24920:6;-1:-1:-1;;;;;24911:15:0;:5;-1:-1:-1;;;;;24911:15:0;;:61;;24953:9;24969:1;24911:61;;;24935:1;24939:9;24911:61;24874:98;;;;24987:10;25018:1;25004:4;:11;:15;25000:1;:19;:76;;25073:3;25000:76;;;25022:48;25041:7;25050:6;25058:4;25063:1;25067;25063:5;25058:11;;;;;;;25022:48;24987:89;;25100:42;25119:7;25128:5;25135:6;25100:18;:42::i;:::-;-1:-1:-1;;;;;25091:57:0;;25167:10;25179;25191:2;25205:1;25195:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25195:12:0;87:42:-1;143:17;;-1:-1;25195:12:0;;25091:131;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25091:131:0;-1:-1:-1;;;;;25091: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;25091:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25091:131:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24666:3:0;;;;;-1:-1:-1;24632:602:0;;-1:-1:-1;;;;;;;;24632:602:0;;;24530:711;;;:::o;2294:204::-;2409:12;;;2369;2409;;;;;;;;;-1:-1:-1;;;;;2387:7:0;;;2402:5;;2387: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;;;2387: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;;2368:54:0;;;2441:7;2433:57;;;;-1:-1:-1;;;2433:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14504:526;14605:21;14662:1;14647:4;:11;:16;;14639:53;;;;;-1:-1:-1;;;14639:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14724:4;:11;14713:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14713:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14713:23:0;;14703:33;;14777:9;14747:7;14772:1;14755:7;:14;:18;14747:27;;;;;;;;;;;;;;;;;:39;14811:11;;-1:-1:-1;;14811:15:0;14797:226;14828:5;;14797:226;;14856:14;14872:15;14891:42;14903:7;14912:4;14921:1;14917;:5;14912:11;;;;;;;;;;;;;;14925:4;14930:1;14925:7;;;;;;;14891:42;14855:78;;;;14965:46;14977:7;14985:1;14977:10;;;;;;;;;;;;;;14989:9;15000:10;14965:11;:46::i;:::-;14948:7;14960:1;14956;:5;14948:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14835:3:0;14797:226;;1432:398;1664:45;;;-1:-1:-1;;;;;1664:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1664:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1664:45:0;179:29:-1;160:49;;1653:57:0;;;;1618:12;;1632:17;;1653:10;;;;1664:45;1653:57;;;25:18:-1;1653: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;;;1653: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;;1617:93:0;;;;1729:7;:57;;;;-1:-1:-1;1741:11:0;;:16;;:44;;;1772:4;1761:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1761:24:0;1741:44;1721:101;;;;;-1:-1:-1;;;1721:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1432:398;;;;;:::o;13376:460::-;13469:13;13515:1;13503:9;:13;13495:64;;;;-1:-1:-1;;;13495:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13590:1;13578:9;:13;:31;;;;;13608:1;13595:10;:14;13578:31;13570:78;;;;-1:-1:-1;;;13570:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13659:14;13676:34;13705:4;13676:24;:9;13690;13676:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13659:51;-1:-1:-1;13721:16:0;13740:34;13770:3;13740:25;:10;13755:9;13740:25;:14;:25;:::i;:34::-;13721:53;;13796:32;13826:1;13809:11;13797:9;:23;;;;;;;13796:32;:29;:32;:::i;:::-;13785:43;13376:460;-1:-1:-1;;;;;;13376:460:0:o;16889:1348::-;17202:44;;;;;;-1:-1:-1;;;;;17202:44:0;;;;;;;;;;;;;;;;17107:12;;;;;;17214:7;17202:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;17202:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17202:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17202:44:0;-1:-1:-1;;;;;17202:58:0;;17198:138;;;17277:47;;;;;;-1:-1:-1;;;;;17277:47:0;;;;;;;;;;;;;;;;17289:7;17277:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;17277:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17277:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17277:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17198:138:0;17347:13;17362;17379:47;17402:7;17411:6;17419;17379:22;:47::i;:::-;17346:80;;;;17441:8;17453:1;17441:13;:30;;;;-1:-1:-1;17458:13:0;;17441:30;17437:793;;;17510:14;;-1:-1:-1;17526:14:0;;-1:-1:-1;17437:793:0;;;17574:19;17596:52;17613:14;17629:8;17639;17596:16;:52::i;:::-;17574:74;;17685:14;17667;:32;17663:556;;17746:10;17728:14;:28;;17720:73;;;;;-1:-1:-1;;;17720:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17834:14;;-1:-1:-1;17850:14:0;-1:-1:-1;17850:14:0;17663:556;;;17906:19;17928:52;17945:14;17961:8;17971;17928:16;:52::i;:::-;17906:74;;18024:14;18006;:32;;17999:40;;;;18084:10;18066:14;:28;;18058:73;;;;;-1:-1:-1;;;18058:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18172:14;-1:-1:-1;18188:14:0;;-1:-1:-1;17663:556:0;17437:793;;16889:1348;;;;;;;;;;;:::o;12319:309::-;12401:12;12444:1;12434:7;:11;12426:55;;;;;-1:-1:-1;;;12426:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12511:1;12500:8;:12;:28;;;;;12527:1;12516:8;:12;12500:28;12492:75;;;;-1:-1:-1;;;12492:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12612:8;12588:21;:7;12600:8;12588:21;:11;:21;:::i;:::-;:32;;;;;;;12319:309;-1:-1:-1;;;;12319:309:0:o;10856:337::-;10931:14;10947;10992:6;-1:-1:-1;;;;;10982:16:0;:6;-1:-1:-1;;;;;10982:16:0;;;10974:60;;;;;-1:-1:-1;;;10974:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11073:6;-1:-1:-1;;;;;11064:15:0;:6;-1:-1:-1;;;;;11064:15:0;;:53;;11102:6;11110;11064:53;;;11083:6;11091;11064:53;11045:72;;-1:-1:-1;11045:72:0;-1:-1:-1;;;;;;11136:20:0;;11128:57;;;;;-1:-1:-1;;;11128:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10856:337;;;;;:::o;10456:142::-;10508:6;10535;;;:30;;-1:-1:-1;;10550:5:0;;;10564:1;10559;10550:5;10559:1;10545:15;;;;;:20;10535:30;10527:63;;;;;-1:-1:-1;;;10527:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10183:128;10267:5;;;10262:16;;;;10254:49;;;;;-1:-1:-1;;;10254:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11821:385;11914:13;11929;11956:14;11975:26;11986:6;11994;11975:10;:26::i;:::-;11955:46;;;12013:13;12028;12055:32;12063:7;12072:6;12080;12055:7;:32::i;:::-;-1:-1:-1;;;;;12046:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12046:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12046:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12046:56:0;;;;;;;12012:90;;;;;-1:-1:-1;12012:90:0;;-1:-1:-1;;;;;;12136:16:0;;;;;;;:62;;12179:8;12189;12136:62;;;12156:8;12166;12136:62;12113:85;;;;-1:-1:-1;11821:385:0;-1:-1:-1;;;;;;;11821:385:0:o

Swarm Source

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