Contract 0x10ed43c718714eb63d5aa57b78b54704e256024e 11

 

Contract Overview

PancakeSwap: Router v2
Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc3b37308b9ec36385208a1e53907fef29811af9ad347be97a29ea49c3a7c9758Swap Tokens For ...(pending)2021-09-24 21:50:583 secs ago0xd4ab69f78d904bccaeed20610762527fe75e6054 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x6357de1db0133045859090e1ad6aeea60b492399ad264f122e13620e0c2a2671Swap Exact ETH F...(pending)2021-09-24 21:50:583 secs ago0x1614fe10ec554f1ec6367050c774fdc98632178e IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.0227493 BNB(Pending)
0x74ad3963ec355b8709572dea69391147802109dd62eae9eaa8027a6a1e779965Swap Exact Token...(pending)2021-09-24 21:50:583 secs ago0x61a6b69ebfa0089fd5f238f60a2c66c904db0378 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0xeda9791c82e8722a4dc03637451588bf88b7795a70dcce960c91312de89e56e5Swap Exact Token...(pending)2021-09-24 21:50:583 secs ago0x04dafdc4a9e1349a987d0e9fb566e121748454a3 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0xbcae6feb3d82dd63fc351197ee59359f80e56586c704776890eb1653ea5adc6dSwap Exact ETH F...(pending)2021-09-24 21:50:583 secs ago0x94cecc2232e0669fa0bb22eabf525515637edf19 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.00618682819283 BNB(Pending)
0x7797ff640dc578c1ac7c404af41bfaf8f7741998cae80e3b4b691b4a840ed41eSwap ETH For Exa...(pending)2021-09-24 21:50:583 secs ago0xe6010c081b17b022ede3e7c1d882d54d16a37325 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.13012168957887115 BNB(Pending)
0x4b9fc12c545de5905cdb4b1018fd4d05e4e33b18d0d977412bad4b982a5eb50cSwap ETH For Exa...(pending)2021-09-24 21:50:583 secs ago0xcd06855b4283bdacfce194006ad1432271d6a209 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.147065146408439126 BNB(Pending)
0xa17a089716b605f58269c22aebd0d1a12a1ce17a048df845694a047dfdf6951aSwap Exact ETH F...(pending)2021-09-24 21:50:583 secs ago0xe28cbce8444cbd6324fa9423f55915c032d6818a IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.2 BNB(Pending)
0x8b010117692fc93be03b29378e9165b5081610a23ae41e7b6d2017f9309a2c1aSwap ETH For Exa...(pending)2021-09-24 21:50:583 secs ago0x72b6f189b19d838ed7ba7e5ce00906d8fdc503a9 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.023145689845624697 BNB(Pending)
0xcc6d946b66c0648be9f7b83ccd23c557e0f23d8dc08e00b260326b9d67ff8686Swap Exact ETH F...(pending)2021-09-24 21:50:583 secs ago0xd6209da32267bba49ca019c8ae01423e60416136 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.038 BNB(Pending)
0xf1d1418f91f5254951c9f2e627454cb06d5c0e22594e538ad18a42b9cd1d7a20Swap Exact Token...(pending)2021-09-24 21:50:583 secs ago0x52931fcc6133de9a114fcd4781d7b57da2aa89d9 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x12a0e1bed0a730cc741ea464d500c005d67c8693ce7836a427db37836584c281Swap Exact Token...(pending)2021-09-24 21:50:583 secs ago0x144ce80341dc5f582f067c48b78ade74df9a4f0b IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x7e27a1027b75adbac5cc7844ae59920bf758fe1caf53f140c75c8aed025ef83fSwap Exact Token...(pending)2021-09-24 21:50:583 secs ago0x3c23c0ea85760d5c1b4a0ab2956c29ada10578d4 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x4e3dce86eee21b842c3ae74eaf9e13cfbacc7a455756e5aa68780cdf79214ab7Swap Tokens For ...(pending)2021-09-24 21:50:583 secs ago0x8214a36dd0d2b23edad81469cbfb5999a484f1e2 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x52e787eff741371b45bed9a48eef37891921a75f3da724b65ba8ad2da5d57c63Swap Exact Token...(pending)2021-09-24 21:50:583 secs ago0x9667a289541062af6d0b4349e87731683a9e226f IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0xe836ad6621ed8692d0266ada212e145487492aaf4841bf9bd22d9556c87ce661Swap Exact Token...(pending)2021-09-24 21:50:583 secs ago0xa4213f15bd92362b71463a94f90202974a5e5c9d IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0xf1621ea636e447e69ce99be2c5711e2fa5d2853aa33495e1198240a8f2553c71Swap Exact ETH F...(pending)2021-09-24 21:50:583 secs ago0x21b1b0cb0152e47188fda19282ab7c4b1c3bcb9e IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.1633695 BNB(Pending)
0x970c83191960f90b783e1818ce6d7db0d2fc43853c53fcb233dfc48ab665ab15Swap Exact Token...(pending)2021-09-24 21:50:583 secs ago0x6c498ac50485e03a02a8f98d985e2208c45fbf95 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x93ab974c11e072c9dcceead8d901c70cb282ec3a0de86e84539b8f3b8b6f4a8cSwap Exact Token...(pending)2021-09-24 21:50:583 secs ago0xfd248ec9cf424c688e4109d6f6bf94fb829c943b IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x91a9cdebdd0a06bb8748b2309e96ac089f12f67c64645036fb75fb5615583b5aSwap Exact Token...(pending)2021-09-24 21:50:583 secs ago0xf657e5eead28554678d3b66e0c52f06418dec603 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x7368ac086fead510ed9199df1cd52f81d1979dbaf674ce5ada68e617bf30a186Swap Exact Token...(pending)2021-09-24 21:50:583 secs ago0x144575deb53e14ded47a26244f44d596df21c210 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0xa304a562cac6c3cdebee57a89d4bd65653f8b2330da42d7fc207dc09f4add8b7Swap Exact Token...(pending)2021-09-24 21:50:583 secs ago0x290011d72a3773a5a2c678b8380a4d1bf5582d6b IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x7525795bee24247481b89435af29117c8335ffe57f4f4b43def4657bf90e6118Swap Tokens For ...(pending)2021-09-24 21:50:583 secs ago0xb54832075ab2cacfa887789f3ddbd6dfe864f75e IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0 BNB(Pending)
0x30c1fb142a3bd111ab2a91436f62e0f674e86b5d98e0a6855d1693632bced658Swap ETH For Exa...(pending)2021-09-24 21:50:583 secs ago0x0e0a9074b6b87fe3cfe348ecaae4f7be23189c76 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.034719463591897485 BNB(Pending)
0x84af1f2c804f3b84a72fea7126095d133bc6ee2767189fb97a15bc986ee8d581Swap ETH For Exa...(pending)2021-09-24 21:50:583 secs ago0xbfb481c8bffd14be86976d1a034dbcdab6fb5b19 IN 0x10ed43c718714eb63d5aa57b78b54704e256024e0.037116386678172816 BNB(Pending)
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x55fc22f8d0cd0e639ceef9980b9e4a5239844095e6cfe7f33f2d12badc2b9ead112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.10915 BNB
0x52039e9cc0dfc58f705e131556e62bfdee4439274e8b370c82fdd7371a856852112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v20x9230e388f45ecd04b96a2023c00828a6ff8b81be0.005974282875275522 BNB
0x52039e9cc0dfc58f705e131556e62bfdee4439274e8b370c82fdd7371a856852112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token5.974282875275522356 BNB
0x3aea7b4c333c1e56a828f7c20a615b5a45566344c313f0f19c56aeef688e181a112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.571348157764544121 BNB
0x5264934ed31ddda5aee77b22b235afc4f613a8549e5ecda8afbfc0913694dbee112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.01 BNB
0xb40e45137e0e8165eb40fdfe024f127f5a5057b2faf984e41cb71b8b8f7b2da6112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token2.145 BNB
0x368e95a8d129866d4a046bd9495a005adae5f74a36a4676f22fdf1eeee6ae0ca112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.005989556425317779 BNB
0xf6917f492ecc9c3a6cd8c306c137e25fafa9157524c57fe9f92b08698d199092112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v20xb152bd3316aea8ddc03a0f8f0a76c87831f3a7240.004744316568134577 BNB
0xf6917f492ecc9c3a6cd8c306c137e25fafa9157524c57fe9f92b08698d199092112047112021-09-24 21:50:2932 secs ago Binance: WBNB Token PancakeSwap: Router v20.004744316568134577 BNB
0x44f0e8d404206ffb09c59a1c898df41a45aad45046de1a4f3a9f9999e25ce5ae112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v20xe165d4b92ce67ddffb487fb1f940d309054c350a0.230336354643894389 BNB
0x44f0e8d404206ffb09c59a1c898df41a45aad45046de1a4f3a9f9999e25ce5ae112047112021-09-24 21:50:2932 secs ago Binance: WBNB Token PancakeSwap: Router v20.230336354643894389 BNB
0x7bb4028c0007b511c8d1a331371e87d6db036d8f6c148c1e5ba6f0b4b362ac27112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token1.2 BNB
0x21080bbee2c275e212260c1a93bc3e6f5a39d0d7e2f345a440d61a6c8737b3a9112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v20xffc6a9307efa088d06f1e0d93b0158c91fc4569a0.030061144365634869 BNB
0x21080bbee2c275e212260c1a93bc3e6f5a39d0d7e2f345a440d61a6c8737b3a9112047112021-09-24 21:50:2932 secs ago Binance: WBNB Token PancakeSwap: Router v20.030061144365634869 BNB
0xf82717707ada5db97a7f5f795cfb808ca304bf9b0042ccd6a9f74b2c6ba0100b112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.04 BNB
0xf243cc92548e3c0b0bec7b0a2b82854cf69d8ad8ac54540842dc3f2607f9fa27112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.176046885 BNB
0xe5d287c383fe2fce6b0fe5981901e610cbb56b8abf61cb459e178628039f342b112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v20x69112268db7b7a60f746af8fdf197c89198f4d200.00024308120023892 BNB
0xe5d287c383fe2fce6b0fe5981901e610cbb56b8abf61cb459e178628039f342b112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.043159986647832092 BNB
0xbe456bc5aa6f9c749063b1878085d43be14abc64132470f704c9189228531057112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.013140315 BNB
0x2334065c7abb8c6e097efbb39d9d09f202564a74ce29785a161064f12ce5c358112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v20x13fab931b59fa6634ae0c4f224ffad57cfa0e3790.24096 BNB
0x2334065c7abb8c6e097efbb39d9d09f202564a74ce29785a161064f12ce5c358112047112021-09-24 21:50:2932 secs ago Binance: WBNB Token PancakeSwap: Router v20.24096 BNB
0xd0da94425a29225acecd5c2dd28d8af224abb5f159f163445e9d97c19571b6eb112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.03 BNB
0x68774a193820446cbeccb550507f7db3d036bcb1d59381902a1694422a7e8563112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v20xa9df2be73ae71efa8abce51182e5227a4a57f8ac0.137016931642847758 BNB
0x68774a193820446cbeccb550507f7db3d036bcb1d59381902a1694422a7e8563112047112021-09-24 21:50:2932 secs ago Binance: WBNB Token PancakeSwap: Router v20.137016931642847758 BNB
0x120f38b876b9274e32c26ff44eb0e225151f550cdde21e3a70a0e3c5d32a879a112047112021-09-24 21:50:2932 secs ago PancakeSwap: Router v2 Binance: WBNB Token0.083342729570435353 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PancakeRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-04-23
*/

// File: @uniswap\lib\contracts\libraries\TransferHelper.sol

pragma solidity >=0.6.0;

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

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

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

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

// File: contracts\interfaces\IPancakeRouter01.sol

pragma solidity >=0.6.2;

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

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

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

// File: contracts\interfaces\IPancakeRouter02.sol

pragma solidity >=0.6.2;

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

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

// File: contracts\interfaces\IPancakeFactory.sol

pragma solidity >=0.5.0;

interface IPancakeFactory {
    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;

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}

// File: contracts\libraries\SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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

// File: contracts\interfaces\IPancakePair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: contracts\libraries\PancakeLibrary.sol

pragma solidity >=0.5.0;



library PancakeLibrary {
    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, 'PancakeLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PancakeLibrary: 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'00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5' // 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,) = IPancakePair(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, 'PancakeLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PancakeLibrary: 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, 'PancakeLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(9975);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(10000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'PancakeLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(10000);
        uint denominator = reserveOut.sub(amountOut).mul(9975);
        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, 'PancakeLibrary: 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, 'PancakeLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

// File: contracts\interfaces\IERC20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts\interfaces\IWETH.sol

pragma solidity >=0.5.0;

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

// File: contracts\PancakeRouter.sol

pragma solidity =0.6.6;







contract PancakeRouter is IPancakeRouter02 {
    using SafeMath for uint;

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

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

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

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

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

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return PancakeLibrary.getAmountsIn(factory, amountOut, path);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b506040516200573738038062005737833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6155b062000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb5280614449528061448c52806147ec52806149cd5280614f48528061502952806150a952506155b06000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154326029913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b0565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614380915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614607565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154326029913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614380915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460792505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154e86025913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b0565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614795915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2816565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154326029913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614795915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154326029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154326029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614380915050565b5095945050505050565b6000610f44848484614b9a565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460792505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154e86025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbe565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614795915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d9e565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061547e6024913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155576024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef1565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b0565b6132e78c3383876141b0565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ef1565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460792505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154e86025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614380915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154c56023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806153df6029913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061550d6026913960400191505060405180910390fd5b6000613f0f856126f763ffffffff6151f216565b90506000613f23828563ffffffff6151f216565b90506000613f4983613f3d8861271063ffffffff6151f216565b9063ffffffff61527816565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152ea565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d9e565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614251565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f0576040519150601f19603f3d011682016040523d82523d6000602084013e6142f5565b606091505b5091509150818015614323575080511580614323575080806020019051602081101561432057600080fd5b50515b614378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155336024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146015760008084838151811061439e57fe5b60200260200101518584600101815181106143b557fe5b60200260200101519150915060006143cd8383614d9e565b50905060008785600101815181106143e157fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146144295782600061442d565b6000835b91509150600060028a510388106144445788614485565b6144857f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447857fe5b60200260200101516140c6565b90506144b27f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fc576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561458757818101518382015260200161456f565b50505050905090810190601f1680156145b45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d657600080fd5b505af11580156145ea573d6000803e3d6000fd5b505060019099019850614383975050505050505050565b50505050565b606060028251101561467a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469257600080fd5b506040519080825280602002602001820160405280156146bc578160200160208202803683370190505b50905082816001835103815181106146d057fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147308786600186038151811061471c57fe5b602002602001015187868151811061406b57fe5b9150915061475284848151811061474357fe5b60200260200101518383614b9a565b84600185038151811061476157fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614700565b60005b6001835103811015613e37576000808483815181106147b357fe5b60200260200101518584600101815181106147ca57fe5b60200260200101519150915060006147e28383614d9e565b50905060006148127f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486057600080fd5b505afa158015614874573d6000803e3d6000fd5b505050506040513d606081101561488a57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d45782846148d7565b83835b9150915061495c828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614969868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ad578260006149b1565b6000835b91509150600060028c51038a106149c8578a6149fc565b6149fc7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447857fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aac578181015183820152602001614a94565b50505050905090810190601f168015614ad95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afb57600080fd5b505af1158015614b0f573d6000803e3d6000fd5b50506001909b019a506147989950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615408602a913960400191505060405180910390fd5b600083118015614c045750600082115b614c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061550d6026913960400191505060405180910390fd5b6000614c7d612710614c71868863ffffffff6151f216565b9063ffffffff6151f216565b90506000614c976126f7614c71868963ffffffff614b2816565b9050614cb46001828481614ca757fe5b049063ffffffff61527816565b9695505050505050565b6000808411614d18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154a26023913960400191505060405180910390fd5b600083118015614d285750600082115b614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061550d6026913960400191505060405180910390fd5b82614d8e858463ffffffff6151f216565b81614d9557fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061545b6023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e60578284614e63565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f9157600080fd5b505afa158015614fa5573d6000803e3d6000fd5b505050506040513d6020811015614fbb57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a157604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561507457600080fd5b505af1158015615088573d6000803e3d6000fd5b505050506040513d602081101561509e57600080fd5b50505b6000806150cf7f00000000000000000000000000000000000000000000000000000000000000008b8b6152ea565b915091508160001480156150e1575080155b156150f1578793508692506151e5565b60006150fe898484614cbe565b905087811161516b5785811015615160576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155576024913960400191505060405180910390fd5b8894509250826151e3565b6000615178898486614cbe565b90508981111561518457fe5b878110156151dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061547e6024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061520d5750508082028282828161520a57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152f98585614d9e565b5090506153078686866140c6565b506000806153168888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535b57600080fd5b505afa15801561536f573d6000803e3d6000fd5b505050506040513d606081101561538557600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153cc5780826153cf565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f41444452455353455350616e63616b65526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450616e63616b65526f757465723a204558434553534956455f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454450616e63616b65526f757465723a20494e53554646494349454e545f425f414d4f554e54a264697066735822122050f9ce0b8b1499ef4ba6f2ce1f3056a8561965d3708b81bf656304c936a34b7964736f6c63430006060033000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c73000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c73000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _factory (address): 0xca143ce32fe78f1f7019d7d551a6402fc5350c73
Arg [1] : _WETH (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

16285:18405:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16759:10;:18;16773:4;16759:18;;16752:26;;;;16285:18405;;12:1:-1;9;2:12;20875:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20875:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20875:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33642:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33642:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33642:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27996:842;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27996:842:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27996:842:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27996:842:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27996:842:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27996:842:0;;-1:-1:-1;27996:842:0;-1:-1:-1;27996:842: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;27996:842:0;;;;;;;;;;;;;;;;;34436:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34436:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34436:251:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34436:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34436:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34436:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34436:251:0;;-1:-1:-1;34436:251:0;;-1:-1:-1;;;;;34436:251:0:i;21554:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21554:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21554:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25241:622::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25241:622:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25241:622:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25241:622:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25241:622:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25241:622:0;;-1:-1:-1;25241:622:0;-1:-1:-1;25241:622:0;;;;;;;;;:::i;27170:820::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27170:820:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27170:820:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27170:820:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27170:820:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27170:820:0;;-1:-1:-1;27170:820:0;-1:-1:-1;27170:820:0;;;;;;;;;:::i;23683:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23683:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23683:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31001:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31001:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31001:710:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31001:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31001:710:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31001:710:0;;-1:-1:-1;31001:710:0;-1:-1:-1;31001:710:0;;;;;;;;;:::i;32567:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32567:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32567:837:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32567:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32567:837:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32567:837:0;;-1:-1:-1;32567:837:0;-1:-1:-1;32567:837:0;;;;;;;;;:::i;26475:689::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26475:689:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26475:689:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26475:689:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26475:689:0;;-1:-1:-1;26475:689:0;-1:-1:-1;26475:689:0;;;;;;;;;:::i;33910:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33910:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33910:259:0;;;;;;;;;;;;:::i;25869:600::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25869:600:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25869:600:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25869:600:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25869:600:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25869:600:0;;-1:-1:-1;25869:600:0;-1:-1:-1;25869:600:0;;;;;;;;;:::i;16415:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16415:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33448:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33448:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33448:186:0;;;;;;;;;;;;:::i;22977:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22977:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22977:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31717:844::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31717:844:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31717:844:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31717:844:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31717:844:0;;-1:-1:-1;31717:844:0;-1:-1:-1;31717:844:0;;;;;;;;;:::i;20016:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20016:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20016:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16367:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16367:41:0;;;:::i;34177:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34177:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34177:251:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34177:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34177:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34177:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34177:251:0;;-1:-1:-1;34177:251:0;;-1:-1:-1;;;;;34177:251:0:i;22233:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22233:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22233:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18263:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18263:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18263:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19003:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19003:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28844:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28844:802:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28844:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28844:802:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28844:802:0;;-1:-1:-1;28844:802:0;-1:-1:-1;28844:802:0;;;;;;;;;:::i;20875:673::-;21112:16;21130:14;21093:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21184:196:::1;21214:5;21234:4;21253:9;21277:14;21306:12;21341:4;21361:8;21184:15;:196::i;:::-;21157:223:::0;;-1:-1:-1;21157:223:0;-1:-1:-1;21391:51:0::1;21419:5:::0;21426:2;21157:223;21391:27:::1;:51::i;:::-;21459:4;21453:20;;;21474:9;21453:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21453:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21453:31:0;;;;21495:45;21526:2;21530:9;21495:30;:45::i;:::-;20875:673:::0;;;;;;;;;;:::o;33642:260::-;33795:14;33834:60;33862:8;33872:9;33883:10;33834:27;:60::i;:::-;33827:67;33642:260;-1:-1:-1;;;;33642:260:0:o;27996:842::-;28210:21;28182:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28257:29:::1;28282:4;28257:29;:4:::0;;28262:15;;;28257:21;;::::1;;;;;;;;;;;;;:29;;;28249:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28339:53;28368:7;28377:8;28387:4;;28339:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28339:28:0::1;::::0;-1:-1:-1;;;28339:53:0:i:1;:::-;28329:63;;28442:12;28411:7;28436:1;28419:7;:14;:18;28411:27;;;;;;;;;;;;;;:43;;28403:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28511:139;28557:4;;28562:1;28557:7;;;;;;;;;;;;;;;28566:10;28578:49;28601:7;28610:4;;28615:1;28610:7;;;;;;;;;;;;;;;28619:4;;28624:1;28619:7;;;;;;;;;;;;;;;28578:22;:49::i;:::-;28629:7;28637:1;28629:10;;;;;;;;;;;;;;28511:31;:139::i;:::-;28661:35;28667:7;28676:4;;28661:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28690:4:0::1;::::0;-1:-1:-1;28661:5:0::1;::::0;-1:-1:-1;;28661:35:0:i:1;:::-;28713:4;28707:20;;;28728:7;28753:1;28736:7;:14;:18;28728:27;;;;;;;;;;;;;;28707:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28707:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28707:49:0;;;;28767:63;28798:2;28802:7;28827:1;28810:7;:14;:18;28802:27;;;;;;;;;;;;;;28767:30;:63::i;:::-;27996:842:::0;;;;;;;;;:::o;34436:251::-;34580:21;34626:53;34654:7;34663:9;34674:4;34626:27;:53::i;:::-;34619:60;;34436:251;;;;;:::o;21554:673::-;21860:12;21874;21899;21914:47;21937:7;21946:6;21954;21914:22;:47::i;:::-;21899:62;;21972:10;21985;:33;;22009:9;21985:33;;;22003:2;21985:33;22029:78;;;;;;22055:10;22029:78;;;;22075:4;22029:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21972:46;;-1:-1:-1;22029:25:0;;;;;;:78;;;;;-1:-1:-1;;22029:78:0;;;;;;;;-1:-1:-1;22029:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22029:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22029:78:0;;;;22139:80;22155:6;22163;22171:9;22182:10;22194;22206:2;22210:8;22139:15;:80::i;:::-;22118:101;;;;;;;;21554:673;;;;;;;;;;;;;;;;:::o;25241:622::-;25465:21;25446:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25509:53:::1;25538:7;25547:8;25557:4;;25509:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25509:28:0::1;::::0;-1:-1:-1;;;25509:53:0:i:1;:::-;25499:63;;25612:12;25581:7;25606:1;25589:7;:14;:18;25581:27;;;;;;;;;;;;;;:43;;25573:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25681:139;25727:4;;25732:1;25727:7;;;;;;25681:139;25831:24;25837:7;25846:4;;25831:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25852:2:0;;-1:-1:-1;25831:5:0::1;::::0;-1:-1:-1;;25831:24:0:i:1;27170:820::-:0;27384:21;27356:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27431:29:::1;27456:4;27431:29;:4:::0;;27436:15;;;27431:21;;::::1;;;;;;;;;;;;;:29;;;27423:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27513:53;27541:7;27550:9;27561:4;;27513:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27513:27:0::1;::::0;-1:-1:-1;;;27513:53:0:i:1;:::-;27503:63;;27599:11;27585:7;27593:1;27585:10;;;;;;;;;;;;;;:25;;27577:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23683:714:::0;24001:14;24028:12;24043:44;24066:7;24075:5;24082:4;24043:22;:44::i;:::-;24028:59;;24098:10;24111;:33;;24135:9;24111:33;;;24129:2;24111:33;24155:78;;;;;;24181:10;24155:78;;;;24201:4;24155:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24098:46;;-1:-1:-1;24155:25:0;;;;;;:78;;;;;-1:-1:-1;;24155:78:0;;;;;;;;-1:-1:-1;24155:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;24155:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24155:78:0;;;;24256:133;24318:5;24325:9;24336:14;24352:12;24366:2;24370:8;24256:47;:133::i;:::-;24244:145;23683:714;-1:-1:-1;;;;;;;;;;;;;23683:714:0:o;31001:710::-;31235:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31256:137:::1;31302:4;;31307:1;31302:7;;;;;;;;;;;;;;;31311:10;31323:49;31346:7;31355:4;;31360:1;31355:7;;;;;;;;;;;;;;;31364:4;;31369:1;31364:7;;;;;;31323:49;31374:8;31256:31;:137::i;:::-;31404:18;31432:4:::0;;31437:15;;;31432:21;;::::1;;;;;;;;;;;;;31425:39;;;31465:2;31425:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31425:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31425:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31425:43:0;31479:44:::1;::::0;;31425:43:::1;31479:44:::0;;::::1;::::0;;;;;;;;;;;31425:43;;-1:-1:-1;31479:44:0::1;::::0;;;31514:4;;;;;;31479:44;::::1;::::0;31514:4;;31479:44;31514:4;31479:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31520:2:0;;-1:-1:-1;31479:34:0::1;::::0;-1:-1:-1;;31479:44:0:i:1;:::-;31622:12:::0;31556:62:::1;31604:13:::0;31563:4;;31568:15;;;31563:21;;::::1;;;;;;;;;;;;;31556:39;;;31596:2;31556:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31556:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31556:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31556:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31534:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16577:1;31001:710:::0;;;;;;;:::o;32567:837::-;32834:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32868:29:::1;32893:4;32868:29;:4:::0;;32873:15;;;32868:21;;::::1;;;;;;;;;;;;;:29;;;32860:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32940:137;32986:4;;32991:1;32986:7;;;;;;32940:137;33088:55;33123:4;;33088:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33137:4:0::1;::::0;-1:-1:-1;33088:34:0::1;::::0;-1:-1:-1;;33088:55:0:i:1;:::-;33171:37;::::0;;;;;33202:4:::1;33171:37;::::0;::::1;::::0;;;33154:14:::1;::::0;33171:22:::1;33178:4;33171:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33171:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33171:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33171:37:0;;-1:-1:-1;33227:25:0;;::::1;;33219:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33315:4;33309:20;;;33330:9;33309:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33309:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33309:31:0;;;;33351:45;33382:2;33386:9;33351:30;:45::i;26475:689::-:0;26691:21;26663:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26749:4:::1;26738:15;;:4;;26743:1;26738:7;;;;;;;;;;;;;;;:15;;;26730:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26806:54;26835:7;26844:9;26855:4;;26806:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26806:28:0::1;::::0;-1:-1:-1;;;26806:54:0:i:1;:::-;26796:64;;26910:12;26879:7;26904:1;26887:7;:14;:18;26879:27;;;;;;;;;;;;;;:43;;26871:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26985:4;26979:19;;;27006:7;27014:1;27006:10;;;;;;;;;;;;;;26979:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26979:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26979:40:0;;;;;27043:4;27037:20;;;27058:49;27081:7;27090:4;;27095:1;27090:7;;;;;;27058:49;27109:7;27117:1;27109:10;;;;;;;;;;;;;;27037:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27037:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27037:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27037:83:0;27030:91:::1;;;;27132:24;27138:7;27147:4;;27132:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27153:2:0;;-1:-1:-1;27132:5:0::1;::::0;-1:-1:-1;;27132:24:0:i:1;:::-;26475:689:::0;;;;;;;;:::o;33910:259::-;34063:13;34101:60;34128:9;34139;34150:10;34101:26;:60::i;25869:600::-;26093:21;26074:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26137:53:::1;26165:7;26174:9;26185:4;;26137:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26137:27:0::1;::::0;-1:-1:-1;;;26137:53:0:i:1;:::-;26127:63;;26223:11;26209:7;26217:1;26209:10;;;;;;;;;;;;;;:25;;26201:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16415:38:::0;;;:::o;33448:186::-;33545:12;33577:49;33598:7;33607:8;33617;33577:20;:49::i;22977:700::-;23243:14;23224:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23286:196:::1;23316:5;23336:4;23355:9;23379:14;23408:12;23443:4;23463:8;23286:15;:196::i;:::-;23532:38;::::0;;;;;23564:4:::1;23532:38;::::0;::::1;::::0;;;23270:212;;-1:-1:-1;23493:78:0::1;::::0;-1:-1:-1;23521:5:0;;23528:2;;23532:23:::1;::::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;23532:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23532:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23532:38:0;23493:27:::1;:78::i;:::-;23588:4;23582:20;;;23603:9;23582:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23582:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23582:31:0;;;;23624:45;23655:2;23659:9;23624:30;:45::i;31717:844::-:0;31977:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32022:4:::1;32011:15;;:4;;32016:1;32011:7;;;;;;;;;;;;;;;:15;;;32003:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32069:13;32085:9;32069:25;;32111:4;32105:19;;;32132:8;32105:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32105:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32105:38:0;;;;;32167:4;32161:20;;;32182:49;32205:7;32214:4;;32219:1;32214:7;;;;;;32182:49;32233:8;32161:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32161:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32161:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32161:81:0;32154:89:::1;;;;32254:18;32282:4:::0;;32287:15;;;32282:21;;::::1;;;;;;;;;;;;;32275:39;;;32315:2;32275:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32275:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32275:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32275:43:0;32329:44:::1;::::0;;32275:43:::1;32329:44:::0;;::::1;::::0;;;;;;;;;;;32275:43;;-1:-1:-1;32329:44:0::1;::::0;;;32364:4;;;;;;32329:44;::::1;::::0;32364:4;;32329:44;32364:4;32329:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32370:2:0;;-1:-1:-1;32329:34:0::1;::::0;-1:-1:-1;;32329:44:0:i:1;:::-;32472:12:::0;32406:62:::1;32454:13:::0;32413:4;;32418:15;;;32413:21;;::::1;;;;;;;;;;;;;32406:39;;;32446:2;32406:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20016:853:0::0;20270:12;20284;20251:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20309:12:::1;20324:47;20347:7;20356:6;20364;20324:22;:47::i;:::-;20382:60;::::0;;;;;20414:10:::1;20382:60;::::0;::::1;::::0;:31:::1;::::0;::::1;:60:::0;;;;;;;;;;;;;;20309:62;;-1:-1:-1;20382:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20382:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20382:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20382:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20510:27:0::1;::::0;;;;;:23:::1;:27:::0;;::::1;;::::0;::::1;::::0;;;20480:12:::1;::::0;;;20510:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;20480:12;20510:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20510:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20510:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20510:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20510:27:0;-1:-1:-1;20549:14:0::1;20568:41;20594:6:::0;20602;20568:25:::1;:41::i;:::-;20548:61;;;20651:6;20641:16;;:6;:16;;;:58;;20682:7;20691;20641:58;;;20661:7;20670;20641:58;20620:79:::0;;-1:-1:-1;20620:79:0;-1:-1:-1;20718:21:0;;::::1;;20710:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20810:10;20799:7;:21;;20791:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16577:1;;;;20016:853:::0;;;;;;;;;;;:::o;16367:41::-;;;:::o;34177:251::-;34321:21;34367:53;34396:7;34405:8;34415:4;34367:28;:53::i;22233:665::-;22522:16;22540:14;22567:12;22582:44;22605:7;22614:5;22621:4;22582:22;:44::i;:::-;22567:59;;22637:10;22650;:33;;22674:9;22650:33;;;22668:2;22650:33;22694:78;;;;;;22720:10;22694:78;;;;22740:4;22694:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22637:46;;-1:-1:-1;22694:25:0;;;;;;:78;;;;;-1:-1:-1;;22694:78:0;;;;;;;;-1:-1:-1;22694:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22694:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22694:78:0;;;;22810:80;22829:5;22836:9;22847:14;22863:12;22877:2;22881:8;22810:18;:80::i;:::-;22783:107;;;;-1:-1:-1;22233:665:0;-1:-1:-1;;;;;;;;;;;;;22233:665:0:o;18263:734::-;18551:12;18565;18579:14;18532:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18627:85:::1;18641:6;18649;18657:14;18673;18689:10;18701;18627:13;:85::i;:::-;18606:106:::0;;-1:-1:-1;18606:106:0;-1:-1:-1;18723:12:0::1;18738:47;18761:7;18770:6:::0;18778;18738:22:::1;:47::i;:::-;18723:62;;18796:66;18828:6;18836:10;18848:4;18854:7;18796:31;:66::i;:::-;18873;18905:6;18913:10;18925:4;18931:7;18873:31;:66::i;:::-;18975:4;18962:23;;;18986:2;18962:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18962:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18962:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18962:27:0;18263:734;;;;-1:-1:-1;18962:27:0;;-1:-1:-1;18263:734:0;;-1:-1:-1;;;;;;;;;18263:734:0:o;19003:970::-;19256:16;19274:14;19290;19237:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19344:176:::1;19372:5;19392:4;19411:18;19444:9;19468:14;19497:12;19344:13;:176::i;:::-;19317:203:::0;;-1:-1:-1;19317:203:0;-1:-1:-1;19531:12:0::1;19546:44;19569:7;19578:5:::0;19585:4:::1;19546:22;:44::i;:::-;19531:59;;19601:69;19633:5;19640:10;19652:4;19658:11;19601:31;:69::i;:::-;19687:4;19681:19;;;19708:9;19681:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19681:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19681:39:0;;;;;19744:4;19738:20;;;19759:4;19765:9;19738:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19738:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19738:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19738:37:0;19731:45:::1;;;;19812:4;19799:23;;;19823:2;19799:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19799:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19799:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19799:27:0;;-1:-1:-1;19877:9:0::1;:21:::0;-1:-1:-1;19873:92:0::1;;;19900:65;19931:10;19955:9;19943;:21;19900:30;:65::i;:::-;16577:1;19003:970:::0;;;;;;;;;;;:::o;28844:802::-;29057:21;29029:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29115:4:::1;29104:15;;:4;;29109:1;29104:7;;;;;;;;;;;;;;;:15;;;29096:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29172:53;29200:7;29209:9;29220:4;;29172:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29172:27:0::1;::::0;-1:-1:-1;;;29172:53:0:i:1;:::-;29162:63;;29258:9;29244:7;29252:1;29244:10;;;;;;;;;;;;;;:23;;29236:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29326:4;29320:19;;;29347:7;29355:1;29347:10;;;;;;;;;;;;;;29320:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29320:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29320:40:0;;;;;29384:4;29378:20;;;29399:49;29422:7;29431:4;;29436:1;29431:7;;;;;;29399:49;29450:7;29458:1;29450:10;;;;;;;;;;;;;;29378:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29378:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29378:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29378:83:0;29371:91:::1;;;;29473:24;29479:7;29488:4;;29473:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29494:2:0;;-1:-1:-1;29473:5:0::1;::::0;-1:-1:-1;;29473:24:0:i:1;:::-;29560:7;29568:1;29560:10;;;;;;;;;;;;;;29548:9;:22;29544:94;;;29572:66;29603:10;29627:7;29635:1;29627:10;;;;;;;;;;;;;;29615:9;:22;29572:30;:66::i;600:361::-:0;795:45;;;784:10;795:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;795:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;795:45:0;179:29:-1;160:49;;784:57:0;;;;749:12;;763:17;;784:10;;;;795:45;784:57;;;25:18:-1;784:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;784: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;;748:93:0;;;;860:7;:57;;;;-1:-1:-1;872:11:0;;:16;;:44;;;903:4;892:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;892:24:0;872:44;852:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;600:361;;;;;:::o;1379:195::-;1487:12;;;1449;1487;;;;;;;;;1466:7;;;;1480:5;;1466:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;1466: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;;1448:52:0;;;1519:7;1511:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1379:195;;;:::o;12757:515::-;12850:14;12896:1;12885:8;:12;12877:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12974:1;12962:9;:13;:31;;;;;12992:1;12979:10;:14;12962:31;12954:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13047:20;13070:18;:8;13083:4;13070:18;:12;:18;:::i;:::-;13047:41;-1:-1:-1;13099:14:0;13116:31;13047:41;13136:10;13116:31;:19;:31;:::i;:::-;13099:48;-1:-1:-1;13158:16:0;13177:41;13202:15;13177:20;:9;13191:5;13177:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;13158:60;;13253:11;13241:9;:23;;;;;;;12757:515;-1:-1:-1;;;;;;;12757:515:0:o;13945:509::-;14046:21;14103:1;14088:4;:11;:16;;14080:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14169:4;:11;14158:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14158:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14158:23:0;;14148:33;;14205:8;14192:7;14200:1;14192:10;;;;;;;;;;;;;:21;;;;;14229:6;14224:223;14255:1;14241:4;:11;:15;14237:1;:19;14224:223;;;14279:14;14295:15;14314:42;14326:7;14335:4;14340:1;14335:7;;;;;;;;;;;;;;14344:4;14349:1;14353;14349:5;14344:11;;;;;;;;;;;;;;14314;:42::i;:::-;14278:78;;;;14388:47;14401:7;14409:1;14401:10;;;;;;;;;;;;;;14413:9;14424:10;14388:12;:47::i;:::-;14371:7;14379:1;14383;14379:5;14371:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14258:3:0;;14224:223;;;;13945:509;;;;;:::o;11237:478::-;11326:12;11352:14;11368;11386:26;11397:6;11405;11386:10;:26::i;:::-;11550:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11550:32:0;;;;;11540:43;;;;;;11453:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11453:251:0;;;;;;;11443:262;;;;;;;;;11237:478;-1:-1:-1;;;;;11237:478:0:o;969:402::-;1194:51;;;1183:10;1194:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1194:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1194:51:0;179:29:-1;160:49;;1183:63:0;;;;1148:12;;1162:17;;1183:10;;;;1194:51;1183:63;;;25:18:-1;1183:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;1183: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;;1147:99:0;;;;1265:7;:57;;;;-1:-1:-1;1277:11:0;;:16;;:44;;;1308:4;1297:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1297:24:0;1277:44;1257:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;969:402;;;;;;:::o;24508:727::-;24615:6;24610:618;24641:1;24627:4;:11;:15;24623:1;:19;24610:618;;;24665:13;24680:14;24699:4;24704:1;24699:7;;;;;;;;;;;;;;24708:4;24713:1;24717;24713:5;24708:11;;;;;;;;;;;;;;24664:56;;;;24736:14;24755:40;24781:5;24788:6;24755:25;:40::i;:::-;24735:60;;;24810:14;24827:7;24835:1;24839;24835:5;24827:14;;;;;;;;;;;;;;24810:31;;24857:15;24874;24902:6;24893:15;;:5;:15;;;:61;;24935:9;24951:1;24893:61;;;24917:1;24921:9;24893:61;24856:98;;;;24969:10;25000:1;24986:4;:11;:15;24982:1;:19;:80;;25059:3;24982:80;;;25004:52;25027:7;25036:6;25044:4;25049:1;25053;25049:5;25044:11;;;;;;;;;;;;;;25004:22;:52::i;:::-;24969:93;;25090:46;25113:7;25122:5;25129:6;25090:22;:46::i;:::-;25077:65;;;25161:10;25173;25185:2;25199:1;25189:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25189:12:0;87:42:-1;143:17;;-1:-1;25189:12:0;;25077:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;25077:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25077:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24644:3:0;;;;;-1:-1:-1;24610:618:0;;-1:-1:-1;;;;;;;;24610:618:0;;;24508:727;;;:::o;14535:530::-;14636:21;14693:1;14678:4;:11;:16;;14670:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14759:4;:11;14748:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14748:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14748:23:0;;14738:33;;14812:9;14782:7;14807:1;14790:7;:14;:18;14782:27;;;;;;;;;;;;;;;;;:39;14846:11;;:15;;14832:226;14863:5;;14832:226;;14891:14;14907:15;14926:42;14938:7;14947:4;14956:1;14952;:5;14947:11;;;;;;;;;;;;;;14960:4;14965:1;14960:7;;;;;;;14926:42;14890:78;;;;15000:46;15012:7;15020:1;15012:10;;;;;;;;;;;;;;15024:9;15035:10;15000:11;:46::i;:::-;14983:7;14995:1;14991;:5;14983:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;14870:3:0;;14832:226;;29793:1202;29906:6;29901:1087;29932:1;29918:4;:11;:15;29914:1;:19;29901:1087;;;29956:13;29971:14;29990:4;29995:1;29990:7;;;;;;;;;;;;;;29999:4;30004:1;30008;30004:5;29999:11;;;;;;;;;;;;;;29955:56;;;;30027:14;30046:40;30072:5;30079:6;30046:25;:40::i;:::-;30026:60;;;30101:17;30134:46;30157:7;30166:5;30173:6;30134:22;:46::i;:::-;30101:80;;30196:16;30227:17;30315:13;30330;30348:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30348:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30348:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30348:18:0;;;;;;;30314:52;;;;;-1:-1:-1;30314:52:0;;-1:-1:-1;30382:17:0;;30423:15;;;;;;;;:61;;30465:8;30475;30423:61;;;30442:8;30452;30423:61;30381:103;;;;30513:56;30556:12;30520:5;30513:23;;;30545:4;30513:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30513:56:0;30499:70;;30599:69;30627:11;30640:12;30654:13;30599:27;:69::i;:::-;30584:84;;29901:1087;;;;30699:15;30716;30744:6;30735:15;;:5;:15;;;:67;;30780:12;30799:1;30735:67;;;30759:1;30763:12;30735:67;30698:104;;;;30817:10;30848:1;30834:4;:11;:15;30830:1;:19;:80;;30907:3;30830:80;;;30852:52;30875:7;30884:6;30892:4;30897:1;30901;30897:5;30892:11;;;;;;;30852:52;30963:12;;;30973:1;30963:12;;;;;;;;;;30925:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;30817:93;;-1:-1:-1;30925:9:0;;;;;;30935:10;;30947;;30817:93;;30963:12;;30925:51;;;;;;;;30963:12;;30925:51;;;;30963: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;30925:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30925:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29935:3:0;;;;;-1:-1:-1;29901:1087:0;;-1:-1:-1;;;;;;;;;;29901:1087:0;7742:129;7826:5;;;7821:16;;;;7813:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13393:470;13486:13;13532:1;13520:9;:13;13512:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13611:1;13599:9;:13;:31;;;;;13629:1;13616:10;:14;13599:31;13591:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13684:14;13701:35;13730:5;13701:24;:9;13715;13701:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13684:52;-1:-1:-1;13747:16:0;13766:35;13796:4;13766:25;:10;13781:9;13766:25;:14;:25;:::i;:35::-;13747:54;;13823:32;13853:1;13836:11;13824:9;:23;;;;;;;13823:32;:29;:32;:::i;:::-;13812:43;13393:470;-1:-1:-1;;;;;;13393:470:0:o;12318:317::-;12400:12;12443:1;12433:7;:11;12425:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12514:1;12503:8;:12;:28;;;;;12530:1;12519:8;:12;12503:28;12495:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12619:8;12595:21;:7;12607:8;12595:21;:11;:21;:::i;:::-;:32;;;;;;;12318:317;-1:-1:-1;;;;12318:317:0:o;10800:345::-;10875:14;10891;10936:6;10926:16;;:6;:16;;;;10918:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11021:6;11012:15;;:6;:15;;;:53;;11050:6;11058;11012:53;;;11031:6;11039;11012:53;10993:72;;-1:-1:-1;10993:72:0;-1:-1:-1;11084:20:0;;;11076:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10800:345;;;;;:::o;16881:1376::-;17194:48;;;;;;:62;:48;;;;;;;;;;;;;;;;17099:12;;;;;;17210:7;17194:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;17194:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17194:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17194:48:0;:62;;;17190:146;;;17273:51;;;;;;:35;:51;;;;;;;;;;;;;;;;17289:7;17273:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;17273:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;17273:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17273:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17190:146:0;17347:13;17362;17379:51;17406:7;17415:6;17423;17379:26;:51::i;:::-;17346:84;;;;17445:8;17457:1;17445:13;:30;;;;-1:-1:-1;17462:13:0;;17445:30;17441:809;;;17514:14;;-1:-1:-1;17530:14:0;;-1:-1:-1;17441:809:0;;;17578:19;17600:56;17621:14;17637:8;17647;17600:20;:56::i;:::-;17578:78;;17693:14;17675;:32;17671:568;;17754:10;17736:14;:28;;17728:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17846:14;;-1:-1:-1;17862:14:0;-1:-1:-1;17862:14:0;17671:568;;;17918:19;17940:56;17961:14;17977:8;17987;17940:20;:56::i;:::-;17918:78;;18040:14;18022;:32;;18015:40;;;;18100:10;18082:14;:28;;18074:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18192:14;-1:-1:-1;18208:14:0;;-1:-1:-1;17671:568:0;17441:809;;16881:1376;;;;;;;;;;;:::o;7879:142::-;7931:6;7958;;;:30;;-1:-1:-1;;7973:5:0;;;7987:1;7982;7973:5;7982:1;7968:15;;;;;:20;7958:30;7950:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7606:128;7690:5;;;7685:16;;;;7677:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11773:432;11866:13;11881;11908:14;11927:26;11938:6;11946;11927:10;:26::i;:::-;11907:46;;;11964:32;11972:7;11981:6;11989;11964:7;:32::i;:::-;;12008:13;12023;12054:32;12062:7;12071:6;12079;12054:7;:32::i;:::-;12041:58;;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12041:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12041:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12041:60:0;;;;;;;12007:94;;;;;-1:-1:-1;12007:94:0;;-1:-1:-1;12135:16:0;;;;;;;;:62;;12178:8;12188;12135:62;;;12155:8;12165;12135:62;12112:85;;;;-1:-1:-1;11773:432:0;-1:-1:-1;;;;;;;11773:432:0:o

Swarm Source

ipfs://50f9ce0b8b1499ef4ba6f2ce1f3056a8561965d3708b81bf656304c936a34b79
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.