Contract 0x324af1555ea2b98114ecb852ed67c2b5821b455b

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x65d9296d8d7a6f00779ba63b45826c0ca389ad2f171d66a077232ef17b7862c3Add Liquidity387660972023-02-01 2:09:463 hrs 28 mins ago0x4d34b40ad545d135de020fe23db67bf388703bde IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.021108923779 118.275166437
0xe973b6212473066812097244aecc254da474eda9b1f6f1a1f6d689554b73ba8eAdd Liquidity387479722023-01-31 15:10:1714 hrs 27 mins ago0x9e0fa8f16eab720d926d2d9a7b604602e0935cdd IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.022995104855132.708728064
0xb1e734a685d9f888031d110df051a693d8660af5b0241324f545247f32b4c551Add Liquidity387478842023-01-31 15:07:0914 hrs 30 mins ago0x9e0fa8f16eab720d926d2d9a7b604602e0935cdd IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.01875497031100.490641095
0xcbf42e38f1d0606f2af37015c7cf782f89d91fb090e1d1a462de1b82c0bd2075Swap Exact Token...387237572023-01-31 0:32:201 day 5 hrs ago0x3a2ef039d78c03a56f945e9aa4b0ee27f4f28fee IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.009045900665 74.96582053
0x19cd6cea1d4440d9bbbba3214d07bddae365463ae5f502194284e796808cf5a3Remove Liquidity386998852023-01-30 9:49:181 day 19 hrs ago0x648f227d867fb9af40672f7779c26a516807aef6 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.016363291008 110.317544165
0x98e5cdbfc97e450e4d3450943a3869da04a19c955ff9b2226e2a26ad627253b9Swap Exact Token...386585662023-01-29 8:51:542 days 20 hrs ago0x7d7963bc806800327494471386af6dbc185662f5 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.00666579788961.531767354
0x851777e79c6417cb4a8ce6f896f8bdc980f3fa7c91d3a903d321890ddf109fa4Swap Exact Token...386580152023-01-29 8:31:242 days 21 hrs ago0x257686219f711f80c700c6a3a975f65ab0b2f1e7 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.01192568480265.932566341
0x120823794fd007759332b42affd077184a123b6f3673aef471cd54eccc53eebcSwap Exact Token...386356582023-01-28 18:51:213 days 10 hrs ago0x8189ca95335af50a0c9490547186008a6d7747da IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.00554978924447.926882775
0x32ac1401b35f407632e1fadf0a0fb63210fb79e6cedb49f56b045ff2399ecd4dAdd Liquidity386257672023-01-28 12:55:023 days 16 hrs ago0x14d3b6910249c4dd13ebfed45c969d9b57d84b1e IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.013577298914 72.759956456
0x816770a9e25cae5c9cc3e09f9daaad62d7d3421ff560c0684ccce928e3828370Swap Exact ETH F...386257112023-01-28 12:53:023 days 16 hrs ago0x14d3b6910249c4dd13ebfed45c969d9b57d84b1e IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b4.7 MATIC0.009140567159 59.336223099
0x4aa4593c98f5a5deb585bbe711e268b0362fc1e8d01977963a4e978bda45a365Swap Exact ETH F...386256872023-01-28 12:52:123 days 16 hrs ago0x14d3b6910249c4dd13ebfed45c969d9b57d84b1e IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b4.7 MATIC0.014529771056 59.966533179
0xd18e372e998f95408637646330f819b589a628872bdc1d60f0d5e960ebd5d27bRemove Liquidity386012332023-01-27 21:30:504 days 8 hrs ago0x98da8b6e577d5db2d3f2c5491c45e43fa53550a4 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.01249341435 84.227725869
0x93cc5663e692bd930a21968b6c0d72dc94ec960d908c2f351f691f9fba92b6c7Remove Liquidity386011162023-01-27 21:25:364 days 8 hrs ago0x98da8b6e577d5db2d3f2c5491c45e43fa53550a4 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.012602036615 79.972817544
0x87e3f989fc8c951e5a98b47ae6cdf9cecf0b796d9f6eda7a808387b8e596ad15Add Liquidity385934112023-01-27 16:27:434 days 13 hrs ago0x9e0fa8f16eab720d926d2d9a7b604602e0935cdd IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.0156208533581.617065238
0x6fea374cfe3f01436fa21c450c6c482f6e1c6cca8f97acf6e3cd9dda9c7cd0a2Swap Exact ETH F...385016262023-01-25 8:11:246 days 21 hrs ago0x16a02fdb56502ce79427dca05eae9f5a08fe81a6 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b11.84 MATIC0.015198992577 88.806654968
0x5736fc0e207b9188e3186d02050629a587dcc5a83ad86097648761a5f16db6c6Swap Exact Token...384922812023-01-25 2:35:147 days 3 hrs ago0x872af3cb1dad88907f2944f166a98a9d4a86dd93 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.003620022066 30.0001
0x61827cde019d526aa9a254605511fe2e3dca047efa0b92c5aee30bfb9d89ba98Swap Exact Token...383847622023-01-22 9:58:119 days 19 hrs ago0x7d7963bc806800327494471386af6dbc185662f5 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.006054452939 55.888461656
0x69c99d50cf71afe331bbcf74984e0cdc7cbb321cd0e1ba786bc27026db960ce1Swap Exact Token...383713622023-01-22 1:59:4610 days 3 hrs ago0x872af3cb1dad88907f2944f166a98a9d4a86dd93 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.003620022066 30.0001
0xb2910c164d0821cadc3674452caa11f0759dc00d08aee3a246d93a2f767ee7cbSwap Exact Token...383497472023-01-21 12:50:1010 days 16 hrs ago0x0d02bac5f30ac698bedb1a0b8ad75f06bfa145e5 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.009419144372 53.483526896
0x65e5b9ade6f9616964a4894282b8115b3ef1f6767e6c733bca3e51106e577b32Swap Exact Token...383345372023-01-21 3:40:1711 days 1 hr ago0x1fe5794e14c3ba1e38382d36827c3ca72031b1fb IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.005577210393 41.962624002
0x34b08551f5e9ae1c11315ddb268f9a70b65416b2f5130c93d8fe3f851a5d36cfAdd Liquidity383316202023-01-21 1:55:3311 days 3 hrs ago0x3a2ef039d78c03a56f945e9aa4b0ee27f4f28fee IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.008415106153 45.821682413
0xb61a056dd815ffcadf171826247b46bb45872f164ac953dce9d0914ed4b24543Swap Exact Token...383315922023-01-21 1:54:3311 days 3 hrs ago0x3a2ef039d78c03a56f945e9aa4b0ee27f4f28fee IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.004780897083 46.162359468
0x0db9bfe8d34d2ec03da53a3f3e4591d98099188cf2e4f31db214fbb533494e7cSwap Exact Token...383152942023-01-20 16:08:0011 days 13 hrs ago0x8189ca95335af50a0c9490547186008a6d7747da IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.00737623147255.503370823
0x07b643c40ffb6b2c62a97d0ffd9714dae7134cee4f9a376276daf6cb015bc841Add Liquidity382754142023-01-19 15:33:0312 days 14 hrs ago0x9e0fa8f16eab720d926d2d9a7b604602e0935cdd IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b0 MATIC0.012571348675 65.685832168
0x922925eb64113cc74c1d91adbacc88b867eb85859a5a6ffa1b63e65b9bce5f12Swap Exact ETH F...382645852023-01-19 9:01:3912 days 20 hrs ago0xde02f009f4e16be83bf9e1c1c76494bfb0b86ea4 IN  0x324af1555ea2b98114ecb852ed67c2b5821b455b11.044162117354604 MATIC0.013042109036 84.663180953
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x851777e79c6417cb4a8ce6f896f8bdc980f3fa7c91d3a903d321890ddf109fa4386580152023-01-29 8:31:242 days 21 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b0x257686219f711f80c700c6a3a975f65ab0b2f1e72.274434373499928871 MATIC
0x851777e79c6417cb4a8ce6f896f8bdc980f3fa7c91d3a903d321890ddf109fa4386580152023-01-29 8:31:242 days 21 hrs ago Polygon: WMATIC Token 0x324af1555ea2b98114ecb852ed67c2b5821b455b2.274434373499928871 MATIC
0x816770a9e25cae5c9cc3e09f9daaad62d7d3421ff560c0684ccce928e3828370386257112023-01-28 12:53:023 days 16 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token4.7 MATIC
0x4aa4593c98f5a5deb585bbe711e268b0362fc1e8d01977963a4e978bda45a365386256872023-01-28 12:52:123 days 16 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token4.7 MATIC
0x6fea374cfe3f01436fa21c450c6c482f6e1c6cca8f97acf6e3cd9dda9c7cd0a2385016262023-01-25 8:11:246 days 21 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token11.84 MATIC
0xb2910c164d0821cadc3674452caa11f0759dc00d08aee3a246d93a2f767ee7cb383497472023-01-21 12:50:1010 days 16 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b0x0d02bac5f30ac698bedb1a0b8ad75f06bfa145e50.620768609346577904 MATIC
0xb2910c164d0821cadc3674452caa11f0759dc00d08aee3a246d93a2f767ee7cb383497472023-01-21 12:50:1010 days 16 hrs ago Polygon: WMATIC Token 0x324af1555ea2b98114ecb852ed67c2b5821b455b0.620768609346577904 MATIC
0x922925eb64113cc74c1d91adbacc88b867eb85859a5a6ffa1b63e65b9bce5f12382645852023-01-19 9:01:3912 days 20 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token11.044162117354604556 MATIC
0xc748e420edced87973cf23d7d2c67838bde15a39f5b46502a9c4498eb191ceac382306652023-01-18 12:29:0013 days 17 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token54.537554151375250867 MATIC
0x9b556eb810a872c3493f6a2fc838040b6ed2f71df28c031f8ccb7284b05c1f99382292222023-01-18 11:32:0213 days 18 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token8.69546096272998222 MATIC
0x45f81ce90f3f9d35297a4fccca871c85968a957bb28739fb2e103ae464f33595381134262023-01-15 14:52:1016 days 14 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b0x019e3d65ade821fded83b438cd1b8626208c48d30.018565142449076781 MATIC
0x45f81ce90f3f9d35297a4fccca871c85968a957bb28739fb2e103ae464f33595381134262023-01-15 14:52:1016 days 14 hrs ago Polygon: WMATIC Token 0x324af1555ea2b98114ecb852ed67c2b5821b455b0.018565142449076781 MATIC
0xa6bbfd716b258a8c123076e93d55b23bfc0d74f00785f3fa9ca80e980acd8d0e380834672023-01-14 21:37:1017 days 8 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token9.963735073414732288 MATIC
0x16fc5af6fe7638732d3dbd6821fecdbfbb6ffbdda2c18c18e3ea4e9f7299cf45379752582023-01-12 7:12:3719 days 22 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b0xd55f30380247608e49bb8c79610bcbc654762edd0.071644281225835972 MATIC
0x16fc5af6fe7638732d3dbd6821fecdbfbb6ffbdda2c18c18e3ea4e9f7299cf45379752582023-01-12 7:12:3719 days 22 hrs ago Polygon: WMATIC Token 0x324af1555ea2b98114ecb852ed67c2b5821b455b0.071644281225835972 MATIC
0x8b00ff96e36eb0b927f1236cc82e35c07fc79954b8f0db391e807d29a861827b379126812023-01-10 18:48:1821 days 10 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b0x748e110d0a523ae42702c18253cdb0d778b62b870.007833958763450415 MATIC
0x8b00ff96e36eb0b927f1236cc82e35c07fc79954b8f0db391e807d29a861827b379126812023-01-10 18:48:1821 days 10 hrs ago Polygon: WMATIC Token 0x324af1555ea2b98114ecb852ed67c2b5821b455b0.007833958763450415 MATIC
0x49dfa04d97701ba5ccae735906901646596f2e6bcbe2b3290d4532d1e005eb37375937962023-01-02 19:42:3429 days 9 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b0x28e5bc4be7d164ecdc2aa73ae1b227b49e0ca1430.000422583704477038 MATIC
0x49dfa04d97701ba5ccae735906901646596f2e6bcbe2b3290d4532d1e005eb37375937962023-01-02 19:42:3429 days 9 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token0.033989419308552965 MATIC
0xbbca069406d0be07c61080a0c7cca2de3e441ea8a5d87bea83a7730fef857dd6375188562022-12-31 23:08:2931 days 6 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b0x70b636fae82e4fc6828bb3777604720a11ad67cc5.642647365257997826 MATIC
0xbbca069406d0be07c61080a0c7cca2de3e441ea8a5d87bea83a7730fef857dd6375188562022-12-31 23:08:2931 days 6 hrs ago Polygon: WMATIC Token 0x324af1555ea2b98114ecb852ed67c2b5821b455b5.642647365257997826 MATIC
0x15b7f70a75d46b834ef8c69f00eef699e514343bae314afd3051fce0191c0e7d373400502022-12-27 12:48:1335 days 16 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b0x1ed7ca945941c31dabec31b899d108e88397b5a75.982543066702327752 MATIC
0x15b7f70a75d46b834ef8c69f00eef699e514343bae314afd3051fce0191c0e7d373400502022-12-27 12:48:1335 days 16 hrs ago Polygon: WMATIC Token 0x324af1555ea2b98114ecb852ed67c2b5821b455b5.982543066702327752 MATIC
0xb221f751a13a27c8003a52e8a474ef4f767cbff3d75af17239b6d28033666a60372636422022-12-25 15:33:4337 days 14 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token5 MATIC
0x3f9cf11e93109c6026f013292bca6533d818acb3c9b15d39d8f0878c6d113de3372570022022-12-25 11:31:4537 days 18 hrs ago 0x324af1555ea2b98114ecb852ed67c2b5821b455b Polygon: WMATIC Token1 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GreenhouseV2Router

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-03-17
*/

/**
 *Submitted for verification at polygonscan.com on 2021-05-18
*/

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    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: @uniswap/lib/contracts/libraries/TransferHelper.sol

pragma solidity >=0.6.0;

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

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

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

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

// File: contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    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: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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

// File: contracts/libraries/UniswapV2Library.sol

pragma solidity >=0.5.0;



library UniswapV2Library {
    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, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: 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'c9e8436955a85a2d7b01c9c3d63e0f208f26e44f0f39b712d06db3c7572e7992' // 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,) = IUniswapV2Pair(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, 'UniswapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'UniswapV2Library: 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, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(9982);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(10000).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, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(10000);
        uint denominator = reserveOut.sub(amountOut).mul(9982);
        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, 'UniswapV2Library: 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, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

// File: contracts/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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

// File: contracts/UniswapV2Router02.sol

pragma solidity =0.6.6;

contract GreenhouseV2Router is IUniswapV2Router02 {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'UniswapV2Router: 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 (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IUniswapV2Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'UniswapV2Router: 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 = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IUniswapV2Pair(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 = UniswapV2Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IUniswapV2Pair(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 = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to);
        (address token0,) = UniswapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'UniswapV2Router: 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 = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(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 = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(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 = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(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,) = UniswapV2Library.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 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IUniswapV2Pair(UniswapV2Library.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 = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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 = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.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, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.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,) = UniswapV2Library.sortTokens(input, output);
            IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.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 = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.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, UniswapV2Library.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,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(UniswapV2Library.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,
            'UniswapV2Router: 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, 'UniswapV2Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'UniswapV2Router: 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 UniswapV2Library.quote(amountA, reserveA, reserveB);
    }

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

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

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

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return UniswapV2Library.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"}]

60c060405234801561001057600080fd5b5060405162004768380380620047688339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145e3620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145e36000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144f16023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602b815260200180614563602b913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b60006132c5856126fe63ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f38861271063ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fc9e8436955a85a2d7b01c9c3d63e0f208f26e44f0f39b712d06db3c7572e7992609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061453f6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602c8152602001806143c0602c913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b6000613e07612710613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216126fe613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602581526020018061445f6025913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260258152602001806143ec6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050600080614318888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435057600080fd5b505afa158015614364573d6000803e3d6000fd5b505050506040513d606081101561437a57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143ad5780826143b0565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a2646970667358221220927efba148ac18d34eaf71048c6911d7e400f824b6ae34f5ea29985827ae56f164736f6c6343000606003300000000000000000000000075ed971834b0e176a053ac959d9cf77f0b4c89d00000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

00000000000000000000000075ed971834b0e176a053ac959d9cf77f0b4c89d00000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

-----Decoded View---------------
Arg [0] : _factory (address): 0x75ed971834b0e176a053ac959d9cf77f0b4c89d0
Arg [1] : _WETH (address): 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000075ed971834b0e176a053ac959d9cf77f0b4c89d0
Arg [1] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270


Deployed ByteCode Sourcemap

16317:18550:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16800:10;-1:-1:-1;;;;;16814:4:0;16800:18;;16793:26;;;;16317:18550;;12:1:-1;9;2:12;20950:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20950:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20950:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33811:262;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33811:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33811:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28119:850;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28119:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28119:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28119:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28119:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28119:850:0;;-1:-1:-1;28119:850:0;-1:-1:-1;;;;;;28119:850: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;28119:850:0;;;;;;;;;;;;;;;;;34611:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34611:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34611:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34611:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34611:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34611:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34611:253:0;;-1:-1:-1;34611:253:0;;-1:-1:-1;;;;;34611:253:0:i;21629:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21629:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21629:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25336:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25336:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25336:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25336:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25336:628:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25336:628:0;;-1:-1:-1;25336:628:0;-1:-1:-1;;;;;;25336:628:0;;;;;;;;:::i;27285:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27285:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27285:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27285:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27285:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27285:828:0;;-1:-1:-1;27285:828:0;-1:-1:-1;;;;;;27285:828:0;;;;;;;;:::i;23766:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23766:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23766:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31152:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31152:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31152:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31152:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31152:714:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31152:714:0;;-1:-1:-1;31152:714:0;-1:-1:-1;;;;;;31152:714:0;;;;;;;;:::i;32728:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32728:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32728:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32728:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32728:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32728:843:0;;-1:-1:-1;32728:843:0;-1:-1:-1;;;;;;32728:843:0;;;;;;;;:::i;26582:697::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26582:697:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26582:697:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26582:697:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26582:697:0;;-1:-1:-1;26582:697:0;-1:-1:-1;;;;;;26582:697:0;;;;;;;;:::i;34081:261::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34081:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34081:261:0;;;;;;;;;;;;:::i;25970:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25970:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25970:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25970:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25970:606:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25970:606:0;;-1:-1:-1;25970:606:0;-1:-1:-1;;;;;;25970:606:0;;;;;;;;:::i;16454:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16454:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16454:38:0;;;;;;;;;;;;;;33615:188;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33615:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33615:188:0;;;;;;;;;;;;:::i;23060:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23060:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23060:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31872:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31872:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31872:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31872:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31872:850:0;;-1:-1:-1;31872:850:0;-1:-1:-1;;;;;;31872:850:0;;;;;;;;:::i;20079:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20079:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20079:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16406:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16406:41:0;;;:::i;34350:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34350:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34350:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34350:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34350:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34350:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34350:253:0;;-1:-1:-1;34350:253:0;;-1:-1:-1;;;;;34350:253:0:i;22312:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22312:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22312:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18318:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18318:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18318:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19062:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19062:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28975:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28975:810:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28975:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28975:810:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28975:810:0;;-1:-1:-1;28975:810:0;-1:-1:-1;;;;;;28975:810:0;;;;;;;;:::i;20950:673::-;21187:16;21205:14;21168:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;21259:196:::1;21289:5;21309:4;21328:9;21352:14;21381:12;21416:4;21436:8;21259:15;:196::i;:::-;21232:223:::0;;-1:-1:-1;21232:223:0;-1:-1:-1;21466:51:0::1;21494:5:::0;21501:2;21232:223;21466:27:::1;:51::i;:::-;21534:4;-1:-1:-1::0;;;;;21528:20:0::1;;21549:9;21528:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21528:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21528:31:0;;;;21570:45;21601:2;21605:9;21570:30;:45::i;:::-;20950:673:::0;;;;;;;;;;:::o;33811:262::-;33964:14;34003:62;34033:8;34043:9;34054:10;34003:29;:62::i;:::-;33996:69;33811:262;-1:-1:-1;;;;33811:262:0:o;28119:850::-;28333:21;28305:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28405:4:0::1;28380:29;:4:::0;;-1:-1:-1;;28385:15:0;;28380:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28380:21:0::1;-1:-1:-1::0;;;;;28380:29:0::1;;28372:71;;;::::0;;-1:-1:-1;;;28372:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28372:71:0;;;;;;;;;;;;;::::1;;28464:55;28495:7;28504:8;28514:4;;28464:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28464:30:0::1;::::0;-1:-1:-1;;;28464:55:0:i:1;:::-;28454:65;;28569:12;28538:7;28563:1;28546:7;:14;:18;28538:27;;;;;;;;;;;;;;:43;;28530:99;;;;-1:-1:-1::0;;;28530:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28640:141;28686:4;;28691:1;28686:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28686:7:0::1;28695:10;28707:51;28732:7;28741:4;;28746:1;28741:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28741:7:0::1;28750:4;;28755:1;28750:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28750:7:0::1;28707:24;:51::i;:::-;28760:7;28768:1;28760:10;;;;;;;;;;;;;;28640:31;:141::i;:::-;28792:35;28798:7;28807:4;;28792:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28821:4:0::1;::::0;-1:-1:-1;28792:5:0::1;::::0;-1:-1:-1;;28792:35:0:i:1;:::-;28844:4;-1:-1:-1::0;;;;;28838:20:0::1;;28859:7;28884:1;28867:7;:14;:18;28859:27;;;;;;;;;;;;;;28838:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28838:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28838:49:0;;;;28898:63;28929:2;28933:7;28958:1;28941:7;:14;:18;28933:27;;;;;;;;;;;;;;28898:30;:63::i;:::-;28119:850:::0;;;;;;;;;:::o;34611:253::-;34755:21;34801:55;34831:7;34840:9;34851:4;34801:29;:55::i;:::-;34794:62;;34611:253;;;;;:::o;21629:677::-;21935:12;21949;21974;21989:49;22014:7;22023:6;22031;21989:24;:49::i;:::-;21974:64;;22049:10;22062;:33;;22086:9;22062:33;;;-1:-1:-1;;22062:33:0;22106:80;;;-1:-1:-1;;;22106:80:0;;22134:10;22106:80;;;;22154:4;22106:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22049:46;;-1:-1:-1;;;;;;22106:27:0;;;;;:80;;;;;-1:-1:-1;;22106:80:0;;;;;;;;-1:-1:-1;22106:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;22106:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22106:80:0;;;;22218;22234:6;22242;22250:9;22261:10;22273;22285:2;22289:8;22218:15;:80::i;:::-;22197:101;;;;;;;;21629:677;;;;;;;;;;;;;;;;:::o;25336:628::-;25560:21;25541:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;25604:55:::1;25635:7;25644:8;25654:4;;25604:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25604:30:0::1;::::0;-1:-1:-1;;;25604:55:0:i:1;:::-;25594:65;;25709:12;25678:7;25703:1;25686:7;:14;:18;25678:27;;;;;;;;;;;;;;:43;;25670:99;;;;-1:-1:-1::0;;;25670:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25780:141;25826:4;;25831:1;25826:7;;;;;;25780:141;25932:24;25938:7;25947:4;;25932:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25953:2:0;;-1:-1:-1;25932:5:0::1;::::0;-1:-1:-1;;25932:24:0:i:1;27285:828::-:0;27499:21;27471:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27571:4:0::1;27546:29;:4:::0;;-1:-1:-1;;27551:15:0;;27546:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27546:21:0::1;-1:-1:-1::0;;;;;27546:29:0::1;;27538:71;;;::::0;;-1:-1:-1;;;27538:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27538:71:0;;;;;;;;;;;;;::::1;;27630:55;27660:7;27669:9;27680:4;;27630:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27630:29:0::1;::::0;-1:-1:-1;;;27630:55:0:i:1;:::-;27620:65;;27718:11;27704:7;27712:1;27704:10;;;;;;;;;;;;;;:25;;27696:77;;;;-1:-1:-1::0;;;27696:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23766:718:::0;24084:14;24111:12;24126:46;24151:7;24160:5;24167:4;24126:24;:46::i;:::-;24111:61;;24183:10;24196;:33;;24220:9;24196:33;;;-1:-1:-1;;24196:33:0;24240:80;;;-1:-1:-1;;;24240:80:0;;24268:10;24240:80;;;;24288:4;24240:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24183:46;;-1:-1:-1;;;;;;24240:27:0;;;;;:80;;;;;-1:-1:-1;;24240:80:0;;;;;;;;-1:-1:-1;24240:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;24240:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24240:80:0;;;;24343:133;24405:5;24412:9;24423:14;24439:12;24453:2;24457:8;24343:47;:133::i;:::-;24331:145;23766:718;-1:-1:-1;;;;;;;;;;;;;23766:718:0:o;31152:714::-;31386:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;31407:139:::1;31453:4;;31458:1;31453:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31453:7:0::1;31462:10;31474:51;31499:7;31508:4;;31513:1;31508:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31508:7:0::1;31517:4;;31522:1;31517:7;;;;;;31474:51;31527:8;31407:31;:139::i;:::-;31557:18;31585:4:::0;;-1:-1:-1;;31590:15:0;;31585:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31585:21:0::1;-1:-1:-1::0;;;;;31578:39:0::1;;31618:2;31578:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31578:43:0::1;-1:-1:-1::0;;;;;31578:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31578:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31578:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31578:43:0;31632:44:::1;::::0;;31578:43:::1;31632:44:::0;;::::1;::::0;;;;;;;;;;;31578:43;;-1:-1:-1;31632:44:0::1;::::0;;;31667:4;;;;;;31632:44;::::1;::::0;31667:4;;31632:44;31667:4;31632:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31673:2:0;;-1:-1:-1;31632:34:0::1;::::0;-1:-1:-1;;31632:44:0:i:1;:::-;31775:12:::0;31709:62:::1;31757:13:::0;31716:4;;-1:-1:-1;;31721:15:0;;31716:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31716:21:0::1;-1:-1:-1::0;;;;;31709:39:0::1;;31749:2;31709:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31709:43:0::1;-1:-1:-1::0;;;;;31709:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31709:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31709:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31709:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31687:171;;;;-1:-1:-1::0;;;31687:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16618:1;31152:714:::0;;;;;;;:::o;32728:843::-;32995:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33054:4:0::1;33029:29;:4:::0;;-1:-1:-1;;33034:15:0;;33029:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33029:21:0::1;-1:-1:-1::0;;;;;33029:29:0::1;;33021:71;;;::::0;;-1:-1:-1;;;33021:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33021:71:0;;;;;;;;;;;;;::::1;;33103:139;33149:4;;33154:1;33149:7;;;;;;33103:139;33253:55;33288:4;;33253:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33302:4:0::1;::::0;-1:-1:-1;33253:34:0::1;::::0;-1:-1:-1;;33253:55:0:i:1;:::-;33336:37;::::0;;-1:-1:-1;;;33336:37:0;;33367:4:::1;33336:37;::::0;::::1;::::0;;;33319:14:::1;::::0;-1:-1:-1;;;;;33343:4:0::1;33336:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33336:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33336:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33336:37:0;;-1:-1:-1;33392:25:0;;::::1;;33384:81;;;;-1:-1:-1::0;;;33384:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33482:4;-1:-1:-1::0;;;;;33476:20:0::1;;33497:9;33476:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33476:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33476:31:0;;;;33518:45;33549:2;33553:9;33518:30;:45::i;26582:697::-:0;26798:21;26770:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;26856:4:::1;-1:-1:-1::0;;;;;26845:15:0::1;:4;;26850:1;26845:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26845:7:0::1;-1:-1:-1::0;;;;;26845:15:0::1;;26837:57;;;::::0;;-1:-1:-1;;;26837:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26837:57:0;;;;;;;;;;;;;::::1;;26915:56;26946:7;26955:9;26966:4;;26915:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26915:30:0::1;::::0;-1:-1:-1;;;26915:56:0:i:1;:::-;26905:66;;27021:12;26990:7;27015:1;26998:7;:14;:18;26990:27;;;;;;;;;;;;;;:43;;26982:99;;;;-1:-1:-1::0;;;26982:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27098:4;-1:-1:-1::0;;;;;27092:19:0::1;;27119:7;27127:1;27119:10;;;;;;;;;;;;;;27092:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27092:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27092:40:0;;;;;27156:4;-1:-1:-1::0;;;;;27150:20:0::1;;27171:51;27196:7;27205:4;;27210:1;27205:7;;;;;;27171:51;27224:7;27232:1;27224:10;;;;;;;;;;;;;;27150:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;27150:85:0::1;-1:-1:-1::0;;;;;27150:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27150:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27150:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27150:85:0;27143:93:::1;;;;27247:24;27253:7;27262:4;;27247:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27268:2:0;;-1:-1:-1;27247:5:0::1;::::0;-1:-1:-1;;27247:24:0:i:1;:::-;26582:697:::0;;;;;;;;:::o;34081:261::-;34234:13;34272:62;34301:9;34312;34323:10;34272:28;:62::i;25970:606::-;26194:21;26175:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;26238:55:::1;26268:7;26277:9;26288:4;;26238:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26238:29:0::1;::::0;-1:-1:-1;;;26238:55:0:i:1;:::-;26228:65;;26326:11;26312:7;26320:1;26312:10;;;;;;;;;;;;;;:25;;26304:77;;;;-1:-1:-1::0;;;26304:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16454:38:::0;;;:::o;33615:188::-;33712:12;33744:51;33767:7;33776:8;33786;33744:22;:51::i;23060:700::-;23326:14;23307:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;23369:196:::1;23399:5;23419:4;23438:9;23462:14;23491:12;23526:4;23546:8;23369:15;:196::i;:::-;23615:38;::::0;;-1:-1:-1;;;23615:38:0;;23647:4:::1;23615:38;::::0;::::1;::::0;;;23353:212;;-1:-1:-1;23576:78:0::1;::::0;-1:-1:-1;23604:5:0;;23611:2;;-1:-1:-1;;;;;23615: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;23615:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23615:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23615:38:0;23576:27:::1;:78::i;:::-;23671:4;-1:-1:-1::0;;;;;23665:20:0::1;;23686:9;23665:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23665:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23665:31:0;;;;23707:45;23738:2;23742:9;23707:30;:45::i;31872:850::-:0;32132:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;32177:4:::1;-1:-1:-1::0;;;;;32166:15:0::1;:4;;32171:1;32166:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32166:7:0::1;-1:-1:-1::0;;;;;32166:15:0::1;;32158:57;;;::::0;;-1:-1:-1;;;32158:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32158:57:0;;;;;;;;;;;;;::::1;;32226:13;32242:9;32226:25;;32268:4;-1:-1:-1::0;;;;;32262:19:0::1;;32289:8;32262:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32262:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32262:38:0;;;;;32324:4;-1:-1:-1::0;;;;;32318:20:0::1;;32339:51;32364:7;32373:4;;32378:1;32373:7;;;;;;32339:51;32392:8;32318:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32318:83:0::1;-1:-1:-1::0;;;;;32318:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32318:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32318:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32318:83:0;32311:91:::1;;;;32413:18;32441:4:::0;;-1:-1:-1;;32446:15:0;;32441:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32441:21:0::1;-1:-1:-1::0;;;;;32434:39:0::1;;32474:2;32434:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32434:43:0::1;-1:-1:-1::0;;;;;32434:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32434:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32434:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32434:43:0;32488:44:::1;::::0;;32434:43:::1;32488:44:::0;;::::1;::::0;;;;;;;;;;;32434:43;;-1:-1:-1;32488:44:0::1;::::0;;;32523:4;;;;;;32488:44;::::1;::::0;32523:4;;32488:44;32523:4;32488:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32529:2:0;;-1:-1:-1;32488:34:0::1;::::0;-1:-1:-1;;32488:44:0:i:1;:::-;32631:12:::0;32565:62:::1;32613:13:::0;32572:4;;-1:-1:-1;;32577:15:0;;32572:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32572:21:0::1;-1:-1:-1::0;;;;;32565:39:0::1;;32605:2;32565:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32565:43:0::1;-1:-1:-1::0;;;;;32565:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20079:865:0::0;20333:12;20347;20314:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;20372:12:::1;20387:49;20412:7;20421:6;20429;20387:24;:49::i;:::-;20447:62;::::0;;-1:-1:-1;;;20447:62:0;;20481:10:::1;20447:62;::::0;::::1;::::0;-1:-1:-1;;;;;20447:33:0;::::1;:62:::0;;;;;;;;;;;;;;20372:64;;-1:-1:-1;20447:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20447:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20447:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20447:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20577:29:0::1;::::0;;-1:-1:-1;;;20577:29:0;;-1:-1:-1;;;;;20577:29:0;;::::1;;::::0;::::1;::::0;;;20547:12:::1;::::0;;;20577:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;20547:12;20577:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20577:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20577:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20577:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20577:29:0;-1:-1:-1;20618:14:0::1;20637:43;20665:6:::0;20673;20637:27:::1;:43::i;:::-;20617:63;;;20722:6;-1:-1:-1::0;;;;;20712:16:0::1;:6;-1:-1:-1::0;;;;;20712:16:0::1;;:58;;20753:7;20762;20712:58;;;20732:7;20741;20712:58;20691:79:::0;;-1:-1:-1;20691:79:0;-1:-1:-1;20789:21:0;;::::1;;20781:72;;;;-1:-1:-1::0;;;20781:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20883:10;20872:7;:21;;20864:72;;;;-1:-1:-1::0;;;20864:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16618:1;;;;20079:865:::0;;;;;;;;;;;:::o;16406:41::-;;;:::o;34350:253::-;34494:21;34540:55;34571:7;34580:8;34590:4;34540:30;:55::i;22312:669::-;22601:16;22619:14;22646:12;22661:46;22686:7;22695:5;22702:4;22661:24;:46::i;:::-;22646:61;;22718:10;22731;:33;;22755:9;22731:33;;;-1:-1:-1;;22731:33:0;22775:80;;;-1:-1:-1;;;22775:80:0;;22803:10;22775:80;;;;22823:4;22775:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22718:46;;-1:-1:-1;;;;;;22775:27:0;;;;;:80;;;;;-1:-1:-1;;22775:80:0;;;;;;;;-1:-1:-1;22775:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;22775:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22775:80:0;;;;22893;22912:5;22919:9;22930:14;22946:12;22960:2;22964:8;22893:18;:80::i;:::-;22866:107;;;;-1:-1:-1;22312:669:0;-1:-1:-1;;;;;;;;;;;;;22312:669:0:o;18318:738::-;18606:12;18620;18634:14;18587:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;18682:85:::1;18696:6;18704;18712:14;18728;18744:10;18756;18682:13;:85::i;:::-;18661:106:::0;;-1:-1:-1;18661:106:0;-1:-1:-1;18778:12:0::1;18793:49;18818:7;18827:6:::0;18835;18793:24:::1;:49::i;:::-;18778:64;;18853:66;18885:6;18893:10;18905:4;18911:7;18853:31;:66::i;:::-;18930;18962:6;18970:10;18982:4;18988:7;18930:31;:66::i;:::-;19034:4;-1:-1:-1::0;;;;;19019:25:0::1;;19045:2;19019:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19019:29:0::1;-1:-1:-1::0;;;;;19019:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19019:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19019:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19019:29:0;18318:738;;;;-1:-1:-1;19019:29:0;;-1:-1:-1;18318:738:0;;-1:-1:-1;;;;;;;;;18318:738:0:o;19062:974::-;19315:16;19333:14;19349;19296:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;19403:176:::1;19431:5;19451:4;19470:18;19503:9;19527:14;19556:12;19403:13;:176::i;:::-;19376:203:::0;;-1:-1:-1;19376:203:0;-1:-1:-1;19590:12:0::1;19605:46;19630:7;19639:5:::0;19646:4:::1;19605:24;:46::i;:::-;19590:61;;19662:69;19694:5;19701:10;19713:4;19719:11;19662:31;:69::i;:::-;19748:4;-1:-1:-1::0;;;;;19742:19:0::1;;19769:9;19742:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19742:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19742:39:0;;;;;19805:4;-1:-1:-1::0;;;;;19799:20:0::1;;19820:4;19826:9;19799:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19799:37:0::1;-1:-1:-1::0;;;;;19799:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19799:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19799:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19799:37:0;19792:45:::1;;;;19875:4;-1:-1:-1::0;;;;;19860:25:0::1;;19886:2;19860:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19860:29:0::1;-1:-1:-1::0;;;;;19860:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19860:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19860:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19860:29:0;;-1:-1:-1;19940:9:0::1;:21:::0;-1:-1:-1;19936:92:0::1;;;19963:65;19994:10;20018:9;20006;:21;19963:30;:65::i;:::-;16618:1;19062:974:::0;;;;;;;;;;;:::o;28975:810::-;29188:21;29160:8;16563:15;16551:8;:27;;16543:64;;;;;-1:-1:-1;;;16543:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16543:64:0;;;;;;;;;;;;;;;29246:4:::1;-1:-1:-1::0;;;;;29235:15:0::1;:4;;29240:1;29235:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29235:7:0::1;-1:-1:-1::0;;;;;29235:15:0::1;;29227:57;;;::::0;;-1:-1:-1;;;29227:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29227:57:0;;;;;;;;;;;;;::::1;;29305:55;29335:7;29344:9;29355:4;;29305:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29305:29:0::1;::::0;-1:-1:-1;;;29305:55:0:i:1;:::-;29295:65;;29393:9;29379:7;29387:1;29379:10;;;;;;;;;;;;;;:23;;29371:75;;;;-1:-1:-1::0;;;29371:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29463:4;-1:-1:-1::0;;;;;29457:19:0::1;;29484:7;29492:1;29484:10;;;;;;;;;;;;;;29457:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29457:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29457:40:0;;;;;29521:4;-1:-1:-1::0;;;;;29515:20:0::1;;29536:51;29561:7;29570:4;;29575:1;29570:7;;;;;;29536:51;29589:7;29597:1;29589:10;;;;;;;;;;;;;;29515:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;29515:85:0::1;-1:-1:-1::0;;;;;29515:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29515:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29515:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29515:85:0;29508:93:::1;;;;29612:24;29618:7;29627:4;;29612:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29633:2:0;;-1:-1:-1;29612:5:0::1;::::0;-1:-1:-1;;29612:24:0:i:1;:::-;29699:7;29707:1;29699:10;;;;;;;;;;;;;;29687:9;:22;29683:94;;;29711:66;29742:10;29766:7;29774:1;29766:10;;;;;;;;;;;;;;29754:9;:22;29711:30;:66::i;1426:361::-:0;1621:45;;;-1:-1:-1;;;;;1621:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1621:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1610:57:0;;;;1575:12;;1589:17;;1610:10;;;;1621:45;1610:57;;;25:18:-1;1610: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;;;1610: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;;1574:93:0;;;;1686:7;:57;;;;-1:-1:-1;1698:11:0;;:16;;:44;;;1729:4;1718:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1718:24:0;1698:44;1678:101;;;;;-1:-1:-1;;;1678:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1426:361;;;;;:::o;2205:195::-;2313:12;;;2275;2313;;;;;;;;;-1:-1:-1;;;;;2292:7:0;;;2306:5;;2292:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2292:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2274:52:0;;;2345:7;2337:55;;;;-1:-1:-1;;;2337:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2205:195;;;:::o;12785:519::-;12878:14;12924:1;12913:8;:12;12905:68;;;;-1:-1:-1;;;12905:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13004:1;12992:9;:13;:31;;;;;13022:1;13009:10;:14;12992:31;12984:84;;;;-1:-1:-1;;;12984:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13079:20;13102:18;:8;13115:4;13102:18;:12;:18;:::i;:::-;13079:41;-1:-1:-1;13131:14:0;13148:31;13079:41;13168:10;13148:31;:19;:31;:::i;:::-;13131:48;-1:-1:-1;13190:16:0;13209:41;13234:15;13209:20;:9;13223:5;13209:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;13190:60;;13285:11;13273:9;:23;;;;;;;12785:519;-1:-1:-1;;;;;;;12785:519:0:o;13981:511::-;14082:21;14139:1;14124:4;:11;:16;;14116:59;;;;;-1:-1:-1;;;14116:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14207:4;:11;14196:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14196:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14196:23:0;;14186:33;;14243:8;14230:7;14238:1;14230:10;;;;;;;;;;;;;:21;;;;;14267:6;14262:223;14293:1;14279:4;:11;:15;14275:1;:19;14262:223;;;14317:14;14333:15;14352:42;14364:7;14373:4;14378:1;14373:7;;;;;;;;;;;;;;14382:4;14387:1;14391;14387:5;14382:11;;;;;;;;;;;;;;14352;:42::i;:::-;14316:78;;;;14426:47;14439:7;14447:1;14439:10;;;;;;;;;;;;;;14451:9;14462:10;14426:12;:47::i;:::-;14409:7;14417:1;14421;14417:5;14409:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14296:3:0;;14262:223;;;;13981:511;;;;;:::o;11302:478::-;11391:12;11417:14;11433;11451:26;11462:6;11470;11451:10;:26::i;:::-;11615:32;;;-1:-1:-1;;11615:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11615:32:0;;;;;11605:43;;;;;;-1:-1:-1;;;;;;11518:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11518:251:0;;;;;;;11508:262;;;;;;;;;11302:478;-1:-1:-1;;;;;11302:478:0:o;1795:402::-;2020:51;;;-1:-1:-1;;;;;2020:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2020:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;2009:63:0;;;;1974:12;;1988:17;;2009:10;;;;2020:51;2009:63;;;25:18:-1;2009: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;;;2009: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;;1973:99:0;;;;2091:7;:57;;;;-1:-1:-1;2103:11:0;;:16;;:44;;;2134:4;2123:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2123:24:0;2103:44;2083:106;;;;-1:-1:-1;;;2083:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:402;;;;;;:::o;24595:735::-;24702:6;24697:626;24728:1;24714:4;:11;:15;24710:1;:19;24697:626;;;24752:13;24767:14;24786:4;24791:1;24786:7;;;;;;;;;;;;;;24795:4;24800:1;24804;24800:5;24795:11;;;;;;;;;;;;;;24751:56;;;;24823:14;24842:42;24870:5;24877:6;24842:27;:42::i;:::-;24822:62;;;24899:14;24916:7;24924:1;24928;24924:5;24916:14;;;;;;;;;;;;;;24899:31;;24946:15;24963;24991:6;-1:-1:-1;;;;;24982:15:0;:5;-1:-1:-1;;;;;24982:15:0;;:61;;25024:9;25040:1;24982:61;;;25006:1;25010:9;24982:61;24945:98;;;;25058:10;25089:1;25075:4;:11;:15;25071:1;:19;:82;;25150:3;25071:82;;;25093:54;25118:7;25127:6;25135:4;25140:1;25144;25140:5;25135:11;;;;;;;;;;;;;;25093:24;:54::i;:::-;25058:95;;25183:48;25208:7;25217:5;25224:6;25183:24;:48::i;:::-;-1:-1:-1;;;;;25168:69:0;;25256:10;25268;25280:2;25294:1;25284:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25284:12:0;87:42:-1;143:17;;-1:-1;25284:12:0;;25168:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25168:143:0;-1:-1:-1;;;;;25168:143: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;25168:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25168:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24731:3:0;;;;;-1:-1:-1;24697:626:0;;-1:-1:-1;;;;;;;;24697:626:0;;;24595:735;;;:::o;14573:532::-;14674:21;14731:1;14716:4;:11;:16;;14708:59;;;;;-1:-1:-1;;;14708:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14799:4;:11;14788:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14788:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14788:23:0;;14778:33;;14852:9;14822:7;14847:1;14830:7;:14;:18;14822:27;;;;;;;;;;;;;;;;;:39;14886:11;;-1:-1:-1;;14886:15:0;14872:226;14903:5;;14872:226;;14931:14;14947:15;14966:42;14978:7;14987:4;14996:1;14992;:5;14987:11;;;;;;;;;;;;;;15000:4;15005:1;15000:7;;;;;;;14966:42;14930:78;;;;15040:46;15052:7;15060:1;15052:10;;;;;;;;;;;;;;15064:9;15075:10;15040:11;:46::i;:::-;15023:7;15035:1;15031;:5;15023:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14910:3:0;14872:226;;29932:1214;30045:6;30040:1099;30071:1;30057:4;:11;:15;30053:1;:19;30040:1099;;;30095:13;30110:14;30129:4;30134:1;30129:7;;;;;;;;;;;;;;30138:4;30143:1;30147;30143:5;30138:11;;;;;;;;;;;;;;30094:56;;;;30166:14;30185:42;30213:5;30220:6;30185:27;:42::i;:::-;30165:62;;;30242:19;30279:48;30304:7;30313:5;30320:6;30279:24;:48::i;:::-;30242:86;;30343:16;30374:17;30462:13;30477;30495:4;-1:-1:-1;;;;;30495:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30495:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30495:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30495:18:0;;;;;;;-1:-1:-1;;;;;30461:52:0;;;;-1:-1:-1;30461:52:0;;-1:-1:-1;30529:17:0;;-1:-1:-1;;;;;30570:15:0;;;;;;;:61;;30612:8;30622;30570:61;;;30589:8;30599;30570:61;30528:103;;;;30660:56;30703:12;30667:5;-1:-1:-1;;;;;30660:23:0;;30692:4;30660:38;;;;;;;;;;;;;-1:-1:-1;;;;;30660:38:0;-1:-1:-1;;;;;30660:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30660:56:0;30646:70;;30746:71;30776:11;30789:12;30803:13;30746:29;:71::i;:::-;30731:86;;30040:1099;;;;30848:15;30865;30893:6;-1:-1:-1;;;;;30884:15:0;:5;-1:-1:-1;;;;;30884:15:0;;:67;;30929:12;30948:1;30884:67;;;30908:1;30912:12;30884:67;30847:104;;;;30966:10;30997:1;30983:4;:11;:15;30979:1;:19;:82;;31058:3;30979:82;;;31001:54;31026:7;31035:6;31043:4;31048:1;31052;31048:5;31043:11;;;;;;;31001:54;31114:12;;;31124:1;31114:12;;;;;;;;;;-1:-1:-1;;;31076:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31076:51:0;;;;;;;;;;;;;;;;;;;;;;30966:95;;-1:-1:-1;31076:9:0;;;;;;31086:10;;31098;;30966:95;;31114:12;;31076:51;;;;;;;;31114:12;;31076:51;;;;31114: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;31076:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31076:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30074:3:0;;;;;-1:-1:-1;30040:1099:0;;-1:-1:-1;;;;;;;;;;30040:1099:0;10325:129;10409:5;;;10404:16;;;;10396:50;;;;;-1:-1:-1;;;10396:50:0;;;;;;;;;;;;-1:-1:-1;;;10396:50:0;;;;;;;;;;;;;;13425:474;13518:13;13564:1;13552:9;:13;13544:70;;;;-1:-1:-1;;;13544:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13645:1;13633:9;:13;:31;;;;;13663:1;13650:10;:14;13633:31;13625:84;;;;-1:-1:-1;;;13625:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13720:14;13737:35;13766:5;13737:24;:9;13751;13737:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13720:52;-1:-1:-1;13783:16:0;13802:35;13832:4;13802:25;:10;13817:9;13802:25;:14;:25;:::i;:35::-;13783:54;;13859:32;13889:1;13872:11;13860:9;:23;;;;;;;13859:32;:29;:32;:::i;:::-;13848:43;13425:474;-1:-1:-1;;;;;;13425:474:0:o;12342:321::-;12424:12;12467:1;12457:7;:11;12449:61;;;;-1:-1:-1;;;12449:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12540:1;12529:8;:12;:28;;;;;12556:1;12545:8;:12;12529:28;12521:81;;;;-1:-1:-1;;;12521:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12647:8;12623:21;:7;12635:8;12623:21;:11;:21;:::i;:::-;:32;;;;;;;12342:321;-1:-1:-1;;;;12342:321:0:o;10861:349::-;10936:14;10952;10997:6;-1:-1:-1;;;;;10987:16:0;:6;-1:-1:-1;;;;;10987:16:0;;;10979:66;;;;-1:-1:-1;;;10979:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11084:6;-1:-1:-1;;;;;11075:15:0;:6;-1:-1:-1;;;;;11075:15:0;;:53;;11113:6;11121;11075:53;;;11094:6;11102;11075:53;11056:72;;-1:-1:-1;11056:72:0;-1:-1:-1;;;;;;11147:20:0;;11139:63;;;;;-1:-1:-1;;;11139:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10861:349;;;;;:::o;16922:1390::-;17235:50;;;-1:-1:-1;;;17235:50:0;;-1:-1:-1;;;;;17235:50:0;;;;;;;;;;;;;;;;17140:12;;;;;;17253:7;17235:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;17235:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17235:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17235:50:0;-1:-1:-1;;;;;17235:64:0;;17231:150;;;17316:53;;;-1:-1:-1;;;17316:53:0;;-1:-1:-1;;;;;17316:53:0;;;;;;;;;;;;;;;;17334:7;17316:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;17316:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;17316:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17316:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17231:150:0;17392:13;17407;17424:53;17453:7;17462:6;17470;17424:28;:53::i;:::-;17391:86;;;;17492:8;17504:1;17492:13;:30;;;;-1:-1:-1;17509:13:0;;17492:30;17488:817;;;17561:14;;-1:-1:-1;17577:14:0;;-1:-1:-1;17488:817:0;;;17625:19;17647:58;17670:14;17686:8;17696;17647:22;:58::i;:::-;17625:80;;17742:14;17724;:32;17720:574;;17803:10;17785:14;:28;;17777:79;;;;-1:-1:-1;;;17777:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17897:14;;-1:-1:-1;17913:14:0;-1:-1:-1;17913:14:0;17720:574;;;17969:19;17991:58;18014:14;18030:8;18040;17991:22;:58::i;:::-;17969:80;;18093:14;18075;:32;;18068:40;;;;18153:10;18135:14;:28;;18127:79;;;;-1:-1:-1;;;18127:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18247:14;-1:-1:-1;18263:14:0;;-1:-1:-1;17720:574:0;17488:817;;16922:1390;;;;;;;;;;;:::o;10462:142::-;10514:6;10541;;;:30;;-1:-1:-1;;10556:5:0;;;10570:1;10565;10556:5;10565:1;10551:15;;;;;:20;10541:30;10533:63;;;;;-1:-1:-1;;;10533:63:0;;;;;;;;;;;;-1:-1:-1;;;10533:63:0;;;;;;;;;;;;;;10189:128;10273:5;;;10268:16;;;;10260:49;;;;;-1:-1:-1;;;10260:49:0;;;;;;;;;;;;-1:-1:-1;;;10260:49:0;;;;;;;;;;;;;;11838:391;11931:13;11946;11973:14;11992:26;12003:6;12011;11992:10;:26::i;:::-;11972:46;;;12030:13;12045;12078:32;12086:7;12095:6;12103;12078:7;:32::i;:::-;-1:-1:-1;;;;;12063:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12063:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12063:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12063:62:0;;;;;;;-1:-1:-1;;;;;12029:96:0;;;;-1:-1:-1;12029:96:0;;-1:-1:-1;;;;;;12159:16:0;;;;;;;:62;;12202:8;12212;12159:62;;;12179:8;12189;12159:62;12136:85;;;;-1:-1:-1;11838:391:0;-1:-1:-1;;;;;;;11838:391:0:o

Swarm Source

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