Contract 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x2fe87f1fee598cbc85f754c20c5b120663924835ba6503d7eac9c79202300fa665936942021-04-15 17:55:044 secs ago0x8eb3e91cdb937941bfde3673151b1980bca062d7 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.000571975
0xe5150bd9f29b3bdb5f1b61bf0a031474a5a1b7e93268b9fbe2fb9615ded9364a65936932021-04-15 17:55:017 secs ago0x10b8e26cb01697997875aaf7958f6569e309b91f IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00231179
0xda2d3cb2a6a35790560495e7ee3365ab2ad2b2a1f40c3cf4b18c0c50eeebdb2b65936932021-04-15 17:55:017 secs ago0x97b50a3ca53a2256e1a24f0a3c559de8b427b2a4 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.085432417516216 BNB0.000856
0x88794689ca291cf6b4b7e5093d03bf47b50c977e25b9c48221eaaf1170f564a865936822021-04-15 17:54:2840 secs ago0x09d1c10a0535e089efa3bdba0eb4738b40e2c755 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.000571855
0x02f68725a21945a48ed899b93e0dee8911093f5903039c8561645fdeb5a766d065936792021-04-15 17:54:1949 secs ago0xf54fc20fd334bb62070718fa74c6043d73343222 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.439127350967033 BNB0.000856
0xc005916530bdd117663c35663c4cb8e286f4ba403e600349c5e6418265df37d465936772021-04-15 17:54:1355 secs ago0x8cb5475e3d1a4deb1816bcd8e9434773e593fdb2 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00079388
0xb4f57ec55b39572a298980d46f8ecc6aac8d9e4540af434ccaf733ce44c9035a65936682021-04-15 17:53:461 min ago0xa1f32d8d77e03af55fec8b6fa956afe0470ab7f3 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00097453
0x97d5c92cd51b45f32b9da6b4605d9626d1515b78d7f3da2ad2307a0c4c510a8865936562021-04-15 17:53:101 min ago0x07b63f07aa74737710d4ce18458f0fc2ffd74c3f IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.000938235
0x92d8252302460cf5904a38cb06d29350d06d6cbd874f3a5463d29b4ad8f74f1465936522021-04-15 17:52:582 mins ago0xf54fc20fd334bb62070718fa74c6043d73343222 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.44 BNB0.00063071
0x52a6f1f8024ed70bf3091cd85fec1f2eb20022e6351589f8646ad91f098322e565936482021-04-15 17:52:462 mins ago0xc195ec2fa868c533df58c46eb724ed0d1c935bfe IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00472855
0xcee5b002dce050113cdf78545dd77bb5b27736816c852c1b5bede52a66433cb165936432021-04-15 17:52:312 mins ago0x07b63f07aa74737710d4ce18458f0fc2ffd74c3f IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00063191
0xec22319995bc0229ccf00dc195d087d57385da0209cac7c6ef287f9b6f298aa965936412021-04-15 17:52:252 mins ago0x1c774b9add887fec04791535a1d8bc59b6eb62e3 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00089074
0xc4a4b3f2d77c1b18ef70ab85dae89a3af4e6ef023b518ee435adc9e39dbcac9165936402021-04-15 17:52:222 mins ago0x10b8e26cb01697997875aaf7958f6569e309b91f IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.004783235
0x368740bc740d86cb4ead4a2b98772f638cba352c5de00f3017a5c904b735d2ce65936342021-04-15 17:52:043 mins ago0xc3962856f9ca5b78a3f81906fb8b1c5ad94eaf72 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00048235
0x74b07cd998eef4354dcef1386ddccd183c41fbf057a149b8ae91220a23fba29165936252021-04-15 17:51:373 mins ago0x0a69e7000a4e8c6d3b982d7e58022cf2e48440b1 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6071.325470812502013 BNB0.000876015
0x7b51dbef62774c1a770b1b5cc25ad6ff14ebbf455228c4d601df9caa265731ab65936242021-04-15 17:51:343 mins ago0x8eb3e91cdb937941bfde3673151b1980bca062d7 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.0023075
0xa92e737bfd4eaf45687c7a3254c90d895854c2d40ace2a8f386e42dc5940924365936172021-04-15 17:51:133 mins ago0x06c4ce474edc46a9c2fd6f81fad435ee790e5d39 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.280814715528614 BNB0.000801375
0x690081a6c874e30a82cfb5c8a8e6f53a6a03230f28d0a9d9bf4e8d4c67d402e065936162021-04-15 17:51:103 mins ago0xfbe32822a4bee471029fdaf804a789277c8917da IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.438996175573454 BNB0.00085594
0x3d32f8c3c4da946c2038e08ef85bb51fec551ae8bb11add17119b0af59124dd065936162021-04-15 17:51:103 mins ago0x1c774b9add887fec04791535a1d8bc59b6eb62e3 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.000659955
0x04eb635e31e6f43e85483501096df558d92302a41d790e0f13a24942d452faad65936032021-04-15 17:50:314 mins ago0xdd5eecc463ea49057eab7f59a67849a502bc7236 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.001110215
0xcf5087e52997647d53f634babdb623fca2e418cfade687a2754f585fad3b9b2765935932021-04-15 17:50:015 mins ago0xa1f32d8d77e03af55fec8b6fa956afe0470ab7f3 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.001285995
0x2e40140318dda881ca05efcf1858802c7f7ad5ff4ed1306fd120b33fbcc0ac4565935842021-04-15 17:49:345 mins ago0xfbe32822a4bee471029fdaf804a789277c8917da IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.44 BNB0.00063071
0x222197b3ff8142319721d2b1d9f72e49c4eb4a67cd8eef542b5daf9bca0ec30965935782021-04-15 17:49:165 mins ago0xdd5eecc463ea49057eab7f59a67849a502bc7236 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00124477
0xc1acdf3abfc844fa74aad6308705ef5d263e55248892afbd956cd467ff96a75565935722021-04-15 17:48:586 mins ago0x7defaeac45ba43c855a3282f2f6460c362c6353c IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00070473
0x00d595bfc86312e5abf7682320ba585d1a29a48a0c3a1c571541a8e9e9f6260a65935652021-04-15 17:48:376 mins ago0xc718a878d3a81826c533eecb8a80280307e39ea6 IN  0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070 BNB0.00063235
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x88794689ca291cf6b4b7e5093d03bf47b50c977e25b9c48221eaaf1170f564a865936822021-04-15 17:54:2840 secs ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070x09d1c10a0535e089efa3bdba0eb4738b40e2c7550.010489491141010222 BNB
0x88794689ca291cf6b4b7e5093d03bf47b50c977e25b9c48221eaaf1170f564a865936822021-04-15 17:54:2840 secs ago Binance: WBNB Token 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.010489491141010222 BNB
0x02f68725a21945a48ed899b93e0dee8911093f5903039c8561645fdeb5a766d065936792021-04-15 17:54:1949 secs ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token0.439127350967033955 BNB
0x92d8252302460cf5904a38cb06d29350d06d6cbd874f3a5463d29b4ad8f74f1465936522021-04-15 17:52:582 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token0.44 BNB
0x52a6f1f8024ed70bf3091cd85fec1f2eb20022e6351589f8646ad91f098322e565936482021-04-15 17:52:462 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070xc195ec2fa868c533df58c46eb724ed0d1c935bfe0.208392265204995446 BNB
0x52a6f1f8024ed70bf3091cd85fec1f2eb20022e6351589f8646ad91f098322e565936482021-04-15 17:52:462 mins ago Binance: WBNB Token 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.208392265204995446 BNB
0xc4a4b3f2d77c1b18ef70ab85dae89a3af4e6ef023b518ee435adc9e39dbcac9165936402021-04-15 17:52:222 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070x10b8e26cb01697997875aaf7958f6569e309b91f0.36297657611923354 BNB
0xc4a4b3f2d77c1b18ef70ab85dae89a3af4e6ef023b518ee435adc9e39dbcac9165936402021-04-15 17:52:222 mins ago Binance: WBNB Token 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.36297657611923354 BNB
0x74b07cd998eef4354dcef1386ddccd183c41fbf057a149b8ae91220a23fba29165936252021-04-15 17:51:373 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token1.325470812502013272 BNB
0x7b51dbef62774c1a770b1b5cc25ad6ff14ebbf455228c4d601df9caa265731ab65936242021-04-15 17:51:343 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070x8eb3e91cdb937941bfde3673151b1980bca062d70.336068105545745456 BNB
0x7b51dbef62774c1a770b1b5cc25ad6ff14ebbf455228c4d601df9caa265731ab65936242021-04-15 17:51:343 mins ago Binance: WBNB Token 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.336068105545745456 BNB
0xa92e737bfd4eaf45687c7a3254c90d895854c2d40ace2a8f386e42dc5940924365936172021-04-15 17:51:133 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token0.280814715528614744 BNB
0x690081a6c874e30a82cfb5c8a8e6f53a6a03230f28d0a9d9bf4e8d4c67d402e065936162021-04-15 17:51:103 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token0.438996175573454643 BNB
0x2e40140318dda881ca05efcf1858802c7f7ad5ff4ed1306fd120b33fbcc0ac4565935842021-04-15 17:49:345 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token0.44 BNB
0xc1acdf3abfc844fa74aad6308705ef5d263e55248892afbd956cd467ff96a75565935722021-04-15 17:48:586 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070x7defaeac45ba43c855a3282f2f6460c362c6353c4.237874713141512851 BNB
0xc1acdf3abfc844fa74aad6308705ef5d263e55248892afbd956cd467ff96a75565935722021-04-15 17:48:586 mins ago Binance: WBNB Token 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6074.237874713141512851 BNB
0xf9623d5735173568cd4be68370b1dadcae212d327ecf523df1dc4251e7f8424f65935592021-04-15 17:48:196 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token0.318261052539960297 BNB
0x0cc6266a0f037d72c111a5d8d6830909c8668853fcda96d84f5e2d968a1f257465935502021-04-15 17:47:527 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token6.992202843520751436 BNB
0x47e25c080a4a0712e0ee754514fbe9b94d68cdbfbeb1d5e9c10442006b0f2f9465935462021-04-15 17:47:407 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token0.8 BNB
0x5bc9d23503e66ffc768caa1a43b5c04e52d4c1a34bf69e1ceceb59435c97bb4765935302021-04-15 17:46:528 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token7 BNB
0xd4b1aa5d1fcb9397a36624bbb85982766119a469e8afbf7b860c92340e9abb9e65935292021-04-15 17:46:498 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token0.088711582424150283 BNB
0x7045f444de76e5e812e15f436bd79995f07cb99f1676b9d7f74f7022f4dd4c3c65935112021-04-15 17:45:559 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d607 Binance: WBNB Token0.199765237894159254 BNB
0x6decec2464de4b8dabc01a6d861b4a72e89dd6688b6b579fba58042941f0dd3565935072021-04-15 17:45:439 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070x99544fcfdb1c70fea0598a7f9ed3a7b61dc46b980.128215063687905777 BNB
0x6decec2464de4b8dabc01a6d861b4a72e89dd6688b6b579fba58042941f0dd3565935072021-04-15 17:45:439 mins ago Binance: WBNB Token 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070.128215063687905777 BNB
0x2c2d4ed8466bae54482a13ece89cbd9b99d97ef1705ad27753aa26ec9048e18065935022021-04-15 17:45:289 mins ago 0xc0788a3ad43d79aa53b09c2eacc313a787d1d6070x99544fcfdb1c70fea0598a7f9ed3a7b61dc46b980.116910163392480412 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ApeRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-02-14
*/

// File: contracts/interfaces/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: @uniswap/lib/contracts/libraries/TransferHelper.sol

pragma solidity >=0.6.0;

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

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

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

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

// File: contracts/interfaces/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: contracts/interfaces/IApeRouter02.sol

pragma solidity >=0.6.2;


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: contracts/interfaces/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: contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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

// File: contracts/libraries/ApeLibrary.sol

pragma solidity >=0.5.0;

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



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'f4ccce374816856d11f00e4069e7cada164065686fbef53c6167a63ec2fd8c5b' // 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: contracts/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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

// File: contracts/ApeRouter.sol

pragma solidity =0.6.6;

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








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

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

60c060405234801561001057600080fd5b506040516200473a3803806200473a8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145b5620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b52806127a55280612a185280612a6e5280612aa25280612b165280612cb65280612df95280612e81525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad5280612506528061272a5280612753528061278352806128f05280612a4c5280612d495280612eb3528061375552806137985280613a765280613bf5528061405152806140ff528061417f52506145b56000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a612728565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061274c945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612779565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561288d565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129c9565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c6e565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612ff0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361315a565b50965096945050505050565b6000610dbe848484613252565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b8152602060048201526017602482015260008051602061446b833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061334292505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260258152602001806144466025913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613489565b85600081518110610fe657fe5b6020026020010151613549565b611032828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506136a6915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161315a565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138ec565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613489565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061334292505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260258152602001806144466025913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e8828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136a6915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b8152602060048201526017602482015260008051602061446b833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138ec92505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602181526020018061448b6021913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613489565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613549565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a4929091899189918291850190849080828437600092019190915250889250613a1f915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d2a16565b10156118935760405162461bcd60e51b81526004018080602001828103825260258152602001806144466025913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b8152602060048201526017602482015260008051602061446b833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c2858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a1f915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260258152602001806144466025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261315a565b60608142811015611b67576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b8152602060048201526017602482015260008051602061446b833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061334292505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260258152602001806144466025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136a6915050565b5095945050505050565b6000610dbe848484613d7a565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138ec92505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602181526020018061448b6021913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e6a565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612ff0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361315a565b8042811015612170576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b8152602060048201526017602482015260008051602061446b833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a918291850190849080828437600092019190915250899250613a1f915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613489565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613f2c565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126c2576040805162461bcd60e51b815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612717576040805162461bcd60e51b815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613342565b60008060006127c97f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613489565b90506000876127d8578c6127dc565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561285257600080fd5b505af1158015612866573d6000803e3d6000fd5b505050506128788e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128d6576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b6128e48c8c8c8c8c8c614020565b909450925060006129167f00000000000000000000000000000000000000000000000000000000000000008e8e613489565b90506129248d338388613549565b6129308c338387613549565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561298857600080fd5b505af115801561299c573d6000803e3d6000fd5b505050506040513d60208110156129b257600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a12576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b612a408a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614020565b90945092506000612a927f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613489565b9050612aa08b338388613549565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612afb57600080fd5b505af1158015612b0f573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b9457600080fd5b505af1158015612ba8573d6000803e3d6000fd5b505050506040513d6020811015612bbe57600080fd5b5051612bc657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c1e57600080fd5b505af1158015612c32573d6000803e3d6000fd5b505050506040513d6020811015612c4857600080fd5b5051925034841015612c6057612c603385340361315a565b505096509650969350505050565b60608142811015612cb4576040805162461bcd60e51b815260206004820152601260248201526000805160206144f4833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612ceb57fe5b905060200201356001600160a01b03166001600160a01b031614612d44576040805162461bcd60e51b8152602060048201526017602482015260008051602061446b833981519152604482015290519081900360640190fd5b612da27f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138ec92505050565b91503482600081518110612db257fe5b60200260200101511115612df75760405162461bcd60e51b815260040180806020018281038252602181526020018061448b6021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e3357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e6657600080fd5b505af1158015612e7a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612edf7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612eec57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f4357600080fd5b505af1158015612f57573d6000803e3d6000fd5b505050506040513d6020811015612f6d57600080fd5b5051612f7557fe5b612fb4828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136a6915050565b81600081518110612fc157fe5b6020026020010151341115611e6a57611e6a3383600081518110612fe157fe5b6020026020010151340361315a565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061306d5780518252601f19909201916020918201910161304e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130cf576040519150601f19603f3d011682016040523d82523d6000602084013e6130d4565b606091505b509150915081801561310257508051158061310257508080602001905160208110156130ff57600080fd5b50515b613153576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131a65780518252601f199092019160209182019101613187565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613208576040519150601f19603f3d011682016040523d82523d6000602084013e61320d565b606091505b505090508061324d5760405162461bcd60e51b81526004018080602001828103825260238152602001806144d16023913960400191505060405180910390fd5b505050565b60008084116132925760405162461bcd60e51b81526004018080602001828103825260258152602001806144ac6025913960400191505060405180910390fd5b6000831180156132a25750600082115b6132dd5760405162461bcd60e51b81526004018080602001828103825260228152602001806145386022913960400191505060405180910390fd5b60006132f1856103e663ffffffff6142c016565b90506000613305828563ffffffff6142c016565b9050600061332b8361331f886103e863ffffffff6142c016565b9063ffffffff61432316565b905080828161333657fe5b04979650505050505050565b6060600282511015613396576040805162461bcd60e51b8152602060048201526018602482015277082e0ca98d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff811180156133ae57600080fd5b506040519080825280602002602001820160405280156133d8578160200160208202803683370190505b50905082816000815181106133e957fe5b60200260200101818152505060005b60018351038110156134815760008061343b8786858151811061341757fe5b602002602001015187866001018151811061342e57fe5b6020026020010151614372565b9150915061345d84848151811061344e57fe5b60200260200101518383613252565b84846001018151811061346c57fe5b602090810291909101015250506001016133f8565b509392505050565b60008060006134988585613f2c565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff4ccce374816856d11f00e4069e7cada164065686fbef53c6167a63ec2fd8c5b609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135ce5780518252601f1990920191602091820191016135af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613630576040519150601f19603f3d011682016040523d82523d6000602084013e613635565b606091505b5091509150818015613663575080511580613663575080806020019051602081101561366057600080fd5b50515b61369e5760405162461bcd60e51b81526004018080602001828103825260248152602001806145146024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138e6576000808483815181106136c457fe5b60200260200101518584600101815181106136db57fe5b60200260200101519150915060006136f38383613f2c565b509050600087856001018151811061370757fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461373557826000613739565b6000835b91509150600060028a510388106137505788613791565b6137917f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061378457fe5b6020026020010151613489565b90506137be7f00000000000000000000000000000000000000000000000000000000000000008888613489565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137fb576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561386c578181015183820152602001613854565b50505050905090810190601f1680156138995780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138bb57600080fd5b505af11580156138cf573d6000803e3d6000fd5b5050600190990198506136a9975050505050505050565b50505050565b6060600282511015613940576040805162461bcd60e51b8152602060048201526018602482015277082e0ca98d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561395857600080fd5b50604051908082528060200260200182016040528015613982578160200160208202803683370190505b509050828160018351038151811061399657fe5b60209081029190910101528151600019015b8015613481576000806139d8878660018603815181106139c457fe5b602002602001015187868151811061342e57fe5b915091506139fa8484815181106139eb57fe5b60200260200101518383613d7a565b846001850381518110613a0957fe5b60209081029190910101525050600019016139a8565b60005b600183510381101561324d57600080848381518110613a3d57fe5b6020026020010151858460010181518110613a5457fe5b6020026020010151915091506000613a6c8383613f2c565b5090506000613a9c7f00000000000000000000000000000000000000000000000000000000000000008585613489565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613add57600080fd5b505afa158015613af1573d6000803e3d6000fd5b505050506040513d6060811015613b0757600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b3d578284613b40565b83835b91509150613b9e828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613bab868383613252565b945050505050600080856001600160a01b0316886001600160a01b031614613bd557826000613bd9565b6000835b91509150600060028c51038a10613bf0578a613c24565b613c247f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061378457fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613cae578181015183820152602001613c96565b50505050905090810190601f168015613cdb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cfd57600080fd5b505af1158015613d11573d6000803e3d6000fd5b50506001909b019a50613a229950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613dba5760405162461bcd60e51b815260040180806020018281038252602681526020018061455a6026913960400191505060405180910390fd5b600083118015613dca5750600082115b613e055760405162461bcd60e51b81526004018080602001828103825260228152602001806145386022913960400191505060405180910390fd5b6000613e296103e8613e1d868863ffffffff6142c016565b9063ffffffff6142c016565b90506000613e436103e6613e1d868963ffffffff613d2a16565b9050613e606001828481613e5357fe5b049063ffffffff61432316565b9695505050505050565b6000808411613ec0576040805162461bcd60e51b815260206004820152601f60248201527f4170654c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b600083118015613ed05750600082115b613f0b5760405162461bcd60e51b81526004018080602001828103825260228152602001806145386022913960400191505060405180910390fd5b82613f1c858463ffffffff6142c016565b81613f2357fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f96576040805162461bcd60e51b815260206004820152601f60248201527f4170654c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610613fb6578284613fb9565b83835b90925090506001600160a01b038216614019576040805162461bcd60e51b815260206004820152601860248201527f4170654c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561409a57600080fd5b505afa1580156140ae573d6000803e3d6000fd5b505050506040513d60208110156140c457600080fd5b50516001600160a01b0316141561417757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050506040513d602081101561417457600080fd5b50505b6000806141a57f00000000000000000000000000000000000000000000000000000000000000008b8b614372565b915091508160001480156141b7575080155b156141c7578793508692506142b3565b60006141d4898484613e6a565b905087811161423d5785811015614232576040805162461bcd60e51b815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b8894509250826142b1565b600061424a898486613e6a565b90508981111561425657fe5b878110156142ab576040805162461bcd60e51b815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806142db575050808202828282816142d857fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143818585613f2c565b50905061438f868686613489565b5060008061439e888888613489565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156143d657600080fd5b505afa1580156143ea573d6000803e3d6000fd5b505050506040513d606081101561440057600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614433578082614436565b81815b9099909850965050505050505056fe417065526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54417065526f757465723a20494e56414c49445f50415448000000000000000000417065526f757465723a204558434553534956455f494e5055545f414d4f554e544170654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544417065526f757465723a204558504952454400000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45444170654c6962726172793a20494e53554646494349454e545f4c49515549444954594170654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220411960c68695923d0fa4211e9ba2df090b3f1596cf0da4e9004162e92b92543764736f6c634300060600330000000000000000000000000841bd0b734e4f5853f0dd8d7ea041c241fb0da6000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000000841bd0b734e4f5853f0dd8d7ea041c241fb0da6000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

16776:18121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17238:10;-1:-1:-1;;;;;17252:4:0;17238:18;;17231:26;;;;16776:18121;;12:1:-1;9;2:12;21286:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21286:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21286:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33865:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33865:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33865:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28311:826;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28311:826:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28311:826:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28311:826:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28311:826:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28311:826:0;;-1:-1:-1;28311:826:0;-1:-1:-1;;;;;;28311:826: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;28311:826:0;;;;;;;;;;;;;;;;;34647:247;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34647:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34647:247:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34647:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34647:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34647:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34647:247:0;;-1:-1:-1;34647:247:0;;-1:-1:-1;;;;;34647:247:0:i;21965:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21965:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21965:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25612:610::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25612:610:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25612:610:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25612:610:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25612:610:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25612:610:0;;-1:-1:-1;25612:610:0;-1:-1:-1;;;;;;25612:610:0;;;;;;;;:::i;27501:804::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27501:804:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27501:804:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27501:804:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27501:804:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27501:804:0;;-1:-1:-1;27501:804:0;-1:-1:-1;;;;;;27501:804:0;;;;;;;;:::i;24078:706::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24078:706:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24078:706:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31260:702::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31260:702:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31260:702:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31260:702:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31260:702:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31260:702:0;;-1:-1:-1;31260:702:0;-1:-1:-1;;;;;;31260:702:0;;;;;;;;:::i;32806:825::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32806:825:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32806:825:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32806:825:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32806:825:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32806:825:0;;-1:-1:-1;32806:825:0;-1:-1:-1;;;;;;32806:825:0;;;;;;;;:::i;26822:673::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26822:673:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26822:673:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26822:673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26822:673:0;;-1:-1:-1;26822:673:0;-1:-1:-1;;;;;;26822:673:0;;;;;;;;:::i;34129:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34129:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34129:255:0;;;;;;;;;;;;:::i;26228:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26228:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26228:588:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26228:588:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26228:588:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26228:588:0;;-1:-1:-1;26228:588:0;-1:-1:-1;;;;;;26228:588:0;;;;;;;;:::i;16898:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16898:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16898:38:0;;;;;;;;;;;;;;33675:182;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33675:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33675:182:0;;;;;;;;;;;;:::i;23372:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23372:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23372:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31968:832::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31968:832:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31968:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31968:832:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31968:832:0;;-1:-1:-1;31968:832:0;-1:-1:-1;;;;;;31968:832:0;;;;;;;;:::i;20451:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20451:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20451:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16850:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16850:41:0;;;:::i;34392:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34392:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34392:247:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34392:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34392:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34392:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34392:247:0;;-1:-1:-1;34392:247:0;;-1:-1:-1;;;;;34392:247:0:i;22636:657::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22636:657:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22636:657:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18714:726::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18714:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18714:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19446:962;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19446:962:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29143:786::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29143:786:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29143:786:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29143:786:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29143:786:0;;-1:-1:-1;29143:786:0;-1:-1:-1;;;;;;29143:786:0;;;;;;;;:::i;21286:673::-;21523:16;21541:14;21504:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;21595:196:::1;21625:5;21645:4;21664:9;21688:14;21717:12;21752:4;21772:8;21595:15;:196::i;:::-;21568:223:::0;;-1:-1:-1;21568:223:0;-1:-1:-1;21802:51:0::1;21830:5:::0;21837:2;21568:223;21802:27:::1;:51::i;:::-;21870:4;-1:-1:-1::0;;;;;21864:20:0::1;;21885:9;21864:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21864:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21864:31:0;;;;21906:45;21937:2;21941:9;21906:30;:45::i;:::-;21286:673:::0;;;;;;;;;;:::o;33865:256::-;34018:14;34057:56;34081:8;34091:9;34102:10;34057:23;:56::i;:::-;34050:63;33865:256;-1:-1:-1;;;;33865:256:0:o;28311:826::-;28525:21;28497:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28597:4:0::1;28572:29;:4:::0;;-1:-1:-1;;28577:15:0;;28572:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28572:21:0::1;-1:-1:-1::0;;;;;28572:29:0::1;;28564:65;;;::::0;;-1:-1:-1;;;28564:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28564:65:0;;;;;;;;;;;;;::::1;;28650:49;28675:7;28684:8;28694:4;;28650:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28650:24:0::1;::::0;-1:-1:-1;;;28650:49:0:i:1;:::-;28640:59;;28749:12;28718:7;28743:1;28726:7;:14;:18;28718:27;;;;;;;;;;;;;;:43;;28710:93;;;;-1:-1:-1::0;;;28710:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28814:135;28860:4;;28865:1;28860:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28860:7:0::1;28869:10;28881:45;28900:7;28909:4;;28914:1;28909:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28909:7:0::1;28918:4;;28923:1;28918:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28918:7:0::1;28881:18;:45::i;:::-;28928:7;28936:1;28928:10;;;;;;;;;;;;;;28814:31;:135::i;:::-;28960:35;28966:7;28975:4;;28960:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28989:4:0::1;::::0;-1:-1:-1;28960:5:0::1;::::0;-1:-1:-1;;28960:35:0:i:1;:::-;29012:4;-1:-1:-1::0;;;;;29006:20:0::1;;29027:7;29052:1;29035:7;:14;:18;29027:27;;;;;;;;;;;;;;29006:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29006:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29006:49:0;;;;29066:63;29097:2;29101:7;29126:1;29109:7;:14;:18;29101:27;;;;;;;;;;;;;;29066:30;:63::i;:::-;28311:826:::0;;;;;;;;;:::o;34647:247::-;34791:21;34837:49;34861:7;34870:9;34881:4;34837:23;:49::i;:::-;34830:56;;34647:247;;;;;:::o;21965:665::-;22271:12;22285;22310;22325:43;22344:7;22353:6;22361;22325:18;:43::i;:::-;22310:58;;22379:10;22392;:33;;22416:9;22392:33;;;-1:-1:-1;;22392:33:0;22436:74;;;-1:-1:-1;;;22436:74:0;;22458:10;22436:74;;;;22478:4;22436:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22379:46;;-1:-1:-1;;;;;;22436:21:0;;;;;:74;;;;;-1:-1:-1;;22436:74:0;;;;;;;;-1:-1:-1;22436:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22436:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22436:74:0;;;;22542:80;22558:6;22566;22574:9;22585:10;22597;22609:2;22613:8;22542:15;:80::i;:::-;22521:101;;;;;;;;21965:665;;;;;;;;;;;;;;;;:::o;25612:610::-;25836:21;25817:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;25880:49:::1;25905:7;25914:8;25924:4;;25880:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25880:24:0::1;::::0;-1:-1:-1;;;25880:49:0:i:1;:::-;25870:59;;25979:12;25948:7;25973:1;25956:7;:14;:18;25948:27;;;;;;;;;;;;;;:43;;25940:93;;;;-1:-1:-1::0;;;25940:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26044:135;26090:4;;26095:1;26090:7;;;;;;26044:135;26190:24;26196:7;26205:4;;26190:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26211:2:0;;-1:-1:-1;26190:5:0::1;::::0;-1:-1:-1;;26190:24:0:i:1;27501:804::-:0;27715:21;27687:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27787:4:0::1;27762:29;:4:::0;;-1:-1:-1;;27767:15:0;;27762:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27762:21:0::1;-1:-1:-1::0;;;;;27762:29:0::1;;27754:65;;;::::0;;-1:-1:-1;;;27754:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27754:65:0;;;;;;;;;;;;;::::1;;27840:49;27864:7;27873:9;27884:4;;27840:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27840:23:0::1;::::0;-1:-1:-1;;;27840:49:0:i:1;:::-;27830:59;;27922:11;27908:7;27916:1;27908:10;;;;;;;;;;;;;;:25;;27900:71;;;;-1:-1:-1::0;;;27900:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24078:706:::0;24396:14;24423:12;24438:40;24457:7;24466:5;24473:4;24438:18;:40::i;:::-;24423:55;;24489:10;24502;:33;;24526:9;24502:33;;;-1:-1:-1;;24502:33:0;24546:74;;;-1:-1:-1;;;24546:74:0;;24568:10;24546:74;;;;24588:4;24546:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24489:46;;-1:-1:-1;;;;;;24546:21:0;;;;;:74;;;;;-1:-1:-1;;24546:74:0;;;;;;;;-1:-1:-1;24546:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;24546:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24546:74:0;;;;24643:133;24705:5;24712:9;24723:14;24739:12;24753:2;24757:8;24643:47;:133::i;:::-;24631:145;24078:706;-1:-1:-1;;;;;;;;;;;;;24078:706:0:o;31260:702::-;31494:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;31515:133:::1;31561:4;;31566:1;31561:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31561:7:0::1;31570:10;31582:45;31601:7;31610:4;;31615:1;31610:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31610:7:0::1;31619:4;;31624:1;31619:7;;;;;;31582:45;31629:8;31515:31;:133::i;:::-;31659:18;31687:4:::0;;-1:-1:-1;;31692:15:0;;31687:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31687:21:0::1;-1:-1:-1::0;;;;;31680:39:0::1;;31720:2;31680:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31680:43:0::1;-1:-1:-1::0;;;;;31680:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31680:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31680:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31680:43:0;31734:44:::1;::::0;;31680:43:::1;31734:44:::0;;::::1;::::0;;;;;;;;;;;31680:43;;-1:-1:-1;31734:44:0::1;::::0;;;31769:4;;;;;;31734:44;::::1;::::0;31769:4;;31734:44;31769:4;31734:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31775:2:0;;-1:-1:-1;31734:34:0::1;::::0;-1:-1:-1;;31734:44:0:i:1;:::-;31877:12:::0;31811:62:::1;31859:13:::0;31818:4;;-1:-1:-1;;31823:15:0;;31818:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31818:21:0::1;-1:-1:-1::0;;;;;31811:39:0::1;;31851:2;31811:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31811:43:0::1;-1:-1:-1::0;;;;;31811:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31811:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31811:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31811:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31789:165;;;;-1:-1:-1::0;;;31789:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17056:1;31260:702:::0;;;;;;;:::o;32806:825::-;33073:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33132:4:0::1;33107:29;:4:::0;;-1:-1:-1;;33112:15:0;;33107:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33107:21:0::1;-1:-1:-1::0;;;;;33107:29:0::1;;33099:65;;;::::0;;-1:-1:-1;;;33099:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33099:65:0;;;;;;;;;;;;;::::1;;33175:133;33221:4;;33226:1;33221:7;;;;;;33175:133;33319:55;33354:4;;33319:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33368:4:0::1;::::0;-1:-1:-1;33319:34:0::1;::::0;-1:-1:-1;;33319:55:0:i:1;:::-;33402:37;::::0;;-1:-1:-1;;;33402:37:0;;33433:4:::1;33402:37;::::0;::::1;::::0;;;33385:14:::1;::::0;-1:-1:-1;;;;;33409:4:0::1;33402:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33402:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33402:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33402:37:0;;-1:-1:-1;33458:25:0;;::::1;;33450:75;;;;-1:-1:-1::0;;;33450:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33542:4;-1:-1:-1::0;;;;;33536:20:0::1;;33557:9;33536:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33536:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33536:31:0;;;;33578:45;33609:2;33613:9;33578:30;:45::i;26822:673::-:0;27038:21;27010:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;27096:4:::1;-1:-1:-1::0;;;;;27085:15:0::1;:4;;27090:1;27085:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27085:7:0::1;-1:-1:-1::0;;;;;27085:15:0::1;;27077:51;;;::::0;;-1:-1:-1;;;27077:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27077:51:0;;;;;;;;;;;;;::::1;;27149:50;27174:7;27183:9;27194:4;;27149:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27149:24:0::1;::::0;-1:-1:-1;;;27149:50:0:i:1;:::-;27139:60;;27249:12;27218:7;27243:1;27226:7;:14;:18;27218:27;;;;;;;;;;;;;;:43;;27210:93;;;;-1:-1:-1::0;;;27210:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27320:4;-1:-1:-1::0;;;;;27314:19:0::1;;27341:7;27349:1;27341:10;;;;;;;;;;;;;;27314:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27314:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27314:40:0;;;;;27378:4;-1:-1:-1::0;;;;;27372:20:0::1;;27393:45;27412:7;27421:4;;27426:1;27421:7;;;;;;27393:45;27440:7;27448:1;27440:10;;;;;;;;;;;;;;27372:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;27372:79:0::1;-1:-1:-1::0;;;;;27372:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27372:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27372:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27372:79:0;27365:87:::1;;;;27463:24;27469:7;27478:4;;27463:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27484:2:0;;-1:-1:-1;27463:5:0::1;::::0;-1:-1:-1;;27463:24:0:i:1;:::-;26822:673:::0;;;;;;;;:::o;34129:255::-;34282:13;34320:56;34343:9;34354;34365:10;34320:22;:56::i;26228:588::-;26452:21;26433:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;26496:49:::1;26520:7;26529:9;26540:4;;26496:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26496:23:0::1;::::0;-1:-1:-1;;;26496:49:0:i:1;:::-;26486:59;;26578:11;26564:7;26572:1;26564:10;;;;;;;;;;;;;;:25;;26556:71;;;;-1:-1:-1::0;;;26556:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16898:38:::0;;;:::o;33675:182::-;33772:12;33804:45;33821:7;33830:8;33840;33804:16;:45::i;23372:700::-;23638:14;23619:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;23681:196:::1;23711:5;23731:4;23750:9;23774:14;23803:12;23838:4;23858:8;23681:15;:196::i;:::-;23927:38;::::0;;-1:-1:-1;;;23927:38:0;;23959:4:::1;23927:38;::::0;::::1;::::0;;;23665:212;;-1:-1:-1;23888:78:0::1;::::0;-1:-1:-1;23916:5:0;;23923:2;;-1:-1:-1;;;;;23927:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23927:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23927:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23927:38:0;23888:27:::1;:78::i;:::-;23983:4;-1:-1:-1::0;;;;;23977:20:0::1;;23998:9;23977:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23977:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23977:31:0;;;;24019:45;24050:2;24054:9;24019:30;:45::i;31968:832::-:0;32228:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;32273:4:::1;-1:-1:-1::0;;;;;32262:15:0::1;:4;;32267:1;32262:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32262:7:0::1;-1:-1:-1::0;;;;;32262:15:0::1;;32254:51;;;::::0;;-1:-1:-1;;;32254:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32254:51:0;;;;;;;;;;;;;::::1;;32316:13;32332:9;32316:25;;32358:4;-1:-1:-1::0;;;;;32352:19:0::1;;32379:8;32352:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32352:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32352:38:0;;;;;32414:4;-1:-1:-1::0;;;;;32408:20:0::1;;32429:45;32448:7;32457:4;;32462:1;32457:7;;;;;;32429:45;32476:8;32408:77;;;;;;;;;;;;;-1:-1:-1::0;;;;;32408:77:0::1;-1:-1:-1::0;;;;;32408:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32408:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32408:77:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32408:77:0;32401:85:::1;;;;32497:18;32525:4:::0;;-1:-1:-1;;32530:15:0;;32525:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32525:21:0::1;-1:-1:-1::0;;;;;32518:39:0::1;;32558:2;32518:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32518:43:0::1;-1:-1:-1::0;;;;;32518:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32518:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32518:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32518:43:0;32572:44:::1;::::0;;32518:43:::1;32572:44:::0;;::::1;::::0;;;;;;;;;;;32518:43;;-1:-1:-1;32572:44:0::1;::::0;;;32607:4;;;;;;32572:44;::::1;::::0;32607:4;;32572:44;32607:4;32572:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32613:2:0;;-1:-1:-1;32572:34:0::1;::::0;-1:-1:-1;;32572:44:0:i:1;:::-;32715:12:::0;32649:62:::1;32697:13:::0;32656:4;;-1:-1:-1;;32661:15:0;;32656:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32656:21:0::1;-1:-1:-1::0;;;;;32649:39:0::1;;32689:2;32649:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32649:43:0::1;-1:-1:-1::0;;;;;32649:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20451:829:0::0;20705:12;20719;20686:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;20744:12:::1;20759:43;20778:7;20787:6;20795;20759:18;:43::i;:::-;20813:56;::::0;;-1:-1:-1;;;20813:56:0;;20841:10:::1;20813:56;::::0;::::1;::::0;-1:-1:-1;;;;;20813:27:0;::::1;:56:::0;;;;;;;;;;;;;;20744:58;;-1:-1:-1;20813:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20813:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20813:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20813:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20937:23:0::1;::::0;;-1:-1:-1;;;20937:23:0;;-1:-1:-1;;;;;20937:23:0;;::::1;;::::0;::::1;::::0;;;20907:12:::1;::::0;;;20937:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;20907:12;20937:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20937:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20937:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20937:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20937:23:0;-1:-1:-1;20972:14:0::1;20991:37;21013:6:::0;21021;20991:21:::1;:37::i;:::-;20971:57;;;21070:6;-1:-1:-1::0;;;;;21060:16:0::1;:6;-1:-1:-1::0;;;;;21060:16:0::1;;:58;;21101:7;21110;21060:58;;;21080:7;21089;21060:58;21039:79:::0;;-1:-1:-1;21039:79:0;-1:-1:-1;21137:21:0;;::::1;;21129:66;;;::::0;;-1:-1:-1;;;21129:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;21225:10;21214:7;:21;;21206:66;;;::::0;;-1:-1:-1;;;21206:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;17056:1;;;;20451:829:::0;;;;;;;;;;;:::o;16850:41::-;;;:::o;34392:247::-;34536:21;34582:49;34607:7;34616:8;34626:4;34582:24;:49::i;22636:657::-;22925:16;22943:14;22970:12;22985:40;23004:7;23013:5;23020:4;22985:18;:40::i;:::-;22970:55;;23036:10;23049;:33;;23073:9;23049:33;;;-1:-1:-1;;23049:33:0;23093:74;;;-1:-1:-1;;;23093:74:0;;23115:10;23093:74;;;;23135:4;23093:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23036:46;;-1:-1:-1;;;;;;23093:21:0;;;;;:74;;;;;-1:-1:-1;;23093:74:0;;;;;;;;-1:-1:-1;23093:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;23093:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23093:74:0;;;;23205:80;23224:5;23231:9;23242:14;23258:12;23272:2;23276:8;23205:18;:80::i;:::-;23178:107;;;;-1:-1:-1;22636:657:0;-1:-1:-1;;;;;;;;;;;;;22636:657:0:o;18714:726::-;19002:12;19016;19030:14;18983:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;19078:85:::1;19092:6;19100;19108:14;19124;19140:10;19152;19078:13;:85::i;:::-;19057:106:::0;;-1:-1:-1;19057:106:0;-1:-1:-1;19174:12:0::1;19189:43;19208:7;19217:6:::0;19225;19189:18:::1;:43::i;:::-;19174:58;;19243:66;19275:6;19283:10;19295:4;19301:7;19243:31;:66::i;:::-;19320;19352:6;19360:10;19372:4;19378:7;19320:31;:66::i;:::-;19418:4;-1:-1:-1::0;;;;;19409:19:0::1;;19429:2;19409:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19409:23:0::1;-1:-1:-1::0;;;;;19409:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19409:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19409:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19409:23:0;18714:726;;;;-1:-1:-1;19409:23:0;;-1:-1:-1;18714:726:0;;-1:-1:-1;;;;;;;;;18714:726:0:o;19446:962::-;19699:16;19717:14;19733;19680:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;19787:176:::1;19815:5;19835:4;19854:18;19887:9;19911:14;19940:12;19787:13;:176::i;:::-;19760:203:::0;;-1:-1:-1;19760:203:0;-1:-1:-1;19974:12:0::1;19989:40;20008:7;20017:5:::0;20024:4:::1;19989:18;:40::i;:::-;19974:55;;20040:69;20072:5;20079:10;20091:4;20097:11;20040:31;:69::i;:::-;20126:4;-1:-1:-1::0;;;;;20120:19:0::1;;20147:9;20120:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20120:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20120:39:0;;;;;20183:4;-1:-1:-1::0;;;;;20177:20:0::1;;20198:4;20204:9;20177:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;20177:37:0::1;-1:-1:-1::0;;;;;20177:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20177:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20177:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20177:37:0;20170:45:::1;;;;20247:4;-1:-1:-1::0;;;;;20238:19:0::1;;20258:2;20238:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;20238:23:0::1;-1:-1:-1::0;;;;;20238:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20238:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20238:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20238:23:0;;-1:-1:-1;20312:9:0::1;:21:::0;-1:-1:-1;20308:92:0::1;;;20335:65;20366:10;20390:9;20378;:21;20335:30;:65::i;:::-;17056:1;19446:962:::0;;;;;;;;;;;:::o;29143:786::-;29356:21;29328:8;17007:15;16995:8;:27;;16987:58;;;;;-1:-1:-1;;;16987:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16987:58:0;;;;;;;;;;;;;;;29414:4:::1;-1:-1:-1::0;;;;;29403:15:0::1;:4;;29408:1;29403:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29403:7:0::1;-1:-1:-1::0;;;;;29403:15:0::1;;29395:51;;;::::0;;-1:-1:-1;;;29395:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29395:51:0;;;;;;;;;;;;;::::1;;29467:49;29491:7;29500:9;29511:4;;29467:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29467:23:0::1;::::0;-1:-1:-1;;;29467:49:0:i:1;:::-;29457:59;;29549:9;29535:7;29543:1;29535:10;;;;;;;;;;;;;;:23;;29527:69;;;;-1:-1:-1::0;;;29527:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29613:4;-1:-1:-1::0;;;;;29607:19:0::1;;29634:7;29642:1;29634:10;;;;;;;;;;;;;;29607:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29607:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29607:40:0;;;;;29671:4;-1:-1:-1::0;;;;;29665:20:0::1;;29686:45;29705:7;29714:4;;29719:1;29714:7;;;;;;29686:45;29733:7;29741:1;29733:10;;;;;;;;;;;;;;29665:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;29665:79:0::1;-1:-1:-1::0;;;;;29665:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29665:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29665:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29665:79:0;29658:87:::1;;;;29756:24;29762:7;29771:4;;29756:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29777:2:0;;-1:-1:-1;29756:5:0::1;::::0;-1:-1:-1;;29756:24:0:i:1;:::-;29843:7;29851:1;29843:10;;;;;;;;;;;;;;29831:9;:22;29827:94;;;29855:66;29886:10;29910:7;29918:1;29910:10;;;;;;;;;;;;;;29898:9;:22;29855:30;:66::i;1323:361::-:0;1518:45;;;-1:-1:-1;;;;;1518:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1518:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1507:57:0;;;;1472:12;;1486:17;;1507:10;;;;1518:45;1507:57;;;25:18:-1;1507:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1507:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1471:93:0;;;;1583:7;:57;;;;-1:-1:-1;1595:11:0;;:16;;:44;;;1626:4;1615:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1615:24:0;1595:44;1575:101;;;;;-1:-1:-1;;;1575:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1323:361;;;;;:::o;2102:195::-;2210:12;;;2172;2210;;;;;;;;;-1:-1:-1;;;;;2189:7:0;;;2203:5;;2189:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2189:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2171:52:0;;;2242:7;2234:55;;;;-1:-1:-1;;;2234:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2102:195;;;:::o;12951:505::-;13044:14;13090:1;13079:8;:12;13071:62;;;;-1:-1:-1;;;13071:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13164:1;13152:9;:13;:31;;;;;13182:1;13169:10;:14;13152:31;13144:78;;;;-1:-1:-1;;;13144:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13233:20;13256:17;:8;13269:3;13256:17;:12;:17;:::i;:::-;13233:40;-1:-1:-1;13284:14:0;13301:31;13233:40;13321:10;13301:31;:19;:31;:::i;:::-;13284:48;-1:-1:-1;13343:16:0;13362:40;13386:15;13362:19;:9;13376:4;13362:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13343:59;;13437:11;13425:9;:23;;;;;;;12951:505;-1:-1:-1;;;;;;;12951:505:0:o;14119:::-;14220:21;14277:1;14262:4;:11;:16;;14254:53;;;;;-1:-1:-1;;;14254:53:0;;;;;;;;;;;;-1:-1:-1;;;14254:53:0;;;;;;;;;;;;;;;14339:4;:11;14328:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14328:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14328:23:0;;14318:33;;14375:8;14362:7;14370:1;14362:10;;;;;;;;;;;;;:21;;;;;14399:6;14394:223;14425:1;14411:4;:11;:15;14407:1;:19;14394:223;;;14449:14;14465:15;14484:42;14496:7;14505:4;14510:1;14505:7;;;;;;;;;;;;;;14514:4;14519:1;14523;14519:5;14514:11;;;;;;;;;;;;;;14484;:42::i;:::-;14448:78;;;;14558:47;14571:7;14579:1;14571:10;;;;;;;;;;;;;;14583:9;14594:10;14558:12;:47::i;:::-;14541:7;14549:1;14553;14549:5;14541:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14428:3:0;;14394:223;;;;14119:505;;;;;:::o;11443:478::-;11532:12;11558:14;11574;11592:26;11603:6;11611;11592:10;:26::i;:::-;11756:32;;;-1:-1:-1;;11756:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11756:32:0;;;;;11746:43;;;;;;-1:-1:-1;;;;;;11659:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11659:251:0;;;;;;;11649:262;;;;;;;;;11443:478;-1:-1:-1;;;;;11443:478:0:o;1692:402::-;1917:51;;;-1:-1:-1;;;;;1917:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1917:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1906:63:0;;;;1871:12;;1885:17;;1906:10;;;;1917:51;1906:63;;;25:18:-1;1906:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1906:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1870:99:0;;;;1988:7;:57;;;;-1:-1:-1;2000:11:0;;:16;;:44;;;2031:4;2020:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2020:24:0;2000:44;1980:106;;;;-1:-1:-1;;;1980:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1692:402;;;;;;:::o;24895:711::-;25002:6;24997:602;25028:1;25014:4;:11;:15;25010:1;:19;24997:602;;;25052:13;25067:14;25086:4;25091:1;25086:7;;;;;;;;;;;;;;25095:4;25100:1;25104;25100:5;25095:11;;;;;;;;;;;;;;25051:56;;;;25123:14;25142:36;25164:5;25171:6;25142:21;:36::i;:::-;25122:56;;;25193:14;25210:7;25218:1;25222;25218:5;25210:14;;;;;;;;;;;;;;25193:31;;25240:15;25257;25285:6;-1:-1:-1;;;;;25276:15:0;:5;-1:-1:-1;;;;;25276:15:0;;:61;;25318:9;25334:1;25276:61;;;25300:1;25304:9;25276:61;25239:98;;;;25352:10;25383:1;25369:4;:11;:15;25365:1;:19;:76;;25438:3;25365:76;;;25387:48;25406:7;25415:6;25423:4;25428:1;25432;25428:5;25423:11;;;;;;;;;;;;;;25387:18;:48::i;:::-;25352:89;;25465:42;25484:7;25493:5;25500:6;25465:18;:42::i;:::-;-1:-1:-1;;;;;25456:57:0;;25532:10;25544;25556:2;25570:1;25560:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25560:12:0;87:42:-1;143:17;;-1:-1;25560:12:0;;25456:131;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25456:131:0;-1:-1:-1;;;;;25456:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25456:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25456:131:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25031:3:0;;;;;-1:-1:-1;24997:602:0;;-1:-1:-1;;;;;;;;24997:602:0;;;24895:711;;;:::o;14705:526::-;14806:21;14863:1;14848:4;:11;:16;;14840:53;;;;;-1:-1:-1;;;14840:53:0;;;;;;;;;;;;-1:-1:-1;;;14840:53:0;;;;;;;;;;;;;;;14925:4;:11;14914:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14914:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14914:23:0;;14904:33;;14978:9;14948:7;14973:1;14956:7;:14;:18;14948:27;;;;;;;;;;;;;;;;;:39;15012:11;;-1:-1:-1;;15012:15:0;14998:226;15029:5;;14998:226;;15057:14;15073:15;15092:42;15104:7;15113:4;15122:1;15118;:5;15113:11;;;;;;;;;;;;;;15126:4;15131:1;15126:7;;;;;;;15092:42;15056:78;;;;15166:46;15178:7;15186:1;15178:10;;;;;;;;;;;;;;15190:9;15201:10;15166:11;:46::i;:::-;15149:7;15161:1;15157;:5;15149:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;15036:3:0;14998:226;;30076:1178;30189:6;30184:1063;30215:1;30201:4;:11;:15;30197:1;:19;30184:1063;;;30239:13;30254:14;30273:4;30278:1;30273:7;;;;;;;;;;;;;;30282:4;30287:1;30291;30287:5;30282:11;;;;;;;;;;;;;;30238:56;;;;30310:14;30329:36;30351:5;30358:6;30329:21;:36::i;:::-;30309:56;;;30380:13;30405:42;30424:7;30433:5;30440:6;30405:18;:42::i;:::-;30380:68;;30463:16;30494:17;30582:13;30597;30615:4;-1:-1:-1;;;;;30615:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30615:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30615:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30615:18:0;;;;;;;-1:-1:-1;;;;;30581:52:0;;;;-1:-1:-1;30581:52:0;;-1:-1:-1;30649:17:0;;-1:-1:-1;;;;;30690:15:0;;;;;;;:61;;30732:8;30742;30690:61;;;30709:8;30719;30690:61;30648:103;;;;30780:56;30823:12;30787:5;-1:-1:-1;;;;;30780:23:0;;30812:4;30780:38;;;;;;;;;;;;;-1:-1:-1;;;;;30780:38:0;-1:-1:-1;;;;;30780:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30780:56:0;30766:70;;30866:65;30890:11;30903:12;30917:13;30866:23;:65::i;:::-;30851:80;;30184:1063;;;;30962:15;30979;31007:6;-1:-1:-1;;;;;30998:15:0;:5;-1:-1:-1;;;;;30998:15:0;;:67;;31043:12;31062:1;30998:67;;;31022:1;31026:12;30998:67;30961:104;;;;31080:10;31111:1;31097:4;:11;:15;31093:1;:19;:76;;31166:3;31093:76;;;31115:48;31134:7;31143:6;31151:4;31156:1;31160;31156:5;31151:11;;;;;;;31115:48;31222:12;;;31232:1;31222:12;;;;;;;;;;-1:-1:-1;;;31184:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31184:51:0;;;;;;;;;;;;;;;;;;;;;;31080:89;;-1:-1:-1;31184:9:0;;;;;;31194:10;;31206;;31080:89;;31222:12;;31184:51;;;;;;;;31222:12;;31184:51;;;;31222: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;31184:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31184:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30218:3:0;;;;;-1:-1:-1;30184:1063:0;;-1:-1:-1;;;;;;;;;;30184:1063:0;10163:129;10247:5;;;10242:16;;;;10234:50;;;;;-1:-1:-1;;;10234:50:0;;;;;;;;;;;;-1:-1:-1;;;10234:50:0;;;;;;;;;;;;;;13577:460;13670:13;13716:1;13704:9;:13;13696:64;;;;-1:-1:-1;;;13696:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13791:1;13779:9;:13;:31;;;;;13809:1;13796:10;:14;13779:31;13771:78;;;;-1:-1:-1;;;13771:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13860:14;13877:34;13906:4;13877:24;:9;13891;13877:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13860:51;-1:-1:-1;13922:16:0;13941:34;13971:3;13941:25;:10;13956:9;13941:25;:14;:25;:::i;:34::-;13922:53;;13997:32;14027:1;14010:11;13998:9;:23;;;;;;;13997:32;:29;:32;:::i;:::-;13986:43;13577:460;-1:-1:-1;;;;;;13577:460:0:o;12520:309::-;12602:12;12645:1;12635:7;:11;12627:55;;;;;-1:-1:-1;;;12627:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12712:1;12701:8;:12;:28;;;;;12728:1;12717:8;:12;12701:28;12693:75;;;;-1:-1:-1;;;12693:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12813:8;12789:21;:7;12801:8;12789:21;:11;:21;:::i;:::-;:32;;;;;;;12520:309;-1:-1:-1;;;;12520:309:0:o;11014:337::-;11089:14;11105;11150:6;-1:-1:-1;;;;;11140:16:0;:6;-1:-1:-1;;;;;11140:16:0;;;11132:60;;;;;-1:-1:-1;;;11132:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11231:6;-1:-1:-1;;;;;11222:15:0;:6;-1:-1:-1;;;;;11222:15:0;;:53;;11260:6;11268;11222:53;;;11241:6;11249;11222:53;11203:72;;-1:-1:-1;11203:72:0;-1:-1:-1;;;;;;11294:20:0;;11286:57;;;;;-1:-1:-1;;;11286:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11014:337;;;;;:::o;17360:1348::-;17673:44;;;-1:-1:-1;;;17673:44:0;;-1:-1:-1;;;;;17673:44:0;;;;;;;;;;;;;;;;17578:12;;;;;;17685:7;17673:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;17673:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17673:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17673:44:0;-1:-1:-1;;;;;17673:58:0;;17669:138;;;17748:47;;;-1:-1:-1;;;17748:47:0;;-1:-1:-1;;;;;17748:47:0;;;;;;;;;;;;;;;;17760:7;17748:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;17748:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17748:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17748:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17669:138:0;17818:13;17833;17850:47;17873:7;17882:6;17890;17850:22;:47::i;:::-;17817:80;;;;17912:8;17924:1;17912:13;:30;;;;-1:-1:-1;17929:13:0;;17912:30;17908:793;;;17981:14;;-1:-1:-1;17997:14:0;;-1:-1:-1;17908:793:0;;;18045:19;18067:52;18084:14;18100:8;18110;18067:16;:52::i;:::-;18045:74;;18156:14;18138;:32;18134:556;;18217:10;18199:14;:28;;18191:73;;;;;-1:-1:-1;;;18191:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18305:14;;-1:-1:-1;18321:14:0;-1:-1:-1;18321:14:0;18134:556;;;18377:19;18399:52;18416:14;18432:8;18442;18399:16;:52::i;:::-;18377:74;;18495:14;18477;:32;;18470:40;;;;18555:10;18537:14;:28;;18529:73;;;;;-1:-1:-1;;;18529:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18643:14;-1:-1:-1;18659:14:0;;-1:-1:-1;18134:556:0;17908:793;;17360:1348;;;;;;;;;;;:::o;10300:142::-;10352:6;10379;;;:30;;-1:-1:-1;;10394:5:0;;;10408:1;10403;10394:5;10403:1;10389:15;;;;;:20;10379:30;10371:63;;;;;-1:-1:-1;;;10371:63:0;;;;;;;;;;;;-1:-1:-1;;;10371:63:0;;;;;;;;;;;;;;10027:128;10111:5;;;10106:16;;;;10098:49;;;;;-1:-1:-1;;;10098:49:0;;;;;;;;;;;;-1:-1:-1;;;10098:49:0;;;;;;;;;;;;;;11979:428;12072:13;12087;12114:14;12133:26;12144:6;12152;12133:10;:26::i;:::-;12113:46;;;12170:32;12178:7;12187:6;12195;12170:7;:32::i;:::-;;12214:13;12229;12256:32;12264:7;12273:6;12281;12256:7;:32::i;:::-;-1:-1:-1;;;;;12247:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12247:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12247:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12247:56:0;;;;;;;-1:-1:-1;;;;;12213:90:0;;;;-1:-1:-1;12213:90:0;;-1:-1:-1;;;;;;12337:16:0;;;;;;;:62;;12380:8;12390;12337:62;;;12357:8;12367;12337:62;12314:85;;;;-1:-1:-1;11979:428:0;-1:-1:-1;;;;;;;11979:428:0:o

Swarm Source

ipfs://411960c68695923d0fa4211e9ba2df090b3f1596cf0da4e9004162e92b925437
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.