Contract 0x9e31215f6421c4eed2c04116d430caf30999680d

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xc0769160fb283bea62736abb793197e40a1cd66898fcc3ac4c5d2c72829acd43Swap Exact Token...259535802022-03-15 2:13:41370 days 20 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.061287456189586.365000234
0xca42954d8cd101826abfe2db94d851fca5337ce3bf5353e1b571bfc13ffa2f8bSwap Exact Token...259535762022-03-15 2:13:33370 days 20 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.064930541935586.365000234
0x8198679ebb7c21827c779a4137034324e38ac08f1df7ed6d3e5ca6a11b87992bAdd Liquidity257026592022-03-07 22:38:58377 days 23 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.116611737708675.34451676
0xd8d80d9ec0542d3cc90774db10f06937efe40c7d574339a33343cc08fd8d2cbbSwap Exact Token...257026562022-03-07 22:38:52377 days 23 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.064065386985495.252645624
0xefbfa6a9e3378e9fe5a5249d3afc813ee6bbe89197dbde59d8586d8a394450e1Add Liquidity257026472022-03-07 22:38:30377 days 23 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.122403492284675.34451676
0x8da771af4ec363918cef71c78a8d95b7ba2e81c71ac765d423db88672536f342Swap Exact Token...257026442022-03-07 22:38:24377 days 23 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.065255479092495.252645624
0xbe1054b8540c4e4b215d4ee0b38783ac38e7a07603ec6d28abffd0e2b9f425fbAdd Liquidity256813142022-03-07 9:47:08378 days 12 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.116611737708675.34451676
0x9b27e3cd644839b206e4591f55682eb638e8c2fd73b05aa7e3e38403e5ccc2bbSwap Exact Token...256813122022-03-07 9:47:04378 days 12 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.064065386985495.252645624
0x67170283180d79b2fa072b6baf292d209e0c1b846ea9a5c20433fb0983fb2d24Add Liquidity256813032022-03-07 9:46:46378 days 12 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.122388634705675.34451676
0x75b1d3fa48eec2815cc818b3c7b1e3f2cd0d710f401987e75d72491dc2528987Swap Exact Token...256813012022-03-07 9:46:42378 days 12 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.065255479092495.252645624
0xf3d94c5bff1b006186c8587d53d90891215f5c66a641afa1b008048eef67d9e6Swap Exact Token...242419272022-01-27 22:26:05416 days 23 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.059064867129588.301348908
0x2d9629ac68fc2ede657737980648bbfa4f84dbf395b7495bcb43ef0171d8f721Swap Exact Token...242419192022-01-27 22:25:45416 days 23 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.061503964521588.301348908
0xe59176bf566ddc03015b6eeaff16c994e0f081abd16405b7c87ea31afe472bb4Swap Exact Token...242419142022-01-27 22:25:35416 days 23 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.065152021186588.301348908
0x01def8ecac223c0c4894782acd7c9f69ff136faabde9c31bafc0a852c609206cSwap Exact Token...241328792022-01-25 4:53:57419 days 17 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.055743506886509.403420355
0x5c5094caf10e3755a263a0e786912554b0a3f96478dff58a282909c1ae4e2e99Remove Liquidity241328742022-01-25 4:53:47419 days 17 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.077552595521509.403420355
0x2ab7a08faf9436d876d7103c043863dc00093b61609527255f62bb27595c8d0aSwap Exact Token...241328712022-01-25 4:53:41419 days 17 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.051032544054509.403420355
0x2c7887815615a3a4f0603f99a84dd404d1750b19e51eb9e4e58af57f096b721fAdd Liquidity241280572022-01-25 2:01:36419 days 20 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.2051862524671,188.397018777
0x6ba79a2b0a211fb206110a39170007ab7dd633c61654df79d83f8cfbf5213036Swap Exact Token...241280542022-01-25 2:01:30419 days 20 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.112735223298871.491147103
0xc2bd62a9c55c783e366eb68b4725a3b3175d8430c383e6ae347ac33070e24e75Swap Exact Token...241115562022-01-24 16:16:37420 days 6 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.1810873434521,566.093085293
0x6225288f781e70384ad18f530e0e06f9ff1730039d4b20ffe162169507820577Remove Liquidity241115522022-01-24 16:16:29420 days 6 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.2363579006181,566.093085293
0xe2fe7c1e027b90ce4517ca634e03b4264b9f103a41dbffd3b88864b8df466d32Swap Exact Token...241115462022-01-24 16:16:13420 days 6 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.1568927713771,566.093085293
0xe092b1573831b93899c4a51e24a7f4032bc27580a9b955f9f31372e4e8f94361Add Liquidity240855252022-01-24 0:45:01420 days 21 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.329866471,665
0xe23409b1369def852d1b6fdc37ce3ec0313286011260b7ce04f59bfe755458ccSwap Exact Token...240855162022-01-24 0:44:43420 days 21 hrs ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.1608814021,221
0x2184f17d3a6f4c2f0fae7bf30c12cb7a0ccfa669981167305d5364f4b3942fd3Swap Exact Token...238817762022-01-18 21:43:15426 days 36 mins ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.2291230142263,135.8362881
0x85b33467369777e8b3b2d5b2cb5ec44e0e4be2ccdbb4057fad224f00eb683588Swap Exact Token...238817712022-01-18 21:43:05426 days 36 mins ago0xd20b976584bf506baf5cc604d1f0a1b8d07138da IN  0x9e31215f6421c4eed2c04116d430caf30999680d0 MATIC0.2520353156483,449.41991691
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xa544f68956dfbf3986f6697ee514b94ea39c28dad2bbc8e2a824fb23a18d66c2251399222022-02-20 3:59:18393 days 18 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token0.03125 MATIC
0xa544f68956dfbf3986f6697ee514b94ea39c28dad2bbc8e2a824fb23a18d66c2251399222022-02-20 3:59:18393 days 18 hrs ago 0x723ea477f46e907501e3ed6a947a0e13640cfacf 0x9e31215f6421c4eed2c04116d430caf30999680d0.03125 MATIC
0x5bd36b25c9db6af84154fff333f25e029a1ed75d0ac60b5b6f8477d17c582225244194802022-02-01 11:40:29412 days 10 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token247.398399999999967232 MATIC
0x5bd36b25c9db6af84154fff333f25e029a1ed75d0ac60b5b6f8477d17c582225244194802022-02-01 11:40:29412 days 10 hrs ago 0x7f9e934a37cf83de5e28ceab727d973959da47d3 0x9e31215f6421c4eed2c04116d430caf30999680d247.398399999999967232 MATIC
0x917c51dda5dd969d2a2b36b870c96bf034c14b43d3158ac6ff1e2c3d98669196244192332022-02-01 11:29:51412 days 10 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token246.988800000000098304 MATIC
0x917c51dda5dd969d2a2b36b870c96bf034c14b43d3158ac6ff1e2c3d98669196244192332022-02-01 11:29:51412 days 10 hrs ago 0x8fb4a7349013a4b8ea6c4c13f339a61fef3766bf 0x9e31215f6421c4eed2c04116d430caf30999680d246.988800000000098304 MATIC
0x2cba63b07ebf9e1e7b6199b8d5949392866f4a74cc732c1ad9ef9b776c0d3385244077472022-02-01 4:26:29412 days 17 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token491.520000000000065536 MATIC
0x2cba63b07ebf9e1e7b6199b8d5949392866f4a74cc732c1ad9ef9b776c0d3385244077472022-02-01 4:26:29412 days 17 hrs ago 0x416cef55ad09e929c24e43856e3c64667e75c4f7 0x9e31215f6421c4eed2c04116d430caf30999680d491.520000000000065536 MATIC
0xde17c90e7f563263bd0124702e2f066d30bb5d3ff9139de643799bb0e230425d243981312022-01-31 22:40:48412 days 23 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token497.2544 MATIC
0xde17c90e7f563263bd0124702e2f066d30bb5d3ff9139de643799bb0e230425d243981312022-01-31 22:40:48412 days 23 hrs ago 0x2a0795bc2221fa219f3c545fc3edb9d68a010ae7 0x9e31215f6421c4eed2c04116d430caf30999680d497.2544 MATIC
0x636d0f9cebf798c14d3762f7feb8c513c6f9d341dba1fc323b9c42d38e68c0d3243099632022-01-29 16:29:41415 days 5 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token0.003781250000000001 MATIC
0x636d0f9cebf798c14d3762f7feb8c513c6f9d341dba1fc323b9c42d38e68c0d3243099632022-01-29 16:29:41415 days 5 hrs ago 0x69d959bd428c5082a9f79c734daab268d7cce98f 0x9e31215f6421c4eed2c04116d430caf30999680d0.003781250000000001 MATIC
0xbad154f7c97e973173096e51fa6be6ebaefa19c7e35d08c57f9cd2d729c5dd49242451172022-01-28 0:20:01416 days 21 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token63.7952 MATIC
0xbad154f7c97e973173096e51fa6be6ebaefa19c7e35d08c57f9cd2d729c5dd49242451172022-01-28 0:20:01416 days 21 hrs ago 0x05ec82959aae1dc22fb47254d0c19605d4d0629c 0x9e31215f6421c4eed2c04116d430caf30999680d63.7952 MATIC
0x908487402e53d186fab1d46585f5a8f0ac9eca40adac580a99a99a9f8875cb7c242448942022-01-28 0:12:23416 days 22 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token128 MATIC
0x908487402e53d186fab1d46585f5a8f0ac9eca40adac580a99a99a9f8875cb7c242448942022-01-28 0:12:23416 days 22 hrs ago 0x58ff0af84d6c20457f8ffc183d01280c3e094b14 0x9e31215f6421c4eed2c04116d430caf30999680d128 MATIC
0x304e4cd02097b1fec82e74708851b4d695e7eec23c0eb4c4c0b7b3939426b667242445822022-01-28 0:00:49416 days 22 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token32.256 MATIC
0x304e4cd02097b1fec82e74708851b4d695e7eec23c0eb4c4c0b7b3939426b667242445822022-01-28 0:00:49416 days 22 hrs ago 0x6d857730fac74934facc07f557f55cd43372c345 0x9e31215f6421c4eed2c04116d430caf30999680d32.256 MATIC
0x395e471363a0d349b4f6e01345e0f2fea655461c8732bdd56020c75e937e9ab9242367272022-01-27 19:20:43417 days 2 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token253.5424 MATIC
0x395e471363a0d349b4f6e01345e0f2fea655461c8732bdd56020c75e937e9ab9242367272022-01-27 19:20:43417 days 2 hrs ago 0xd3a976f650024edd31b1227c6e379a1b40192cc2 0x9e31215f6421c4eed2c04116d430caf30999680d253.5424 MATIC
0x18588ab47adb73781f172f72da6b41b6b8d72bb9cd9d1a37595ba72b40e2fa4b242345262022-01-27 17:58:34417 days 4 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token0.1238 MATIC
0x18588ab47adb73781f172f72da6b41b6b8d72bb9cd9d1a37595ba72b40e2fa4b242345262022-01-27 17:58:34417 days 4 hrs ago 0xf344c9372b7c50c81fdb5f0a6f872b1a7f30b642 0x9e31215f6421c4eed2c04116d430caf30999680d0.1238 MATIC
0xaefab958fdf48ed7d6de6ebe09f16e01008f8be390c6c1b73e2b1581197970c6242253252022-01-27 12:27:16417 days 9 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token253.132800000000131072 MATIC
0xaefab958fdf48ed7d6de6ebe09f16e01008f8be390c6c1b73e2b1581197970c6242253252022-01-27 12:27:16417 days 9 hrs ago 0x3bfc1613393285c5626e6b0e37a10175f6161636 0x9e31215f6421c4eed2c04116d430caf30999680d253.132800000000131072 MATIC
0x4dc9dd2a54ecd53624b03272ca0ae195ca5909fa296c688e793e9c6681a29410242247482022-01-27 12:05:15417 days 10 hrs ago 0x9e31215f6421c4eed2c04116d430caf30999680d Polygon: WMATIC Token127.385600000000032768 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ApeRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 10 : ApeRouter.sol
pragma solidity =0.6.6;

/*
 * ApeSwapFinance 
 * App:             https://apeswap.finance
 * Medium:          https://ape-swap.medium.com/    
 * Twitter:         https://twitter.com/ape_swap 
 * Telegram:        https://t.me/ape_swap
 * Announcements:   https://t.me/ape_swap_news
 * GitHub:          https://github.com/ApeSwapFinance
 */

import './interfaces/IApeFactory.sol';
import '@uniswap/lib/contracts/libraries/TransferHelper.sol';

import './interfaces/IApeRouter02.sol';
import './libraries/ApeLibrary.sol';
import './libraries/SafeMath.sol';
import './interfaces/IERC20.sol';
import './interfaces/IWETH.sol';

contract ApeRouter is IApeRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

File 2 of 10 : IApeFactory.sol
pragma solidity >=0.6.6;

interface IApeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 3 of 10 : IApeRouter02.sol
pragma solidity >=0.6.2;

import './IApeRouter01.sol';

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

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

File 4 of 10 : IApeRouter01.sol
pragma solidity >=0.6.2;

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

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

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

File 5 of 10 : ApeLibrary.sol
pragma solidity >=0.5.0;

/*
 * ApeSwapFinance 
 * App:             https://apeswap.finance
 * Medium:          https://ape-swap.medium.com/    
 * Twitter:         https://twitter.com/ape_swap 
 * Telegram:        https://t.me/ape_swap
 * Announcements:   https://t.me/ape_swap_news
 * GitHub:          https://github.com/ApeSwapFinance
 */

import '../interfaces/IApePair.sol';
import "./SafeMath.sol";

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

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

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'ApeLibrary: 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, 'ApeLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

File 6 of 10 : IApePair.sol
pragma solidity >=0.6.6;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

File 7 of 10 : SafeMath.sol
pragma solidity =0.6.6;

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

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

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

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

File 8 of 10 : IERC20.sol
pragma solidity >=0.5.0;

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

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

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

File 9 of 10 : IWETH.sol
pragma solidity >=0.5.0;

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

File 10 of 10 : 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');
    }
}

Settings
{
  "metadata": {
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

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"}]

60c06040523480156200001157600080fd5b506040516200571a3803806200571a833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61559362000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d5280613118528061344e52806134a452806134d852806135595280613773528061392352806139b85250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf528061309d52806130c652806130f652806132d35280613482528061385952806139f7528061447652806144b9528061481952806149fa5280614fa15280615082528061510252506155936000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961309b565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506130bf945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130ec565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613244565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133d3565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136ff565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613d2b565b50965096945050505050565b6000610f44848484613e68565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f8c92505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140f2565b8560008151811061124a57fe5b60200260200101516141dd565b611296828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143ad915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613d2b565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614634565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140f2565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f8c92505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b61162a868660008181106111a257fe5b611359828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506143ad915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061463492505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154896021913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140f2565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141dd565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c329290918991899182918501908490808284376000920191909152508892506147c2915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b5516565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f598585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506147c2915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613d2b565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f8c92505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506143ad915050565b5095945050505050565b6000610f44848484614bc7565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061463492505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154896021913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614ceb565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613d2b565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a9182918501908490808284376000920191909152508992506147c2915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140f2565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614de1565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a87101561301b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b8986101561308a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f8c565b600080600061313c7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140f2565b905060008761314b578c61316d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561320957600080fd5b505af115801561321d573d6000803e3d6000fd5b5050505061322f8e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b600080600083428110156132b957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6132c78c8c8c8c8c8c614f4a565b909450925060006132f97f00000000000000000000000000000000000000000000000000000000000000008e8e6140f2565b90506133078d3383886141dd565b6133138c3383876141dd565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561339257600080fd5b505af11580156133a6573d6000803e3d6000fd5b505050506040513d60208110156133bc57600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561344857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6134768a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614f4a565b909450925060006134c87f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140f2565b90506134d68b3383886141dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561353e57600080fd5b505af1158015613552573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135fe57600080fd5b505af1158015613612573d6000803e3d6000fd5b505050506040513d602081101561362857600080fd5b505161363057fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156136af57600080fd5b505af11580156136c3573d6000803e3d6000fd5b505050506040513d60208110156136d957600080fd5b50519250348410156136f1576136f133853403613d2b565b505096509650969350505050565b6060814281101561377157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106137b557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461385457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b6138b27f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061463492505050565b915034826000815181106138c257fe5b60200260200101511115613921576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154896021913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061396a57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561399d57600080fd5b505af11580156139b1573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613a237f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a3057fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613aa157600080fd5b505af1158015613ab5573d6000803e3d6000fd5b505050506040513d6020811015613acb57600080fd5b5051613ad357fe5b613b12828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506143ad915050565b81600081518110613b1f57fe5b602002602001015134111561251b5761251b3383600081518110613b3f57fe5b60200260200101513403613d2b565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613c2457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613be7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c86576040519150601f19603f3d011682016040523d82523d6000602084013e613c8b565b606091505b5091509150818015613cb9575080511580613cb95750808060200190516020811015613cb657600080fd5b50515b613d2457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613da257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d65565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613e04576040519150601f19603f3d011682016040523d82523d6000602084013e613e09565b606091505b5050905080613e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154cf6023913960400191505060405180910390fd5b505050565b6000808411613ec2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154aa6025913960400191505060405180910390fd5b600083118015613ed25750600082115b613f27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155166022913960400191505060405180910390fd5b6000613f3b856103e663ffffffff61527716565b90506000613f4f828563ffffffff61527716565b90506000613f7583613f69886103e863ffffffff61527716565b9063ffffffff6152fd16565b9050808281613f8057fe5b04979650505050505050565b6060600282511015613fff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4170654c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561401757600080fd5b50604051908082528060200260200182016040528015614041578160200160208202803683370190505b509050828160008151811061405257fe5b60200260200101818152505060005b60018351038110156140ea576000806140a48786858151811061408057fe5b602002602001015187866001018151811061409757fe5b602002602001015161536f565b915091506140c68484815181106140b757fe5b60200260200101518383613e68565b8484600101815181106140d557fe5b60209081029190910101525050600101614061565b509392505050565b60008060006141018585614de1565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f511f0f358fe530cda0859ec20becf391718fdf5a329be02f4c95361f3d6a42d8609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b602083106142bb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161427e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461431d576040519150601f19603f3d011682016040523d82523d6000602084013e614322565b606091505b5091509150818015614350575080511580614350575080806020019051602081101561434d57600080fd5b50515b6143a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154f26024913960400191505060405180910390fd5b505050505050565b60005b600183510381101561462e576000808483815181106143cb57fe5b60200260200101518584600101815181106143e257fe5b60200260200101519150915060006143fa8383614de1565b509050600087856001018151811061440e57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146144565782600061445a565b6000835b91509150600060028a5103881061447157886144b2565b6144b27f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106144a557fe5b60200260200101516140f2565b90506144df7f000000000000000000000000000000000000000000000000000000000000000088886140f2565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614529576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156145b457818101518382015260200161459c565b50505050905090810190601f1680156145e15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561460357600080fd5b505af1158015614617573d6000803e3d6000fd5b5050600190990198506143b0975050505050505050565b50505050565b60606002825110156146a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4170654c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156146bf57600080fd5b506040519080825280602002602001820160405280156146e9578160200160208202803683370190505b50905082816001835103815181106146fd57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140ea5760008061475d8786600186038151811061474957fe5b602002602001015187868151811061409757fe5b9150915061477f84848151811061477057fe5b60200260200101518383614bc7565b84600185038151811061478e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161472d565b60005b6001835103811015613e63576000808483815181106147e057fe5b60200260200101518584600101815181106147f757fe5b602002602001015191509150600061480f8383614de1565b509050600061483f7f000000000000000000000000000000000000000000000000000000000000000085856140f2565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561488d57600080fd5b505afa1580156148a1573d6000803e3d6000fd5b505050506040513d60608110156148b757600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614901578284614904565b83835b91509150614989828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614996868383613e68565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149da578260006149de565b6000835b91509150600060028c51038a106149f5578a614a29565b614a297f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106144a557fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614ad9578181015183820152602001614ac1565b50505050905090810190601f168015614b065780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614b2857600080fd5b505af1158015614b3c573d6000803e3d6000fd5b50506001909b019a506147c59950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614c21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155386026913960400191505060405180910390fd5b600083118015614c315750600082115b614c86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155166022913960400191505060405180910390fd5b6000614caa6103e8614c9e868863ffffffff61527716565b9063ffffffff61527716565b90506000614cc46103e6614c9e868963ffffffff614b5516565b9050614ce16001828481614cd457fe5b049063ffffffff6152fd16565b9695505050505050565b6000808411614d5b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4170654c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b600083118015614d6b5750600082115b614dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155166022913960400191505060405180910390fd5b82614dd1858463ffffffff61527716565b81614dd857fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e7f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4170654c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614eb9578284614ebc565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614f4357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4170654c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614fea57600080fd5b505afa158015614ffe573d6000803e3d6000fd5b505050506040513d602081101561501457600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150fa57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156150cd57600080fd5b505af11580156150e1573d6000803e3d6000fd5b505050506040513d60208110156150f757600080fd5b50505b6000806151287f00000000000000000000000000000000000000000000000000000000000000008b8b61536f565b9150915081600014801561513a575080155b1561514a5787935086925061526a565b6000615157898484614ceb565b90508781116151da57858110156151cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b889450925082615268565b60006151e7898486614ceb565b9050898111156151f357fe5b8781101561526257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806152925750508082028282828161528f57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061537e8585614de1565b50905061538c8686866140f2565b5060008061539b8888886140f2565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156153e057600080fd5b505afa1580156153f4573d6000803e3d6000fd5b505050506040513d606081101561540a57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614615451578082615454565b81815b9099909850965050505050505056fe417065526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54417065526f757465723a204558434553534956455f494e5055545f414d4f554e544170654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45444170654c6962726172793a20494e53554646494349454e545f4c49515549444954594170654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220077ac949dc8c1ea5b2f2c697f4f6715bdbc1a1195ff8f37e1a2e92d449d0c69264736f6c63430006060033000000000000000000000000cf083be4164828f00cae704ec15a36d7114912840000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

000000000000000000000000cf083be4164828f00cae704ec15a36d7114912840000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf083be4164828f00cae704ec15a36d711491284
Arg [1] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270


Deployed ByteCode Sourcemap

624:17687:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1069:10;:18;1083:4;1069:18;;1062:26;;;;624:17687;;12:1:-1;9;2:12;5026:653:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5026:653:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;5026:653:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17318:248;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17318:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17318:248:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11887:810;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11887:810:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;11887:810:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;11887:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;11887:810: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;11887:810:0;;-1:-1:-1;11887:810:0;-1:-1:-1;11887:810: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;11887:810:0;;;;;;;;;;;;;;;;;18070:239;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18070:239:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18070:239:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;18070:239:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18070:239: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;18070:239:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18070:239:0;;-1:-1:-1;18070:239:0;;-1:-1:-1;;;;;18070:239:0:i;5684:651::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5684:651:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;5684:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9248:597::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9248:597:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;9248:597:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;9248:597:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;9248:597: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;9248:597:0;;-1:-1:-1;9248:597:0;-1:-1:-1;9248:597:0;;;;;;;;;:::i;11094:788::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11094:788:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;11094:788:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;11094:788:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;11094:788: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;11094:788:0;;-1:-1:-1;11094:788:0;-1:-1:-1;11094:788:0;;;;;;;;;:::i;7745:691::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7745:691:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;7745:691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14781:686::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14781:686:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;14781:686:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;14781:686:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;14781:686: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;14781:686:0;;-1:-1:-1;14781:686:0;-1:-1:-1;14781:686:0;;;;;;;;;:::i;16287:804::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16287:804:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;16287:804:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;16287:804:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;16287:804: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;16287:804:0;;-1:-1:-1;16287:804:0;-1:-1:-1;16287:804:0;;;;;;;;;:::i;10430:659::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;10430:659:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;10430:659:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;10430:659: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;10430:659:0;;-1:-1:-1;10430:659:0;-1:-1:-1;10430:659:0;;;;;;;;;:::i;17572:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17572:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17572:247:0;;;;;;;;;;;;:::i;9850:575::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9850:575:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;9850:575:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;9850:575:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;9850:575: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;9850:575:0;;-1:-1:-1;9850:575:0;-1:-1:-1;9850:575:0;;;;;;;;;:::i;742:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;742:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17132:180;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17132:180:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17132:180:0;;;;;;;;;;;;:::i;7060:680::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7060:680:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;7060:680:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15472:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;15472:810:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;15472:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;15472:810: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;15472:810:0;;-1:-1:-1;15472:810:0;-1:-1:-1;15472:810:0;;;;;;;;;:::i;4208:813::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4208:813:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;4208:813:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;695:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;695:41:0;;;:::i;17825:239::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17825:239:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;17825:239:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;17825:239:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;17825:239: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;17825:239:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;17825:239:0;;-1:-1:-1;17825:239:0;;-1:-1:-1;;;;;17825:239:0:i;6340:644::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6340:644:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;6340:644:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2513:711::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2513:711:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;2513:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3229:939;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;3229:939:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12702:770::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;12702:770:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;12702:770:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;12702:770: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;12702:770:0;;-1:-1:-1;12702:770:0;-1:-1:-1;12702:770:0;;;;;;;;;:::i;5026:653::-;5256:16;5274:14;5237:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5327:188:::1;5356:5;5375:4;5393:9;5416:14;5444:12;5478:4;5497:8;5327:15;:188::i;:::-;5300:215:::0;;-1:-1:-1;5300:215:0;-1:-1:-1;5525:51:0::1;5553:5:::0;5560:2;5300:215;5525:27:::1;:51::i;:::-;5592:4;5586:20;;;5607:9;5586:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;5586:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;5586:31:0;;;;5627:45;5658:2;5662:9;5627:30;:45::i;:::-;5026:653:::0;;;;;;;;;;:::o;17318:248::-;17466:14;17503:56;17527:8;17537:9;17548:10;17503:23;:56::i;:::-;17496:63;17318:248;-1:-1:-1;;;;17318:248:0:o;11887:810::-;12096:21;12069:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12141:29:::1;12166:4;12141:29;:4:::0;;12146:15;;;12141:21;;::::1;;;;;;;;;;;;;:29;;;12133:65;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12218:49;12243:7;12252:8;12262:4;;12218:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;12218:24:0::1;::::0;-1:-1:-1;;;12218:49:0:i:1;:::-;12208:59;;12316:12;12285:7;12310:1;12293:7;:14;:18;12285:27;;;;;;;;;;;;;;:43;;12277:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12380:133;12425:4;;12430:1;12425:7;;;;;;;;;;;;;;;12434:10;12446:45;12465:7;12474:4;;12479:1;12474:7;;;;;;;;;;;;;;;12483:4;;12488:1;12483:7;;;;;;;;;;;;;;;12446:18;:45::i;:::-;12493:7;12501:1;12493:10;;;;;;;;;;;;;;12380:31;:133::i;:::-;12523:35;12529:7;12538:4;;12523:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;12552:4:0::1;::::0;-1:-1:-1;12523:5:0::1;::::0;-1:-1:-1;;12523:35:0:i:1;:::-;12574:4;12568:20;;;12589:7;12614:1;12597:7;:14;:18;12589:27;;;;;;;;;;;;;;12568:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;12568:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12568:49:0;;;;12627:63;12658:2;12662:7;12687:1;12670:7;:14;:18;12662:27;;;;;;;;;;;;;;12627:30;:63::i;:::-;11887:810:::0;;;;;;;;;:::o;18070:239::-;18209:21;18253:49;18277:7;18286:9;18297:4;18253:23;:49::i;:::-;18246:56;;18070:239;;;;;:::o;5684:651::-;5981:12;5995;6019;6034:43;6053:7;6062:6;6070;6034:18;:43::i;:::-;6019:58;;6087:10;6100;:33;;6124:9;6100:33;;;6118:2;6100:33;6143:74;;;;;;6165:10;6143:74;;;;6185:4;6143:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6087:46;;-1:-1:-1;6143:21:0;;;;;;:74;;;;;-1:-1:-1;;6143:74:0;;;;;;;;-1:-1:-1;6143:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;6143:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6143:74:0;;;;6248:80;6264:6;6272;6280:9;6291:10;6303;6315:2;6319:8;6248:15;:80::i;:::-;6227:101;;;;;;;;5684:651;;;;;;;;;;;;;;;;:::o;9248:597::-;9466:21;9447:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9509:49:::1;9534:7;9543:8;9553:4;;9509:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;9509:24:0::1;::::0;-1:-1:-1;;;9509:49:0:i:1;:::-;9499:59;;9607:12;9576:7;9601:1;9584:7;:14;:18;9576:27;;;;;;;;;;;;;;:43;;9568:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9671:133;9716:4;;9721:1;9716:7;;;;;;9671:133;9814:24;9820:7;9829:4;;9814:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;9835:2:0;;-1:-1:-1;9814:5:0::1;::::0;-1:-1:-1;;9814:24:0:i:1;11094:788::-:0;11303:21;11276:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11348:29:::1;11373:4;11348:29;:4:::0;;11353:15;;;11348:21;;::::1;;;;;;;;;;;;;:29;;;11340:65;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;11425:49;11449:7;11458:9;11469:4;;11425:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;11425:23:0::1;::::0;-1:-1:-1;;;11425:49:0:i:1;:::-;11415:59;;11506:11;11492:7;11500:1;11492:10;;;;;;;;;;;;;;:25;;11484:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7745:691:::0;8055:14;8081:12;8096:40;8115:7;8124:5;8131:4;8096:18;:40::i;:::-;8081:55;;8146:10;8159;:33;;8183:9;8159:33;;;8177:2;8159:33;8202:74;;;;;;8224:10;8202:74;;;;8244:4;8202:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8146:46;;-1:-1:-1;8202:21:0;;;;;;:74;;;;;-1:-1:-1;;8202:74:0;;;;;;;;-1:-1:-1;8202:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;8202:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8202:74:0;;;;8298:131;8359:5;8366:9;8377:14;8393:12;8407:2;8411:8;8298:47;:131::i;:::-;8286:143;7745:691;-1:-1:-1;;;;;;;;;;;;;7745:691:0:o;14781:686::-;15009:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15029:131:::1;15074:4;;15079:1;15074:7;;;;;;;;;;;;;;;15083:10;15095:45;15114:7;15123:4;;15128:1;15123:7;;;;;;;;;;;;;;;15132:4;;15137:1;15132:7;;;;;;15095:45;15142:8;15029:31;:131::i;:::-;15170:18;15198:4:::0;;15203:15;;;15198:21;;::::1;;;;;;;;;;;;;15191:39;;;15231:2;15191:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15191:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15191:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15191:43:0;15244:44:::1;::::0;;15191:43:::1;15244:44:::0;;::::1;::::0;;;;;;;;;;;15191:43;;-1:-1:-1;15244:44:0::1;::::0;;;15279:4;;;;;;15244:44;::::1;::::0;15279:4;;15244:44;15279:4;15244:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;15285:2:0;;-1:-1:-1;15244:34:0::1;::::0;-1:-1:-1;;15244:44:0:i:1;:::-;15385:12:::0;15319:62:::1;15367:13:::0;15326:4;;15331:15;;;15326:21;;::::1;;;;;;;;;;;;;15319:39;;;15359:2;15319:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15319:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15319:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15319:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;15298:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;896:1;14781:686:::0;;;;;;;:::o;16287:804::-;16544:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16576:29:::1;16601:4;16576:29;:4:::0;;16581:15;;;16576:21;;::::1;;;;;;;;;;;;;:29;;;16568:65;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16643:131;16688:4;;16693:1;16688:7;;;;;;16643:131;16784:55;16819:4;;16784:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;16833:4:0::1;::::0;-1:-1:-1;16784:34:0::1;::::0;-1:-1:-1;;16784:55:0:i:1;:::-;16866:37;::::0;;;;;16897:4:::1;16866:37;::::0;::::1;::::0;;;16849:14:::1;::::0;16866:22:::1;16873:4;16866:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;16866:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16866:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16866:37:0;;-1:-1:-1;16921:25:0;;::::1;;16913:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17004:4;16998:20;;;17019:9;16998:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16998:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16998:31:0;;;;17039:45;17070:2;17074:9;17039:30;:45::i;10430:659::-:0;10640:21;10613:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10696:4:::1;10685:15;;:4;;10690:1;10685:7;;;;;;;;;;;;;;;:15;;;10677:51;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10748:50;10773:7;10782:9;10793:4;;10748:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;10748:24:0::1;::::0;-1:-1:-1;;;10748:50:0:i:1;:::-;10738:60;;10847:12;10816:7;10841:1;10824:7;:14;:18;10816:27;;;;;;;;;;;;;;:43;;10808:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10917:4;10911:19;;;10938:7;10946:1;10938:10;;;;;;;;;;;;;;10911:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;10911:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;10911:40:0;;;;;10974:4;10968:20;;;10989:45;11008:7;11017:4;;11022:1;11017:7;;;;;;10989:45;11036:7;11044:1;11036:10;;;;;;;;;;;;;;10968:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;10968:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;10968:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;10968:79:0;10961:87:::1;;;;11058:24;11064:7;11073:4;;11058:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;11079:2:0;;-1:-1:-1;11058:5:0::1;::::0;-1:-1:-1;;11058:24:0:i:1;:::-;10430:659:::0;;;;;;;;:::o;17572:247::-;17720:13;17756:56;17779:9;17790;17801:10;17756:22;:56::i;9850:575::-;10068:21;10049:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10111:49:::1;10135:7;10144:9;10155:4;;10111:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;10111:23:0::1;::::0;-1:-1:-1;;;10111:49:0:i:1;:::-;10101:59;;10192:11;10178:7;10186:1;10178:10;;;;;;;;;;;;;;:25;;10170:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:38:::0;;;:::o;17132:180::-;17229:12;17260:45;17277:7;17286:8;17296;17260:16;:45::i;7060:680::-;7319:14;7300:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7361:188:::1;7390:5;7409:4;7427:9;7450:14;7478:12;7512:4;7531:8;7361:15;:188::i;:::-;7598:38;::::0;;;;;7630:4:::1;7598:38;::::0;::::1;::::0;;;7345:204;;-1:-1:-1;7559:78:0::1;::::0;-1:-1:-1;7587:5:0;;7594:2;;7598: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;7598:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7598:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;7598:38:0;7559:27:::1;:78::i;:::-;7653:4;7647:20;;;7668:9;7647:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;7647:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7647:31:0;;;;7688:45;7719:2;7723:9;7688:30;:45::i;15472:810::-:0;15722:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15765:4:::1;15754:15;;:4;;15759:1;15754:7;;;;;;;;;;;;;;;:15;;;15746:51;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15807:13;15823:9;15807:25;;15848:4;15842:19;;;15869:8;15842:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15842:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15842:38:0;;;;;15903:4;15897:20;;;15918:45;15937:7;15946:4;;15951:1;15946:7;;;;;;15918:45;15965:8;15897:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15897:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15897:77:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15897:77:0;15890:85:::1;;;;15985:18;16013:4:::0;;16018:15;;;16013:21;;::::1;;;;;;;;;;;;;16006:39;;;16046:2;16006:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16006:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16006:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16006:43:0;16059:44:::1;::::0;;16006:43:::1;16059:44:::0;;::::1;::::0;;;;;;;;;;;16006:43;;-1:-1:-1;16059:44:0::1;::::0;;;16094:4;;;;;;16059:44;::::1;::::0;16094:4;;16059:44;16094:4;16059:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;16100:2:0;;-1:-1:-1;16059:34:0::1;::::0;-1:-1:-1;;16059:44:0:i:1;:::-;16200:12:::0;16134:62:::1;16182:13:::0;16141:4;;16146:15;;;16141:21;;::::1;;;;;;;;;;;;;16134:39;;;16174:2;16134:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;4208:813:0::0;4454:12;4468;4435:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4492:12:::1;4507:43;4526:7;4535:6;4543;4507:18;:43::i;:::-;4560:56;::::0;;;;;4588:10:::1;4560:56;::::0;::::1;::::0;:27:::1;::::0;::::1;:56:::0;;;;;;;;;;;;;;4492:58;;-1:-1:-1;4560:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;4560:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;4560:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4560:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;4683:23:0::1;::::0;;;;;:19:::1;:23:::0;;::::1;;::::0;::::1;::::0;;;4653:12:::1;::::0;;;4683:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;4653:12;4683:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;4683:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4683:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;4683:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;4683:23:0;-1:-1:-1;4717:14:0::1;4736:37;4758:6:::0;4766;4736:21:::1;:37::i;:::-;4716:57;;;4814:6;4804:16;;:6;:16;;;:58;;4845:7;4854;4804:58;;;4824:7;4833;4804:58;4783:79:::0;;-1:-1:-1;4783:79:0;-1:-1:-1;4880:21:0;;::::1;;4872:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4967:10;4956:7;:21;;4948:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;896:1;;;;4208:813:::0;;;;;;;;;;;:::o;695:41::-;;;:::o;17825:239::-;17964:21;18008:49;18033:7;18042:8;18052:4;18008:24;:49::i;6340:644::-;6621:16;6639:14;6665:12;6680:40;6699:7;6708:5;6715:4;6680:18;:40::i;:::-;6665:55;;6730:10;6743;:33;;6767:9;6743:33;;;6761:2;6743:33;6786:74;;;;;;6808:10;6786:74;;;;6828:4;6786:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6730:46;;-1:-1:-1;6786:21:0;;;;;;:74;;;;;-1:-1:-1;;6786:74:0;;;;;;;;-1:-1:-1;6786:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;6786:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6786:74:0;;;;6897:80;6916:5;6923:9;6934:14;6950:12;6964:2;6968:8;6897:18;:80::i;:::-;6870:107;;;;-1:-1:-1;6340:644:0;-1:-1:-1;;;;;;;;;;;;;6340:644:0:o;2513:711::-;2792:12;2806;2820:14;2773:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2867:85:::1;2881:6;2889;2897:14;2913;2929:10;2941;2867:13;:85::i;:::-;2846:106:::0;;-1:-1:-1;2846:106:0;-1:-1:-1;2962:12:0::1;2977:43;2996:7;3005:6:::0;3013;2977:18:::1;:43::i;:::-;2962:58;;3030:66;3062:6;3070:10;3082:4;3088:7;3030:31;:66::i;:::-;3106;3138:6;3146:10;3158:4;3164:7;3106:31;:66::i;:::-;3203:4;3194:19;;;3214:2;3194:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3194:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3194:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3194:23:0;2513:711;;;;-1:-1:-1;3194:23:0;;-1:-1:-1;2513:711:0;;-1:-1:-1;;;;;;;;;2513:711:0:o;3229:939::-;3475:16;3493:14;3509;3456:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3562:169:::1;3589:5;3608:4;3626:18;3658:9;3681:14;3709:12;3562:13;:169::i;:::-;3535:196:::0;;-1:-1:-1;3535:196:0;-1:-1:-1;3741:12:0::1;3756:40;3775:7;3784:5:::0;3791:4:::1;3756:18;:40::i;:::-;3741:55;;3806:69;3838:5;3845:10;3857:4;3863:11;3806:31;:69::i;:::-;3891:4;3885:19;;;3912:9;3885:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3885:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3885:39:0;;;;;3947:4;3941:20;;;3962:4;3968:9;3941:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3941:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3941:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3941:37:0;3934:45:::1;;;;4010:4;4001:19;;;4021:2;4001:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4001:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4001:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;4001:23:0;;-1:-1:-1;4073:9:0::1;:21:::0;-1:-1:-1;4069:92:0::1;;;4096:65;4127:10;4151:9;4139;:21;4096:30;:65::i;:::-;896:1;3229:939:::0;;;;;;;;;;;:::o;12702:770::-;12909:21;12882:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12965:4:::1;12954:15;;:4;;12959:1;12954:7;;;;;;;;;;;;;;;:15;;;12946:51;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13017:49;13041:7;13050:9;13061:4;;13017:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;13017:23:0::1;::::0;-1:-1:-1;;;13017:49:0:i:1;:::-;13007:59;;13098:9;13084:7;13092:1;13084:10;;;;;;;;;;;;;;:23;;13076:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13161:4;13155:19;;;13182:7;13190:1;13182:10;;;;;;;;;;;;;;13155:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13155:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13155:40:0;;;;;13218:4;13212:20;;;13233:45;13252:7;13261:4;;13266:1;13261:7;;;;;;13233:45;13280:7;13288:1;13280:10;;;;;;;;;;;;;;13212:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13212:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13212:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13212:79:0;13205:87:::1;;;;13302:24;13308:7;13317:4;;13302:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;13323:2:0;;-1:-1:-1;13302:5:0::1;::::0;-1:-1:-1;;13302:24:0:i:1;:::-;13387:7;13395:1;13387:10;;;;;;;;;;;;;;13375:9;:22;13371:94;;;13399:66;13430:10;13454:7;13462:1;13454:10;;;;;;;;;;;;;;13442:9;:22;13399:30;:66::i;526:357:9:-:0;719:45;;;708:10;719:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;719:45:9;;;;;;;25:18:-1;;61:17;;96:58;182:15;719:45:9;179:29:-1;160:49;;708:57:9;;;;673:12;;687:17;;708:10;;;;719:45;708:57;;;25:18:-1;708:57:9;;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;;;708:57:9;;;;;;;;;;;;;;;;;;;;;;;;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;;672:93:9;;;;783:7;:57;;;;-1:-1:-1;795:11:9;;:16;;:44;;;826:4;815:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;815:24:9;795:44;775:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;526:357;;;;;:::o;1293:192::-;1400:12;;;1362;1400;;;;;;;;;1379:7;;;;1393:5;;1379: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;;;1379:34:9;;;;;;;;;;;;;;;;;;;;;;;;;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;;1361:52:9;;;1431:7;1423:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1293:192;;;:::o;2461:498:7:-;2554:14;2599:1;2588:8;:12;2580:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2672:1;2660:9;:13;:31;;;;;2690:1;2677:10;:14;2660:31;2652:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2740:20;2763:17;:8;2776:3;2763:17;:12;:17;:::i;:::-;2740:40;-1:-1:-1;2790:14:7;2807:31;2740:40;2827:10;2807:31;:19;:31;:::i;:::-;2790:48;-1:-1:-1;2848:16:7;2867:40;2891:15;2867:19;:9;2881:4;2867:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;2848:59;;2941:11;2929:9;:23;;;;;;;2461:498;-1:-1:-1;;;;;;;2461:498:7:o;3610:497::-;3711:21;3767:1;3752:4;:11;:16;;3744:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3828:4;:11;3817:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3817:23:7;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;3817:23:7;;3807:33;;3863:8;3850:7;3858:1;3850:10;;;;;;;;;;;;;:21;;;;;3886:6;3881:220;3912:1;3898:4;:11;:15;3894:1;:19;3881:220;;;3935:14;3951:15;3970:42;3982:7;3991:4;3996:1;3991:7;;;;;;;;;;;;;;4000:4;4005:1;4009;4005:5;4000:11;;;;;;;;;;;;;;3970;:42::i;:::-;3934:78;;;;4043:47;4056:7;4064:1;4056:10;;;;;;;;;;;;;;4068:9;4079:10;4043:12;:47::i;:::-;4026:7;4034:1;4038;4034:5;4026:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;3915:3:7;;3881:220;;;;3610:497;;;;;:::o;983:466::-;1072:12;1097:14;1113;1131:26;1142:6;1150;1131:10;:26::i;:::-;1291:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;1291:32:7;;;;;1281:43;;;;;;1197:242;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1197:242:7;;;;;;;1187:253;;;;;;;;;983:466;-1:-1:-1;;;;;983:466:7:o;889:398:9:-;1112:51;;;1101:10;1112:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1112:51:9;;;;;;;25:18:-1;;61:17;;96:58;182:15;1112:51:9;179:29:-1;160:49;;1101:63:9;;;;1066:12;;1080:17;;1101:10;;;;1112:51;1101:63;;;25:18:-1;1101:63:9;;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;;;1101:63:9;;;;;;;;;;;;;;;;;;;;;;;;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;;1065:99:9;;;;1182:7;:57;;;;-1:-1:-1;1194:11:9;;:16;;:44;;;1225:4;1214:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1214:24:9;1194:44;1174:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;889:398;;;;;;:::o;8543:700:0:-;8649:6;8644:593;8675:1;8661:4;:11;:15;8657:1;:19;8644:593;;;8698:13;8713:14;8732:4;8737:1;8732:7;;;;;;;;;;;;;;8741:4;8746:1;8750;8746:5;8741:11;;;;;;;;;;;;;;8697:56;;;;8768:14;8787:36;8809:5;8816:6;8787:21;:36::i;:::-;8767:56;;;8837:14;8854:7;8862:1;8866;8862:5;8854:14;;;;;;;;;;;;;;8837:31;;8883:15;8900;8928:6;8919:15;;:5;:15;;;:61;;8961:9;8977:1;8919:61;;;8943:1;8947:9;8919:61;8882:98;;;;8994:10;9025:1;9011:4;:11;:15;9007:1;:19;:76;;9080:3;9007:76;;;9029:48;9048:7;9057:6;9065:4;9070:1;9074;9070:5;9065:11;;;;;;;;;;;;;;9029:18;:48::i;:::-;8994:89;;9106:42;9125:7;9134:5;9141:6;9106:18;:42::i;:::-;9097:57;;;9172:10;9184;9196:2;9210:1;9200:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;9200:12:0;87:42:-1;143:17;;-1:-1;9200:12:0;;9097:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;9097:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9097:129:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8678:3:0;;;;;-1:-1:-1;8644:593:0;;-1:-1:-1;;;;;;;;8644:593:0;;;8543:700;;;:::o;4185:518:7:-;4286:21;4342:1;4327:4;:11;:16;;4319:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4403:4;:11;4392:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4392:23:7;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;4392:23:7;;4382:33;;4455:9;4425:7;4450:1;4433:7;:14;:18;4425:27;;;;;;;;;;;;;;;;;:39;4488:11;;:15;;4474:223;4505:5;;4474:223;;4532:14;4548:15;4567:42;4579:7;4588:4;4597:1;4593;:5;4588:11;;;;;;;;;;;;;;4601:4;4606:1;4601:7;;;;;;;4567:42;4531:78;;;;4640:46;4652:7;4660:1;4652:10;;;;;;;;;;;;;;4664:9;4675:10;4640:11;:46::i;:::-;4623:7;4635:1;4631;:5;4623:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;4512:3:7;;4474:223;;13615:1161:0;13727:6;13722:1048;13753:1;13739:4;:11;:15;13735:1;:19;13722:1048;;;13776:13;13791:14;13810:4;13815:1;13810:7;;;;;;;;;;;;;;13819:4;13824:1;13828;13824:5;13819:11;;;;;;;;;;;;;;13775:56;;;;13846:14;13865:36;13887:5;13894:6;13865:21;:36::i;:::-;13845:56;;;13915:13;13940:42;13959:7;13968:5;13975:6;13940:18;:42::i;:::-;13915:68;;13997:16;14027:17;14113:13;14128;14146:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14146:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14146:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14146:18:0;;;;;;;14112:52;;;;;-1:-1:-1;14112:52:0;;-1:-1:-1;14179:17:0;;14220:15;;;;;;;;:61;;14262:8;14272;14220:61;;;14239:8;14249;14220:61;14178:103;;;;14309:56;14352:12;14316:5;14309:23;;;14341:4;14309:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;14309:56:0;14295:70;;14394:65;14418:11;14431:12;14445:13;14394:23;:65::i;:::-;14379:80;;13722:1048;;;;14488:15;14505;14533:6;14524:15;;:5;:15;;;:67;;14569:12;14588:1;14524:67;;;14548:1;14552:12;14524:67;14487:104;;;;14605:10;14636:1;14622:4;:11;:15;14618:1;:19;:76;;14691:3;14618:76;;;14640:48;14659:7;14668:6;14676:4;14681:1;14685;14681:5;14676:11;;;;;;;14640:48;14746:12;;;14756:1;14746:12;;;;;;;;;;14708:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;14605:89;;-1:-1:-1;14708:9:0;;;;;;14718:10;;14730;;14605:89;;14746:12;;14708:51;;;;;;;;14746:12;;14708:51;;;;14746: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;14708:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14708:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;13756:3:0;;;;;-1:-1:-1;13722:1048:0;;-1:-1:-1;;;;;;;;;;13722:1048:0;286:127:8;369:5;;;364:16;;;;356:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3077:454:7;3170:13;3215:1;3203:9;:13;3195:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3289:1;3277:9;:13;:31;;;;;3307:1;3294:10;:14;3277:31;3269:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3357:14;3374:34;3403:4;3374:24;:9;3388;3374:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;3357:51;-1:-1:-1;3418:16:7;3437:34;3467:3;3437:25;:10;3452:9;3437:25;:14;:25;:::i;:34::-;3418:53;;3492:32;3522:1;3505:11;3493:9;:23;;;;;;;3492:32;:29;:32;:::i;:::-;3481:43;3077:454;-1:-1:-1;;;;;;3077:454:7:o;2037:305::-;2119:12;2161:1;2151:7;:11;2143:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2227:1;2216:8;:12;:28;;;;;2243:1;2232:8;:12;2216:28;2208:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2327:8;2303:21;:7;2315:8;2303:21;:11;:21;:::i;:::-;:32;;;;;;;2037:305;-1:-1:-1;;;;2037:305:7:o;561:333::-;636:14;652;696:6;686:16;;:6;:16;;;;678:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;776:6;767:15;;:6;:15;;;:53;;805:6;813;767:53;;;786:6;794;767:53;748:72;;-1:-1:-1;748:72:7;-1:-1:-1;838:20:7;;;830:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;561:333;;;;;:::o;1187:1321:0:-;1491:44;;;;;;:58;:44;;;;;;;;;;;;;;;;1398:12;;;;;;1503:7;1491:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;1491:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1491:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1491:44:0;:58;;;1487:136;;;1565:47;;;;;;:31;:47;;;;;;;;;;;;;;;;1577:7;1565:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;1565:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;1565:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1565:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;1487:136:0;1633:13;1648;1665:47;1688:7;1697:6;1705;1665:22;:47::i;:::-;1632:80;;;;1726:8;1738:1;1726:13;:30;;;;-1:-1:-1;1743:13:0;;1726:30;1722:780;;;1794:14;;-1:-1:-1;1810:14:0;;-1:-1:-1;1722:780:0;;;1856:19;1878:52;1895:14;1911:8;1921;1878:16;:52::i;:::-;1856:74;;1966:14;1948;:32;1944:548;;2026:10;2008:14;:28;;2000:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2113:14;;-1:-1:-1;2129:14:0;-1:-1:-1;2129:14:0;1944:548;;;2183:19;2205:52;2222:14;2238:8;2248;2205:16;:52::i;:::-;2183:74;;2300:14;2282;:32;;2275:40;;;;2359:10;2341:14;:28;;2333:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2446:14;-1:-1:-1;2462:14:0;;-1:-1:-1;1944:548:0;1722:780;;1187:1321;;;;;;;;;;;:::o;419:140:8:-;471:6;497;;;:30;;-1:-1:-1;;512:5:8;;;526:1;521;512:5;521:1;507:15;;;;;:20;497:30;489:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;154:126;237:5;;;232:16;;;;224:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1504:423:7;1597:13;1612;1638:14;1657:26;1668:6;1676;1657:10;:26::i;:::-;1637:46;;;1693:32;1701:7;1710:6;1718;1693:7;:32::i;:::-;;1736:13;1751;1778:32;1786:7;1795:6;1803;1778:7;:32::i;:::-;1769:54;;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1769:56:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1769:56:7;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1769:56:7;;;;;;;1735:90;;;;;-1:-1:-1;1735:90:7;;-1:-1:-1;1858:16:7;;;;;;;;:62;;1901:8;1911;1858:62;;;1878:8;1888;1858:62;1835:85;;;;-1:-1:-1;1504:423:7;-1:-1:-1;;;;;;;1504:423:7:o

Swarm Source

ipfs://077ac949dc8c1ea5b2f2c697f4f6715bdbc1a1195ff8f37e1a2e92d449d0c692
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.