Contract 0x031Cf8eEae948B31a8E287A3c3261311762D23ed

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf319364d4dbb7165e7587d93b921b639c80343f9b49f8faf6438dba0e93fbcaaRemove Liquidity...752446322022-09-30 18:22:461 day 18 hrs ago0x56ddcbc09713d2ba8dff06ec008cbecf4b702bfb IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0
0x0b37eb3cd2e806ce90144822d9868dbfe90b1ea024d6279b5d4492f163d9a401Swap Exact Token...752312802022-09-30 13:52:191 day 22 hrs ago0x8189ca95335af50a0c9490547186008a6d7747da IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.0000079534
0x61d6176b4de78fe5e412ee092a9a21954491b6b7e11234b425e2e6b9f7b69548Add Liquidity751698702022-09-29 15:28:192 days 21 hrs ago0xbf0113a4e10b46982eac17e75bf300a9dc7b4d11 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0
0x7bbf78c3416fae18f78f3440b8b1c74037baa86faad0663d9addea91360feaabSwap Tokens For ...751698022022-09-29 15:26:502 days 21 hrs ago0xbf0113a4e10b46982eac17e75bf300a9dc7b4d11 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0
0xe8a9e13b8693516def5173871db354da6ae5f9483463c13eaf72c1af39cddcd2Swap Tokens For ...751697242022-09-29 15:25:062 days 21 hrs ago0xbf0113a4e10b46982eac17e75bf300a9dc7b4d11 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0
0x47c8d575df185e8bc8fe4417b2d340122f75600442fd883ab90efb6e2f2b019eSwap Exact Token...751693392022-09-29 15:16:372 days 21 hrs ago0xbf0113a4e10b46982eac17e75bf300a9dc7b4d11 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0
0x265cb1297f98747708f8ead48fa3a9127d25c825a88264958d3f70f767607f20Swap Exact ETH F...751693272022-09-29 15:16:212 days 21 hrs ago0xbf0113a4e10b46982eac17e75bf300a9dc7b4d11 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0.00000761483 ETH0
0xbf5fa6b4b143b8cf87829a1d136b350790352f9af4f37f9714bb51f8186256deSwap Exact Token...751692692022-09-29 15:15:042 days 21 hrs ago0xbf0113a4e10b46982eac17e75bf300a9dc7b4d11 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0
0x8b66cd30f6571965c3d798c7d3b6fa4d47982923b2cef61c063d36c7731e3825Swap Exact Token...750968792022-09-28 14:14:243 days 22 hrs ago0x8189ca95335af50a0c9490547186008a6d7747da IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00000797202
0xf6aa45b3a1b775217d0f0d8e1960dad372d6ed73bce69518f76b5d3eb297d37bAdd Liquidity750609982022-09-28 2:27:094 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00000948871
0xecb7ad301b34ea3de37f89c24299959729f14aecc556e5eeb1c2035cf5a10bb9Swap Exact Token...750609662022-09-28 2:26:314 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00000709156
0x7f7d25190cd555fdd81494a263849000ec785c257e6a083bcf8a449d387ef3e0Add Liquidity750608832022-09-28 2:24:534 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00000982191
0x3524cb379511dacf6967296f7a36b42ea2c1b83eb3e87144b94dc2cadee497e0Swap Exact Token...750608522022-09-28 2:24:124 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00001116367
0xeca05d667b12d2198d7cc866f92fac80d05e6d06c06583016284d6029fa3566cSwap Exact Token...750608342022-09-28 2:23:494 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00001116367
0xa3c0816444e002ccb39fa0ca03b9510b91cfdf4ca1f9a59435151a86dd8d419dAdd Liquidity750607302022-09-28 2:21:454 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00001021307
0xa91931caabb24cd88d244541c5e435569deb4968cf4117ba1a91013e5b5d8f6dSwap Tokens For ...750607062022-09-28 2:21:164 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00000707014
0x8145be82dcbfb3c4f16f0551f04479f19e6232723d748b6b10e885479063580aAdd Liquidity750605262022-09-28 2:17:404 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.0000101668
0x1d4b7c3d4dce908ec6a4d8292b07df6c256ba583df4027af62ba93170c2f03d6Swap Tokens For ...750604872022-09-28 2:16:544 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00000707014
0xeb36fbe838b1018dd2e3c194608dd0f3ebcb6c9b6dd45de1dc9243d1f0aca21fSwap Exact Token...750603932022-09-28 2:15:004 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00000808031
0xf0bfb8fa796a16b804deee7ca6a0c53a9d3191b3aad36ff3b12e027134e352e6Swap Exact Token...750603622022-09-28 2:14:234 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00000808031
0x3db2695b4283157141a5892e9688358c9a5508559e2995c0952ac8d8bceed681Swap Exact Token...750603342022-09-28 2:13:504 days 10 hrs ago0x4ec494e0703b78ddfd7d70e0ea3c05804cad3441 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00001215179
0x67981497d66b551c458483611ff44ae5bebc2c567eb13c4441a3c6ddf6db63a4Add Liquidity750192872022-09-27 12:41:344 days 23 hrs ago0xbf0113a4e10b46982eac17e75bf300a9dc7b4d11 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0
0xd00b8b9d0aeafd7a59569f3fa7f833808f0ccbecadf3d8d83620146d2ceeb3c6Remove Liquidity...749965022022-09-27 5:04:125 days 7 hrs ago0x62616bb4f919dd601445f63f6d1add393a683e0a IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00001246126
0x4b9d600467c1c6343c7f89eabbd235e0f6c2a51b7f2b4658d9f0ca3e1a2704f4Swap Exact Token...749934692022-09-27 4:04:435 days 8 hrs ago0x605ce19532c7121d1b5e632eb776e5aa7bfb8990 IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.00001181579
0x8be591c0c356a59daa8aab381003f747f413a8bfcd9357e2e8f0ee74de44ccf8Swap Exact Token...749582182022-09-26 16:15:215 days 20 hrs ago0x8189ca95335af50a0c9490547186008a6d7747da IN  0x031cf8eeae948b31a8e287a3c3261311762d23ed0 ETH0.0000067564
[ Download CSV Export 
Parent Txn Hash Block From To Value
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, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at aurorascan.dev on 2022-06-24
*/

/**
 *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'b94084518bf24b24b8006a7660bcb891746c78662db1db45ac176d71b00bb587' // 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 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"}]

60c060405234801561001057600080fd5b5060405162004768380380620047688339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145e3620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145e36000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144f16023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602b815260200180614563602b913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b60006132c5856126fe63ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f38861271063ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fb94084518bf24b24b8006a7660bcb891746c78662db1db45ac176d71b00bb587609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061453f6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602c8152602001806143c0602c913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b6000613e07612710613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216126fe613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602581526020018061445f6025913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260258152602001806143ec6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050600080614318888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435057600080fd5b505afa158015614364573d6000803e3d6000fd5b505050506040513d606081101561437a57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143ad5780826143b0565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a26469706673582212207c2bf5ec01e1d1bf4b6d502ec1634d96c1b24883226dc1758c31dc179c91262864736f6c63430006060033000000000000000000000000d57064353865f80e01c97ceeca674b57985d03cb000000000000000000000000c9bdeed33cd01541e1eed10f90519d2c06fe3feb

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

000000000000000000000000d57064353865f80e01c97ceeca674b57985d03cb000000000000000000000000c9bdeed33cd01541e1eed10f90519d2c06fe3feb

-----Decoded View---------------
Arg [0] : _factory (address): 0xd57064353865f80e01c97ceeca674b57985d03cb
Arg [1] : _WETH (address): 0xc9bdeed33cd01541e1eed10f90519d2c06fe3feb

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d57064353865f80e01c97ceeca674b57985d03cb
Arg [1] : 000000000000000000000000c9bdeed33cd01541e1eed10f90519d2c06fe3feb


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://7c2bf5ec01e1d1bf4b6d502ec1634d96c1b24883226dc1758c31dc179c912628
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.