Contract 0x3047799262d8d2ef41ed2a222205968bc9b0d895

 

Contract Overview

CheeseSwap: Router
Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0xd18c6b117ef996a29eb9b54dd91c47edb98c157619fe3b204d51bc4927dda6be27594422020-12-03 0:02:111 hr 54 mins ago0x5f0ff52df8df2c5351c47b6711c33f36c5402909 IN  CheeseSwap: Router0 BNB0.004019066
0x9b23696270171f9bfbf01f062a39773044a884b84a97b3b2e148085fddddb5da27564052020-12-02 21:29:154 hrs 27 mins ago0x1665e27eced76a256710513605781b28e380bab6 IN  CheeseSwap: Router0 BNB0.00258944
0x5590f387fdd6432427d926714145a178d0ae1f9a98366dbffaa1a21242b1e4c127563132020-12-02 21:24:394 hrs 31 mins ago0x1665e27eced76a256710513605781b28e380bab6 IN  CheeseSwap: Router0 BNB0.00258944
0x3c21ec9496618b04bfa6cb7b12291d1ea4b2c5014dd7e24cca280eeed3bc21f327562522020-12-02 21:21:364 hrs 35 mins ago0x1665e27eced76a256710513605781b28e380bab6 IN  CheeseSwap: Router0 BNB0.00258944
0x6217b2cf66636fb058686991b4b1bbca8f2e2ba2c8ed873d1eef892edad21ece27562512020-12-02 21:21:334 hrs 35 mins ago0xa1e90a2b858497fcb75870113b367db016602ac3 IN  CheeseSwap: Router0 BNB0.00194354
0x325dd4910aadcb7b585bc5a8311af91ec2ab5a9acbfc3a14733cb5f92c96104427562352020-12-02 21:20:454 hrs 35 mins ago0x1665e27eced76a256710513605781b28e380bab6 IN  CheeseSwap: Router0 BNB0.002346
0x6b8d8ed584235b6b6fb00765d4722397e74aacc2345ddb83cb5d854eac7ba99427526312020-12-02 18:19:257 hrs 37 mins ago0x5f0ff52df8df2c5351c47b6711c33f36c5402909 IN  CheeseSwap: Router0 BNB0.002633132
0x7d68247a8aad84198fa0531c8136df9e82c57f256b8ceb306cb9aa711d3173c227516832020-12-02 17:31:468 hrs 24 mins ago0x5d8a068cfb2ef7cd3f95e16b5c5f2e08cff2eed5 IN  CheeseSwap: Router0 BNB0.00223756
0xd60f28e579711da754e7ecd9c7cee1d42b53df09869b562b41ee910681b59fe727488032020-12-02 15:07:4510 hrs 48 mins ago0x91ac06927601d1476765b97f4543969cf7980a5c IN  CheeseSwap: Router0.058180658 BNB0.001983
0x35b6c2bd49e723ebd4c87036bdcd5a50c73877d00f5daba4039cb2b6871be81527487892020-12-02 15:07:0310 hrs 49 mins ago0x91ac06927601d1476765b97f4543969cf7980a5c IN  CheeseSwap: Router0.1 BNB0.00222644
0x2687a6fc11a0e2c5a2310c1a4b028a33ac8a7745671065036e6dc3bcc415cadc27487842020-12-02 15:06:4810 hrs 49 mins ago0x91ac06927601d1476765b97f4543969cf7980a5c IN  CheeseSwap: Router0.1 BNB0.00222644
0x32b5201c2777cc130fbd33e47d2d89015fdb0cc6d7fcc47e6346a4fefd951fa127484242020-12-02 14:48:4811 hrs 7 mins ago0xe9a01a6510447865a92a51ecbff38c78001c358e IN  CheeseSwap: Router0.08643575 BNB0.0022262
0xb353c853b9bcfc00ca4e28074e0ed17b8e0d5b21157f2cf58a082ca98b7aabfb27483932020-12-02 14:47:1511 hrs 9 mins ago0xe9a01a6510447865a92a51ecbff38c78001c358e IN  CheeseSwap: Router0.1 BNB0.0022262
0x15ebc10a9ed32943047b9e904545830fa7e06daa82441d643a78d778c8804fc627483892020-12-02 14:47:0311 hrs 9 mins ago0xe9a01a6510447865a92a51ecbff38c78001c358e IN  CheeseSwap: Router0.1 BNB0.0022262
0xf915e807ca142ac82921326e3007b22577e889c06d055549c8d2f459405d7b0827483762020-12-02 14:46:2411 hrs 10 mins ago0xe9a01a6510447865a92a51ecbff38c78001c358e IN  CheeseSwap: Router0.1 BNB0.0022262
0xf34266fd1afc0ca94bb77d1b582519e4cc7c6958178a9741e8a4489aa95395ff27483662020-12-02 14:45:5411 hrs 10 mins ago0xe9a01a6510447865a92a51ecbff38c78001c358e IN  CheeseSwap: Router0.1 BNB0.0022262
0x5c4dfd2278673ea165d3495341d0b6c877910e81abe9daed3e30ca1567f0aae927483342020-12-02 14:44:1811 hrs 12 mins ago0x9a366ab27ca08138b7a73e47222b1cad29f5c783 IN  CheeseSwap: Router0 BNB0.00349448
0x630f0688baa8776cc4d4debc76233ab17637f5659ff1b0620d190f8a35c9109227456422020-12-02 12:29:2713 hrs 27 mins ago0x747d37be993d9b0d3cc17f6257eb465377671938 IN  CheeseSwap: Router0.2 BNB0.004428926
0x404061c58268372ec5d2e7315ee021e64aa6c18fe2d2289fae43bdd3e860163327456152020-12-02 12:28:0613 hrs 28 mins ago0x747d37be993d9b0d3cc17f6257eb465377671938 IN  CheeseSwap: Router0 BNB0.002977879
0x35bb75846678125bfdd203d9f5e38b99afeca68371bafa4188db6a91e59fbbdb27436052020-12-02 10:47:3515 hrs 9 mins ago0xa1e90a2b858497fcb75870113b367db016602ac3 IN  CheeseSwap: Router0 BNB0.00327452
0xe53e779c982029bbeb2e3f5cded40c741f65f864fe97e218dbac55565c7d5ae727435372020-12-02 10:44:0115 hrs 12 mins ago0xa1e90a2b858497fcb75870113b367db016602ac3 IN  CheeseSwap: Router0 BNB0.00253542
0xba48a9884825713b9f8bd0efaa5e62cf9733abf271fc71ee1eb83f61dcacfd6c27434222020-12-02 10:38:1615 hrs 18 mins ago0xa1e90a2b858497fcb75870113b367db016602ac3 IN  CheeseSwap: Router0 BNB0.00224282
0x290fa088289785baaec4054d350d9bef345b80fd459afd29abd65860bfa9872527225472020-12-01 17:12:531 day 8 hrs ago0xa1e90a2b858497fcb75870113b367db016602ac3 IN  CheeseSwap: Router0 BNB0.00357456
0x80f38adf06b1c8d646cd90c598608004770406aaa2b6f1e77c35901acf390a8c27225102020-12-01 17:11:021 day 8 hrs ago0xa1e90a2b858497fcb75870113b367db016602ac3 IN  CheeseSwap: Router0 BNB0.00254354
0x2d01b8bc9c9190d7091073ff3ab52bde68ad2d382476f5eb47255be373ec7a5d27207842020-12-01 15:44:441 day 10 hrs ago0x5f0ff52df8df2c5351c47b6711c33f36c5402909 IN  CheeseSwap: Router0 BNB0.002632856
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd18c6b117ef996a29eb9b54dd91c47edb98c157619fe3b204d51bc4927dda6be27594422020-12-03 0:02:111 hr 54 mins ago CheeseSwap: Router CheeseSwap Pair0 BNB
0xd18c6b117ef996a29eb9b54dd91c47edb98c157619fe3b204d51bc4927dda6be27594422020-12-03 0:02:111 hr 54 mins ago CheeseSwap: Router 0x51a162dd678d75c269ef6680193c019e0b4bda7e0 BNB
0xd18c6b117ef996a29eb9b54dd91c47edb98c157619fe3b204d51bc4927dda6be27594422020-12-03 0:02:111 hr 54 mins ago CheeseSwap: Router CheeseSwap: CHS Token0 BNB
0xd18c6b117ef996a29eb9b54dd91c47edb98c157619fe3b204d51bc4927dda6be27594422020-12-03 0:02:111 hr 54 mins ago CheeseSwap: Router CheeseSwap Pair0 BNB
0xd18c6b117ef996a29eb9b54dd91c47edb98c157619fe3b204d51bc4927dda6be27594422020-12-03 0:02:111 hr 54 mins ago CheeseSwap: Router 0x51a162dd678d75c269ef6680193c019e0b4bda7e0 BNB
0xc209d43f05f6ad713be64ac7397912c1408fa3debdf9bee5b0c94d1757ea98a927567922020-12-02 21:48:364 hrs 8 mins ago 0x94bcd06974532cb9d98199b1a127461337f55827 CheeseSwap: Router0 BNB
0x7930073cd79d8ba73ecb8b46ed1318177c40a2fec34652bd2baacf9b934fa41e27564662020-12-02 21:32:184 hrs 24 mins ago 0x94bcd06974532cb9d98199b1a127461337f55827 CheeseSwap: Router0 BNB
0x9b23696270171f9bfbf01f062a39773044a884b84a97b3b2e148085fddddb5da27564052020-12-02 21:29:154 hrs 27 mins ago CheeseSwap: Router0x1665e27eced76a256710513605781b28e380bab60.632270894126893101 BNB
0x9b23696270171f9bfbf01f062a39773044a884b84a97b3b2e148085fddddb5da27564052020-12-02 21:29:154 hrs 27 mins ago Binance: WBNB Token CheeseSwap: Router0.632270894126893101 BNB
0x9b23696270171f9bfbf01f062a39773044a884b84a97b3b2e148085fddddb5da27564052020-12-02 21:29:154 hrs 27 mins ago CheeseSwap: Router Binance: WBNB Token0 BNB
0x9b23696270171f9bfbf01f062a39773044a884b84a97b3b2e148085fddddb5da27564052020-12-02 21:29:154 hrs 27 mins ago CheeseSwap: Router 0x51a162dd678d75c269ef6680193c019e0b4bda7e0 BNB
0x9b23696270171f9bfbf01f062a39773044a884b84a97b3b2e148085fddddb5da27564052020-12-02 21:29:154 hrs 27 mins ago CheeseSwap: Router CheeseSwap: CHS Token0 BNB
0x9b23696270171f9bfbf01f062a39773044a884b84a97b3b2e148085fddddb5da27564052020-12-02 21:29:154 hrs 27 mins ago CheeseSwap: Router 0x51a162dd678d75c269ef6680193c019e0b4bda7e0 BNB
0x5590f387fdd6432427d926714145a178d0ae1f9a98366dbffaa1a21242b1e4c127563132020-12-02 21:24:394 hrs 31 mins ago CheeseSwap: Router0x1665e27eced76a256710513605781b28e380bab60.70322311315812494 BNB
0x5590f387fdd6432427d926714145a178d0ae1f9a98366dbffaa1a21242b1e4c127563132020-12-02 21:24:394 hrs 31 mins ago Binance: WBNB Token CheeseSwap: Router0.70322311315812494 BNB
0x5590f387fdd6432427d926714145a178d0ae1f9a98366dbffaa1a21242b1e4c127563132020-12-02 21:24:394 hrs 31 mins ago CheeseSwap: Router Binance: WBNB Token0 BNB
0x5590f387fdd6432427d926714145a178d0ae1f9a98366dbffaa1a21242b1e4c127563132020-12-02 21:24:394 hrs 31 mins ago CheeseSwap: Router 0x51a162dd678d75c269ef6680193c019e0b4bda7e0 BNB
0x5590f387fdd6432427d926714145a178d0ae1f9a98366dbffaa1a21242b1e4c127563132020-12-02 21:24:394 hrs 31 mins ago CheeseSwap: Router CheeseSwap: CHS Token0 BNB
0x5590f387fdd6432427d926714145a178d0ae1f9a98366dbffaa1a21242b1e4c127563132020-12-02 21:24:394 hrs 31 mins ago CheeseSwap: Router 0x51a162dd678d75c269ef6680193c019e0b4bda7e0 BNB
0x3c21ec9496618b04bfa6cb7b12291d1ea4b2c5014dd7e24cca280eeed3bc21f327562522020-12-02 21:21:364 hrs 35 mins ago CheeseSwap: Router0x1665e27eced76a256710513605781b28e380bab60.633101892303604482 BNB
0x3c21ec9496618b04bfa6cb7b12291d1ea4b2c5014dd7e24cca280eeed3bc21f327562522020-12-02 21:21:364 hrs 35 mins ago Binance: WBNB Token CheeseSwap: Router0.633101892303604482 BNB
0x3c21ec9496618b04bfa6cb7b12291d1ea4b2c5014dd7e24cca280eeed3bc21f327562522020-12-02 21:21:364 hrs 35 mins ago CheeseSwap: Router Binance: WBNB Token0 BNB
0x3c21ec9496618b04bfa6cb7b12291d1ea4b2c5014dd7e24cca280eeed3bc21f327562522020-12-02 21:21:364 hrs 35 mins ago CheeseSwap: Router 0x51a162dd678d75c269ef6680193c019e0b4bda7e0 BNB
0x3c21ec9496618b04bfa6cb7b12291d1ea4b2c5014dd7e24cca280eeed3bc21f327562522020-12-02 21:21:364 hrs 35 mins ago CheeseSwap: Router CheeseSwap: CHS Token0 BNB
0x3c21ec9496618b04bfa6cb7b12291d1ea4b2c5014dd7e24cca280eeed3bc21f327562522020-12-02 21:21:364 hrs 35 mins ago CheeseSwap: Router 0x51a162dd678d75c269ef6680193c019e0b4bda7e0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CheeseSwapRouter

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 BscScan.com on 2020-10-22
*/

// SPDX-License-Identifier: MIT

pragma solidity =0.6.6;


interface ICheeseSwapFactory {
    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;
}

// 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');
    }
}

interface ICheeseSwapRouter01 {
    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);
}

interface ICheeseSwapRouter02 is ICheeseSwapRouter01 {
    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;
}

interface ICheeseSwapPair {
    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;
}

// 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');
    }
}

library CheeseSwapLibrary {
    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, 'CheeseSwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'CheeseSwapLibrary: 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'f52c5189a89e7ca2ef4f19f2798e3900fba7a316de7cef6c5a9446621ba86286' // 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);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = ICheeseSwapPair(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, 'CheeseSwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'CheeseSwapLibrary: 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, 'CheeseSwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CheeseSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(998);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'CheeseSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CheeseSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(998);
        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, 'CheeseSwapLibrary: 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, 'CheeseSwapLibrary: 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);
        }
    }
}

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);
}

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

contract CheeseSwapRouter is ICheeseSwapRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

60c060405234801561001057600080fd5b506040516200477d3803806200477d8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145f8620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145f86000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260278152602001806144c26027913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260278152602001806145556027913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061457c6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602c8152602001806144e9602c913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b60006132c5856103e663ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff52c5189a89e7ca2ef4f19f2798e3900fba7a316de7cef6c5a9446621ba86286609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061459f6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602d8152602001806143cc602d913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e6613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260268152602001806144226026913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b815260040180806020018281038252602681526020018061449c6026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260278152602001806145556027913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260278152602001806144c26027913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe436865657365537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54436865657365537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459436865657365537761704c6962726172793a20494e53554646494349454e545f414d4f554e5443686565736553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5443686565736553776170526f757465723a204558434553534956455f494e5055545f414d4f554e54436865657365537761704c6962726172793a204944454e544943414c5f41444452455353455343686565736553776170526f757465723a20494e53554646494349454e545f415f414d4f554e54436865657365537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5443686565736553776170526f757465723a20455850495245440000000000000043686565736553776170526f757465723a20494e56414c49445f50415448000043686565736553776170526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212207e51ec9d55025e45c838e2a5d3e29a71fb45ff3239f75d85e27bda48a9da4f4464736f6c63430006060033000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

15531:18618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16014:10;-1:-1:-1;;;;;16028:4:0;16014:18;;16007:26;;;;15531:18618;;12:1:-1;9;2:12;20181:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20181:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20181:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33089:263;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33089:263:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33089:263:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27374:854;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27374:854:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27374:854:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27374:854:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27374:854: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;27374:854:0;;-1:-1:-1;27374:854:0;-1:-1:-1;;;;;;27374:854: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;27374:854:0;;;;;;;;;;;;;;;;;33892:254;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33892:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33892:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33892:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33892:254: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;33892:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33892:254:0;;-1:-1:-1;33892:254:0;;-1:-1:-1;;;;;33892:254:0:i;20860:679::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20860:679:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20860:679:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24577:631::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24577:631:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24577:631:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24577:631:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24577:631: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;24577:631:0;;-1:-1:-1;24577:631:0;-1:-1:-1;;;;;;24577:631:0;;;;;;;;:::i;26536:832::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26536:832:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26536:832:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26536:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26536:832: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;26536:832:0;;-1:-1:-1;26536:832:0;-1:-1:-1;;;;;;26536:832:0;;;;;;;;:::i;23001:720::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23001:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23001:720:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30421:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30421:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30421:716:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30421:716:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30421:716: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;30421:716:0;;-1:-1:-1;30421:716:0;-1:-1:-1;;;;;;30421:716:0;;;;;;;;:::i;32002:846::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32002:846:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32002:846:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32002:846:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32002:846: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;32002:846:0;;-1:-1:-1;32002:846:0;-1:-1:-1;;;;;;32002:846:0;;;;;;;;:::i;25829:701::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25829:701:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25829:701:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25829:701: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;25829:701:0;;-1:-1:-1;25829:701:0;-1:-1:-1;;;;;;25829:701:0;;;;;;;;:::i;33360:262::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33360:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33360:262:0;;;;;;;;;;;;:::i;25214:609::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25214:609:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25214:609:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25214:609:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25214:609: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;25214:609:0;;-1:-1:-1;25214:609:0;-1:-1:-1;;;;;;25214:609:0;;;;;;;;:::i;15667:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15667:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15667:38:0;;;;;;;;;;;;;;32892:189;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32892:189:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32892:189:0;;;;;;;;;;;;:::i;22295:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22295:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22295:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31143:853::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31143:853:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31143:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31143:853: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;31143:853:0;;-1:-1:-1;31143:853:0;-1:-1:-1;;;;;;31143:853:0;;;;;;;;:::i;19304:871::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19304:871:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19304:871:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15619:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15619:41:0;;;:::i;33630:254::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33630:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33630:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33630:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33630:254: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;33630:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33630:254:0;;-1:-1:-1;33630:254:0;;-1:-1:-1;;;;;33630:254:0:i;21545:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21545:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21545:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17539:740::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17539:740:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17539:740:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18285:976;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18285:976:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28234:814::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28234:814:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28234:814:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28234:814: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;28234:814:0;;-1:-1:-1;28234:814:0;-1:-1:-1;;;;;;28234:814:0;;;;;;;;:::i;20181:673::-;20418:16;20436:14;20399:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;20490:196:::1;20520:5;20540:4;20559:9;20583:14;20612:12;20647:4;20667:8;20490:15;:196::i;:::-;20463:223:::0;;-1:-1:-1;20463:223:0;-1:-1:-1;20697:51:0::1;20725:5:::0;20732:2;20463:223;20697:27:::1;:51::i;:::-;20765:4;-1:-1:-1::0;;;;;20759:20:0::1;;20780:9;20759:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20759:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20759:31:0;;;;20801:45;20832:2;20836:9;20801:30;:45::i;:::-;20181:673:::0;;;;;;;;;;:::o;33089:263::-;33242:14;33281:63;33312:8;33322:9;33333:10;33281:30;:63::i;:::-;33274:70;33089:263;-1:-1:-1;;;;33089:263:0:o;27374:854::-;27588:21;27560:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27660:4:0::1;27635:29;:4:::0;;-1:-1:-1;;27640:15:0;;27635:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27635:21:0::1;-1:-1:-1::0;;;;;27635:29:0::1;;27627:72;;;::::0;;-1:-1:-1;;;27627:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27627:72:0;;;;;;;;;;;;;::::1;;27720:56;27752:7;27761:8;27771:4;;27720:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27720:31:0::1;::::0;-1:-1:-1;;;27720:56:0:i:1;:::-;27710:66;;27826:12;27795:7;27820:1;27803:7;:14;:18;27795:27;;;;;;;;;;;;;;:43;;27787:100;;;;-1:-1:-1::0;;;27787:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27898:142;27944:4;;27949:1;27944:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27944:7:0::1;27953:10;27965:52;27991:7;28000:4;;28005:1;28000:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28000:7:0::1;28009:4;;28014:1;28009:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28009:7:0::1;27965:25;:52::i;:::-;28019:7;28027:1;28019:10;;;;;;;;;;;;;;27898:31;:142::i;:::-;28051:35;28057:7;28066:4;;28051:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28080:4:0::1;::::0;-1:-1:-1;28051:5:0::1;::::0;-1:-1:-1;;28051:35:0:i:1;:::-;28103:4;-1:-1:-1::0;;;;;28097:20:0::1;;28118:7;28143:1;28126:7;:14;:18;28118:27;;;;;;;;;;;;;;28097:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28097:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28097:49:0;;;;28157:63;28188:2;28192:7;28217:1;28200:7;:14;:18;28192:27;;;;;;;;;;;;;;28157:30;:63::i;:::-;27374:854:::0;;;;;;;;;:::o;33892:254::-;34036:21;34082:56;34113:7;34122:9;34133:4;34082:30;:56::i;:::-;34075:63;;33892:254;;;;;:::o;20860:679::-;21166:12;21180;21205;21220:50;21246:7;21255:6;21263;21220:25;:50::i;:::-;21205:65;;21281:10;21294;:33;;21318:9;21294:33;;;-1:-1:-1;;21294:33:0;21338:81;;;-1:-1:-1;;;21338:81:0;;21367:10;21338:81;;;;21387:4;21338:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21281:46;;-1:-1:-1;;;;;;21338:28:0;;;;;:81;;;;;-1:-1:-1;;21338:81:0;;;;;;;;-1:-1:-1;21338:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;21338:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21338:81:0;;;;21451:80;21467:6;21475;21483:9;21494:10;21506;21518:2;21522:8;21451:15;:80::i;:::-;21430:101;;;;;;;;20860:679;;;;;;;;;;;;;;;;:::o;24577:631::-;24801:21;24782:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;24845:56:::1;24877:7;24886:8;24896:4;;24845:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24845:31:0::1;::::0;-1:-1:-1;;;24845:56:0:i:1;:::-;24835:66;;24951:12;24920:7;24945:1;24928:7;:14;:18;24920:27;;;;;;;;;;;;;;:43;;24912:100;;;;-1:-1:-1::0;;;24912:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25023:142;25069:4;;25074:1;25069:7;;;;;;25023:142;25176:24;25182:7;25191:4;;25176:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25197:2:0;;-1:-1:-1;25176:5:0::1;::::0;-1:-1:-1;;25176:24:0:i:1;26536:832::-:0;26750:21;26722:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26822:4:0::1;26797:29;:4:::0;;-1:-1:-1;;26802:15:0;;26797:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26797:21:0::1;-1:-1:-1::0;;;;;26797:29:0::1;;26789:72;;;::::0;;-1:-1:-1;;;26789:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26789:72:0;;;;;;;;;;;;;::::1;;26882:56;26913:7;26922:9;26933:4;;26882:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26882:30:0::1;::::0;-1:-1:-1;;;26882:56:0:i:1;:::-;26872:66;;26971:11;26957:7;26965:1;26957:10;;;;;;;;;;;;;;:25;;26949:78;;;;-1:-1:-1::0;;;26949:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23001:720:::0;23319:14;23346:12;23361:47;23387:7;23396:5;23403:4;23361:25;:47::i;:::-;23346:62;;23419:10;23432;:33;;23456:9;23432:33;;;-1:-1:-1;;23432:33:0;23476:81;;;-1:-1:-1;;;23476:81:0;;23505:10;23476:81;;;;23525:4;23476:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23419:46;;-1:-1:-1;;;;;;23476:28:0;;;;;:81;;;;;-1:-1:-1;;23476:81:0;;;;;;;;-1:-1:-1;23476:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;23476:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23476:81:0;;;;23580:133;23642:5;23649:9;23660:14;23676:12;23690:2;23694:8;23580:47;:133::i;:::-;23568:145;23001:720;-1:-1:-1;;;;;;;;;;;;;23001:720:0:o;30421:716::-;30655:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;30676:140:::1;30722:4;;30727:1;30722:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30722:7:0::1;30731:10;30743:52;30769:7;30778:4;;30783:1;30778:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30778:7:0::1;30787:4;;30792:1;30787:7;;;;;;30743:52;30797:8;30676:31;:140::i;:::-;30827:18;30855:4:::0;;-1:-1:-1;;30860:15:0;;30855:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30855:21:0::1;-1:-1:-1::0;;;;;30848:39:0::1;;30888:2;30848:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30848:43:0::1;-1:-1:-1::0;;;;;30848:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30848:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30848:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30848:43:0;30902:44:::1;::::0;;30848:43:::1;30902:44:::0;;::::1;::::0;;;;;;;;;;;30848:43;;-1:-1:-1;30902:44:0::1;::::0;;;30937:4;;;;;;30902:44;::::1;::::0;30937:4;;30902:44;30937:4;30902:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30943:2:0;;-1:-1:-1;30902:34:0::1;::::0;-1:-1:-1;;30902:44:0:i:1;:::-;31045:12:::0;30979:62:::1;31027:13:::0;30986:4;;-1:-1:-1;;30991:15:0;;30986:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30986:21:0::1;-1:-1:-1::0;;;;;30979:39:0::1;;31019:2;30979:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30979:43:0::1;-1:-1:-1::0;;;;;30979:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30979:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30979:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30979:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30957:172;;;;-1:-1:-1::0;;;30957:172:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15832:1;30421:716:::0;;;;;;;:::o;32002:846::-;32269:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32328:4:0::1;32303:29;:4:::0;;-1:-1:-1;;32308:15:0;;32303:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32303:21:0::1;-1:-1:-1::0;;;;;32303:29:0::1;;32295:72;;;::::0;;-1:-1:-1;;;32295:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32295:72:0;;;;;;;;;;;;;::::1;;32378:140;32424:4;;32429:1;32424:7;;;;;;32378:140;32529:55;32564:4;;32529:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32578:4:0::1;::::0;-1:-1:-1;32529:34:0::1;::::0;-1:-1:-1;;32529:55:0:i:1;:::-;32612:37;::::0;;-1:-1:-1;;;32612:37:0;;32643:4:::1;32612:37;::::0;::::1;::::0;;;32595:14:::1;::::0;-1:-1:-1;;;;;32619:4:0::1;32612:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32612:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32612:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32612:37:0;;-1:-1:-1;32668:25:0;;::::1;;32660:82;;;;-1:-1:-1::0;;;32660:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32759:4;-1:-1:-1::0;;;;;32753:20:0::1;;32774:9;32753:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32753:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32753:31:0;;;;32795:45;32826:2;32830:9;32795:30;:45::i;25829:701::-:0;26045:21;26017:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;26103:4:::1;-1:-1:-1::0;;;;;26092:15:0::1;:4;;26097:1;26092:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26092:7:0::1;-1:-1:-1::0;;;;;26092:15:0::1;;26084:58;;;::::0;;-1:-1:-1;;;26084:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26084:58:0;;;;;;;;;;;;;::::1;;26163:57;26195:7;26204:9;26215:4;;26163:57;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26163:31:0::1;::::0;-1:-1:-1;;;26163:57:0:i:1;:::-;26153:67;;26270:12;26239:7;26264:1;26247:7;:14;:18;26239:27;;;;;;;;;;;;;;:43;;26231:100;;;;-1:-1:-1::0;;;26231:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26348:4;-1:-1:-1::0;;;;;26342:19:0::1;;26369:7;26377:1;26369:10;;;;;;;;;;;;;;26342:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26342:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26342:40:0;;;;;26406:4;-1:-1:-1::0;;;;;26400:20:0::1;;26421:52;26447:7;26456:4;;26461:1;26456:7;;;;;;26421:52;26475:7;26483:1;26475:10;;;;;;;;;;;;;;26400:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;26400:86:0::1;-1:-1:-1::0;;;;;26400:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26400:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26400:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26400:86:0;26393:94:::1;;;;26498:24;26504:7;26513:4;;26498:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26519:2:0;;-1:-1:-1;26498:5:0::1;::::0;-1:-1:-1;;26498:24:0:i:1;:::-;25829:701:::0;;;;;;;;:::o;33360:262::-;33513:13;33551:63;33581:9;33592;33603:10;33551:29;:63::i;25214:609::-;25438:21;25419:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;25482:56:::1;25513:7;25522:9;25533:4;;25482:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25482:30:0::1;::::0;-1:-1:-1;;;25482:56:0:i:1;:::-;25472:66;;25571:11;25557:7;25565:1;25557:10;;;;;;;;;;;;;;:25;;25549:78;;;;-1:-1:-1::0;;;25549:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15667:38:::0;;;:::o;32892:189::-;32989:12;33021:52;33045:7;33054:8;33064;33021:23;:52::i;22295:700::-;22561:14;22542:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;22604:196:::1;22634:5;22654:4;22673:9;22697:14;22726:12;22761:4;22781:8;22604:15;:196::i;:::-;22850:38;::::0;;-1:-1:-1;;;22850:38:0;;22882:4:::1;22850:38;::::0;::::1;::::0;;;22588:212;;-1:-1:-1;22811:78:0::1;::::0;-1:-1:-1;22839:5:0;;22846:2;;-1:-1:-1;;;;;22850: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;22850:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22850:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22850:38:0;22811:27:::1;:78::i;:::-;22906:4;-1:-1:-1::0;;;;;22900:20:0::1;;22921:9;22900:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22900:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22900:31:0;;;;22942:45;22973:2;22977:9;22942:30;:45::i;31143:853::-:0;31403:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;31448:4:::1;-1:-1:-1::0;;;;;31437:15:0::1;:4;;31442:1;31437:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31437:7:0::1;-1:-1:-1::0;;;;;31437:15:0::1;;31429:58;;;::::0;;-1:-1:-1;;;31429:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31429:58:0;;;;;;;;;;;;;::::1;;31498:13;31514:9;31498:25;;31540:4;-1:-1:-1::0;;;;;31534:19:0::1;;31561:8;31534:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31534:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31534:38:0;;;;;31596:4;-1:-1:-1::0;;;;;31590:20:0::1;;31611:52;31637:7;31646:4;;31651:1;31646:7;;;;;;31611:52;31665:8;31590:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;31590:84:0::1;-1:-1:-1::0;;;;;31590:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31590:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31590:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31590:84:0;31583:92:::1;;;;31686:18;31714:4:::0;;-1:-1:-1;;31719:15:0;;31714:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31714:21:0::1;-1:-1:-1::0;;;;;31707:39:0::1;;31747:2;31707:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31707:43:0::1;-1:-1:-1::0;;;;;31707:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31707:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31707:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31707:43:0;31761:44:::1;::::0;;31707:43:::1;31761:44:::0;;::::1;::::0;;;;;;;;;;;31707:43;;-1:-1:-1;31761:44:0::1;::::0;;;31796:4;;;;;;31761:44;::::1;::::0;31796:4;;31761:44;31796:4;31761:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31802:2:0;;-1:-1:-1;31761:34:0::1;::::0;-1:-1:-1;;31761:44:0:i:1;:::-;31904:12:::0;31838:62:::1;31886:13:::0;31845:4;;-1:-1:-1;;31850:15:0;;31845:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31845:21:0::1;-1:-1:-1::0;;;;;31838:39:0::1;;31878:2;31838:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31838:43:0::1;-1:-1:-1::0;;;;;31838:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19304:871:0::0;19558:12;19572;19539:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;19597:12:::1;19612:50;19638:7;19647:6;19655;19612:25;:50::i;:::-;19673:63;::::0;;-1:-1:-1;;;19673:63:0;;19708:10:::1;19673:63;::::0;::::1;::::0;-1:-1:-1;;;;;19673:34:0;::::1;:63:::0;;;;;;;;;;;;;;19597:65;;-1:-1:-1;19673:34:0;;::::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19673:34:0;:63;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19673:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19673:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19804:30:0::1;::::0;;-1:-1:-1;;;19804:30:0;;-1:-1:-1;;;;;19804:30:0;;::::1;;::::0;::::1;::::0;;;19774:12:::1;::::0;;;19804:26;;::::1;::::0;::::1;::::0;:30;;;;;;;;;;;19774:12;19804:26;:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19804:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19804:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19804:30:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19804:30:0;-1:-1:-1;19846:14:0::1;19865:44;19894:6:::0;19902;19865:28:::1;:44::i;:::-;19845:64;;;19951:6;-1:-1:-1::0;;;;;19941:16:0::1;:6;-1:-1:-1::0;;;;;19941:16:0::1;;:58;;19982:7;19991;19941:58;;;19961:7;19970;19941:58;19920:79:::0;;-1:-1:-1;19920:79:0;-1:-1:-1;20018:21:0;;::::1;;20010:73;;;;-1:-1:-1::0;;;20010:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20113:10;20102:7;:21;;20094:73;;;;-1:-1:-1::0;;;20094:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15832:1;;;;19304:871:::0;;;;;;;;;;;:::o;15619:41::-;;;:::o;33630:254::-;33774:21;33820:56;33852:7;33861:8;33871:4;33820:31;:56::i;21545:671::-;21834:16;21852:14;21879:12;21894:47;21920:7;21929:5;21936:4;21894:25;:47::i;:::-;21879:62;;21952:10;21965;:33;;21989:9;21965:33;;;-1:-1:-1;;21965:33:0;22009:81;;;-1:-1:-1;;;22009:81:0;;22038:10;22009:81;;;;22058:4;22009:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21952:46;;-1:-1:-1;;;;;;22009:28:0;;;;;:81;;;;;-1:-1:-1;;22009:81:0;;;;;;;;-1:-1:-1;22009:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;22009:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22009:81:0;;;;22128:80;22147:5;22154:9;22165:14;22181:12;22195:2;22199:8;22128:18;:80::i;:::-;22101:107;;;;-1:-1:-1;21545:671:0;-1:-1:-1;;;;;;;;;;;;;21545:671:0:o;17539:740::-;17827:12;17841;17855:14;17808:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;17903:85:::1;17917:6;17925;17933:14;17949;17965:10;17977;17903:13;:85::i;:::-;17882:106:::0;;-1:-1:-1;17882:106:0;-1:-1:-1;17999:12:0::1;18014:50;18040:7;18049:6:::0;18057;18014:25:::1;:50::i;:::-;17999:65;;18075:66;18107:6;18115:10;18127:4;18133:7;18075:31;:66::i;:::-;18152;18184:6;18192:10;18204:4;18210:7;18152:31;:66::i;:::-;18257:4;-1:-1:-1::0;;;;;18241:26:0::1;;18268:2;18241:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;18241:30:0::1;-1:-1:-1::0;;;;;18241:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18241:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18241:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18241:30:0;17539:740;;;;-1:-1:-1;18241:30:0;;-1:-1:-1;17539:740:0;;-1:-1:-1;;;;;;;;;17539:740:0:o;18285:976::-;18538:16;18556:14;18572;18519:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;18626:176:::1;18654:5;18674:4;18693:18;18726:9;18750:14;18779:12;18626:13;:176::i;:::-;18599:203:::0;;-1:-1:-1;18599:203:0;-1:-1:-1;18813:12:0::1;18828:47;18854:7;18863:5:::0;18870:4:::1;18828:25;:47::i;:::-;18813:62;;18886:69;18918:5;18925:10;18937:4;18943:11;18886:31;:69::i;:::-;18972:4;-1:-1:-1::0;;;;;18966:19:0::1;;18993:9;18966:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18966:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18966:39:0;;;;;19029:4;-1:-1:-1::0;;;;;19023:20:0::1;;19044:4;19050:9;19023:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19023:37:0::1;-1:-1:-1::0;;;;;19023:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19023:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19023:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19023:37:0;19016:45:::1;;;;19100:4;-1:-1:-1::0;;;;;19084:26:0::1;;19111:2;19084:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;19084:30:0::1;-1:-1:-1::0;;;;;19084:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19084:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19084:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19084:30:0;;-1:-1:-1;19165:9:0::1;:21:::0;-1:-1:-1;19161:92:0::1;;;19188:65;19219:10;19243:9;19231;:21;19188:30;:65::i;:::-;15832:1;18285:976:::0;;;;;;;;;;;:::o;28234:814::-;28447:21;28419:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;28505:4:::1;-1:-1:-1::0;;;;;28494:15:0::1;:4;;28499:1;28494:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28494:7:0::1;-1:-1:-1::0;;;;;28494:15:0::1;;28486:58;;;::::0;;-1:-1:-1;;;28486:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28486:58:0;;;;;;;;;;;;;::::1;;28565:56;28596:7;28605:9;28616:4;;28565:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28565:30:0::1;::::0;-1:-1:-1;;;28565:56:0:i:1;:::-;28555:66;;28654:9;28640:7;28648:1;28640:10;;;;;;;;;;;;;;:23;;28632:76;;;;-1:-1:-1::0;;;28632:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28725:4;-1:-1:-1::0;;;;;28719:19:0::1;;28746:7;28754:1;28746:10;;;;;;;;;;;;;;28719:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28719:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28719:40:0;;;;;28783:4;-1:-1:-1::0;;;;;28777:20:0::1;;28798:52;28824:7;28833:4;;28838:1;28833:7;;;;;;28798:52;28852:7;28860:1;28852:10;;;;;;;;;;;;;;28777:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;28777:86:0::1;-1:-1:-1::0;;;;;28777:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28777:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28777:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28777:86:0;28770:94:::1;;;;28875:24;28881:7;28890:4;;28875:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28896:2:0;;-1:-1:-1;28875:5:0::1;::::0;-1:-1:-1;;28875:24:0:i:1;:::-;28962:7;28970:1;28962:10;;;;;;;;;;;;;;28950:9;:22;28946:94;;;28974:66;29005:10;29029:7;29037:1;29029:10;;;;;;;;;;;;;;29017:9;:22;28974:30;:66::i;1225:361::-:0;1420:45;;;-1:-1:-1;;;;;1420:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1420:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1409:57:0;;;;1374:12;;1388:17;;1409:10;;;;1420:45;1409:57;;;25:18:-1;1409: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;;;1409: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;;1373:93:0;;;;1485:7;:57;;;;-1:-1:-1;1497:11:0;;:16;;:44;;;1528:4;1517:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1517:24:0;1497:44;1477:101;;;;;-1:-1:-1;;;1477:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:361;;;;;:::o;2004:195::-;2112:12;;;2074;2112;;;;;;;;;-1:-1:-1;;;;;2091:7:0;;;2105:5;;2091: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;;;2091: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;;2073:52:0;;;2144:7;2136:55;;;;-1:-1:-1;;;2136:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2004:195;;;:::o;12211:519::-;12304:14;12350:1;12339:8;:12;12331:69;;;;-1:-1:-1;;;12331:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12431:1;12419:9;:13;:31;;;;;12449:1;12436:10;:14;12419:31;12411:85;;;;-1:-1:-1;;;12411:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12507:20;12530:17;:8;12543:3;12530:17;:12;:17;:::i;:::-;12507:40;-1:-1:-1;12558:14:0;12575:31;12507:40;12595:10;12575:31;:19;:31;:::i;:::-;12558:48;-1:-1:-1;12617:16:0;12636:40;12660:15;12636:19;:9;12650:4;12636:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12617:59;;12711:11;12699:9;:23;;;;;;;12211:519;-1:-1:-1;;;;;;;12211:519:0:o;13407:512::-;13508:21;13565:1;13550:4;:11;:16;;13542:60;;;;;-1:-1:-1;;;13542:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13634:4;:11;13623:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13623:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13623:23:0;;13613:33;;13670:8;13657:7;13665:1;13657:10;;;;;;;;;;;;;:21;;;;;13694:6;13689:223;13720:1;13706:4;:11;:15;13702:1;:19;13689:223;;;13744:14;13760:15;13779:42;13791:7;13800:4;13805:1;13800:7;;;;;;;;;;;;;;13809:4;13814:1;13818;13814:5;13809:11;;;;;;;;;;;;;;13779;:42::i;:::-;13743:78;;;;13853:47;13866:7;13874:1;13866:10;;;;;;;;;;;;;;13878:9;13889:10;13853:12;:47::i;:::-;13836:7;13844:1;13848;13844:5;13836:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13723:3:0;;13689:223;;;;13407:512;;;;;:::o;10682:478::-;10771:12;10797:14;10813;10831:26;10842:6;10850;10831:10;:26::i;:::-;10995:32;;;-1:-1:-1;;10995:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10995:32:0;;;;;10985:43;;;;;;-1:-1:-1;;;;;;10898:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10898:251:0;;;;;;;10888:262;;;;;;;;;10682:478;-1:-1:-1;;;;;10682:478:0:o;1594:402::-;1819:51;;;-1:-1:-1;;;;;1819:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1819:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1808:63:0;;;;1773:12;;1787:17;;1808:10;;;;1819:51;1808:63;;;25:18:-1;1808: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;;;1808: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;;1772:99:0;;;;1890:7;:57;;;;-1:-1:-1;1902:11:0;;:16;;:44;;;1933:4;1922:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1922:24:0;1902:44;1882:106;;;;-1:-1:-1;;;1882:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1594:402;;;;;;:::o;23832:739::-;23939:6;23934:630;23965:1;23951:4;:11;:15;23947:1;:19;23934:630;;;23989:13;24004:14;24023:4;24028:1;24023:7;;;;;;;;;;;;;;24032:4;24037:1;24041;24037:5;24032:11;;;;;;;;;;;;;;23988:56;;;;24060:14;24079:43;24108:5;24115:6;24079:28;:43::i;:::-;24059:63;;;24137:14;24154:7;24162:1;24166;24162:5;24154:14;;;;;;;;;;;;;;24137:31;;24184:15;24201;24229:6;-1:-1:-1;;;;;24220:15:0;:5;-1:-1:-1;;;;;24220:15:0;;:61;;24262:9;24278:1;24220:61;;;24244:1;24248:9;24220:61;24183:98;;;;24296:10;24327:1;24313:4;:11;:15;24309:1;:19;:83;;24389:3;24309:83;;;24331:55;24357:7;24366:6;24374:4;24379:1;24383;24379:5;24374:11;;;;;;;;;;;;;;24331:25;:55::i;:::-;24296:96;;24423:49;24449:7;24458:5;24465:6;24423:25;:49::i;:::-;-1:-1:-1;;;;;24407:71:0;;24497:10;24509;24521:2;24535:1;24525:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24525:12:0;87:42:-1;143:17;;-1:-1;24525:12:0;;24407:145;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24407:145:0;-1:-1:-1;;;;;24407:145: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;24407:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24407:145:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23968:3:0;;;;;-1:-1:-1;23934:630:0;;-1:-1:-1;;;;;;;;23934:630:0;;;23832:739;;;:::o;14000:533::-;14101:21;14158:1;14143:4;:11;:16;;14135:60;;;;;-1:-1:-1;;;14135:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14227:4;:11;14216:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14216:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14216:23:0;;14206:33;;14280:9;14250:7;14275:1;14258:7;:14;:18;14250:27;;;;;;;;;;;;;;;;;:39;14314:11;;-1:-1:-1;;14314:15:0;14300:226;14331:5;;14300:226;;14359:14;14375:15;14394:42;14406:7;14415:4;14424:1;14420;:5;14415:11;;;;;;;;;;;;;;14428:4;14433:1;14428:7;;;;;;;14394:42;14358:78;;;;14468:46;14480:7;14488:1;14480:10;;;;;;;;;;;;;;14492:9;14503:10;14468:11;:46::i;:::-;14451:7;14463:1;14459;:5;14451:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14338:3:0;14300:226;;29195:1220;29308:6;29303:1105;29334:1;29320:4;:11;:15;29316:1;:19;29303:1105;;;29358:13;29373:14;29392:4;29397:1;29392:7;;;;;;;;;;;;;;29401:4;29406:1;29410;29406:5;29401:11;;;;;;;;;;;;;;29357:56;;;;29429:14;29448:43;29477:5;29484:6;29448:28;:43::i;:::-;29428:63;;;29506:20;29545:49;29571:7;29580:5;29587:6;29545:25;:49::i;:::-;29506:89;;29610:16;29641:17;29729:13;29744;29762:4;-1:-1:-1;;;;;29762:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29762:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29762:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29762:18:0;;;;;;;-1:-1:-1;;;;;29728:52:0;;;;-1:-1:-1;29728:52:0;;-1:-1:-1;29796:17:0;;-1:-1:-1;;;;;29837:15:0;;;;;;;:61;;29879:8;29889;29837:61;;;29856:8;29866;29837:61;29795:103;;;;29927:56;29970:12;29934:5;-1:-1:-1;;;;;29927:23:0;;29959:4;29927:38;;;;;;;;;;;;;-1:-1:-1;;;;;29927:38:0;-1:-1:-1;;;;;29927:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29927:56:0;29913:70;;30013:72;30044:11;30057:12;30071:13;30013:30;:72::i;:::-;29998:87;;29303:1105;;;;30116:15;30133;30161:6;-1:-1:-1;;;;;30152:15:0;:5;-1:-1:-1;;;;;30152:15:0;;:67;;30197:12;30216:1;30152:67;;;30176:1;30180:12;30152:67;30115:104;;;;30234:10;30265:1;30251:4;:11;:15;30247:1;:19;:83;;30327:3;30247:83;;;30269:55;30295:7;30304:6;30312:4;30317:1;30321;30317:5;30312:11;;;;;;;30269:55;30383:12;;;30393:1;30383:12;;;;;;;;;;-1:-1:-1;;;30345:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30345:51:0;;;;;;;;;;;;;;;;;;;;;;30234:96;;-1:-1:-1;30345:9:0;;;;;;30355:10;;30367;;30234:96;;30383:12;;30345:51;;;;;;;;30383:12;;30345:51;;;;30383: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;30345:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30345:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29337:3:0;;;;;-1:-1:-1;29303:1105:0;;-1:-1:-1;;;;;;;;;;29303:1105:0;9787:129;9871:5;;;9866:16;;;;9858:50;;;;;-1:-1:-1;;;9858:50:0;;;;;;;;;;;;-1:-1:-1;;;9858:50:0;;;;;;;;;;;;;;12851:474;12944:13;12990:1;12978:9;:13;12970:71;;;;-1:-1:-1;;;12970:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13072:1;13060:9;:13;:31;;;;;13090:1;13077:10;:14;13060:31;13052:85;;;;-1:-1:-1;;;13052:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13148:14;13165:34;13194:4;13165:24;:9;13179;13165:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13148:51;-1:-1:-1;13210:16:0;13229:34;13259:3;13229:25;:10;13244:9;13229:25;:14;:25;:::i;:34::-;13210:53;;13285:32;13315:1;13298:11;13286:9;:23;;;;;;;13285:32;:29;:32;:::i;:::-;13274:43;12851:474;-1:-1:-1;;;;;;12851:474:0:o;11766:323::-;11848:12;11891:1;11881:7;:11;11873:62;;;;-1:-1:-1;;;11873:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11965:1;11954:8;:12;:28;;;;;11981:1;11970:8;:12;11954:28;11946:82;;;;-1:-1:-1;;;11946:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12073:8;12049:21;:7;12061:8;12049:21;:11;:21;:::i;:::-;:32;;;;;;;11766:323;-1:-1:-1;;;;11766:323:0:o;10239:351::-;10314:14;10330;10375:6;-1:-1:-1;;;;;10365:16:0;:6;-1:-1:-1;;;;;10365:16:0;;;10357:67;;;;-1:-1:-1;;;10357:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10463:6;-1:-1:-1;;;;;10454:15:0;:6;-1:-1:-1;;;;;10454:15:0;;:53;;10492:6;10500;10454:53;;;10473:6;10481;10454:53;10435:72;;-1:-1:-1;10435:72:0;-1:-1:-1;;;;;;10526:20:0;;10518:64;;;;;-1:-1:-1;;;10518:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10239:351;;;;;:::o;16136:1397::-;16449:51;;;-1:-1:-1;;;16449:51:0;;-1:-1:-1;;;;;16449:51:0;;;;;;;;;;;;;;;;16354:12;;;;;;16468:7;16449:35;;;;;;:51;;;;;;;;;;;;;;;:35;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16449:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16449:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16449:51:0;-1:-1:-1;;;;;16449:65:0;;16445:152;;;16531:54;;;-1:-1:-1;;;16531:54:0;;-1:-1:-1;;;;;16531:54:0;;;;;;;;;;;;;;;;16550:7;16531:38;;;;;;:54;;;;;;;;;;;;;;;-1:-1:-1;16531:38:0;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;16531:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16531:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16445:152:0;16608:13;16623;16640:54;16670:7;16679:6;16687;16640:29;:54::i;:::-;16607:87;;;;16709:8;16721:1;16709:13;:30;;;;-1:-1:-1;16726:13:0;;16709:30;16705:821;;;16778:14;;-1:-1:-1;16794:14:0;;-1:-1:-1;16705:821:0;;;16842:19;16864:59;16888:14;16904:8;16914;16864:23;:59::i;:::-;16842:81;;16960:14;16942;:32;16938:577;;17021:10;17003:14;:28;;16995:80;;;;-1:-1:-1;;;16995:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17116:14;;-1:-1:-1;17132:14:0;-1:-1:-1;17132:14:0;16938:577;;;17188:19;17210:59;17234:14;17250:8;17260;17210:23;:59::i;:::-;17188:81;;17313:14;17295;:32;;17288:40;;;;17373:10;17355:14;:28;;17347:80;;;;-1:-1:-1;;;17347:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17468:14;-1:-1:-1;17484:14:0;;-1:-1:-1;16938:577:0;16705:821;;16136:1397;;;;;;;;;;;:::o;9924:142::-;9976:6;10003;;;:30;;-1:-1:-1;;10018:5:0;;;10032:1;10027;10018:5;10027:1;10013:15;;;;;:20;10003:30;9995:63;;;;;-1:-1:-1;;;9995:63:0;;;;;;;;;;;;-1:-1:-1;;;9995:63:0;;;;;;;;;;;;;;9651:128;9735:5;;;9730:16;;;;9722:49;;;;;-1:-1:-1;;;9722:49:0;;;;;;;;;;;;-1:-1:-1;;;9722:49:0;;;;;;;;;;;;;;11218:435;11311:13;11326;11353:14;11372:26;11383:6;11391;11372:10;:26::i;:::-;11352:46;;;11409:32;11417:7;11426:6;11434;11409:7;:32::i;:::-;;11453:13;11468;11502:32;11510:7;11519:6;11527;11502:7;:32::i;:::-;-1:-1:-1;;;;;11486:61:0;;:63;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11486:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11486:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11486:63:0;;;;;;;-1:-1:-1;;;;;11452:97:0;;;;-1:-1:-1;11452:97:0;;-1:-1:-1;;;;;;11583:16:0;;;;;;;:62;;11626:8;11636;11583:62;;;11603:8;11613;11583:62;11560:85;;;;-1:-1:-1;11218:435:0;-1:-1:-1;;;;;;;11218:435:0:o

Swarm Source

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