Contract 0xeadE97aFC8f79A8E5Ba85d57C4a4E629b1160C6A 12

 
Txn Hash Method
Block
From
To
Value
0x27819e3c77b3301c2d35b6b358570b85d89958bf2b26046b6a3a8fbeb291c994Swap Exact Token...1167021982024-02-27 3:06:138 hrs 5 mins ago0xa4174403bfb8f48d55c34255e6fa30330983d739 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0001319870090.006673681
0xa3e11009f132cce8629beae0bde70eab4f345953b1635c070830510e680100b8Add Liquidity ET...1166913832024-02-26 21:05:4314 hrs 6 mins ago0xfdd78b2bef963f491ece6ab51f86141083a235e4 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.055205979782179 ETH0.0001609149480.003473335
0xcd4c5e53af9068fbed3d72bf8053dafb1bacc7d0dc0adba8251c73d43657c8baSwap Exact Token...1166913692024-02-26 21:05:1514 hrs 6 mins ago0xfdd78b2bef963f491ece6ab51f86141083a235e4 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0001543616590.003353879
0x90df4bbb36378b34f3ec70305f83ebdf789710915423abec0616fb5adc79ebc0Add Liquidity ET...1166526162024-02-25 23:33:291 day 11 hrs ago0xe58585b22cc2ac4270a2b92c2d2d8c5db5a3330e IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.013525909240756 ETH0.0000769289520.003352013
0xfcfd832d7fc50a07dc2b7784cd779630966232703965c7b18f8ab3cef1db5a24Swap Exact Token...1166525562024-02-25 23:31:291 day 11 hrs ago0x8d2a0858ac216655e3056c654d42cebebcda90a4 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000718523150.003129592
0xe855fb797c60112652d6cbf3ddf6df3be5f742943d2563b70785178206045432Swap Exact Token...1166456552024-02-25 19:41:271 day 15 hrs ago0x8d2a0858ac216655e3056c654d42cebebcda90a4 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000879550250.003700727
0x4e9c1f9eafc217ec1a7f9e14cd137a66d5a7ad580e4c880ced1d0f43dac0d822Swap Exact Token...1166428752024-02-25 18:08:471 day 17 hrs ago0xfdd78b2bef963f491ece6ab51f86141083a235e4 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000911930250.002758041
0x573ac1ca5c6aedfcd03aa8b9455428fc06a44a3aef497a8058f82580c567ccb2Remove Liquidity...1166428112024-02-25 18:06:391 day 17 hrs ago0xfdd78b2bef963f491ece6ab51f86141083a235e4 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0001192204460.002876147
0x6e3999cfbd4a6f7d5e3b507468592f109654b740bc2e08993fe5391750ee2e91Remove Liquidity...1166425912024-02-25 17:59:191 day 17 hrs ago0xfdd78b2bef963f491ece6ab51f86141083a235e4 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0001422901630.002593791
0xb6013b405b7ad310bc534348df7a1d1701f12ab4144a0b469c217af32622422aSwap Exact Token...1166356162024-02-25 14:06:491 day 21 hrs ago0x321610a131df5280921d1ff04df8a13344bb53ae IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000833122880.002390118
0xe4576ee178fe40f6a519c67d602bc012a7a298a1188f1149cdd8a8ea7d44d248Swap ETH For Exa...1166313492024-02-25 11:44:351 day 23 hrs ago0x56cb67c66323486c19dcb9b0c25af376c8ede098 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.038139038409942 ETH0.0000700340740.003934409
0x7f358734fbcfd8ff90ff16818234bcae45c7664e973cea09086668b68448833eSwap Exact Token...1166303552024-02-25 11:11:272 days ago0x7a3ccacdd10a74c606e3f7d72fb68acc9a836cfc IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000605743550.002007847
0xf056950e04596055793a48ed1302b972149c946c2550590d6857e273f930f233Remove Liquidity...1166301462024-02-25 11:04:292 days 7 mins ago0x0c6fa8487aa1f89640c8c59f392503cd21a24c8e IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.000084057750.002994472
0x1e29648fde1fbfeef742291bf1195f72c6dd8754528d3366e507d2b180d23188Swap Exact Token...1166298922024-02-25 10:56:012 days 15 mins ago0x3d6991085ab1ae3926cb96f25684c40a364b6856 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000645032250.00201303
0x7c173b524b542bd7ebc1cf01a62dce440f0ca4bacdd008373d4763c92821a6d3Swap Exact ETH F...1166298682024-02-25 10:55:132 days 16 mins ago0x3d6991085ab1ae3926cb96f25684c40a364b6856 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.003 ETH0.0000635429190.001924269
0x3d4c0af1f2f4aff670266af2144c6658b70e02049e3a427dd91ee49b2699de34Swap Exact Token...1166292872024-02-25 10:35:512 days 36 mins ago0x3d6991085ab1ae3926cb96f25684c40a364b6856 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000689978650.001546784
0x8a8e30d12a378a0419af49b07ca80eeae02c94350156a90e5880a8f53aa0a55fSwap Exact Token...1166152102024-02-25 2:46:372 days 8 hrs ago0xc6b37e25b34eb349f664a23f1b3666c797410577 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000603137030.003525172
0x71c9816e1ae91f76c5ee1d406528ea3bbd09d3cf6e79a3f988c0fcafe7d8b0a1Swap ETH For Exa...1166049582024-02-24 21:04:532 days 14 hrs ago0x56cb67c66323486c19dcb9b0c25af376c8ede098 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.038774530354815 ETH0.0000786519840.004368183
0x9620923c324dd12a54c70491f2b62a2b45011931e76802ef8f276f087ab20190Swap Exact Token...1166039222024-02-24 20:30:212 days 14 hrs ago0x52e1ee958b9dccb79c1214932a983bb747933183 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000829311050.003806228
0x0bc7cb2544714ed4b3cb1c7946d9d603f49bc3abcb1d7f613e55ab07135ae4b9Remove Liquidity...1166038902024-02-24 20:29:172 days 14 hrs ago0x52e1ee958b9dccb79c1214932a983bb747933183 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0001138403220.003617923
0x203c4efc8264b3eaff5136e9f8314f9fe4143b359cecb39c6cd9275418cd7885Swap Exact Token...1165933692024-02-24 14:38:352 days 20 hrs ago0x274aafe0b41adb1f4cf9e644de779c7fcaf8de83 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000754895990.003407377
0xbc62b3580f2692ca359eb2293b2d1147895538bf578a9354c0e526d09a2436b0Swap Exact Token...1165908592024-02-24 13:14:552 days 21 hrs ago0x321610a131df5280921d1ff04df8a13344bb53ae IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000652312930.00353443
0x069d9549095fd510103aaffa26360b09f6d10cac83aa3a42656dfce877252519Swap Exact Token...1165670362024-02-24 0:00:493 days 11 hrs ago0xcb5799dd0f91473432c732c6d075dc3f2616d232 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000643941590.003915631
0x3964b0b155cca048c163456420dc2b45c7a85b221fdd06eebbc2e4d39e812957Swap Exact Token...1163671362024-02-19 8:57:298 days 2 hrs ago0x0c6fa8487aa1f89640c8c59f392503cd21a24c8e IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000851314960.005203291
0xa66e2679f926ee11067da0a6ec47915319657d5a0154f707fd2e634b51e9c7f4Remove Liquidity...1163291002024-02-18 11:49:378 days 23 hrs ago0x4e0e167e6ea55997df35794fc8266b2f92dae586 IN  0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0 ETH0.0000673247660.004452078
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x27819e3c77b3301c2d35b6b358570b85d89958bf2b26046b6a3a8fbeb291c9941167021982024-02-27 3:06:138 hrs 5 mins ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0xa4174403bfb8f48d55c34255e6fa30330983d7390.023841909513755993 ETH
0x27819e3c77b3301c2d35b6b358570b85d89958bf2b26046b6a3a8fbeb291c9941167021982024-02-27 3:06:138 hrs 5 mins ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.023841909513755993 ETH
0xa3e11009f132cce8629beae0bde70eab4f345953b1635c070830510e680100b81166913832024-02-26 21:05:4314 hrs 6 mins ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6aWrapped Ether0.055205979782179932 ETH
0xcd4c5e53af9068fbed3d72bf8053dafb1bacc7d0dc0adba8251c73d43657c8ba1166913692024-02-26 21:05:1514 hrs 6 mins ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0xfdd78b2bef963f491ece6ab51f86141083a235e40.056174464605530069 ETH
0xcd4c5e53af9068fbed3d72bf8053dafb1bacc7d0dc0adba8251c73d43657c8ba1166913692024-02-26 21:05:1514 hrs 6 mins ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.056174464605530069 ETH
0x90df4bbb36378b34f3ec70305f83ebdf789710915423abec0616fb5adc79ebc01166526162024-02-25 23:33:291 day 11 hrs ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6aWrapped Ether0.013525909240756239 ETH
0xfcfd832d7fc50a07dc2b7784cd779630966232703965c7b18f8ab3cef1db5a241166525562024-02-25 23:31:291 day 11 hrs ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0x8d2a0858ac216655e3056c654d42cebebcda90a40.01954841590260183 ETH
0xfcfd832d7fc50a07dc2b7784cd779630966232703965c7b18f8ab3cef1db5a241166525562024-02-25 23:31:291 day 11 hrs ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.01954841590260183 ETH
0xe855fb797c60112652d6cbf3ddf6df3be5f742943d2563b707851782060454321166456552024-02-25 19:41:271 day 15 hrs ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0x8d2a0858ac216655e3056c654d42cebebcda90a40.045297604011361205 ETH
0xe855fb797c60112652d6cbf3ddf6df3be5f742943d2563b707851782060454321166456552024-02-25 19:41:271 day 15 hrs ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.045297604011361205 ETH
0x4e9c1f9eafc217ec1a7f9e14cd137a66d5a7ad580e4c880ced1d0f43dac0d8221166428752024-02-25 18:08:471 day 17 hrs ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0xfdd78b2bef963f491ece6ab51f86141083a235e40.077247084933588491 ETH
0x4e9c1f9eafc217ec1a7f9e14cd137a66d5a7ad580e4c880ced1d0f43dac0d8221166428752024-02-25 18:08:471 day 17 hrs ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.077247084933588491 ETH
0x573ac1ca5c6aedfcd03aa8b9455428fc06a44a3aef497a8058f82580c567ccb21166428112024-02-25 18:06:391 day 17 hrs ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0xfdd78b2bef963f491ece6ab51f86141083a235e41.014335293743918534 ETH
0x573ac1ca5c6aedfcd03aa8b9455428fc06a44a3aef497a8058f82580c567ccb21166428112024-02-25 18:06:391 day 17 hrs ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a1.014335293743918534 ETH
0xb6013b405b7ad310bc534348df7a1d1701f12ab4144a0b469c217af32622422a1166356162024-02-25 14:06:491 day 21 hrs ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0x321610a131df5280921d1ff04df8a13344bb53ae0.003563890093185107 ETH
0xb6013b405b7ad310bc534348df7a1d1701f12ab4144a0b469c217af32622422a1166356162024-02-25 14:06:491 day 21 hrs ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.003563890093185107 ETH
0xe4576ee178fe40f6a519c67d602bc012a7a298a1188f1149cdd8a8ea7d44d2481166313492024-02-25 11:44:351 day 23 hrs ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0x56cb67c66323486c19dcb9b0c25af376c8ede0980.00003810093747247 ETH
0xe4576ee178fe40f6a519c67d602bc012a7a298a1188f1149cdd8a8ea7d44d2481166313492024-02-25 11:44:351 day 23 hrs ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6aWrapped Ether0.038100937472470003 ETH
0x7f358734fbcfd8ff90ff16818234bcae45c7664e973cea09086668b68448833e1166303552024-02-25 11:11:272 days ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0x7a3ccacdd10a74c606e3f7d72fb68acc9a836cfc0.061903286843277482 ETH
0x7f358734fbcfd8ff90ff16818234bcae45c7664e973cea09086668b68448833e1166303552024-02-25 11:11:272 days ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.061903286843277482 ETH
0xf056950e04596055793a48ed1302b972149c946c2550590d6857e273f930f2331166301462024-02-25 11:04:292 days 7 mins ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0x0c6fa8487aa1f89640c8c59f392503cd21a24c8e0.062608867091254783 ETH
0xf056950e04596055793a48ed1302b972149c946c2550590d6857e273f930f2331166301462024-02-25 11:04:292 days 7 mins ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.062608867091254783 ETH
0x1e29648fde1fbfeef742291bf1195f72c6dd8754528d3366e507d2b180d231881166298922024-02-25 10:56:012 days 15 mins ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0x3d6991085ab1ae3926cb96f25684c40a364b68560.005695090609563185 ETH
0x1e29648fde1fbfeef742291bf1195f72c6dd8754528d3366e507d2b180d231881166298922024-02-25 10:56:012 days 15 mins ago Wrapped Ether 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6a0.005695090609563185 ETH
0x7c173b524b542bd7ebc1cf01a62dce440f0ca4bacdd008373d4763c92821a6d31166298682024-02-25 10:55:132 days 16 mins ago 0xeade97afc8f79a8e5ba85d57c4a4e629b1160c6aWrapped Ether0.003 ETH
[ 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 Optimistic.Etherscan.io on 2022-05-03
*/

// Sources flattened with hardhat v2.6.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 ETH 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 safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}


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

pragma solidity >=0.6.2;

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

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

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

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

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


// File contracts/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/IWETH.sol

pragma solidity >=0.5.0;

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


// File contracts/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 WETH;

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

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

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

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = ElkLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IElkPair(pair).mint(to);
        // refund dust ETH, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = 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 removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = 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 removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = ElkLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

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

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = 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 swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, '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));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, '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));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust ETH, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = 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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'ElkRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'ElkRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return 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":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b50604051620048df380380620048df8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61475a620001856000398061019f5280610d415280610d7c5280610e7a52806110a4528061143c52806115ae52806119835280611a895280611b3f5280611c145280611d665280611dee528061203a52806120bc528061216b528061223e52806122df5280612353528061289d5280612b1e5280612b745280612ba85280612c1c5280612dc35280612f125280612f9a525080610f145280610feb528061116a52806111a352806112e552806114d6528061158c52806117035280611cb35280611e205280611f8a528061238552806125e55280612822528061284b528061287b52806129ef5280612b525280612e625280612fcc52806138ce52806139115280613bf45280613d7a528061421052806142d75280614357525061475a6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610ba1578063f305d71914610c21578063fb3bdb4114610c67576101c8565b8063c45a015514610a62578063d06ca61f14610a77578063ded9382a14610b2e576101c8565b8063af2979eb116100b0578063af2979eb1461092c578063b6f9de951461097f578063baa2abde14610a05576101c8565b80638803dbee1461082d578063ad5c4648146108c5578063ad615dec146108f6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106d95780637ff36ab51461077157806385f8c259146107f7576101c8565b80634a25d94a146105365780635b0d5984146105ce5780635c11d79514610641576101c8565b80631f00ca74116101695780631f00ca74146103695780632195995c1461042057806338ed17391461049e576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ced565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610e0e565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610319600480360360a08110156102a457600080fd5b8135916020810135918101906060810160408201356401000000008111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460208302840111640100000000831117156102ff57600080fd5b91935091506001600160a01b038135169060200135610e23565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b34801561037557600080fd5b506103196004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111640100000000831117156103e257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611163945050505050565b34801561042c57600080fd5b50610220600480360361016081101561044457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611199565b3480156104aa57600080fd5b50610319600480360360a08110156104c157600080fd5b8135916020810135918101906060810160408201356401000000008111156104e857600080fd5b8201836020820111156104fa57600080fd5b8035906020019184602083028401116401000000008311171561051c57600080fd5b91935091506001600160a01b038135169060200135611293565b34801561054257600080fd5b50610319600480360360a081101561055957600080fd5b81359160208101359181019060608101604082013564010000000081111561058057600080fd5b82018360208201111561059257600080fd5b803590602001918460208302840111640100000000831117156105b457600080fd5b91935091506001600160a01b0381351690602001356113e5565b3480156105da57600080fd5b5061026f60048036036101408110156105f257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611584565b34801561064d57600080fd5b506101c6600480360360a081101561066457600080fd5b81359160208101359181019060608101604082013564010000000081111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460208302840111640100000000831117156106bf57600080fd5b91935091506001600160a01b038135169060200135611692565b3480156106e557600080fd5b506101c6600480360360a08110156106fc57600080fd5b81359160208101359181019060608101604082013564010000000081111561072357600080fd5b82018360208201111561073557600080fd5b8035906020019184602083028401116401000000008311171561075757600080fd5b91935091506001600160a01b03813516906020013561192e565b6103196004803603608081101561078757600080fd5b813591908101906040810160208201356401000000008111156107a957600080fd5b8201836020820111156107bb57600080fd5b803590602001918460208302840111640100000000831117156107dd57600080fd5b91935091506001600160a01b038135169060200135611bc5565b34801561080357600080fd5b5061026f6004803603606081101561081a57600080fd5b5080359060208101359060400135611f2b565b34801561083957600080fd5b50610319600480360360a081101561085057600080fd5b81359160208101359181019060608101604082013564010000000081111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460208302840111640100000000831117156108ab57600080fd5b91935091506001600160a01b038135169060200135611f38565b3480156108d157600080fd5b506108da612038565b604080516001600160a01b039092168252519081900360200190f35b34801561090257600080fd5b5061026f6004803603606081101561091957600080fd5b508035906020810135906040013561205c565b34801561093857600080fd5b5061026f600480360360c081101561094f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612069565b6101c66004803603608081101561099557600080fd5b813591908101906040810160208201356401000000008111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460208302840111640100000000831117156109eb57600080fd5b91935091506001600160a01b0381351690602001356121f1565b348015610a1157600080fd5b50610220600480360360e0811015610a2857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612590565b348015610a6e57600080fd5b506108da612820565b348015610a8357600080fd5b5061031960048036036040811015610a9a57600080fd5b81359190810190604081016020820135640100000000811115610abc57600080fd5b820183602082011115610ace57600080fd5b80359060200191846020830284011164010000000083111715610af057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612844945050505050565b348015610b3a57600080fd5b506102206004803603610140811015610b5257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612871565b348015610bad57600080fd5b50610c036004803603610100811015610bc557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612985565b60408051938452602084019290925282820152519081900360600190f35b610c03600480360360c0811015610c3757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612ac8565b61031960048036036080811015610c7d57600080fd5b81359190810190604081016020820135640100000000811115610c9f57600080fd5b820183602082011115610cb157600080fd5b80359060200191846020830284011164010000000083111715610cd357600080fd5b91935091506001600160a01b038135169060200135612d74565b6000808242811015610d3b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b610d6a897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612590565b9093509150610d7a898685613109565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50505050610e0285836132a1565b50965096945050505050565b6000610e1b848484613399565b949350505050565b60608142811015610e70576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610eaa57fe5b905060200201356001600160a01b03166001600160a01b031614610f0f576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b610f6d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061348992505050565b91508682600184510381518110610f8057fe5b60200260200101511015610fc55760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b61106386866000818110610fd557fe5b905060200201356001600160a01b0316336110497f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061101757fe5b905060200201356001600160a01b03168b8b600181811061103457fe5b905060200201356001600160a01b03166135d5565b8560008151811061105657fe5b60200260200101516136ad565b6110a28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061381f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110e157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561111f57600080fd5b505af1158015611133573d6000803e3d6000fd5b50505050611158848360018551038151811061114b57fe5b60200260200101516132a1565b509695505050505050565b60606111907f00000000000000000000000000000000000000000000000000000000000000008484613a65565b90505b92915050565b60008060006111c97f00000000000000000000000000000000000000000000000000000000000000008f8f6135d5565b90506000876111d8578c6111dc565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b505050506112798f8f8f8f8f8f8f612590565b809450819550505050509b509b9950505050505050505050565b606081428110156112e0576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b61133e7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061348992505050565b9150868260018451038151811061135157fe5b602002602001015110156113965760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b6113a686866000818110610fd557fe5b6111588287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061381f915050565b60608142811015611432576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061146c57fe5b905060200201356001600160a01b03166001600160a01b0316146114d1576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b61152f7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a6592505050565b9150868260008151811061153f57fe5b60200260200101511115610fc55760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b6000806115d27f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006135d5565b90506000866115e1578b6115e5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561165b57600080fd5b505af115801561166f573d6000803e3d6000fd5b505050506116818d8d8d8d8d8d612069565b9d9c50505050505050505050505050565b80428110156116dd576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611752858560008181106116ed57fe5b905060200201356001600160a01b03163361174c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061172f57fe5b905060200201356001600160a01b03168a8a600181811061103457fe5b8a6136ad565b60008585600019810181811061176457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117c957600080fd5b505afa1580156117dd573d6000803e3d6000fd5b505050506040513d60208110156117f357600080fd5b50516040805160208881028281018201909352888252929350611835929091899189918291850190849080828437600092019190915250889250613b9d915050565b866118e7828888600019810181811061184a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118af57600080fd5b505afa1580156118c3573d6000803e3d6000fd5b505050506040513d60208110156118d957600080fd5b50519063ffffffff613ec816565b10156119245760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b5050505050505050565b8042811015611979576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858560001981018181106119b357fe5b905060200201356001600160a01b03166001600160a01b031614611a18576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611a28858560008181106116ed57fe5b611a66858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b9d915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611ad057600080fd5b505afa158015611ae4573d6000803e3d6000fd5b505050506040513d6020811015611afa57600080fd5b5051905086811015611b3d5760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ba357600080fd5b505af1158015611bb7573d6000803e3d6000fd5b5050505061192484826132a1565b60608142811015611c12576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c4957fe5b905060200201356001600160a01b03166001600160a01b031614611cae576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611d0c7f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061348992505050565b91508682600184510381518110611d1f57fe5b60200260200101511015611d645760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611da057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e4c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061172f57fe5b84600081518110611e5957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611eb057600080fd5b505af1158015611ec4573d6000803e3d6000fd5b505050506040513d6020811015611eda57600080fd5b5051611ee257fe5b611f218287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061381f915050565b5095945050505050565b6000610e1b848484613f20565b60608142811015611f85576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611fe37f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a6592505050565b91508682600081518110611ff357fe5b602002602001015111156113965760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e1b848484614010565b600081428110156120b6576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6120e5887f00000000000000000000000000000000000000000000000000000000000000008989893089612590565b604080516370a0823160e01b8152306004820152905191945061216992508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561213857600080fd5b505afa15801561214c573d6000803e3d6000fd5b505050506040513d602081101561216257600080fd5b5051613109565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121cf57600080fd5b505af11580156121e3573d6000803e3d6000fd5b5050505061115884836132a1565b804281101561223c576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061227357fe5b905060200201356001600160a01b03166001600160a01b0316146122d8576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561233857600080fd5b505af115801561234c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123b17f00000000000000000000000000000000000000000000000000000000000000008989600081811061172f57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561240157600080fd5b505af1158015612415573d6000803e3d6000fd5b505050506040513d602081101561242b57600080fd5b505161243357fe5b60008686600019810181811061244557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156124aa57600080fd5b505afa1580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b505160408051602089810282810182019093528982529293506125169290918a918a918291850190849080828437600092019190915250899250613b9d915050565b876118e7828989600019810181811061252b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118af57600080fd5b60008082428110156125de576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b600061260b7f00000000000000000000000000000000000000000000000000000000000000008c8c6135d5565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561266657600080fd5b505af115801561267a573d6000803e3d6000fd5b505050506040513d602081101561269057600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156126f657600080fd5b505af115801561270a573d6000803e3d6000fd5b505050506040513d604081101561272057600080fd5b5080516020909101519092509050600061273a8e8e6140d2565b509050806001600160a01b03168e6001600160a01b03161461275d578183612760565b82825b90975095508a8710156127ba576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b8986101561280f576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111907f00000000000000000000000000000000000000000000000000000000000000008484613489565b60008060006128c17f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006135d5565b90506000876128d0578c6128d4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561294a57600080fd5b505af115801561295e573d6000803e3d6000fd5b505050506129708e8e8e8e8e8e610ced565b909f909e509c50505050505050505050505050565b600080600083428110156129d5576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6129e38c8c8c8c8c8c6141c6565b90945092506000612a157f00000000000000000000000000000000000000000000000000000000000000008e8e6135d5565b9050612a238d3383886136ad565b612a2f8c3383876136ad565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612a8757600080fd5b505af1158015612a9b573d6000803e3d6000fd5b505050506040513d6020811015612ab157600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612b18576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b612b468a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6141c6565b90945092506000612b987f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006135d5565b9050612ba68b3383886136ad565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c0157600080fd5b505af1158015612c15573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c9a57600080fd5b505af1158015612cae573d6000803e3d6000fd5b505050506040513d6020811015612cc457600080fd5b5051612ccc57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612d2457600080fd5b505af1158015612d38573d6000803e3d6000fd5b505050506040513d6020811015612d4e57600080fd5b5051925034841015612d6657612d66338534036132a1565b505096509650969350505050565b60608142811015612dc1576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612df857fe5b905060200201356001600160a01b03166001600160a01b031614612e5d576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b612ebb7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a6592505050565b91503482600081518110612ecb57fe5b60200260200101511115612f105760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612f4c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f7f57600080fd5b505af1158015612f93573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612ff87f00000000000000000000000000000000000000000000000000000000000000008989600081811061172f57fe5b8460008151811061300557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561305c57600080fd5b505af1158015613070573d6000803e3d6000fd5b505050506040513d602081101561308657600080fd5b505161308e57fe5b6130cd8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061381f915050565b816000815181106130da57fe5b6020026020010151341115611f2157611f2133836000815181106130fa57fe5b602002602001015134036132a1565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106131b45780518252601f199092019160209182019101613195565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613216576040519150601f19603f3d011682016040523d82523d6000602084013e61321b565b606091505b5091509150818015613249575080511580613249575080806020019051602081101561324657600080fd5b50515b61329a576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106132ed5780518252601f1990920191602091820191016132ce565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461334f576040519150601f19603f3d011682016040523d82523d6000602084013e613354565b606091505b50509050806133945760405162461bcd60e51b81526004018080602001828103825260238152602001806146b96023913960400191505060405180910390fd5b505050565b60008084116133d95760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b6000831180156133e95750600082115b6134245760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b6000613438856103e563ffffffff61449816565b9050600061344c828563ffffffff61449816565b9050600061347283613466886103e863ffffffff61449816565b9063ffffffff61450416565b905080828161347d57fe5b04979650505050505050565b60606002825110156134e2576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156134fa57600080fd5b50604051908082528060200260200182016040528015613524578160200160208202803683370190505b509050828160008151811061353557fe5b60200260200101818152505060005b60018351038110156135cd576000806135878786858151811061356357fe5b602002602001015187866001018151811061357a57fe5b602002602001015161455c565b915091506135a984848151811061359a57fe5b60200260200101518383613399565b8484600101815181106135b857fe5b60209081029190910101525050600101613544565b509392505050565b60008060006135e485856140d2565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f84845e7ccb283dec564acfcd3d9287a491dec6d675705545a2ab8be22ad78f31609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106137475780518252601f199092019160209182019101613728565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146137a9576040519150601f19603f3d011682016040523d82523d6000602084013e6137ae565b606091505b50915091508180156137dc5750805115806137dc57508080602001905160208110156137d957600080fd5b50515b6138175760405162461bcd60e51b81526004018080602001828103825260248152602001806146dc6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613a5f5760008084838151811061383d57fe5b602002602001015185846001018151811061385457fe5b602002602001015191509150600061386c83836140d2565b509050600087856001018151811061388057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146138ae578260006138b2565b6000835b91509150600060028a510388106138c9578861390a565b61390a7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106138fd57fe5b60200260200101516135d5565b90506139377f000000000000000000000000000000000000000000000000000000000000000088886135d5565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613974576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139e55781810151838201526020016139cd565b50505050905090810190601f168015613a125780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613a3457600080fd5b505af1158015613a48573d6000803e3d6000fd5b505060019099019850613822975050505050505050565b50505050565b6060600282511015613abe576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613ad657600080fd5b50604051908082528060200260200182016040528015613b00578160200160208202803683370190505b5090508281600183510381518110613b1457fe5b60209081029190910101528151600019015b80156135cd57600080613b5687866001860381518110613b4257fe5b602002602001015187868151811061357a57fe5b91509150613b78848481518110613b6957fe5b60200260200101518383613f20565b846001850381518110613b8757fe5b6020908102919091010152505060001901613b26565b60005b600183510381101561339457600080848381518110613bbb57fe5b6020026020010151858460010181518110613bd257fe5b6020026020010151915091506000613bea83836140d2565b5090506000613c1a7f000000000000000000000000000000000000000000000000000000000000000085856135d5565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613c5b57600080fd5b505afa158015613c6f573d6000803e3d6000fd5b505050506040513d6060811015613c8557600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613cc2578284613cc5565b83835b91509150613d23828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118af57600080fd5b9550613d30868383613399565b945050505050600080856001600160a01b0316886001600160a01b031614613d5a57826000613d5e565b6000835b91509150600060028c51038a10613d75578a613da9565b613da97f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106138fd57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e4c578181015183820152602001613e34565b50505050905090810190601f168015613e795780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613e9b57600080fd5b505af1158015613eaf573d6000803e3d6000fd5b50506001909b019a50613ba09950505050505050505050565b80820382811115611193576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613f605760405162461bcd60e51b81526004018080602001828103825260268152602001806146506026913960400191505060405180910390fd5b600083118015613f705750600082115b613fab5760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b6000613fcf6103e8613fc3868863ffffffff61449816565b9063ffffffff61449816565b90506000613fe96103e5613fc3868963ffffffff613ec816565b90506140066001828481613ff957fe5b049063ffffffff61450416565b9695505050505050565b6000808411614066576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b6000831180156140765750600082115b6140b15760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b826140c2858463ffffffff61449816565b816140c957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561413c576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061415c57828461415f565b83835b90925090506001600160a01b0382166141bf576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d602081101561428357600080fd5b50516001600160a01b0316141561434f57604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561432257600080fd5b505af1158015614336573d6000803e3d6000fd5b505050506040513d602081101561434c57600080fd5b50505b60008061437d7f00000000000000000000000000000000000000000000000000000000000000008b8b61455c565b9150915081600014801561438f575080155b1561439f5787935086925061448b565b60006143ac898484614010565b9050878111614415578581101561440a576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b889450925082614489565b6000614422898486614010565b90508981111561442e57fe5b87811015614483576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806144b3575050808202828282816144b057fe5b04145b611193576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611193576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061456b85856140d2565b50905060008061457c8888886135d5565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b457600080fd5b505afa1580156145c8573d6000803e3d6000fd5b505050506040513d60608110156145de57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461461857808261461b565b81815b9099909850965050505050505056fe456c6b4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54456c6b526f757465723a204558434553534956455f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544456c6b526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220df1c33761d8c5dba4c6ca8c9d1be1e8b1a4d70ee04e51964ca1283034afa20bc64736f6c63430006060033000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8460000000000000000000000004200000000000000000000000000000000000006

Deployed Bytecode

0x60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610ba1578063f305d71914610c21578063fb3bdb4114610c67576101c8565b8063c45a015514610a62578063d06ca61f14610a77578063ded9382a14610b2e576101c8565b8063af2979eb116100b0578063af2979eb1461092c578063b6f9de951461097f578063baa2abde14610a05576101c8565b80638803dbee1461082d578063ad5c4648146108c5578063ad615dec146108f6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106d95780637ff36ab51461077157806385f8c259146107f7576101c8565b80634a25d94a146105365780635b0d5984146105ce5780635c11d79514610641576101c8565b80631f00ca74116101695780631f00ca74146103695780632195995c1461042057806338ed17391461049e576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000420000000000000000000000000000000000000616146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ced565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610e0e565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610319600480360360a08110156102a457600080fd5b8135916020810135918101906060810160408201356401000000008111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460208302840111640100000000831117156102ff57600080fd5b91935091506001600160a01b038135169060200135610e23565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b34801561037557600080fd5b506103196004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111640100000000831117156103e257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611163945050505050565b34801561042c57600080fd5b50610220600480360361016081101561044457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611199565b3480156104aa57600080fd5b50610319600480360360a08110156104c157600080fd5b8135916020810135918101906060810160408201356401000000008111156104e857600080fd5b8201836020820111156104fa57600080fd5b8035906020019184602083028401116401000000008311171561051c57600080fd5b91935091506001600160a01b038135169060200135611293565b34801561054257600080fd5b50610319600480360360a081101561055957600080fd5b81359160208101359181019060608101604082013564010000000081111561058057600080fd5b82018360208201111561059257600080fd5b803590602001918460208302840111640100000000831117156105b457600080fd5b91935091506001600160a01b0381351690602001356113e5565b3480156105da57600080fd5b5061026f60048036036101408110156105f257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611584565b34801561064d57600080fd5b506101c6600480360360a081101561066457600080fd5b81359160208101359181019060608101604082013564010000000081111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460208302840111640100000000831117156106bf57600080fd5b91935091506001600160a01b038135169060200135611692565b3480156106e557600080fd5b506101c6600480360360a08110156106fc57600080fd5b81359160208101359181019060608101604082013564010000000081111561072357600080fd5b82018360208201111561073557600080fd5b8035906020019184602083028401116401000000008311171561075757600080fd5b91935091506001600160a01b03813516906020013561192e565b6103196004803603608081101561078757600080fd5b813591908101906040810160208201356401000000008111156107a957600080fd5b8201836020820111156107bb57600080fd5b803590602001918460208302840111640100000000831117156107dd57600080fd5b91935091506001600160a01b038135169060200135611bc5565b34801561080357600080fd5b5061026f6004803603606081101561081a57600080fd5b5080359060208101359060400135611f2b565b34801561083957600080fd5b50610319600480360360a081101561085057600080fd5b81359160208101359181019060608101604082013564010000000081111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460208302840111640100000000831117156108ab57600080fd5b91935091506001600160a01b038135169060200135611f38565b3480156108d157600080fd5b506108da612038565b604080516001600160a01b039092168252519081900360200190f35b34801561090257600080fd5b5061026f6004803603606081101561091957600080fd5b508035906020810135906040013561205c565b34801561093857600080fd5b5061026f600480360360c081101561094f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612069565b6101c66004803603608081101561099557600080fd5b813591908101906040810160208201356401000000008111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460208302840111640100000000831117156109eb57600080fd5b91935091506001600160a01b0381351690602001356121f1565b348015610a1157600080fd5b50610220600480360360e0811015610a2857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612590565b348015610a6e57600080fd5b506108da612820565b348015610a8357600080fd5b5061031960048036036040811015610a9a57600080fd5b81359190810190604081016020820135640100000000811115610abc57600080fd5b820183602082011115610ace57600080fd5b80359060200191846020830284011164010000000083111715610af057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612844945050505050565b348015610b3a57600080fd5b506102206004803603610140811015610b5257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612871565b348015610bad57600080fd5b50610c036004803603610100811015610bc557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612985565b60408051938452602084019290925282820152519081900360600190f35b610c03600480360360c0811015610c3757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612ac8565b61031960048036036080811015610c7d57600080fd5b81359190810190604081016020820135640100000000811115610c9f57600080fd5b820183602082011115610cb157600080fd5b80359060200191846020830284011164010000000083111715610cd357600080fd5b91935091506001600160a01b038135169060200135612d74565b6000808242811015610d3b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b610d6a897f00000000000000000000000042000000000000000000000000000000000000068a8a8a308a612590565b9093509150610d7a898685613109565b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50505050610e0285836132a1565b50965096945050505050565b6000610e1b848484613399565b949350505050565b60608142811015610e70576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000042000000000000000000000000000000000000061686866000198101818110610eaa57fe5b905060200201356001600160a01b03166001600160a01b031614610f0f576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b610f6d7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061348992505050565b91508682600184510381518110610f8057fe5b60200260200101511015610fc55760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b61106386866000818110610fd557fe5b905060200201356001600160a01b0316336110497f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468a8a600081811061101757fe5b905060200201356001600160a01b03168b8b600181811061103457fe5b905060200201356001600160a01b03166135d5565b8560008151811061105657fe5b60200260200101516136ad565b6110a28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061381f915050565b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b0316632e1a7d4d836001855103815181106110e157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561111f57600080fd5b505af1158015611133573d6000803e3d6000fd5b50505050611158848360018551038151811061114b57fe5b60200260200101516132a1565b509695505050505050565b60606111907f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468484613a65565b90505b92915050565b60008060006111c97f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468f8f6135d5565b90506000876111d8578c6111dc565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b505050506112798f8f8f8f8f8f8f612590565b809450819550505050509b509b9950505050505050505050565b606081428110156112e0576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b61133e7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061348992505050565b9150868260018451038151811061135157fe5b602002602001015110156113965760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b6113a686866000818110610fd557fe5b6111588287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061381f915050565b60608142811015611432576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000004200000000000000000000000000000000000006168686600019810181811061146c57fe5b905060200201356001600160a01b03166001600160a01b0316146114d1576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b61152f7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d84689888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a6592505050565b9150868260008151811061153f57fe5b60200260200101511115610fc55760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b6000806115d27f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468d7f00000000000000000000000042000000000000000000000000000000000000066135d5565b90506000866115e1578b6115e5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561165b57600080fd5b505af115801561166f573d6000803e3d6000fd5b505050506116818d8d8d8d8d8d612069565b9d9c50505050505050505050505050565b80428110156116dd576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611752858560008181106116ed57fe5b905060200201356001600160a01b03163361174c7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468989600081811061172f57fe5b905060200201356001600160a01b03168a8a600181811061103457fe5b8a6136ad565b60008585600019810181811061176457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117c957600080fd5b505afa1580156117dd573d6000803e3d6000fd5b505050506040513d60208110156117f357600080fd5b50516040805160208881028281018201909352888252929350611835929091899189918291850190849080828437600092019190915250889250613b9d915050565b866118e7828888600019810181811061184a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118af57600080fd5b505afa1580156118c3573d6000803e3d6000fd5b505050506040513d60208110156118d957600080fd5b50519063ffffffff613ec816565b10156119245760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b5050505050505050565b8042811015611979576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000420000000000000000000000000000000000000616858560001981018181106119b357fe5b905060200201356001600160a01b03166001600160a01b031614611a18576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611a28858560008181106116ed57fe5b611a66858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b9d915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000420000000000000000000000000000000000000616916370a0823191602480820192602092909190829003018186803b158015611ad057600080fd5b505afa158015611ae4573d6000803e3d6000fd5b505050506040513d6020811015611afa57600080fd5b5051905086811015611b3d5760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ba357600080fd5b505af1158015611bb7573d6000803e3d6000fd5b5050505061192484826132a1565b60608142811015611c12576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031686866000818110611c4957fe5b905060200201356001600160a01b03166001600160a01b031614611cae576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611d0c7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8463488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061348992505050565b91508682600184510381518110611d1f57fe5b60200260200101511015611d645760405162461bcd60e51b81526004018080602001828103825260258152602001806147006025913960400191505060405180910390fd5b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663d0e30db083600081518110611da057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b50505050507f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663a9059cbb611e4c7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468989600081811061172f57fe5b84600081518110611e5957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611eb057600080fd5b505af1158015611ec4573d6000803e3d6000fd5b505050506040513d6020811015611eda57600080fd5b5051611ee257fe5b611f218287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061381f915050565b5095945050505050565b6000610e1b848484613f20565b60608142811015611f85576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611fe37f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d84689888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a6592505050565b91508682600081518110611ff357fe5b602002602001015111156113965760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000681565b6000610e1b848484614010565b600081428110156120b6576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6120e5887f00000000000000000000000042000000000000000000000000000000000000068989893089612590565b604080516370a0823160e01b8152306004820152905191945061216992508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561213857600080fd5b505afa15801561214c573d6000803e3d6000fd5b505050506040513d602081101561216257600080fd5b5051613109565b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121cf57600080fd5b505af11580156121e3573d6000803e3d6000fd5b5050505061115884836132a1565b804281101561223c576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b03168585600081811061227357fe5b905060200201356001600160a01b03166001600160a01b0316146122d8576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b60003490507f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561233857600080fd5b505af115801561234c573d6000803e3d6000fd5b50505050507f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663a9059cbb6123b17f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468989600081811061172f57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561240157600080fd5b505af1158015612415573d6000803e3d6000fd5b505050506040513d602081101561242b57600080fd5b505161243357fe5b60008686600019810181811061244557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156124aa57600080fd5b505afa1580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b505160408051602089810282810182019093528982529293506125169290918a918a918291850190849080828437600092019190915250899250613b9d915050565b876118e7828989600019810181811061252b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118af57600080fd5b60008082428110156125de576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b600061260b7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468c8c6135d5565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561266657600080fd5b505af115801561267a573d6000803e3d6000fd5b505050506040513d602081101561269057600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156126f657600080fd5b505af115801561270a573d6000803e3d6000fd5b505050506040513d604081101561272057600080fd5b5080516020909101519092509050600061273a8e8e6140d2565b509050806001600160a01b03168e6001600160a01b03161461275d578183612760565b82825b90975095508a8710156127ba576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b8986101561280f576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d84681565b60606111907f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468484613489565b60008060006128c17f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468e7f00000000000000000000000042000000000000000000000000000000000000066135d5565b90506000876128d0578c6128d4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561294a57600080fd5b505af115801561295e573d6000803e3d6000fd5b505050506129708e8e8e8e8e8e610ced565b909f909e509c50505050505050505050505050565b600080600083428110156129d5576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6129e38c8c8c8c8c8c6141c6565b90945092506000612a157f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468e8e6135d5565b9050612a238d3383886136ad565b612a2f8c3383876136ad565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612a8757600080fd5b505af1158015612a9b573d6000803e3d6000fd5b505050506040513d6020811015612ab157600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612b18576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b612b468a7f00000000000000000000000042000000000000000000000000000000000000068b348c8c6141c6565b90945092506000612b987f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468c7f00000000000000000000000042000000000000000000000000000000000000066135d5565b9050612ba68b3383886136ad565b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c0157600080fd5b505af1158015612c15573d6000803e3d6000fd5b50505050507f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c9a57600080fd5b505af1158015612cae573d6000803e3d6000fd5b505050506040513d6020811015612cc457600080fd5b5051612ccc57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612d2457600080fd5b505af1158015612d38573d6000803e3d6000fd5b505050506040513d6020811015612d4e57600080fd5b5051925034841015612d6657612d66338534036132a1565b505096509650969350505050565b60608142811015612dc1576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031686866000818110612df857fe5b905060200201356001600160a01b03166001600160a01b031614612e5d576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b612ebb7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d84688888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a6592505050565b91503482600081518110612ecb57fe5b60200260200101511115612f105760405162461bcd60e51b81526004018080602001828103825260218152602001806146766021913960400191505060405180910390fd5b7f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663d0e30db083600081518110612f4c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f7f57600080fd5b505af1158015612f93573d6000803e3d6000fd5b50505050507f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663a9059cbb612ff87f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468989600081811061172f57fe5b8460008151811061300557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561305c57600080fd5b505af1158015613070573d6000803e3d6000fd5b505050506040513d602081101561308657600080fd5b505161308e57fe5b6130cd8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061381f915050565b816000815181106130da57fe5b6020026020010151341115611f2157611f2133836000815181106130fa57fe5b602002602001015134036132a1565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106131b45780518252601f199092019160209182019101613195565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613216576040519150601f19603f3d011682016040523d82523d6000602084013e61321b565b606091505b5091509150818015613249575080511580613249575080806020019051602081101561324657600080fd5b50515b61329a576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106132ed5780518252601f1990920191602091820191016132ce565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461334f576040519150601f19603f3d011682016040523d82523d6000602084013e613354565b606091505b50509050806133945760405162461bcd60e51b81526004018080602001828103825260238152602001806146b96023913960400191505060405180910390fd5b505050565b60008084116133d95760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b6000831180156133e95750600082115b6134245760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b6000613438856103e563ffffffff61449816565b9050600061344c828563ffffffff61449816565b9050600061347283613466886103e863ffffffff61449816565b9063ffffffff61450416565b905080828161347d57fe5b04979650505050505050565b60606002825110156134e2576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156134fa57600080fd5b50604051908082528060200260200182016040528015613524578160200160208202803683370190505b509050828160008151811061353557fe5b60200260200101818152505060005b60018351038110156135cd576000806135878786858151811061356357fe5b602002602001015187866001018151811061357a57fe5b602002602001015161455c565b915091506135a984848151811061359a57fe5b60200260200101518383613399565b8484600101815181106135b857fe5b60209081029190910101525050600101613544565b509392505050565b60008060006135e485856140d2565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f84845e7ccb283dec564acfcd3d9287a491dec6d675705545a2ab8be22ad78f31609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106137475780518252601f199092019160209182019101613728565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146137a9576040519150601f19603f3d011682016040523d82523d6000602084013e6137ae565b606091505b50915091508180156137dc5750805115806137dc57508080602001905160208110156137d957600080fd5b50515b6138175760405162461bcd60e51b81526004018080602001828103825260248152602001806146dc6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613a5f5760008084838151811061383d57fe5b602002602001015185846001018151811061385457fe5b602002602001015191509150600061386c83836140d2565b509050600087856001018151811061388057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146138ae578260006138b2565b6000835b91509150600060028a510388106138c9578861390a565b61390a7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d846878c8b600201815181106138fd57fe5b60200260200101516135d5565b90506139377f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d84688886135d5565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613974576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139e55781810151838201526020016139cd565b50505050905090810190601f168015613a125780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613a3457600080fd5b505af1158015613a48573d6000803e3d6000fd5b505060019099019850613822975050505050505050565b50505050565b6060600282511015613abe576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613ad657600080fd5b50604051908082528060200260200182016040528015613b00578160200160208202803683370190505b5090508281600183510381518110613b1457fe5b60209081029190910101528151600019015b80156135cd57600080613b5687866001860381518110613b4257fe5b602002602001015187868151811061357a57fe5b91509150613b78848481518110613b6957fe5b60200260200101518383613f20565b846001850381518110613b8757fe5b6020908102919091010152505060001901613b26565b60005b600183510381101561339457600080848381518110613bbb57fe5b6020026020010151858460010181518110613bd257fe5b6020026020010151915091506000613bea83836140d2565b5090506000613c1a7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d84685856135d5565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613c5b57600080fd5b505afa158015613c6f573d6000803e3d6000fd5b505050506040513d6060811015613c8557600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613cc2578284613cc5565b83835b91509150613d23828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118af57600080fd5b9550613d30868383613399565b945050505050600080856001600160a01b0316886001600160a01b031614613d5a57826000613d5e565b6000835b91509150600060028c51038a10613d75578a613da9565b613da97f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d846898e8d600201815181106138fd57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e4c578181015183820152602001613e34565b50505050905090810190601f168015613e795780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613e9b57600080fd5b505af1158015613eaf573d6000803e3d6000fd5b50506001909b019a50613ba09950505050505050505050565b80820382811115611193576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613f605760405162461bcd60e51b81526004018080602001828103825260268152602001806146506026913960400191505060405180910390fd5b600083118015613f705750600082115b613fab5760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b6000613fcf6103e8613fc3868863ffffffff61449816565b9063ffffffff61449816565b90506000613fe96103e5613fc3868963ffffffff613ec816565b90506140066001828481613ff957fe5b049063ffffffff61450416565b9695505050505050565b6000808411614066576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b6000831180156140765750600082115b6140b15760405162461bcd60e51b81526004018080602001828103825260228152602001806146976022913960400191505060405180910390fd5b826140c2858463ffffffff61449816565b816140c957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561413c576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061415c57828461415f565b83835b90925090506001600160a01b0382166141bf576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8469092169163e6a4390591604480820192602092909190829003018186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d602081101561428357600080fd5b50516001600160a01b0316141561434f57604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8469092169163c9c65396916044808201926020929091908290030181600087803b15801561432257600080fd5b505af1158015614336573d6000803e3d6000fd5b505050506040513d602081101561434c57600080fd5b50505b60008061437d7f000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8468b8b61455c565b9150915081600014801561438f575080155b1561439f5787935086925061448b565b60006143ac898484614010565b9050878111614415578581101561440a576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b889450925082614489565b6000614422898486614010565b90508981111561442e57fe5b87811015614483576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806144b3575050808202828282816144b057fe5b04145b611193576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611193576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061456b85856140d2565b50905060008061457c8888886135d5565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b457600080fd5b505afa1580156145c8573d6000803e3d6000fd5b505050506040513d60608110156145de57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461461857808261461b565b81815b9099909850965050505050505056fe456c6b4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54456c6b526f757465723a204558434553534956455f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544456c6b526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220df1c33761d8c5dba4c6ca8c9d1be1e8b1a4d70ee04e51964ca1283034afa20bc64736f6c63430006060033

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

000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d8460000000000000000000000004200000000000000000000000000000000000006

-----Decoded View---------------
Arg [0] : _factory (address): 0xedfad3a0F42A8920B011bb0332aDe632e552d846
Arg [1] : _WETH (address): 0x4200000000000000000000000000000000000006

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000edfad3a0f42a8920b011bb0332ade632e552d846
Arg [1] : 0000000000000000000000004200000000000000000000000000000000000006


Deployed ByteCode Sourcemap

16239:18119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16699:10;-1:-1:-1;;;;;16713:4:0;16699:18;;16692:26;;;;16239:18119;;12:1:-1;9;2:12;20747:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20747:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20747:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33326:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33326:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33326:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27772:826;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27772:826:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27772:826:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27772:826:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27772:826: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;27772:826:0;;-1:-1:-1;27772:826:0;-1:-1:-1;;;;;;27772:826: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;27772:826:0;;;;;;;;;;;;;;;;;34108:247;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34108:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34108:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34108:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34108: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;34108:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34108:247:0;;-1:-1:-1;34108:247:0;;-1:-1:-1;;;;;34108:247:0:i;21426:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21426:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21426:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25073:610::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25073:610:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25073:610:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25073:610:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25073: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;25073:610:0;;-1:-1:-1;25073:610:0;-1:-1:-1;;;;;;25073:610:0;;;;;;;;:::i;26962:804::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26962:804:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26962:804:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26962:804:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26962:804: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;26962:804:0;;-1:-1:-1;26962:804:0;-1:-1:-1;;;;;;26962:804:0;;;;;;;;:::i;23539:706::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23539:706:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23539:706:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30721:702::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30721:702:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30721:702:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30721:702:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30721: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;30721:702:0;;-1:-1:-1;30721:702:0;-1:-1:-1;;;;;;30721:702:0;;;;;;;;:::i;32267:825::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32267:825:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32267:825:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32267:825:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32267:825: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;32267:825:0;;-1:-1:-1;32267:825:0;-1:-1:-1;;;;;;32267:825:0;;;;;;;;:::i;26283:673::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26283:673:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26283:673:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26283:673: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;26283:673:0;;-1:-1:-1;26283:673:0;-1:-1:-1;;;;;;26283:673:0;;;;;;;;:::i;33590:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33590:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33590:255:0;;;;;;;;;;;;:::i;25689:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25689:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25689:588:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25689:588:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25689: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;25689:588:0;;-1:-1:-1;25689:588:0;-1:-1:-1;;;;;;25689:588:0;;;;;;;;:::i;16359:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16359:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16359:38:0;;;;;;;;;;;;;;33136:182;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33136:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33136:182:0;;;;;;;;;;;;:::i;22833:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22833:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22833:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31429:832::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31429:832:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31429:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31429:832: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;31429:832:0;;-1:-1:-1;31429:832:0;-1:-1:-1;;;;;;31429:832:0;;;;;;;;:::i;19912:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19912:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19912:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16311:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16311:41:0;;;:::i;33853:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33853:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33853:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33853:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33853: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;33853:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33853:247:0;;-1:-1:-1;33853:247:0;;-1:-1:-1;;;;;33853:247:0:i;22097:657::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22097:657:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22097:657:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18175:726::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18175:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18175:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18907:962;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18907:962:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28604:786::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28604:786:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28604:786:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28604:786: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;28604:786:0;;-1:-1:-1;28604:786:0;-1:-1:-1;;;;;;28604:786:0;;;;;;;;:::i;20747:673::-;20984:16;21002:14;20965:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;21056:196:::1;21086:5;21106:4;21125:9;21149:14;21178:12;21213:4;21233:8;21056:15;:196::i;:::-;21029:223:::0;;-1:-1:-1;21029:223:0;-1:-1:-1;21263:51:0::1;21291:5:::0;21298:2;21029:223;21263:27:::1;:51::i;:::-;21331:4;-1:-1:-1::0;;;;;21325:20:0::1;;21346:9;21325:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21325:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21325:31:0;;;;21367:45;21398:2;21402:9;21367:30;:45::i;:::-;20747:673:::0;;;;;;;;;;:::o;33326:256::-;33479:14;33518:56;33542:8;33552:9;33563:10;33518:23;:56::i;:::-;33511:63;33326:256;-1:-1:-1;;;;33326:256:0:o;27772:826::-;27986:21;27958:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28058:4:0::1;28033:29;:4:::0;;-1:-1:-1;;28038:15:0;;28033:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28033:21:0::1;-1:-1:-1::0;;;;;28033:29:0::1;;28025:65;;;::::0;;-1:-1:-1;;;28025:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28025:65:0;;;;;;;;;;;;;::::1;;28111:49;28136:7;28145:8;28155:4;;28111:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28111:24:0::1;::::0;-1:-1:-1;;;28111:49:0:i:1;:::-;28101:59;;28210:12;28179:7;28204:1;28187:7;:14;:18;28179:27;;;;;;;;;;;;;;:43;;28171:93;;;;-1:-1:-1::0;;;28171:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28275:135;28321:4;;28326:1;28321:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28321:7:0::1;28330:10;28342:45;28361:7;28370:4;;28375:1;28370:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28370:7:0::1;28379:4;;28384:1;28379:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28379:7:0::1;28342:18;:45::i;:::-;28389:7;28397:1;28389:10;;;;;;;;;;;;;;28275:31;:135::i;:::-;28421:35;28427:7;28436:4;;28421:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28450:4:0::1;::::0;-1:-1:-1;28421:5:0::1;::::0;-1:-1:-1;;28421:35:0:i:1;:::-;28473:4;-1:-1:-1::0;;;;;28467:20:0::1;;28488:7;28513:1;28496:7;:14;:18;28488:27;;;;;;;;;;;;;;28467:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28467:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28467:49:0;;;;28527:63;28558:2;28562:7;28587:1;28570:7;:14;:18;28562:27;;;;;;;;;;;;;;28527:30;:63::i;:::-;27772:826:::0;;;;;;;;;:::o;34108:247::-;34252:21;34298:49;34322:7;34331:9;34342:4;34298:23;:49::i;:::-;34291:56;;34108:247;;;;;:::o;21426:665::-;21732:12;21746;21771;21786:43;21805:7;21814:6;21822;21786:18;:43::i;:::-;21771:58;;21840:10;21853;:33;;21877:9;21853:33;;;-1:-1:-1;;21853:33:0;21897:74;;;-1:-1:-1;;;21897:74:0;;21919:10;21897:74;;;;21939:4;21897:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21840:46;;-1:-1:-1;;;;;;21897:21:0;;;;;:74;;;;;-1:-1:-1;;21897:74:0;;;;;;;;-1:-1:-1;21897:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;21897:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21897:74:0;;;;22003:80;22019:6;22027;22035:9;22046:10;22058;22070:2;22074:8;22003:15;:80::i;:::-;21982:101;;;;;;;;21426:665;;;;;;;;;;;;;;;;:::o;25073:610::-;25297:21;25278:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;25341:49:::1;25366:7;25375:8;25385:4;;25341:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25341:24:0::1;::::0;-1:-1:-1;;;25341:49:0:i:1;:::-;25331:59;;25440:12;25409:7;25434:1;25417:7;:14;:18;25409:27;;;;;;;;;;;;;;:43;;25401:93;;;;-1:-1:-1::0;;;25401:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25505:135;25551:4;;25556:1;25551:7;;;;;;25505:135;25651:24;25657:7;25666:4;;25651:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25672:2:0;;-1:-1:-1;25651:5:0::1;::::0;-1:-1:-1;;25651:24:0:i:1;26962:804::-:0;27176:21;27148:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27248:4:0::1;27223:29;:4:::0;;-1:-1:-1;;27228:15:0;;27223:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27223:21:0::1;-1:-1:-1::0;;;;;27223:29:0::1;;27215:65;;;::::0;;-1:-1:-1;;;27215:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27215:65:0;;;;;;;;;;;;;::::1;;27301:49;27325:7;27334:9;27345:4;;27301:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27301:23:0::1;::::0;-1:-1:-1;;;27301:49:0:i:1;:::-;27291:59;;27383:11;27369:7;27377:1;27369:10;;;;;;;;;;;;;;:25;;27361:71;;;;-1:-1:-1::0;;;27361:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23539:706:::0;23857:14;23884:12;23899:40;23918:7;23927:5;23934:4;23899:18;:40::i;:::-;23884:55;;23950:10;23963;:33;;23987:9;23963:33;;;-1:-1:-1;;23963:33:0;24007:74;;;-1:-1:-1;;;24007:74:0;;24029:10;24007:74;;;;24049:4;24007:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23950:46;;-1:-1:-1;;;;;;24007:21:0;;;;;:74;;;;;-1:-1:-1;;24007:74:0;;;;;;;;-1:-1:-1;24007:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;24007:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24007:74:0;;;;24104:133;24166:5;24173:9;24184:14;24200:12;24214:2;24218:8;24104:47;:133::i;:::-;24092:145;23539:706;-1:-1:-1;;;;;;;;;;;;;23539:706:0:o;30721:702::-;30955:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;30976:133:::1;31022:4;;31027:1;31022:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31022:7:0::1;31031:10;31043:45;31062:7;31071:4;;31076:1;31071:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31071:7:0::1;31080:4;;31085:1;31080:7;;;;;;31043:45;31090:8;30976:31;:133::i;:::-;31120:18;31148:4:::0;;-1:-1:-1;;31153:15:0;;31148:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31148:21:0::1;-1:-1:-1::0;;;;;31141:39:0::1;;31181:2;31141:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31141:43:0::1;-1:-1:-1::0;;;;;31141:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31141:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31141:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31141:43:0;31195:44:::1;::::0;;31141:43:::1;31195:44:::0;;::::1;::::0;;;;;;;;;;;31141:43;;-1:-1:-1;31195:44:0::1;::::0;;;31230:4;;;;;;31195:44;::::1;::::0;31230:4;;31195:44;31230:4;31195:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31236:2:0;;-1:-1:-1;31195:34:0::1;::::0;-1:-1:-1;;31195:44:0:i:1;:::-;31338:12:::0;31272:62:::1;31320:13:::0;31279:4;;-1:-1:-1;;31284:15:0;;31279:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31279:21:0::1;-1:-1:-1::0;;;;;31272:39:0::1;;31312:2;31272:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31272:43:0::1;-1:-1:-1::0;;;;;31272:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31272:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31272:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31272:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31250:165;;;;-1:-1:-1::0;;;31250:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16517:1;30721:702:::0;;;;;;;:::o;32267:825::-;32534:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32593:4:0::1;32568:29;:4:::0;;-1:-1:-1;;32573:15:0;;32568:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32568:21:0::1;-1:-1:-1::0;;;;;32568:29:0::1;;32560:65;;;::::0;;-1:-1:-1;;;32560:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32560:65:0;;;;;;;;;;;;;::::1;;32636:133;32682:4;;32687:1;32682:7;;;;;;32636:133;32780:55;32815:4;;32780:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32829:4:0::1;::::0;-1:-1:-1;32780:34:0::1;::::0;-1:-1:-1;;32780:55:0:i:1;:::-;32863:37;::::0;;-1:-1:-1;;;32863:37:0;;32894:4:::1;32863:37;::::0;::::1;::::0;;;32846:14:::1;::::0;-1:-1:-1;;;;;32870:4:0::1;32863:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32863:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32863:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32863:37:0;;-1:-1:-1;32919:25:0;;::::1;;32911:75;;;;-1:-1:-1::0;;;32911:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33003:4;-1:-1:-1::0;;;;;32997:20:0::1;;33018:9;32997:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32997:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32997:31:0;;;;33039:45;33070:2;33074:9;33039:30;:45::i;26283:673::-:0;26499:21;26471:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;26557:4:::1;-1:-1:-1::0;;;;;26546:15:0::1;:4;;26551:1;26546:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26546:7:0::1;-1:-1:-1::0;;;;;26546:15:0::1;;26538:51;;;::::0;;-1:-1:-1;;;26538:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26538:51:0;;;;;;;;;;;;;::::1;;26610:50;26635:7;26644:9;26655:4;;26610:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26610:24:0::1;::::0;-1:-1:-1;;;26610:50:0:i:1;:::-;26600:60;;26710:12;26679:7;26704:1;26687:7;:14;:18;26679:27;;;;;;;;;;;;;;:43;;26671:93;;;;-1:-1:-1::0;;;26671:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26781:4;-1:-1:-1::0;;;;;26775:19:0::1;;26802:7;26810:1;26802:10;;;;;;;;;;;;;;26775:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26775:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26775:40:0;;;;;26839:4;-1:-1:-1::0;;;;;26833:20:0::1;;26854:45;26873:7;26882:4;;26887:1;26882:7;;;;;;26854:45;26901:7;26909:1;26901:10;;;;;;;;;;;;;;26833:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;26833:79:0::1;-1:-1:-1::0;;;;;26833:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26833:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26833:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26833:79:0;26826:87:::1;;;;26924:24;26930:7;26939:4;;26924:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26945:2:0;;-1:-1:-1;26924:5:0::1;::::0;-1:-1:-1;;26924:24:0:i:1;:::-;26283:673:::0;;;;;;;;:::o;33590:255::-;33743:13;33781:56;33804:9;33815;33826:10;33781:22;:56::i;25689:588::-;25913:21;25894:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;25957:49:::1;25981:7;25990:9;26001:4;;25957:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25957:23:0::1;::::0;-1:-1:-1;;;25957:49:0:i:1;:::-;25947:59;;26039:11;26025:7;26033:1;26025:10;;;;;;;;;;;;;;:25;;26017:71;;;;-1:-1:-1::0;;;26017:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16359:38:::0;;;:::o;33136:182::-;33233:12;33265:45;33282:7;33291:8;33301;33265:16;:45::i;22833:700::-;23099:14;23080:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;23142:196:::1;23172:5;23192:4;23211:9;23235:14;23264:12;23299:4;23319:8;23142:15;:196::i;:::-;23388:38;::::0;;-1:-1:-1;;;23388:38:0;;23420:4:::1;23388:38;::::0;::::1;::::0;;;23126:212;;-1:-1:-1;23349:78:0::1;::::0;-1:-1:-1;23377:5:0;;23384:2;;-1:-1:-1;;;;;23388: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;23388:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23388:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23388:38:0;23349:27:::1;:78::i;:::-;23444:4;-1:-1:-1::0;;;;;23438:20:0::1;;23459:9;23438:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23438:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23438:31:0;;;;23480:45;23511:2;23515:9;23480:30;:45::i;31429:832::-:0;31689:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;31734:4:::1;-1:-1:-1::0;;;;;31723:15:0::1;:4;;31728:1;31723:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31723:7:0::1;-1:-1:-1::0;;;;;31723:15:0::1;;31715:51;;;::::0;;-1:-1:-1;;;31715:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31715:51:0;;;;;;;;;;;;;::::1;;31777:13;31793:9;31777:25;;31819:4;-1:-1:-1::0;;;;;31813:19:0::1;;31840:8;31813:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31813:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31813:38:0;;;;;31875:4;-1:-1:-1::0;;;;;31869:20:0::1;;31890:45;31909:7;31918:4;;31923:1;31918:7;;;;;;31890:45;31937:8;31869:77;;;;;;;;;;;;;-1:-1:-1::0;;;;;31869:77:0::1;-1:-1:-1::0;;;;;31869:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31869:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31869:77:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31869:77:0;31862:85:::1;;;;31958:18;31986:4:::0;;-1:-1:-1;;31991:15:0;;31986:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31986:21:0::1;-1:-1:-1::0;;;;;31979:39:0::1;;32019:2;31979:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31979:43:0::1;-1:-1:-1::0;;;;;31979:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31979:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31979:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31979:43:0;32033:44:::1;::::0;;31979:43:::1;32033:44:::0;;::::1;::::0;;;;;;;;;;;31979:43;;-1:-1:-1;32033:44:0::1;::::0;;;32068:4;;;;;;32033:44;::::1;::::0;32068:4;;32033:44;32068:4;32033:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32074:2:0;;-1:-1:-1;32033:34:0::1;::::0;-1:-1:-1;;32033:44:0:i:1;:::-;32176:12:::0;32110:62:::1;32158:13:::0;32117:4;;-1:-1:-1;;32122:15:0;;32117:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32117:21:0::1;-1:-1:-1::0;;;;;32110:39:0::1;;32150:2;32110:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32110:43:0::1;-1:-1:-1::0;;;;;32110:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19912:829:0::0;20166:12;20180;20147:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;20205:12:::1;20220:43;20239:7;20248:6;20256;20220:18;:43::i;:::-;20274:56;::::0;;-1:-1:-1;;;20274:56:0;;20302:10:::1;20274:56;::::0;::::1;::::0;-1:-1:-1;;;;;20274:27:0;::::1;:56:::0;;;;;;;;;;;;;;20205:58;;-1:-1:-1;20274:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20274:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20274:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20274:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20398:23:0::1;::::0;;;;;-1:-1:-1;;;;;20398:23:0;;::::1;;::::0;::::1;::::0;;;20368:12:::1;::::0;;;20398:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;20368:12;20398:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20398:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20398:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20398:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20398:23:0;-1:-1:-1;20433:14:0::1;20452:37;20474:6:::0;20482;20452:21:::1;:37::i;:::-;20432:57;;;20531:6;-1:-1:-1::0;;;;;20521:16:0::1;:6;-1:-1:-1::0;;;;;20521:16:0::1;;:58;;20562:7;20571;20521:58;;;20541:7;20550;20521:58;20500:79:::0;;-1:-1:-1;20500:79:0;-1:-1:-1;20598:21:0;;::::1;;20590:66;;;::::0;;-1:-1:-1;;;20590:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20686:10;20675:7;:21;;20667:66;;;::::0;;-1:-1:-1;;;20667:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16517:1;;;;19912:829:::0;;;;;;;;;;;:::o;16311:41::-;;;:::o;33853:247::-;33997:21;34043:49;34068:7;34077:8;34087:4;34043:24;:49::i;22097:657::-;22386:16;22404:14;22431:12;22446:40;22465:7;22474:5;22481:4;22446:18;:40::i;:::-;22431:55;;22497:10;22510;:33;;22534:9;22510:33;;;-1:-1:-1;;22510:33:0;22554:74;;;-1:-1:-1;;;22554:74:0;;22576:10;22554:74;;;;22596:4;22554:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22497:46;;-1:-1:-1;;;;;;22554:21:0;;;;;:74;;;;;-1:-1:-1;;22554:74:0;;;;;;;;-1:-1:-1;22554:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22554:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22554:74:0;;;;22666:80;22685:5;22692:9;22703:14;22719:12;22733:2;22737:8;22666:18;:80::i;:::-;22639:107;;;;-1:-1:-1;22097:657:0;-1:-1:-1;;;;;;;;;;;;;22097:657:0:o;18175:726::-;18463:12;18477;18491:14;18444:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;18539:85:::1;18553:6;18561;18569:14;18585;18601:10;18613;18539:13;:85::i;:::-;18518:106:::0;;-1:-1:-1;18518:106:0;-1:-1:-1;18635:12:0::1;18650:43;18669:7;18678:6:::0;18686;18650:18:::1;:43::i;:::-;18635:58;;18704:66;18736:6;18744:10;18756:4;18762:7;18704:31;:66::i;:::-;18781;18813:6;18821:10;18833:4;18839:7;18781:31;:66::i;:::-;18879:4;-1:-1:-1::0;;;;;18870:19:0::1;;18890:2;18870:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;18870:23:0::1;-1:-1:-1::0;;;;;18870:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18870:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18870:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18870:23:0;18175:726;;;;-1:-1:-1;18870:23:0;;-1:-1:-1;18175:726:0;;-1:-1:-1;;;;;;;;;18175:726:0:o;18907:962::-;19160:16;19178:14;19194;19141:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;19248:176:::1;19276:5;19296:4;19315:18;19348:9;19372:14;19401:12;19248:13;:176::i;:::-;19221:203:::0;;-1:-1:-1;19221:203:0;-1:-1:-1;19435:12:0::1;19450:40;19469:7;19478:5:::0;19485:4:::1;19450:18;:40::i;:::-;19435:55;;19501:69;19533:5;19540:10;19552:4;19558:11;19501:31;:69::i;:::-;19587:4;-1:-1:-1::0;;;;;19581:19:0::1;;19608:9;19581:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19581:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19581:39:0;;;;;19644:4;-1:-1:-1::0;;;;;19638:20:0::1;;19659:4;19665:9;19638:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19638:37:0::1;-1:-1:-1::0;;;;;19638:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19638:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19638:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19638:37:0;19631:45:::1;;;;19708:4;-1:-1:-1::0;;;;;19699:19:0::1;;19719:2;19699:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19699:23:0::1;-1:-1:-1::0;;;;;19699:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19699:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19699:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19699:23:0;;-1:-1:-1;19773:9:0::1;:21:::0;-1:-1:-1;19769:92:0::1;;;19796:65;19827:10;19851:9;19839;:21;19796:30;:65::i;:::-;16517:1;18907:962:::0;;;;;;;;;;;:::o;28604:786::-;28817:21;28789:8;16468:15;16456:8;:27;;16448:58;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;-1:-1:-1;;;16448:58:0;;;;;;;;;;;;;;;28875:4:::1;-1:-1:-1::0;;;;;28864:15:0::1;:4;;28869:1;28864:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28864:7:0::1;-1:-1:-1::0;;;;;28864:15:0::1;;28856:51;;;::::0;;-1:-1:-1;;;28856:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28856:51:0;;;;;;;;;;;;;::::1;;28928:49;28952:7;28961:9;28972:4;;28928:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28928:23:0::1;::::0;-1:-1:-1;;;28928:49:0:i:1;:::-;28918:59;;29010:9;28996:7;29004:1;28996:10;;;;;;;;;;;;;;:23;;28988:69;;;;-1:-1:-1::0;;;28988:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29074:4;-1:-1:-1::0;;;;;29068:19:0::1;;29095:7;29103:1;29095:10;;;;;;;;;;;;;;29068:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29068:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29068:40:0;;;;;29132:4;-1:-1:-1::0;;;;;29126:20:0::1;;29147:45;29166:7;29175:4;;29180:1;29175:7;;;;;;29147:45;29194:7;29202:1;29194:10;;;;;;;;;;;;;;29126:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;29126:79:0::1;-1:-1:-1::0;;;;;29126:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29126:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29126:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29126:79:0;29119:87:::1;;;;29217:24;29223:7;29232:4;;29217:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29238:2:0;;-1:-1:-1;29217:5:0::1;::::0;-1:-1:-1;;29217:24:0:i:1;:::-;29304:7;29312:1;29304:10;;;;;;;;;;;;;;29292:9;:22;29288:94;;;29316:66;29347:10;29371:7;29379:1;29371:10;;;;;;;;;;;;;;29359:9;:22;29316:30;:66::i;1430:398::-:0;1662:45;;;-1:-1:-1;;;;;1662:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1662:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1662:45:0;179:29:-1;160:49;;1651:57:0;;;;1616:12;;1630:17;;1651:10;;;;1662:45;1651:57;;;25:18:-1;1651: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;;;1651: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;;1615:93:0;;;;1727:7;:57;;;;-1:-1:-1;1739:11:0;;:16;;:44;;;1770:4;1759:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1759:24:0;1739:44;1719:101;;;;;-1:-1:-1;;;1719:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1430:398;;;;;:::o;2292:200::-;2405:12;;;2365;2405;;;;;;;;;-1:-1:-1;;;;;2383:7:0;;;2398:5;;2383: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;;;2383: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;;2364:54:0;;;2437:7;2429:55;;;;-1:-1:-1;;;2429:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2292:200;;;:::o;12700:505::-;12793:14;12839:1;12828:8;:12;12820:62;;;;-1:-1:-1;;;12820:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12913:1;12901:9;:13;:31;;;;;12931:1;12918:10;:14;12901:31;12893:78;;;;-1:-1:-1;;;12893:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12982:20;13005:17;:8;13018:3;13005:17;:12;:17;:::i;:::-;12982:40;-1:-1:-1;13033:14:0;13050:31;12982:40;13070:10;13050:31;:19;:31;:::i;:::-;13033:48;-1:-1:-1;13092:16:0;13111:40;13135:15;13111:19;:9;13125:4;13111:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13092:59;;13186:11;13174:9;:23;;;;;;;12700:505;-1:-1:-1;;;;;;;12700:505:0:o;13868:::-;13969:21;14026:1;14011:4;:11;:16;;14003:53;;;;;-1:-1:-1;;;14003:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14088:4;:11;14077:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14077:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14077:23:0;;14067:33;;14124:8;14111:7;14119:1;14111:10;;;;;;;;;;;;;:21;;;;;14148:6;14143:223;14174:1;14160:4;:11;:15;14156:1;:19;14143:223;;;14198:14;14214:15;14233:42;14245:7;14254:4;14259:1;14254:7;;;;;;;;;;;;;;14263:4;14268:1;14272;14268:5;14263:11;;;;;;;;;;;;;;14233;:42::i;:::-;14197:78;;;;14307:47;14320:7;14328:1;14320:10;;;;;;;;;;;;;;14332:9;14343:10;14307:12;:47::i;:::-;14290:7;14298:1;14302;14298:5;14290:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14177:3:0;;14143:223;;;;13868:505;;;;;:::o;11235:478::-;11324:12;11350:14;11366;11384:26;11395:6;11403;11384:10;:26::i;:::-;11548:32;;;-1:-1:-1;;11548:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11548:32:0;;;;;11538:43;;;;;;11451:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11451:251:0;;;;;;;11441:262;;;;;;;;;11235:478;-1:-1:-1;;;;;11235:478:0:o;1836:448::-;2107:51;;;-1:-1:-1;;;;;2107:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2107:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;2096:63:0;;;;2061:12;;2075:17;;2096:10;;;;2107:51;2096:63;;;25:18:-1;2096: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;;;2096: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;;2060:99:0;;;;2178:7;:57;;;;-1:-1:-1;2190:11:0;;:16;;:44;;;2221:4;2210:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2210:24:0;2190:44;2170:106;;;;-1:-1:-1;;;2170:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1836:448;;;;;;:::o;24356:711::-;24463:6;24458:602;24489:1;24475:4;:11;:15;24471:1;:19;24458:602;;;24513:13;24528:14;24547:4;24552:1;24547:7;;;;;;;;;;;;;;24556:4;24561:1;24565;24561:5;24556:11;;;;;;;;;;;;;;24512:56;;;;24584:14;24603:36;24625:5;24632:6;24603:21;:36::i;:::-;24583:56;;;24654:14;24671:7;24679:1;24683;24679:5;24671:14;;;;;;;;;;;;;;24654:31;;24701:15;24718;24746:6;-1:-1:-1;;;;;24737:15:0;:5;-1:-1:-1;;;;;24737:15:0;;:61;;24779:9;24795:1;24737:61;;;24761:1;24765:9;24737:61;24700:98;;;;24813:10;24844:1;24830:4;:11;:15;24826:1;:19;:76;;24899:3;24826:76;;;24848:48;24867:7;24876:6;24884:4;24889:1;24893;24889:5;24884:11;;;;;;;;;;;;;;24848:18;:48::i;:::-;24813:89;;24926:42;24945:7;24954:5;24961:6;24926:18;:42::i;:::-;-1:-1:-1;;;;;24917:57:0;;24993:10;25005;25017:2;25031:1;25021:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25021:12:0;87:42:-1;143:17;;-1:-1;25021:12:0;;24917:131;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24917:131:0;-1:-1:-1;;;;;24917: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;24917:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24917:131:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24492:3:0;;;;;-1:-1:-1;24458:602:0;;-1:-1:-1;;;;;;;;24458:602:0;;;24356:711;;;:::o;14454:526::-;14555:21;14612:1;14597:4;:11;:16;;14589:53;;;;;-1:-1:-1;;;14589:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14674:4;:11;14663:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14663:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14663:23:0;;14653:33;;14727:9;14697:7;14722:1;14705:7;:14;:18;14697:27;;;;;;;;;;;;;;;;;:39;14761:11;;-1:-1:-1;;14761:15:0;14747:226;14778:5;;14747:226;;14806:14;14822:15;14841:42;14853:7;14862:4;14871:1;14867;:5;14862:11;;;;;;;;;;;;;;14875:4;14880:1;14875:7;;;;;;;14841:42;14805:78;;;;14915:46;14927:7;14935:1;14927:10;;;;;;;;;;;;;;14939:9;14950:10;14915:11;:46::i;:::-;14898:7;14910:1;14906;:5;14898:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14785:3:0;14747:226;;29537:1178;29650:6;29645:1063;29676:1;29662:4;:11;:15;29658:1;:19;29645:1063;;;29700:13;29715:14;29734:4;29739:1;29734:7;;;;;;;;;;;;;;29743:4;29748:1;29752;29748:5;29743:11;;;;;;;;;;;;;;29699:56;;;;29771:14;29790:36;29812:5;29819:6;29790:21;:36::i;:::-;29770:56;;;29841:13;29866:42;29885:7;29894:5;29901:6;29866:18;:42::i;:::-;29841:68;;29924:16;29955:17;30043:13;30058;30076:4;-1:-1:-1;;;;;30076:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30076:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30076:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30076:18:0;;;;;;;30042:52;;;;;-1:-1:-1;30042:52:0;;-1:-1:-1;30110:17:0;;-1:-1:-1;;;;;30151:15:0;;;;;;;:61;;30193:8;30203;30151:61;;;30170:8;30180;30151:61;30109:103;;;;30241:56;30284:12;30248:5;-1:-1:-1;;;;;30241:23:0;;30273:4;30241:38;;;;;;;;;;;;;-1:-1:-1;;;;;30241:38:0;-1:-1:-1;;;;;30241:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30241:56:0;30227:70;;30327:65;30351:11;30364:12;30378:13;30327:23;:65::i;:::-;30312:80;;29645:1063;;;;30423:15;30440;30468:6;-1:-1:-1;;;;;30459:15:0;:5;-1:-1:-1;;;;;30459:15:0;;:67;;30504:12;30523:1;30459:67;;;30483:1;30487:12;30459:67;30422:104;;;;30541:10;30572:1;30558:4;:11;:15;30554:1;:19;:76;;30627:3;30554:76;;;30576:48;30595:7;30604:6;30612:4;30617:1;30621;30617:5;30612:11;;;;;;;30576:48;30683:12;;;30693:1;30683:12;;;;;;;;;;30645:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;30645:51:0;;;;;;;;;;;;;;;;;;;;;;30541:89;;-1:-1:-1;30645:9:0;;;;;;30655:10;;30667;;30541:89;;30683:12;;30645:51;;;;;;;;30683:12;;30645:51;;;;30683: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;30645:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30645:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29679:3:0;;;;;-1:-1:-1;29645:1063:0;;-1:-1:-1;;;;;;;;;;29645:1063:0;10269:129;10353:5;;;10348:16;;;;10340:50;;;;;-1:-1:-1;;;10340:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13326:460;13419:13;13465:1;13453:9;:13;13445:64;;;;-1:-1:-1;;;13445:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13540:1;13528:9;:13;:31;;;;;13558:1;13545:10;:14;13528:31;13520:78;;;;-1:-1:-1;;;13520:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13609:14;13626:34;13655:4;13626:24;:9;13640;13626:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13609:51;-1:-1:-1;13671:16:0;13690:34;13720:3;13690:25;:10;13705:9;13690:25;:14;:25;:::i;:34::-;13671:53;;13746:32;13776:1;13759:11;13747:9;:23;;;;;;;13746:32;:29;:32;:::i;:::-;13735:43;13326:460;-1:-1:-1;;;;;;13326:460:0:o;12269:309::-;12351:12;12394:1;12384:7;:11;12376:55;;;;;-1:-1:-1;;;12376:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12461:1;12450:8;:12;:28;;;;;12477:1;12466:8;:12;12450:28;12442:75;;;;-1:-1:-1;;;12442:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12562:8;12538:21;:7;12550:8;12538:21;:11;:21;:::i;:::-;:32;;;;;;;12269:309;-1:-1:-1;;;;12269:309:0:o;10806:337::-;10881:14;10897;10942:6;-1:-1:-1;;;;;10932:16:0;:6;-1:-1:-1;;;;;10932:16:0;;;10924:60;;;;;-1:-1:-1;;;10924:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11023:6;-1:-1:-1;;;;;11014:15:0;:6;-1:-1:-1;;;;;11014:15:0;;:53;;11052:6;11060;11014:53;;;11033:6;11041;11014:53;10995:72;;-1:-1:-1;10995:72:0;-1:-1:-1;;;;;;11086:20:0;;11078:57;;;;;-1:-1:-1;;;11078:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10806:337;;;;;:::o;16821:1348::-;17134:44;;;;;;-1:-1:-1;;;;;17134:44:0;;;;;;;;;;;;;;;;17039:12;;;;;;17146:7;17134:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;17134:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17134:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17134:44:0;-1:-1:-1;;;;;17134:58:0;;17130:138;;;17209:47;;;;;;-1:-1:-1;;;;;17209:47:0;;;;;;;;;;;;;;;;17221:7;17209:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;17209:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17209:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17209:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17130:138:0;17279:13;17294;17311:47;17334:7;17343:6;17351;17311:22;:47::i;:::-;17278:80;;;;17373:8;17385:1;17373:13;:30;;;;-1:-1:-1;17390:13:0;;17373:30;17369:793;;;17442:14;;-1:-1:-1;17458:14:0;;-1:-1:-1;17369:793:0;;;17506:19;17528:52;17545:14;17561:8;17571;17528:16;:52::i;:::-;17506:74;;17617:14;17599;:32;17595:556;;17678:10;17660:14;:28;;17652:73;;;;;-1:-1:-1;;;17652:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17766:14;;-1:-1:-1;17782:14:0;-1:-1:-1;17782:14:0;17595:556;;;17838:19;17860:52;17877:14;17893:8;17903;17860:16;:52::i;:::-;17838:74;;17956:14;17938;:32;;17931:40;;;;18016:10;17998:14;:28;;17990:73;;;;;-1:-1:-1;;;17990:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18104:14;-1:-1:-1;18120:14:0;;-1:-1:-1;17595:556:0;17369:793;;16821:1348;;;;;;;;;;;:::o;10406:142::-;10458:6;10485;;;:30;;-1:-1:-1;;10500:5:0;;;10514:1;10509;10500:5;10509:1;10495:15;;;;;:20;10485:30;10477:63;;;;;-1:-1:-1;;;10477:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10133:128;10217:5;;;10212:16;;;;10204:49;;;;;-1:-1:-1;;;10204:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11771:385;11864:13;11879;11906:14;11925:26;11936:6;11944;11925:10;:26::i;:::-;11905:46;;;11963:13;11978;12005:32;12013:7;12022:6;12030;12005:7;:32::i;:::-;-1:-1:-1;;;;;11996:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11996:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11996:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11996:56:0;;;;;;;11962:90;;;;;-1:-1:-1;11962:90:0;;-1:-1:-1;;;;;;12086:16:0;;;;;;;:62;;12129:8;12139;12086:62;;;12106:8;12116;12086:62;12063:85;;;;-1:-1:-1;11771:385:0;-1:-1:-1;;;;;;;11771:385:0:o

Swarm Source

ipfs://df1c33761d8c5dba4c6ca8c9d1be1e8b1a4d70ee04e51964ca1283034afa20bc
Block Transaction Difficulty Gas Used Reward
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.