Contract 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac 1

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x3e63a4890064a342534147f84bdc7acd1bc2f9f551dea40c465f39dad188a507Swap Exact ETH F...111345382021-09-22 11:02:1422 mins ago0x898e1dd978c7cbcd99af91ac56194f04179c018d IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.1 BNB0.00055126
0x8de5bb19ac7df60c29e07b2711020efca112a25303bcfacd6e7bb0f956bb222fSwap Exact ETH F...111339782021-09-22 10:34:1250 mins ago0xfcbf97a663346c3ededd719a84b5d3d85ec736c2 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.01 BNB0.0006262
0xc58e54adfc98f09e6b57799cb426388d21e0c982cddad3b203fdf66af74ebe79Swap Exact Token...111336292021-09-22 10:16:441 hr 7 mins ago0x11492d5e2a3aad0543bdda61196bc828eab8a320 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.000579258
0xdf80d2460991b11b51aa6354a450df02cbd4ee328fdc15c8656c7e6a04ff7905Remove Liquidity...111336212021-09-22 10:16:201 hr 8 mins ago0x11492d5e2a3aad0543bdda61196bc828eab8a320 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.000990063
0x21bc8c8236e1f506c6f540a71165498b9f516825a1ea5515b992c294f56adfd7Swap Exact Token...111333732021-09-22 10:03:561 hr 20 mins ago0x11492d5e2a3aad0543bdda61196bc828eab8a320 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.0005793192
0x8f4f3917d6187fbad74493bd611a663a113aa28c688ddafddcccab9f92302962Remove Liquidity...111333642021-09-22 10:03:291 hr 21 mins ago0x11492d5e2a3aad0543bdda61196bc828eab8a320 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.0009343455
0x60ee52f7216efa9cd64e5a013cb637cfeb1a8835277b486d6dc243fc41fe17a5Add Liquidity ET...111330832021-09-22 9:49:261 hr 35 mins ago0x6dc0a4f474a4e6c31fe897d789c7ed6c83b0ac79 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.402884450477452 BNB0.000975205
0x62ca2cf5dfdb73480709c42bd78fccf9ea5aa8bb8056094f3dbebf501a85e667Swap Exact ETH F...111330632021-09-22 9:48:261 hr 36 mins ago0x6dc0a4f474a4e6c31fe897d789c7ed6c83b0ac79 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.06 BNB0.0005512
0x0419ce0c538eab63cdf1c61de29294dbc467d72b9271cade14fd632035b52102Swap Exact ETH F...111330142021-09-22 9:45:591 hr 38 mins ago0x6dc0a4f474a4e6c31fe897d789c7ed6c83b0ac79 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.356 BNB0.00055126
0xbe638a978de16dc04d66d42b44476aeacd626238734c167fe2bacccb8a9c2f17Swap Exact Token...111324842021-09-22 9:19:292 hrs 5 mins ago0x7424c6c6d29f59c97b07c0b7ad4a2b68af5c7da6 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00056796
0xdf92424e14245da4adead9b6e8a13a3b2c7917e3120c14657f05dc654c930061Remove Liquidity...111324732021-09-22 9:18:562 hrs 5 mins ago0x7424c6c6d29f59c97b07c0b7ad4a2b68af5c7da6 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.000991145
0xf4f965d359a2c1d66a15de2ab847a84a69398fc96b7453a5638e70cca663cdb3Add Liquidity ET...111317992021-09-22 8:44:472 hrs 39 mins ago0x968f65cabed72a5eda1c0e14086b3c283a504694 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.223161736904212 BNB0.00086121
0x6223e3c7b0ea3ea5989b57d903e661ddd18778431c21a5544aa8ed275bc43afbSwap Exact ETH F...111317652021-09-22 8:43:052 hrs 41 mins ago0x968f65cabed72a5eda1c0e14086b3c283a504694 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.2 BNB0.00055126
0x43d37228bc2bd2684181c476ea2bf05bf3f22a9b1484bebcb4ebf09726a04b87Swap Exact ETH F...111315262021-09-22 8:31:072 hrs 53 mins ago0xbc125906c83f0612a900ba065b8244ee1bc1427a IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.1 BNB0.0005512
0x9982ce235d21f22f8895b343fa75802af55b9178299d16fedc526f712238dd2fAdd Liquidity ET...111313152021-09-22 8:20:243 hrs 4 mins ago0x1cf0ab8adb3268da88f355d92847626ca53356b1 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.000161751221289 BNB0.001439445
0xfdce6d61ea75283b22e495dca069c05fb6b61291b15d7053aedc4d52a10ab2fcAdd Liquidity ET...111313012021-09-22 8:19:423 hrs 4 mins ago0x1cf0ab8adb3268da88f355d92847626ca53356b1 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.00099702826774 BNB0.00086097
0x1d320b3a1cdf42355c9cbee09bbd3df787f17c61c8ca9a28aed2d0aaed06f4a8Remove Liquidity...111312872021-09-22 8:19:003 hrs 5 mins ago0x1cf0ab8adb3268da88f355d92847626ca53356b1 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00146473
0xcc69059ed886f796a8ea042457f30dea2b253a22b9373bab83df171bfab0ab44Add Liquidity111312462021-09-22 8:16:573 hrs 7 mins ago0x1cf0ab8adb3268da88f355d92847626ca53356b1 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00139412
0x4200fd1b14ad0ca435d7d9697644cadec63df77bec178fc29b70e50ac2f74d56Swap Exact ETH F...111312172021-09-22 8:15:303 hrs 9 mins ago0x1cf0ab8adb3268da88f355d92847626ca53356b1 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.0002 BNB0.00114368
0xf602f19be025e6e73a3386b815aaaca993633c0579c67ecf06900e8a930fa9afSwap Exact ETH F...111311562021-09-22 8:12:273 hrs 12 mins ago0x1cf0ab8adb3268da88f355d92847626ca53356b1 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.001 BNB0.0006262
0xf6f87c1b8476fdca378fc4d30121501bb6b9e3530ea5aaa3aeb36f201e91f4b2Swap Exact Token...111276772021-09-22 5:16:586 hrs 7 mins ago0x16d35123bcfeb06b04cb09a1e4ed034c36c891c9 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00126517
0xc76512bc5650ff39e551961ed1316ee0b83abb93cc5e0deedaad58ccc26af027Swap Exact Token...111276632021-09-22 5:16:166 hrs 8 mins ago0x16d35123bcfeb06b04cb09a1e4ed034c36c891c9 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.0097491
0x272b22636881de1f9c66dde7f4ea56563a6171ed0256a2d0987da017f0eb39b1Add Liquidity ET...111260492021-09-22 3:54:507 hrs 29 mins ago0x1b48575722a2fc89d144f64b34066c79bffe1eea IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.150191484014368 BNB0.00086121
0x4e83060917b235c325ae5bf76face5a46f223f33e009dda6e951d89133234e31Swap Exact ETH F...111259972021-09-22 3:52:107 hrs 32 mins ago0x1b48575722a2fc89d144f64b34066c79bffe1eea IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.15 BNB0.00062626
0xaceb38abac54f78ee619c617300cbe21895ba59a871ed3ef0171cae015411eceSwap Exact Token...111244682021-09-22 2:35:288 hrs 49 mins ago0x22da407327297f47eb9ea1b6710dcbfb9121420a IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00056796
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3e63a4890064a342534147f84bdc7acd1bc2f9f551dea40c465f39dad188a507111345382021-09-22 11:02:1422 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.1 BNB
0x8de5bb19ac7df60c29e07b2711020efca112a25303bcfacd6e7bb0f956bb222f111339782021-09-22 10:34:1250 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.01 BNB
0xc58e54adfc98f09e6b57799cb426388d21e0c982cddad3b203fdf66af74ebe79111336292021-09-22 10:16:441 hr 7 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x11492d5e2a3aad0543bdda61196bc828eab8a3200.007367608924314638 BNB
0xc58e54adfc98f09e6b57799cb426388d21e0c982cddad3b203fdf66af74ebe79111336292021-09-22 10:16:441 hr 7 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.007367608924314638 BNB
0xdf80d2460991b11b51aa6354a450df02cbd4ee328fdc15c8656c7e6a04ff7905111336212021-09-22 10:16:201 hr 8 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x11492d5e2a3aad0543bdda61196bc828eab8a3200.007391206036933688 BNB
0xdf80d2460991b11b51aa6354a450df02cbd4ee328fdc15c8656c7e6a04ff7905111336212021-09-22 10:16:201 hr 8 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.007391206036933688 BNB
0x21bc8c8236e1f506c6f540a71165498b9f516825a1ea5515b992c294f56adfd7111333732021-09-22 10:03:561 hr 20 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x11492d5e2a3aad0543bdda61196bc828eab8a3200.004030837901094324 BNB
0x21bc8c8236e1f506c6f540a71165498b9f516825a1ea5515b992c294f56adfd7111333732021-09-22 10:03:561 hr 20 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.004030837901094324 BNB
0x8f4f3917d6187fbad74493bd611a663a113aa28c688ddafddcccab9f92302962111333642021-09-22 10:03:291 hr 21 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x11492d5e2a3aad0543bdda61196bc828eab8a3200.003811247522435048 BNB
0x8f4f3917d6187fbad74493bd611a663a113aa28c688ddafddcccab9f92302962111333642021-09-22 10:03:291 hr 21 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.003811247522435048 BNB
0x60ee52f7216efa9cd64e5a013cb637cfeb1a8835277b486d6dc243fc41fe17a5111330832021-09-22 9:49:261 hr 35 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x6dc0a4f474a4e6c31fe897d789c7ed6c83b0ac791 wei
0x60ee52f7216efa9cd64e5a013cb637cfeb1a8835277b486d6dc243fc41fe17a5111330832021-09-22 9:49:261 hr 35 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.402884450477452229 BNB
0x62ca2cf5dfdb73480709c42bd78fccf9ea5aa8bb8056094f3dbebf501a85e667111330632021-09-22 9:48:261 hr 36 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.06 BNB
0x0419ce0c538eab63cdf1c61de29294dbc467d72b9271cade14fd632035b52102111330142021-09-22 9:45:591 hr 38 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.356 BNB
0xbe638a978de16dc04d66d42b44476aeacd626238734c167fe2bacccb8a9c2f17111324842021-09-22 9:19:292 hrs 5 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x7424c6c6d29f59c97b07c0b7ad4a2b68af5c7da60.005726444476402297 BNB
0xbe638a978de16dc04d66d42b44476aeacd626238734c167fe2bacccb8a9c2f17111324842021-09-22 9:19:292 hrs 5 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.005726444476402297 BNB
0xdf92424e14245da4adead9b6e8a13a3b2c7917e3120c14657f05dc654c930061111324732021-09-22 9:18:562 hrs 5 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x7424c6c6d29f59c97b07c0b7ad4a2b68af5c7da60.003855135943686794 BNB
0xdf92424e14245da4adead9b6e8a13a3b2c7917e3120c14657f05dc654c930061111324732021-09-22 9:18:562 hrs 5 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.003855135943686794 BNB
0xf4f965d359a2c1d66a15de2ab847a84a69398fc96b7453a5638e70cca663cdb3111317992021-09-22 8:44:472 hrs 39 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.223161736904212557 BNB
0x6223e3c7b0ea3ea5989b57d903e661ddd18778431c21a5544aa8ed275bc43afb111317652021-09-22 8:43:052 hrs 41 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.2 BNB
0x43d37228bc2bd2684181c476ea2bf05bf3f22a9b1484bebcb4ebf09726a04b87111315262021-09-22 8:31:072 hrs 53 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.1 BNB
0x9982ce235d21f22f8895b343fa75802af55b9178299d16fedc526f712238dd2f111313152021-09-22 8:20:243 hrs 4 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.000161751221289628 BNB
0xfdce6d61ea75283b22e495dca069c05fb6b61291b15d7053aedc4d52a10ab2fc111313012021-09-22 8:19:423 hrs 4 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.000997028267740951 BNB
0x4200fd1b14ad0ca435d7d9697644cadec63df77bec178fc29b70e50ac2f74d56111312172021-09-22 8:15:303 hrs 9 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.0002 BNB
0xf602f19be025e6e73a3386b815aaaca993633c0579c67ecf06900e8a930fa9af111311562021-09-22 8:12:273 hrs 12 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.001 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PinkswapRouter

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-05-27
*/

// Dependency file: @uniswap/v2-core/contracts/interfaces/IPinkswapPair.sol

// pragma solidity >=0.5.0;

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

// Dependency file: contracts/interfaces/IPinkswapRouter01.sol

// pragma solidity >=0.6.2;

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

// Dependency 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;
}

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

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

// Dependency file: contracts/libraries/PinkswapLibrary.sol

// pragma solidity >=0.5.0;

// import '@uniswap/v2-core/contracts/interfaces/IPinkswapPair.sol';

// import "./SafeMath.sol";

library PinkswapLibrary {
    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, 'PinkswapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PinkswapLibrary: 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'78ee0c97de2aaecb976bed43c44c0619b5458672edd3ac64adc68a286cf86283' // 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,) = IPinkswapPair(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, 'PinkswapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PinkswapLibrary: 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, 'PinkswapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PinkswapLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'PinkswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PinkswapLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'PinkswapLibrary: 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, 'PinkswapLibrary: 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);
        }
    }
}

// Dependency file: contracts/interfaces/IPinkswapRouter02.sol

// pragma solidity >=0.6.2;

// import './IPinkswapRouter01.sol';

interface IPinkswapRouter02 is IPinkswapRouter01 {
    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;
}

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

// Dependency file: @uniswap/v2-core/contracts/interfaces/IPinkswapFactory.sol

// pragma solidity >=0.5.0;

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

pragma solidity =0.6.6;

// import '@uniswap/v2-core/contracts/interfaces/IPinkswapFactory.sol';
// import '@uniswap/lib/contracts/libraries/TransferHelper.sol';

// import './interfaces/IPinkswapRouter02.sol';
// import './libraries/PinkswapLibrary.sol';
// import './libraries/SafeMath.sol';
// import './interfaces/IERC20.sol';
// import './interfaces/IWETH.sol';

contract PinkswapRouter is IPinkswapRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

60c06040523480156200001157600080fd5b506040516200574138038062005741833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6155ba62000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061444a528061448d52806147ed52806149ce5280614f49528061502a52806150aa52506155ba6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614608565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154ec6026913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154ec6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d9f565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154796025913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155606025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef2565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ef2565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154ec6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061549e6023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615512602a913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154046027913960400191505060405180910390fd5b6000613f0f856103e563ffffffff6151f316565b90506000613f23828563ffffffff6151f316565b90506000613f4983613f3d886103e863ffffffff6151f316565b9063ffffffff61527916565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f50696e6b737761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152eb565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d9f565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f78ee0c97de2aaecb976bed43c44c0619b5458672edd3ac64adc68a286cf86283609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061553c6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614d9f565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f50696e6b737761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614d9f565b50905060006148137f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806154c1602b913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154046027913960400191505060405180910390fd5b6000614c7e6103e8614c72868863ffffffff6151f316565b9063ffffffff6151f316565b90506000614c986103e5614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff61527916565b9695505050505050565b6000808411614d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806153e06024913960400191505060405180910390fd5b600083118015614d295750600082115b614d7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154046027913960400191505060405180910390fd5b82614d8f858463ffffffff6151f316565b81614d9657fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061542b6024913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e61578284614e64565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eeb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f50696e6b737761704c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f9257600080fd5b505afa158015614fa6573d6000803e3d6000fd5b505050506040513d6020811015614fbc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a257604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561507557600080fd5b505af1158015615089573d6000803e3d6000fd5b505050506040513d602081101561509f57600080fd5b50505b6000806150d07f00000000000000000000000000000000000000000000000000000000000000008b8b6152eb565b915091508160001480156150e2575080155b156150f2578793508692506151e6565b60006150ff898484614cbf565b905087811161516c5785811015615161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155606025913960400191505060405180910390fd5b8894509250826151e4565b6000615179898486614cbf565b90508981111561518557fe5b878110156151de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154796025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061520e5750508082028282828161520b57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152fa8585614d9f565b5090506153088686866140c6565b506000806153178888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535c57600080fd5b505afa158015615370573d6000803e3d6000fd5b505050506040513d606081101561538657600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153cd5780826153d0565b81815b9099909850965050505050505056fe50696e6b737761704c6962726172793a20494e53554646494349454e545f414d4f554e5450696e6b737761704c6962726172793a20494e53554646494349454e545f4c495155494449545950696e6b737761704c6962726172793a204944454e544943414c5f41444452455353455350696e6b73776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450696e6b73776170526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450696e6b737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450696e6b73776170526f757465723a204558434553534956455f494e5055545f414d4f554e5450696e6b737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454450696e6b73776170526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212208aadca8ddee0905076884f3e637dc0cbe034a378a2bbe7e74fbed7f5493130bc64736f6c634300060600330000000000000000000000007d2ce25c28334e40f37b2a068ec8d5a59f11ea54000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000007d2ce25c28334e40f37b2a068ec8d5a59f11ea54000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

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


Deployed ByteCode Sourcemap

16831:18476:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17308:10;:18;17322:4;17308:18;;17301:26;;;;16831:18476;;12:1:-1;9;2:12;21441:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21441:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21441:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34255:261;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34255:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34255:261:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28586:846;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28586:846:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28586:846:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28586:846:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28586:846: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;28586:846:0;;-1:-1:-1;28586:846:0;-1:-1:-1;28586:846: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;28586:846:0;;;;;;;;;;;;;;;;;35052:252;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35052:252:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35052:252:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35052:252:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35052:252: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;35052:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35052:252:0;;-1:-1:-1;35052:252:0;;-1:-1:-1;;;;;35052:252:0:i;22120:675::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22120:675:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22120:675:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25817:625::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25817:625:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25817:625:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25817:625:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25817:625: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;25817:625:0;;-1:-1:-1;25817:625:0;-1:-1:-1;25817:625:0;;;;;;;;;:::i;27756:824::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27756:824:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27756:824:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27756:824:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27756:824: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;27756:824:0;;-1:-1:-1;27756:824:0;-1:-1:-1;27756:824:0;;;;;;;;;:::i;24253:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24253:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24253:716:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31605:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31605:712:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31605:712:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31605:712:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31605:712: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;31605:712:0;;-1:-1:-1;31605:712:0;-1:-1:-1;31605:712:0;;;;;;;;;:::i;33176:840::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33176:840:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33176:840:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33176:840:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33176:840: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;33176:840:0;;-1:-1:-1;33176:840:0;-1:-1:-1;33176:840:0;;;;;;;;;:::i;27057:693::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27057:693:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27057:693:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27057:693: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;27057:693:0;;-1:-1:-1;27057:693:0;-1:-1:-1;27057:693:0;;;;;;;;;:::i;34524:260::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34524:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34524:260:0;;;;;;;;;;;;:::i;26448:603::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26448:603:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26448:603:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26448:603:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26448:603: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;26448:603:0;;-1:-1:-1;26448:603:0;-1:-1:-1;26448:603:0;;;;;;;;;:::i;16963:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16963:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34060:187;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34060:187:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34060:187:0;;;;;;;;;;;;:::i;23547:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23547:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23547:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32323:847::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32323:847:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32323:847:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32323:847: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;32323:847:0;;-1:-1:-1;32323:847:0;-1:-1:-1;32323:847:0;;;;;;;;;:::i;20576:859::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20576:859:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20576:859:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16915:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16915:41:0;;;:::i;34792:252::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34792:252:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34792:252:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34792:252:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34792:252: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;34792:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34792:252:0;;-1:-1:-1;34792:252:0;;-1:-1:-1;;;;;34792:252:0:i;22801:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22801:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22801:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18819:736::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18819:736:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18819:736:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19561:972;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19561:972:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29438:806::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29438:806:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29438:806:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29438:806: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;29438:806:0;;-1:-1:-1;29438:806:0;-1:-1:-1;29438:806:0;;;;;;;;;:::i;21441:673::-;21678:16;21696:14;21659:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21750:196:::1;21780:5;21800:4;21819:9;21843:14;21872:12;21907:4;21927:8;21750:15;:196::i;:::-;21723:223:::0;;-1:-1:-1;21723:223:0;-1:-1:-1;21957:51:0::1;21985:5:::0;21992:2;21723:223;21957:27:::1;:51::i;:::-;22025:4;22019:20;;;22040:9;22019:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22019:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22019:31:0;;;;22061:45;22092:2;22096:9;22061:30;:45::i;:::-;21441:673:::0;;;;;;;;;;:::o;34255:261::-;34408:14;34447:61;34476:8;34486:9;34497:10;34447:28;:61::i;:::-;34440:68;34255:261;-1:-1:-1;;;;34255:261:0:o;28586:846::-;28800:21;28772:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28847:29:::1;28872:4;28847:29;:4:::0;;28852:15;;;28847:21;;::::1;;;;;;;;;;;;;:29;;;28839:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28930:54;28960:7;28969:8;28979:4;;28930:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28930:29:0::1;::::0;-1:-1:-1;;;28930:54:0:i:1;:::-;28920:64;;29034:12;29003:7;29028:1;29011:7;:14;:18;29003:27;;;;;;;;;;;;;;:43;;28995:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29104:140;29150:4;;29155:1;29150:7;;;;;;;;;;;;;;;29159:10;29171:50;29195:7;29204:4;;29209:1;29204:7;;;;;;;;;;;;;;;29213:4;;29218:1;29213:7;;;;;;;;;;;;;;;29171:23;:50::i;:::-;29223:7;29231:1;29223:10;;;;;;;;;;;;;;29104:31;:140::i;:::-;29255:35;29261:7;29270:4;;29255:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29284:4:0::1;::::0;-1:-1:-1;29255:5:0::1;::::0;-1:-1:-1;;29255:35:0:i:1;:::-;29307:4;29301:20;;;29322:7;29347:1;29330:7;:14;:18;29322:27;;;;;;;;;;;;;;29301:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29301:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29301:49:0;;;;29361:63;29392:2;29396:7;29421:1;29404:7;:14;:18;29396:27;;;;;;;;;;;;;;29361:30;:63::i;:::-;28586:846:::0;;;;;;;;;:::o;35052:252::-;35196:21;35242:54;35271:7;35280:9;35291:4;35242:28;:54::i;:::-;35235:61;;35052:252;;;;;:::o;22120:675::-;22426:12;22440;22465;22480:48;22504:7;22513:6;22521;22480:23;:48::i;:::-;22465:63;;22539:10;22552;:33;;22576:9;22552:33;;;22570:2;22552:33;22596:79;;;;;;22623:10;22596:79;;;;22643:4;22596:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22539:46;;-1:-1:-1;22596:26:0;;;;;;:79;;;;;-1:-1:-1;;22596:79:0;;;;;;;;-1:-1:-1;22596:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;22596:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22596:79:0;;;;22707:80;22723:6;22731;22739:9;22750:10;22762;22774:2;22778:8;22707:15;:80::i;:::-;22686:101;;;;;;;;22120:675;;;;;;;;;;;;;;;;:::o;25817:625::-;26041:21;26022:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26085:54:::1;26115:7;26124:8;26134:4;;26085:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26085:29:0::1;::::0;-1:-1:-1;;;26085:54:0:i:1;:::-;26075:64;;26189:12;26158:7;26183:1;26166:7;:14;:18;26158:27;;;;;;;;;;;;;;:43;;26150:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26259:140;26305:4;;26310:1;26305:7;;;;;;26259:140;26410:24;26416:7;26425:4;;26410:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26431:2:0;;-1:-1:-1;26410:5:0::1;::::0;-1:-1:-1;;26410:24:0:i:1;27756:824::-:0;27970:21;27942:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28017:29:::1;28042:4;28017:29;:4:::0;;28022:15;;;28017:21;;::::1;;;;;;;;;;;;;:29;;;28009:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28100:54;28129:7;28138:9;28149:4;;28100:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28100:28:0::1;::::0;-1:-1:-1;;;28100:54:0:i:1;:::-;28090:64;;28187:11;28173:7;28181:1;28173:10;;;;;;;;;;;;;;:25;;28165:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24253:716:::0;24571:14;24598:12;24613:45;24637:7;24646:5;24653:4;24613:23;:45::i;:::-;24598:60;;24669:10;24682;:33;;24706:9;24682:33;;;24700:2;24682:33;24726:79;;;;;;24753:10;24726:79;;;;24773:4;24726:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24669:46;;-1:-1:-1;24726:26:0;;;;;;:79;;;;;-1:-1:-1;;24726:79:0;;;;;;;;-1:-1:-1;24726:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;24726:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24726:79:0;;;;24828:133;24890:5;24897:9;24908:14;24924:12;24938:2;24942:8;24828:47;:133::i;:::-;24816:145;24253:716;-1:-1:-1;;;;;;;;;;;;;24253:716:0:o;31605:712::-;31839:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31860:138:::1;31906:4;;31911:1;31906:7;;;;;;;;;;;;;;;31915:10;31927:50;31951:7;31960:4;;31965:1;31960:7;;;;;;;;;;;;;;;31969:4;;31974:1;31969:7;;;;;;31927:50;31979:8;31860:31;:138::i;:::-;32009:18;32037:4:::0;;32042:15;;;32037:21;;::::1;;;;;;;;;;;;;32030:39;;;32070:2;32030:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32030:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32030:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32030:43:0;32084:44:::1;::::0;;32030:43:::1;32084:44:::0;;::::1;::::0;;;;;;;;;;;32030:43;;-1:-1:-1;32084:44:0::1;::::0;;;32119:4;;;;;;32084:44;::::1;::::0;32119:4;;32084:44;32119:4;32084:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32125:2:0;;-1:-1:-1;32084:34:0::1;::::0;-1:-1:-1;;32084:44:0:i:1;:::-;32227:12:::0;32161:62:::1;32209:13:::0;32168:4;;32173:15;;;32168:21;;::::1;;;;;;;;;;;;;32161:39;;;32201:2;32161:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32161:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32161:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32161:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;32139:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17126:1;31605:712:::0;;;;;;;:::o;33176:840::-;33443:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33477:29:::1;33502:4;33477:29;:4:::0;;33482:15;;;33477:21;;::::1;;;;;;;;;;;;;:29;;;33469:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33550:138;33596:4;;33601:1;33596:7;;;;;;33550:138;33699:55;33734:4;;33699:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33748:4:0::1;::::0;-1:-1:-1;33699:34:0::1;::::0;-1:-1:-1;;33699:55:0:i:1;:::-;33782:37;::::0;;;;;33813:4:::1;33782:37;::::0;::::1;::::0;;;33765:14:::1;::::0;33782:22:::1;33789:4;33782:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33782:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33782:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33782:37:0;;-1:-1:-1;33838:25:0;;::::1;;33830:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33927:4;33921:20;;;33942:9;33921:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33921:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33921:31:0;;;;33963:45;33994:2;33998:9;33963:30;:45::i;27057:693::-:0;27273:21;27245:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27331:4:::1;27320:15;;:4;;27325:1;27320:7;;;;;;;;;;;;;;;:15;;;27312:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27389:55;27419:7;27428:9;27439:4;;27389:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27389:29:0::1;::::0;-1:-1:-1;;;27389:55:0:i:1;:::-;27379:65;;27494:12;27463:7;27488:1;27471:7;:14;:18;27463:27;;;;;;;;;;;;;;:43;;27455:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27570:4;27564:19;;;27591:7;27599:1;27591:10;;;;;;;;;;;;;;27564:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27564:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27564:40:0;;;;;27628:4;27622:20;;;27643:50;27667:7;27676:4;;27681:1;27676:7;;;;;;27643:50;27695:7;27703:1;27695:10;;;;;;;;;;;;;;27622:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27622:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27622:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27622:84:0;27615:92:::1;;;;27718:24;27724:7;27733:4;;27718:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27739:2:0;;-1:-1:-1;27718:5:0::1;::::0;-1:-1:-1;;27718:24:0:i:1;:::-;27057:693:::0;;;;;;;;:::o;34524:260::-;34677:13;34715:61;34743:9;34754;34765:10;34715:27;:61::i;26448:603::-;26672:21;26653:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26716:54:::1;26745:7;26754:9;26765:4;;26716:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26716:28:0::1;::::0;-1:-1:-1;;;26716:54:0:i:1;:::-;26706:64;;26803:11;26789:7;26797:1;26789:10;;;;;;;;;;;;;;:25;;26781:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16963:38:::0;;;:::o;34060:187::-;34157:12;34189:50;34211:7;34220:8;34230;34189:21;:50::i;23547:700::-;23813:14;23794:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23856:196:::1;23886:5;23906:4;23925:9;23949:14;23978:12;24013:4;24033:8;23856:15;:196::i;:::-;24102:38;::::0;;;;;24134:4:::1;24102:38;::::0;::::1;::::0;;;23840:212;;-1:-1:-1;24063:78:0::1;::::0;-1:-1:-1;24091:5:0;;24098:2;;24102: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;24102:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24102:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24102:38:0;24063:27:::1;:78::i;:::-;24158:4;24152:20;;;24173:9;24152:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24152:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24152:31:0;;;;24194:45;24225:2;24229:9;24194:30;:45::i;32323:847::-:0;32583:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32628:4:::1;32617:15;;:4;;32622:1;32617:7;;;;;;;;;;;;;;;:15;;;32609:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32676:13;32692:9;32676:25;;32718:4;32712:19;;;32739:8;32712:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32712:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32712:38:0;;;;;32774:4;32768:20;;;32789:50;32813:7;32822:4;;32827:1;32822:7;;;;;;32789:50;32841:8;32768:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32768:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32768:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32768:82:0;32761:90:::1;;;;32862:18;32890:4:::0;;32895:15;;;32890:21;;::::1;;;;;;;;;;;;;32883:39;;;32923:2;32883:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32883:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32883:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32883:43:0;32937:44:::1;::::0;;32883:43:::1;32937:44:::0;;::::1;::::0;;;;;;;;;;;32883:43;;-1:-1:-1;32937:44:0::1;::::0;;;32972:4;;;;;;32937:44;::::1;::::0;32972:4;;32937:44;32972:4;32937:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32978:2:0;;-1:-1:-1;32937:34:0::1;::::0;-1:-1:-1;;32937:44:0:i:1;:::-;33080:12:::0;33014:62:::1;33062:13:::0;33021:4;;33026:15;;;33021:21;;::::1;;;;;;;;;;;;;33014:39;;;33054:2;33014:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20576:859:0::0;20830:12;20844;20811:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20869:12:::1;20884:48;20908:7;20917:6;20925;20884:23;:48::i;:::-;20943:61;::::0;;;;;20976:10:::1;20943:61;::::0;::::1;::::0;:32:::1;::::0;::::1;:61:::0;;;;;;;;;;;;;;20869:63;;-1:-1:-1;20943:32:0;;::::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20943:32:0;:61;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20943:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20943:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;21072:28:0::1;::::0;;;;;:24:::1;:28:::0;;::::1;;::::0;::::1;::::0;;;21042:12:::1;::::0;;;21072:24;;::::1;::::0;::::1;::::0;:28;;;;;;;;;;;21042:12;21072:24;:28;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21072:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21072:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21072:28:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21072:28:0;-1:-1:-1;21112:14:0::1;21131:42;21158:6:::0;21166;21131:26:::1;:42::i;:::-;21111:62;;;21215:6;21205:16;;:6;:16;;;:58;;21246:7;21255;21205:58;;;21225:7;21234;21205:58;21184:79:::0;;-1:-1:-1;21184:79:0;-1:-1:-1;21282:21:0;;::::1;;21274:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21375:10;21364:7;:21;;21356:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17126:1;;;;20576:859:::0;;;;;;;;;;;:::o;16915:41::-;;;:::o;34792:252::-;34936:21;34982:54;35012:7;35021:8;35031:4;34982:29;:54::i;22801:667::-;23090:16;23108:14;23135:12;23150:45;23174:7;23183:5;23190:4;23150:23;:45::i;:::-;23135:60;;23206:10;23219;:33;;23243:9;23219:33;;;23237:2;23219:33;23263:79;;;;;;23290:10;23263:79;;;;23310:4;23263:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23206:46;;-1:-1:-1;23263:26:0;;;;;;:79;;;;;-1:-1:-1;;23263:79:0;;;;;;;;-1:-1:-1;23263:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;23263:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23263:79:0;;;;23380:80;23399:5;23406:9;23417:14;23433:12;23447:2;23451:8;23380:18;:80::i;:::-;23353:107;;;;-1:-1:-1;22801:667:0;-1:-1:-1;;;;;;;;;;;;;22801:667:0:o;18819:736::-;19107:12;19121;19135:14;19088:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19183:85:::1;19197:6;19205;19213:14;19229;19245:10;19257;19183:13;:85::i;:::-;19162:106:::0;;-1:-1:-1;19162:106:0;-1:-1:-1;19279:12:0::1;19294:48;19318:7;19327:6:::0;19335;19294:23:::1;:48::i;:::-;19279:63;;19353:66;19385:6;19393:10;19405:4;19411:7;19353:31;:66::i;:::-;19430;19462:6;19470:10;19482:4;19488:7;19430:31;:66::i;:::-;19533:4;19519:24;;;19544:2;19519:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19519:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19519:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19519:28:0;18819:736;;;;-1:-1:-1;19519:28:0;;-1:-1:-1;18819:736:0;;-1:-1:-1;;;;;;;;;18819:736:0:o;19561:972::-;19814:16;19832:14;19848;19795:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19902:176:::1;19930:5;19950:4;19969:18;20002:9;20026:14;20055:12;19902:13;:176::i;:::-;19875:203:::0;;-1:-1:-1;19875:203:0;-1:-1:-1;20089:12:0::1;20104:45;20128:7;20137:5:::0;20144:4:::1;20104:23;:45::i;:::-;20089:60;;20160:69;20192:5;20199:10;20211:4;20217:11;20160:31;:69::i;:::-;20246:4;20240:19;;;20267:9;20240:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20240:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20240:39:0;;;;;20303:4;20297:20;;;20318:4;20324:9;20297:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20297:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20297:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20297:37:0;20290:45:::1;;;;20372:4;20358:24;;;20383:2;20358:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20358:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20358:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20358:28:0;;-1:-1:-1;20437:9:0::1;:21:::0;-1:-1:-1;20433:92:0::1;;;20460:65;20491:10;20515:9;20503;:21;20460:30;:65::i;:::-;17126:1;19561:972:::0;;;;;;;;;;;:::o;29438:806::-;29651:21;29623:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29709:4:::1;29698:15;;:4;;29703:1;29698:7;;;;;;;;;;;;;;;:15;;;29690:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29767:54;29796:7;29805:9;29816:4;;29767:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29767:28:0::1;::::0;-1:-1:-1;;;29767:54:0:i:1;:::-;29757:64;;29854:9;29840:7;29848:1;29840:10;;;;;;;;;;;;;;:23;;29832:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29923:4;29917:19;;;29944:7;29952:1;29944:10;;;;;;;;;;;;;;29917:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29917:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29917:40:0;;;;;29981:4;29975:20;;;29996:50;30020:7;30029:4;;30034:1;30029:7;;;;;;29996:50;30048:7;30056:1;30048:10;;;;;;;;;;;;;;29975:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29975:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29975:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29975:84:0;29968:92:::1;;;;30071:24;30077:7;30086:4;;30071:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30092:2:0;;-1:-1:-1;30071:5:0::1;::::0;-1:-1:-1;;30071:24:0:i:1;:::-;30158:7;30166:1;30158:10;;;;;;;;;;;;;;30146:9;:22;30142:94;;;30170:66;30201:10;30225:7;30233:1;30225:10;;;;;;;;;;;;;;30213:9;:22;30170:30;:66::i;14707:361::-:0;14902:45;;;14891:10;14902:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14902:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;14902:45:0;179:29:-1;160:49;;14891:57:0;;;;14856:12;;14870:17;;14891:10;;;;14902:45;14891:57;;;25:18:-1;14891: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;;;14891: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;;14855:93:0;;;;14967:7;:57;;;;-1:-1:-1;14979:11:0;;:16;;:44;;;15010:4;14999:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14999:24:0;14979:44;14959:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14707:361;;;;;:::o;15486:195::-;15594:12;;;15556;15594;;;;;;;;;15573:7;;;;15587:5;;15573: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;;;15573: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;;15555:52:0;;;15626:7;15618:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15486:195;;;:::o;10375:515::-;10468:14;10514:1;10503:8;:12;10495:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10593:1;10581:9;:13;:31;;;;;10611:1;10598:10;:14;10581:31;10573:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10667:20;10690:17;:8;10703:3;10690:17;:12;:17;:::i;:::-;10667:40;-1:-1:-1;10718:14:0;10735:31;10667:40;10755:10;10735:31;:19;:31;:::i;:::-;10718:48;-1:-1:-1;10777:16:0;10796:40;10820:15;10796:19;:9;10810:4;10796:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;10777:59;;10871:11;10859:9;:23;;;;;;;10375:515;-1:-1:-1;;;;;;;10375:515:0:o;11563:510::-;11664:21;11721:1;11706:4;:11;:16;;11698:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11788:4;:11;11777:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11777:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;11777:23:0;;11767:33;;11824:8;11811:7;11819:1;11811:10;;;;;;;;;;;;;:21;;;;;11848:6;11843:223;11874:1;11860:4;:11;:15;11856:1;:19;11843:223;;;11898:14;11914:15;11933:42;11945:7;11954:4;11959:1;11954:7;;;;;;;;;;;;;;11963:4;11968:1;11972;11968:5;11963:11;;;;;;;;;;;;;;11933;:42::i;:::-;11897:78;;;;12007:47;12020:7;12028:1;12020:10;;;;;;;;;;;;;;12032:9;12043:10;12007:12;:47::i;:::-;11990:7;11998:1;12002;11998:5;11990:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;11877:3:0;;11843:223;;;;11563:510;;;;;:::o;8852:478::-;8941:12;8967:14;8983;9001:26;9012:6;9020;9001:10;:26::i;:::-;9165:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;9165:32:0;;;;;9155:43;;;;;;9068:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9068:251:0;;;;;;;9058:262;;;;;;;;;8852:478;-1:-1:-1;;;;;8852:478:0:o;15076:402::-;15301:51;;;15290:10;15301:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15301:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;15301:51:0;179:29:-1;160:49;;15290:63:0;;;;15255:12;;15269:17;;15290:10;;;;15301:51;15290:63;;;25:18:-1;15290: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;;;15290: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;;15254:99:0;;;;15372:7;:57;;;;-1:-1:-1;15384:11:0;;:16;;:44;;;15415:4;15404:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15404:24:0;15384:44;15364:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15076:402;;;;;;:::o;25080:731::-;25187:6;25182:622;25213:1;25199:4;:11;:15;25195:1;:19;25182:622;;;25237:13;25252:14;25271:4;25276:1;25271:7;;;;;;;;;;;;;;25280:4;25285:1;25289;25285:5;25280:11;;;;;;;;;;;;;;25236:56;;;;25308:14;25327:41;25354:5;25361:6;25327:26;:41::i;:::-;25307:61;;;25383:14;25400:7;25408:1;25412;25408:5;25400:14;;;;;;;;;;;;;;25383:31;;25430:15;25447;25475:6;25466:15;;:5;:15;;;:61;;25508:9;25524:1;25466:61;;;25490:1;25494:9;25466:61;25429:98;;;;25542:10;25573:1;25559:4;:11;:15;25555:1;:19;:81;;25633:3;25555:81;;;25577:53;25601:7;25610:6;25618:4;25623:1;25627;25623:5;25618:11;;;;;;;;;;;;;;25577:23;:53::i;:::-;25542:94;;25665:47;25689:7;25698:5;25705:6;25665:23;:47::i;:::-;25651:67;;;25737:10;25749;25761:2;25775:1;25765:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25765:12:0;87:42:-1;143:17;;-1:-1;25765:12:0;;25651:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;25651:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25651:141:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25216:3:0;;;;;-1:-1:-1;25182:622:0;;-1:-1:-1;;;;;;;;25182:622:0;;;25080:731;;;:::o;12154:531::-;12255:21;12312:1;12297:4;:11;:16;;12289:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12379:4;:11;12368:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12368:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12368:23:0;;12358:33;;12432:9;12402:7;12427:1;12410:7;:14;:18;12402:27;;;;;;;;;;;;;;;;;:39;12466:11;;:15;;12452:226;12483:5;;12452:226;;12511:14;12527:15;12546:42;12558:7;12567:4;12576:1;12572;:5;12567:11;;;;;;;;;;;;;;12580:4;12585:1;12580:7;;;;;;;12546:42;12510:78;;;;12620:46;12632:7;12640:1;12632:10;;;;;;;;;;;;;;12644:9;12655:10;12620:11;:46::i;:::-;12603:7;12615:1;12611;:5;12603:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;12490:3:0;;12452:226;;30391:1208;30504:6;30499:1093;30530:1;30516:4;:11;:15;30512:1;:19;30499:1093;;;30554:13;30569:14;30588:4;30593:1;30588:7;;;;;;;;;;;;;;30597:4;30602:1;30606;30602:5;30597:11;;;;;;;;;;;;;;30553:56;;;;30625:14;30644:41;30671:5;30678:6;30644:26;:41::i;:::-;30624:61;;;30700:18;30735:47;30759:7;30768:5;30775:6;30735:23;:47::i;:::-;30700:83;;30798:16;30829:17;30917:13;30932;30950:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30950:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30950:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30950:18:0;;;;;;;30916:52;;;;;-1:-1:-1;30916:52:0;;-1:-1:-1;30984:17:0;;31025:15;;;;;;;;:61;;31067:8;31077;31025:61;;;31044:8;31054;31025:61;30983:103;;;;31115:56;31158:12;31122:5;31115:23;;;31147:4;31115:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;31115:56:0;31101:70;;31201;31230:11;31243:12;31257:13;31201:28;:70::i;:::-;31186:85;;30499:1093;;;;31302:15;31319;31347:6;31338:15;;:5;:15;;;:67;;31383:12;31402:1;31338:67;;;31362:1;31366:12;31338:67;31301:104;;;;31420:10;31451:1;31437:4;:11;:15;31433:1;:19;:81;;31511:3;31433:81;;;31455:53;31479:7;31488:6;31496:4;31501:1;31505;31501:5;31496:11;;;;;;;31455:53;31567:12;;;31577:1;31567:12;;;;;;;;;;31529:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;31420:94;;-1:-1:-1;31529:9:0;;;;;;31539:10;;31551;;31420:94;;31567:12;;31529:51;;;;;;;;31567:12;;31529:51;;;;31567: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;31529:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31529:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30533:3:0;;;;;-1:-1:-1;30499:1093:0;;-1:-1:-1;;;;;;;;;;30499:1093:0;7766:129;7850:5;;;7845:16;;;;7837:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11011:470;11104:13;11150:1;11138:9;:13;11130:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11230:1;11218:9;:13;:31;;;;;11248:1;11235:10;:14;11218:31;11210:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11304:14;11321:34;11350:4;11321:24;:9;11335;11321:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;11304:51;-1:-1:-1;11366:16:0;11385:34;11415:3;11385:25;:10;11400:9;11385:25;:14;:25;:::i;:34::-;11366:53;;11441:32;11471:1;11454:11;11442:9;:23;;;;;;;11441:32;:29;:32;:::i;:::-;11430:43;11011:470;-1:-1:-1;;;;;;11011:470:0:o;9934:319::-;10016:12;10059:1;10049:7;:11;10041:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10131:1;10120:8;:12;:28;;;;;10147:1;10136:8;:12;10120:28;10112:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10237:8;10213:21;:7;10225:8;10213:21;:11;:21;:::i;:::-;:32;;;;;;;9934:319;-1:-1:-1;;;;9934:319:0:o;8413:347::-;8488:14;8504;8549:6;8539:16;;:6;:16;;;;8531:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8635:6;8626:15;;:6;:15;;;:53;;8664:6;8672;8626:53;;;8645:6;8653;8626:53;8607:72;;-1:-1:-1;8607:72:0;-1:-1:-1;8698:20:0;;;8690:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8413:347;;;;;:::o;17430:1383::-;17743:49;;;;;;:63;:49;;;;;;;;;;;;;;;;17648:12;;;;;;17760:7;17743:33;;;;;;:49;;;;;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;17743:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17743:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17743:49:0;:63;;;17739:148;;;17823:52;;;;;;:36;:52;;;;;;;;;;;;;;;;17840:7;17823:36;;;;;;:52;;;;;;;;;;;;;;;-1:-1:-1;17823:36:0;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;17823:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17823:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17739:148:0;17898:13;17913;17930:52;17958:7;17967:6;17975;17930:27;:52::i;:::-;17897:85;;;;17997:8;18009:1;17997:13;:30;;;;-1:-1:-1;18014:13:0;;17997:30;17993:813;;;18066:14;;-1:-1:-1;18082:14:0;;-1:-1:-1;17993:813:0;;;18130:19;18152:57;18174:14;18190:8;18200;18152:21;:57::i;:::-;18130:79;;18246:14;18228;:32;18224:571;;18307:10;18289:14;:28;;18281:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18400:14;;-1:-1:-1;18416:14:0;-1:-1:-1;18416:14:0;18224:571;;;18472:19;18494:57;18516:14;18532:8;18542;18494:21;:57::i;:::-;18472:79;;18595:14;18577;:32;;18570:40;;;;18655:10;18637:14;:28;;18629:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18748:14;-1:-1:-1;18764:14:0;;-1:-1:-1;18224:571:0;17993:813;;17430:1383;;;;;;;;;;;:::o;7903:142::-;7955:6;7982;;;:30;;-1:-1:-1;;7997:5:0;;;8011:1;8006;7997:5;8006:1;7992:15;;;;;:20;7982:30;7974:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7630:128;7714:5;;;7709:16;;;;7701:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9388:433;9481:13;9496;9523:14;9542:26;9553:6;9561;9542:10;:26::i;:::-;9522:46;;;9579:32;9587:7;9596:6;9604;9579:7;:32::i;:::-;;9623:13;9638;9670:32;9678:7;9687:6;9695;9670:7;:32::i;:::-;9656:59;;;:61;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9656:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9656:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9656:61:0;;;;;;;9622:95;;;;;-1:-1:-1;9622:95:0;;-1:-1:-1;9751:16:0;;;;;;;;:62;;9794:8;9804;9751:62;;;9771:8;9781;9751:62;9728:85;;;;-1:-1:-1;9388:433:0;-1:-1:-1;;;;;;;9388:433:0:o

Swarm Source

ipfs://8aadca8ddee0905076884f3e637dc0cbe034a378a2bbe7e74fbed7f5493130bc
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.