Contract 0x327df1e6de05895d2ab08513aadd9313fe505d86 12

 

Contract Overview

Balance:
0 ETH

EtherValue:
$0.00
Txn Hash Method
Block
From
To
Value
0x0c3a5a4c735cd6f3f00d2eae9e6b8998eba59f0195aee5ce99498c2a66fa0e2bSwap Exact ETH F...132308032024-04-16 7:02:336 secs ago0x06d8db8b3a8e766885d22813d162f76caa860be3 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.000121826237942 ETH0.0000021612090.018821891
0x3098df6f8d69244038f30c5a0d6d4c8da3fa35c004db63574fd94eaaf8ce72b6Remove Liquidity...132308002024-04-16 7:02:2712 secs ago0x8b64177b5b4186b755927fd20f86c438caf65dfe IN  0x327df1e6de05895d2ab08513aadd9313fe505d860 ETH0.0000032876570.017695829
0xe9b0909d67f0f36501aeca68804efab2cc2acfe38f88cd548d4e7e4e2c0d4d79Add Liquidity ET...132307862024-04-16 7:01:5940 secs ago0x8b64177b5b4186b755927fd20f86c438caf65dfe IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.000029284429767 ETH0.0000031234010.017543604
0x88fd100770a1f1d2dc0f59c75f1aeab918474ac893f60858ad7cdf8d02bbd96dSwap Exact ETH F...132307802024-04-16 7:01:4752 secs ago0x391c9e312a6d7cd2b546072a5e49e10d817ae988 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.00114 ETH0.0000023637110.018232172
0x0cd10c5637f5afbc87d53ce0c88b01bd5459bfd9440e426ef03cdec9b3d87e52Swap Exact ETH F...132307372024-04-16 7:00:212 mins ago0x8f738aad3965efbfd4479692e5f970a4d26b1007 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.000119725626868 ETH0.0000020498690.017816072
0x7a094c2544bdf53d15cc03c59ac20cce7239f70aa0f70fc022aa11136ad9b094Swap Exact Token...132307022024-04-16 6:59:113 mins ago0xe1e139a6288837bf119c2433b098bb5ccf07273c IN  0x327df1e6de05895d2ab08513aadd9313fe505d860 ETH0.0000022597370.017704383
0xf1cb3db8ed06a83adc9ae9a3876759c240dc049fa87694a4e9b8ba6b8e5fde57Swap Exact ETH F...132306942024-04-16 6:58:553 mins ago0x69a37149a5bc63e338542d1663a2e2e14e8114bf IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.007 ETH0.0000763264730.5
0x6372e34398f5de3ba004f224f77aecb56d51f1f13e079416b93610eba044b481Swap Exact Token...132306812024-04-16 6:58:294 mins ago0x0effa15d70899f8c0dd8f9bed9a51fd063d12bc6 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860 ETH0.0000021675220.017060066
0x068bb48d7a5230b6600243e00a6173eb23d00b8dd6a2d17af6ceb84824f10229Swap Exact ETH F...132306702024-04-16 6:58:074 mins ago0xacc86c34e575d003ee7ba4592e18d2e514330d28 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.000121292521551 ETH0.0000020622080.017847925
0x74563f6242b870d5014cea0e02c825fd776fda75647160d14c23477ef242f7e7Swap Exact ETH F...132306652024-04-16 6:57:574 mins ago0x29fa80a1f9d57811ce37e547317fcdb6de37cd7b IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.003867 ETH0.0000023316280.017597685
0x7ffefcf7d4784db4cebf344250120eff1b09ff0113b2c41f432880ec987a97acSwap Exact Token...132306412024-04-16 6:57:095 mins ago0x1baa11605a2688e943a68e890f8fdedbcd3b1a99 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860 ETH0.0000022045860.016715959
0x51fd9c91bfc3d11300ee96b5432b4494066e7e5366044e6b072ad15af7023875Swap Exact ETH F...132306132024-04-16 6:56:136 mins ago0x2bd2160afdc1d711437346ef32883bda1452a3c9 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.00077987988868 ETH0.0000023745080.017111747
0xc76d2e88fbd34a8970d68f5a8bbd11f953f8a5fd2162327ee48237c2dc8caaf5Swap Exact Token...132306062024-04-16 6:55:596 mins ago0xfa47cf631234d5a78daf1db2a66541a16077e6c0 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860 ETH0.0000028416720.018336753
0xad61ab9f43e2b83c85918bea2e5722a7f82612971f254ea76f9ff3921de92ea9Swap Exact ETH F...132306052024-04-16 6:55:576 mins ago0xfb72f26e6d63453029b2749bf97c24ab0c1a1df8 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.000188371720443 ETH0.000002143720.018538535
0xf5d5fa1a162a8d97deb5f2a5f08936590554c21a7fa36a59ee79ac3d369a0158Swap Exact Token...132305812024-04-16 6:55:097 mins ago0xe3cc1103ed5251d5b4c764255a832453bfccf46f IN  0x327df1e6de05895d2ab08513aadd9313fe505d860 ETH0.0000023498920.018531245
0x25a2c3c128201ba3031c57bfb4e8b466618b1a5f448b717df7e5f5c68ffb0a28Swap Exact ETH F...132305682024-04-16 6:54:437 mins ago0xe1e139a6288837bf119c2433b098bb5ccf07273c IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.000139999999999 ETH0.0000023886570.018644242
0x65345ae24bca46436216ff6d6b73eed0dd2f3f0dc57c0aedf5a219737e722903Swap Exact Token...132305632024-04-16 6:54:338 mins ago0xae41e07c979661f5f45e6c4fa0b27b75728657ef IN  0x327df1e6de05895d2ab08513aadd9313fe505d860 ETH0.0000023256140.017646422
0x8c5f70a082c11549456626fedba97ecb73c3fcdb7b8af5f1761adef89475806eSwap Exact ETH F...132305572024-04-16 6:54:218 mins ago0x5f5c0f8104ada81033a2f68f9b552ba6ccf34ab6 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.000230780988973 ETH0.0000021869850.018986964
0x755a2685278606b62895b3fbb9e46acab2e68ad02dee96e62f24ab5db9d537f7Swap Exact ETH F...132305442024-04-16 6:53:558 mins ago0xc8dd1a34dd966527a8eb6cd4ff1deb1ae30c28d5 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.008727748656019 ETH0.0000026102660.018893601
0x373101a8a89e67527016a624bf682e9ca9a0837e8218553e191e7c4785d4c5d4Swap Exact Token...132305242024-04-16 6:53:159 mins ago0x56d37b60e7b9d180c8efa52ead4f0e8959546da2 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860 ETH0.0000024064330.01905823
0xba92d379462fed8ff7cc8d8332f0d60d1ecf19449d6dee912ed6aebfe634a1c0Swap Exact Token...132305122024-04-16 6:52:519 mins ago0x5eb233d59cdb7528349b88d12516d33146b7d3ae IN  0x327df1e6de05895d2ab08513aadd9313fe505d860 ETH0.0000026346180.019172067
0x00364f9e002422fd685d32edd2074e18d255470567b2e9d1b9ce01e203a43df8Swap Exact ETH F...132305102024-04-16 6:52:479 mins ago0x56d37b60e7b9d180c8efa52ead4f0e8959546da2 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.001039999999999 ETH0.0000021083960.019250638
0x3be0a2825dece98db72456169050dc750cb230034c27d56da61595a76ee241cbSwap Exact ETH F...132305022024-04-16 6:52:3110 mins ago0x147cb45e4c7eee6f36578bce10226b4511e9724c IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.000181698106989 ETH0.0000022347410.019419823
0xb0b84b2c69205d5a9a08b6dcdb8de16be58e8010a4cf694e8749a3aa75c8e0b8Swap Exact ETH F...132304902024-04-16 6:52:0710 mins ago0x5eb233d59cdb7528349b88d12516d33146b7d3ae IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.00018 ETH0.0000023245250.019240251
0xa1ed89360312ae12741b4f4152a9656f278a91d11b63ccab8958c38763019a25Swap Exact ETH F...132304372024-04-16 6:50:2112 mins ago0xb64bcb9b0c0bba4df5d80dfc112ae9421069a505 IN  0x327df1e6de05895d2ab08513aadd9313fe505d860.000119044632037 ETH0.0000022872770.01988675
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0c3a5a4c735cd6f3f00d2eae9e6b8998eba59f0195aee5ce99498c2a66fa0e2b132308032024-04-16 7:02:336 secs ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.000121826237942759 ETH
0x3098df6f8d69244038f30c5a0d6d4c8da3fa35c004db63574fd94eaaf8ce72b6132308002024-04-16 7:02:2712 secs ago 0x327df1e6de05895d2ab08513aadd9313fe505d860x8b64177b5b4186b755927fd20f86c438caf65dfe0.000029284429760598 ETH
0x3098df6f8d69244038f30c5a0d6d4c8da3fa35c004db63574fd94eaaf8ce72b6132308002024-04-16 7:02:2712 secs ago Wrapped Ether 0x327df1e6de05895d2ab08513aadd9313fe505d860.000029284429760598 ETH
0xe9b0909d67f0f36501aeca68804efab2cc2acfe38f88cd548d4e7e4e2c0d4d79132307862024-04-16 7:01:5940 secs ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.000029284429767788 ETH
0x88fd100770a1f1d2dc0f59c75f1aeab918474ac893f60858ad7cdf8d02bbd96d132307802024-04-16 7:01:4752 secs ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.00114 ETH
0x0cd10c5637f5afbc87d53ce0c88b01bd5459bfd9440e426ef03cdec9b3d87e52132307372024-04-16 7:00:212 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.000119725626868961 ETH
0x7a094c2544bdf53d15cc03c59ac20cce7239f70aa0f70fc022aa11136ad9b094132307022024-04-16 6:59:113 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d860xe1e139a6288837bf119c2433b098bb5ccf07273c0.000137056063796866 ETH
0x7a094c2544bdf53d15cc03c59ac20cce7239f70aa0f70fc022aa11136ad9b094132307022024-04-16 6:59:113 mins ago Wrapped Ether 0x327df1e6de05895d2ab08513aadd9313fe505d860.000137056063796866 ETH
0xf1cb3db8ed06a83adc9ae9a3876759c240dc049fa87694a4e9b8ba6b8e5fde57132306942024-04-16 6:58:553 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.007 ETH
0x6372e34398f5de3ba004f224f77aecb56d51f1f13e079416b93610eba044b481132306812024-04-16 6:58:294 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d860x0effa15d70899f8c0dd8f9bed9a51fd063d12bc60.01290612613076083 ETH
0x6372e34398f5de3ba004f224f77aecb56d51f1f13e079416b93610eba044b481132306812024-04-16 6:58:294 mins ago Wrapped Ether 0x327df1e6de05895d2ab08513aadd9313fe505d860.01290612613076083 ETH
0x068bb48d7a5230b6600243e00a6173eb23d00b8dd6a2d17af6ceb84824f10229132306702024-04-16 6:58:074 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.000121292521551334 ETH
0x74563f6242b870d5014cea0e02c825fd776fda75647160d14c23477ef242f7e7132306652024-04-16 6:57:574 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.003867 ETH
0x7ffefcf7d4784db4cebf344250120eff1b09ff0113b2c41f432880ec987a97ac132306412024-04-16 6:57:095 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d860x1baa11605a2688e943a68e890f8fdedbcd3b1a990.00112413082858891 ETH
0x7ffefcf7d4784db4cebf344250120eff1b09ff0113b2c41f432880ec987a97ac132306412024-04-16 6:57:095 mins ago Wrapped Ether 0x327df1e6de05895d2ab08513aadd9313fe505d860.00112413082858891 ETH
0x51fd9c91bfc3d11300ee96b5432b4494066e7e5366044e6b072ad15af7023875132306132024-04-16 6:56:136 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.000779879888680073 ETH
0xc76d2e88fbd34a8970d68f5a8bbd11f953f8a5fd2162327ee48237c2dc8caaf5132306062024-04-16 6:55:596 mins ago Wrapped Ether 0x327df1e6de05895d2ab08513aadd9313fe505d860.000028525215548932 ETH
0xad61ab9f43e2b83c85918bea2e5722a7f82612971f254ea76f9ff3921de92ea9132306052024-04-16 6:55:576 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.000188371720443607 ETH
0xc89cfc0e4a2c14c24bcd5489844870565765e4c65c61701ae48c333762412295132305822024-04-16 6:55:117 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d86 0xfda613cb7366b1812f2d33fc95d1d4dd3896aeb80.006470425802120868 ETH
0xc89cfc0e4a2c14c24bcd5489844870565765e4c65c61701ae48c333762412295132305822024-04-16 6:55:117 mins ago Wrapped Ether 0x327df1e6de05895d2ab08513aadd9313fe505d860.006470425802120868 ETH
0xf5d5fa1a162a8d97deb5f2a5f08936590554c21a7fa36a59ee79ac3d369a0158132305812024-04-16 6:55:097 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d860xe3cc1103ed5251d5b4c764255a832453bfccf46f0.000169652738114061 ETH
0xf5d5fa1a162a8d97deb5f2a5f08936590554c21a7fa36a59ee79ac3d369a0158132305812024-04-16 6:55:097 mins ago Wrapped Ether 0x327df1e6de05895d2ab08513aadd9313fe505d860.000169652738114061 ETH
0x25a2c3c128201ba3031c57bfb4e8b466618b1a5f448b717df7e5f5c68ffb0a28132305682024-04-16 6:54:437 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d86Wrapped Ether0.000139999999999999 ETH
0x65345ae24bca46436216ff6d6b73eed0dd2f3f0dc57c0aedf5a219737e722903132305632024-04-16 6:54:338 mins ago 0x327df1e6de05895d2ab08513aadd9313fe505d860xae41e07c979661f5f45e6c4fa0b27b75728657ef0.001307852892385544 ETH
0x65345ae24bca46436216ff6d6b73eed0dd2f3f0dc57c0aedf5a219737e722903132305632024-04-16 6:54:338 mins ago Wrapped Ether 0x327df1e6de05895d2ab08513aadd9313fe505d860.001307852892385544 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PancakeRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2023-08-01
*/

// SPDX-License-Identifier: GPL-3.0
pragma solidity =0.6.6;

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IPancakeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

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

interface IPancakePair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to) external returns (uint256 amount0, uint256 amount1);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

library PancakeLibrary {
    using SafeMath for uint256;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, "PancakeLibrary: IDENTICAL_ADDRESSES");
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), "PancakeLibrary: ZERO_ADDRESS");
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal view returns (address pair) {
        pair = IPancakeFactory(factory).getPair(tokenA, tokenB);
    }

    // fetches and sorts the reserves for a pair
    function getReserves(
        address factory,
        address tokenA,
        address tokenB
    ) internal view returns (uint256 reserveA, uint256 reserveB) {
        (address token0, ) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint256 reserve0, uint256 reserve1, ) = IPancakePair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) internal pure returns (uint256 amountB) {
        require(amountA > 0, "PancakeLibrary: INSUFFICIENT_AMOUNT");
        require(reserveA > 0 && reserveB > 0, "PancakeLibrary: INSUFFICIENT_LIQUIDITY");
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) internal pure returns (uint256 amountOut) {
        require(amountIn > 0, "PancakeLibrary: INSUFFICIENT_INPUT_AMOUNT");
        require(reserveIn > 0 && reserveOut > 0, "PancakeLibrary: INSUFFICIENT_LIQUIDITY");
        uint256 amountInWithFee = amountIn.mul(9975);
        uint256 numerator = amountInWithFee.mul(reserveOut);
        uint256 denominator = reserveIn.mul(10000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

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

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

// 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, uint256 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::safeApprove: approve failed"
        );
    }

    function safeTransfer(address token, address to, uint256 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::safeTransfer: transfer failed"
        );
    }

    function safeTransferFrom(address token, address from, address to, uint256 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::transferFrom: transferFrom failed"
        );
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{ value: value }(new bytes(0));
        require(success, "TransferHelper::safeTransferETH: ETH transfer failed");
    }
}

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IWETH {
    function deposit() external payable;

    function transfer(address to, uint256 value) external returns (bool);

    function withdraw(uint256) external;
}

contract PancakeRouter is IPancakeRouter02 {
    using SafeMath for uint256;

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

    modifier ensure(uint256 deadline) {
        require(deadline >= block.timestamp, "PancakeRouter: EXPIRED");
        _;
    }

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin
    ) internal virtual returns (uint256 amountA, uint256 amountB) {
        // create the pair if it doesn't exist yet
        if (IPancakeFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IPancakeFactory(factory).createPair(tokenA, tokenB);
        }
        (uint256 reserveA, uint256 reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint256 amountBOptimal = PancakeLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, "PancakeRouter: INSUFFICIENT_B_AMOUNT");
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint256 amountAOptimal = PancakeLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, "PancakeRouter: INSUFFICIENT_A_AMOUNT");
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB, uint256 liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IPancakePair(pair).mint(to);
    }

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        virtual
        override
        ensure(deadline)
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity)
    {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = PancakeLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{ value: amountETH }();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IPancakePair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) {
        address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB);
        IPancakePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint256 amount0, uint256 amount1) = IPancakePair(pair).burn(to);
        (address token0, ) = PancakeLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, "PancakeRouter: INSUFFICIENT_A_AMOUNT");
        require(amountB >= amountBMin, "PancakeRouter: INSUFFICIENT_B_AMOUNT");
    }

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 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,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountA, uint256 amountB) {
        address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountToken, uint256 amountETH) {
        address pair = PancakeLibrary.pairFor(factory, token, WETH);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountETH) {
        address pair = PancakeLibrary.pairFor(factory, token, WETH);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token,
            liquidity,
            amountTokenMin,
            amountETHMin,
            to,
            deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint256[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = PancakeLibrary.sortTokens(input, output);
            uint256 amountOut = amounts[i + 1];
            (uint256 amount0Out, uint256 amount1Out) = input == token0
                ? (uint256(0), amountOut)
                : (amountOut, uint256(0));
            address to = i < path.length - 2 ? PancakeLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IPancakePair(PancakeLibrary.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            PancakeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, "PancakeRouter: EXCESSIVE_INPUT_AMOUNT");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            PancakeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[0] == WETH, "PancakeRouter: INVALID_PATH");
        amounts = PancakeLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT");
        IWETH(WETH).deposit{ value: amounts[0] }();
        assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[path.length - 1] == WETH, "PancakeRouter: INVALID_PATH");
        amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, "PancakeRouter: EXCESSIVE_INPUT_AMOUNT");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            PancakeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[path.length - 1] == WETH, "PancakeRouter: INVALID_PATH");
        amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            PancakeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[0] == WETH, "PancakeRouter: INVALID_PATH");
        amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, "PancakeRouter: EXCESSIVE_INPUT_AMOUNT");
        IWETH(WETH).deposit{ value: amounts[0] }();
        assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = PancakeLibrary.sortTokens(input, output);
            IPancakePair pair = IPancakePair(PancakeLibrary.pairFor(factory, input, output));
            uint256 amountInput;
            uint256 amountOutput;
            {
                // scope to avoid stack too deep errors
                (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
                (uint256 reserveInput, uint256 reserveOutput) = input == token0
                    ? (reserve0, reserve1)
                    : (reserve1, reserve0);
                amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
                amountOutput = PancakeLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint256 amount0Out, uint256 amount1Out) = input == token0
                ? (uint256(0), amountOutput)
                : (amountOutput, uint256(0));
            address to = i < path.length - 2 ? PancakeLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            PancakeLibrary.pairFor(factory, path[0], path[1]),
            amountIn
        );
        uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable virtual override ensure(deadline) {
        require(path[0] == WETH, "PancakeRouter: INVALID_PATH");
        uint256 amountIn = msg.value;
        IWETH(WETH).deposit{ value: amountIn }();
        assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
    }

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        require(path[path.length - 1] == WETH, "PancakeRouter: INVALID_PATH");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            PancakeLibrary.pairFor(factory, path[0], path[1]),
            amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint256 amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT");
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) public pure virtual override returns (uint256 amountB) {
        return PancakeLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract Security Audit

Contract ABI

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

60c06040523480156200001157600080fd5b506040516200572f3803806200572f833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6155a862000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb52806143f652806144395280614799528061497a5280614ef55280614fd6528061505652506155a86000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613ce9565b50965096945050505050565b6000610f44848484613e26565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140b0565b8560008151811061124a57fe5b602002602001015161415d565b6112968287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061432d915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613ce9565b509695505050505050565b60606113917f000000000000000000000000000000000000000000000000000000000000000084846145b4565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140b0565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b61162a868660008181106111a257fe5b6113598287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b61183d7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140b0565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a61415d565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614742915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614ad516565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614742915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613ce9565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b5095945050505050565b6000610f44848484614b47565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6126027f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614c6b565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613ce9565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614742915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140b0565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d4b565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154906024913960400191505060405180910390fd5b8986101561305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061554f6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f4a565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140b0565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614e9e565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140b0565b90506132db8d33838861415d565b6132e78c33838761415d565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614e9e565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140b0565b90506134aa8b33838861415d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613ce9565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6138867f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae68287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613ce9565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806154d7602d913960400191505060405180910390fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d6057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d23565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dc2576040519150601f19603f3d011682016040523d82523d6000602084013e613dc7565b606091505b5050905080613e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806154106034913960400191505060405180910390fd5b505050565b6000808411613e80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061538c6029913960400191505060405180910390fd5b600083118015613e905750600082115b613ee5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b6000613ef9856126f763ffffffff61519f16565b90506000613f0d828563ffffffff61519f16565b90506000613f3383613f278861271063ffffffff61519f16565b9063ffffffff61522516565b9050808281613f3e57fe5b04979650505050505050565b6060600282511015613fbd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613fd557600080fd5b50604051908082528060200260200182016040528015613fff578160200160208202803683370190505b509050828160008151811061401057fe5b60200260200101818152505060005b60018351038110156140a8576000806140628786858151811061403e57fe5b602002602001015187866001018151811061405557fe5b6020026020010151615297565b9150915061408484848151811061407557fe5b60200260200101518383613e26565b84846001018151811061409357fe5b6020908102919091010152505060010161401f565b509392505050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152915160009286169163e6a43905916044808301926020929190829003018186803b15801561412957600080fd5b505afa15801561413d573d6000803e3d6000fd5b505050506040513d602081101561415357600080fd5b5051949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061423b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016141fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461429d576040519150601f19603f3d011682016040523d82523d6000602084013e6142a2565b606091505b50915091508180156142d05750805115806142d057508080602001905160208110156142cd57600080fd5b50515b614325576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806153df6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156145ae5760008084838151811061434b57fe5b602002602001015185846001018151811061436257fe5b602002602001015191509150600061437a8383614d4b565b509050600087856001018151811061438e57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146143d6578260006143da565b6000835b91509150600060028a510388106143f15788614432565b6144327f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061442557fe5b60200260200101516140b0565b905061445f7f000000000000000000000000000000000000000000000000000000000000000088886140b0565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144a9576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561453457818101518382015260200161451c565b50505050905090810190601f1680156145615780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561458357600080fd5b505af1158015614597573d6000803e3d6000fd5b505060019099019850614330975050505050505050565b50505050565b606060028251101561462757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561463f57600080fd5b50604051908082528060200260200182016040528015614669578160200160208202803683370190505b509050828160018351038151811061467d57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140a8576000806146dd878660018603815181106146c957fe5b602002602001015187868151811061405557fe5b915091506146ff8484815181106146f057fe5b60200260200101518383614b47565b84600185038151811061470e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016146ad565b60005b6001835103811015613e215760008084838151811061476057fe5b602002602001015185846001018151811061477757fe5b602002602001015191509150600061478f8383614d4b565b50905060006147bf7f000000000000000000000000000000000000000000000000000000000000000085856140b0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561480d57600080fd5b505afa158015614821573d6000803e3d6000fd5b505050506040513d606081101561483757600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614881578284614884565b83835b91509150614909828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614916868383613e26565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461495a5782600061495e565b6000835b91509150600060028c51038a10614975578a6149a9565b6149a97f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061442557fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614a59578181015183820152602001614a41565b50505050905090810190601f168015614a865780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614aa857600080fd5b505af1158015614abc573d6000803e3d6000fd5b50506001909b019a506147459950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614ba1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806153b5602a913960400191505060405180910390fd5b600083118015614bb15750600082115b614c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b6000614c2a612710614c1e868863ffffffff61519f16565b9063ffffffff61519f16565b90506000614c446126f7614c1e868963ffffffff614ad516565b9050614c616001828481614c5457fe5b049063ffffffff61522516565b9695505050505050565b6000808411614cc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154b46023913960400191505060405180910390fd5b600083118015614cd55750600082115b614d2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b82614d3b858463ffffffff61519f16565b81614d4257fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061546d6023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e0d578284614e10565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614e9757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f3e57600080fd5b505afa158015614f52573d6000803e3d6000fd5b505050506040513d6020811015614f6857600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561504e57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561502157600080fd5b505af1158015615035573d6000803e3d6000fd5b505050506040513d602081101561504b57600080fd5b50505b60008061507c7f00000000000000000000000000000000000000000000000000000000000000008b8b615297565b9150915081600014801561508e575080155b1561509e57879350869250615192565b60006150ab898484614c6b565b9050878111615118578581101561510d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061554f6024913960400191505060405180910390fd5b889450925082615190565b6000615125898486614c6b565b90508981111561513157fe5b8781101561518a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154906024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806151ba575050808202828282816151b757fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152a68585614d4b565b5090506152b48686866140b0565b506000806152c38888886140b0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561530857600080fd5b505afa15801561531c573d6000803e3d6000fd5b505050506040513d606081101561533257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461537957808261537c565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656450616e63616b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f41444452455353455350616e63616b65526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656450616e63616b65526f757465723a204558434553534956455f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4c495155494449545950616e63616b65526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212201838952e531dedee26eeaf249aee8685cb03f74ee5973241bef2af16e6f7f97f64736f6c63430006060033000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb0000000000000000000000004200000000000000000000000000000000000006

Deployed Bytecode

0x60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000420000000000000000000000000000000000000616146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000042000000000000000000000000000000000000068a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613ce9565b50965096945050505050565b6000610f44848484613e26565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000061686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6111207f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140b0565b8560008151811061124a57fe5b602002602001015161415d565b6112968287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061432d915050565b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613ce9565b509695505050505050565b60606113917f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb84846145b4565b90505b92915050565b60008060006113ca7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8f8f6140b0565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b61162a868660008181106111a257fe5b6113598287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000061686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b61183d7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b6000806118fa7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8d7f00000000000000000000000042000000000000000000000000000000000000066140b0565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a61415d565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614742915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614ad516565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000061685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614742915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000420000000000000000000000000000000000000616916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613ce9565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb34888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b5095945050505050565b6000610f44848484614b47565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6126027f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000681565b6000610f44848484614c6b565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000042000000000000000000000000000000000000068989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613ce9565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614742915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6000612e057f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8c8c6140b0565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d4b565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154906024913960400191505060405180910390fd5b8986101561305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061554f6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb81565b60606113917f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8484613f4a565b60008060006131107f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8e7f00000000000000000000000042000000000000000000000000000000000000066140b0565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614e9e565b909450925060006132cd7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8e8e6140b0565b90506132db8d33838861415d565b6132e78c33838761415d565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000042000000000000000000000000000000000000068b348c8c614e9e565b9094509250600061349c7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8c7f00000000000000000000000042000000000000000000000000000000000000066140b0565b90506134aa8b33838861415d565b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613ce9565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6138867f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae68287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613ce9565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806154d7602d913960400191505060405180910390fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d6057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d23565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dc2576040519150601f19603f3d011682016040523d82523d6000602084013e613dc7565b606091505b5050905080613e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806154106034913960400191505060405180910390fd5b505050565b6000808411613e80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061538c6029913960400191505060405180910390fd5b600083118015613e905750600082115b613ee5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b6000613ef9856126f763ffffffff61519f16565b90506000613f0d828563ffffffff61519f16565b90506000613f3383613f278861271063ffffffff61519f16565b9063ffffffff61522516565b9050808281613f3e57fe5b04979650505050505050565b6060600282511015613fbd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613fd557600080fd5b50604051908082528060200260200182016040528015613fff578160200160208202803683370190505b509050828160008151811061401057fe5b60200260200101818152505060005b60018351038110156140a8576000806140628786858151811061403e57fe5b602002602001015187866001018151811061405557fe5b6020026020010151615297565b9150915061408484848151811061407557fe5b60200260200101518383613e26565b84846001018151811061409357fe5b6020908102919091010152505060010161401f565b509392505050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152915160009286169163e6a43905916044808301926020929190829003018186803b15801561412957600080fd5b505afa15801561413d573d6000803e3d6000fd5b505050506040513d602081101561415357600080fd5b5051949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061423b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016141fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461429d576040519150601f19603f3d011682016040523d82523d6000602084013e6142a2565b606091505b50915091508180156142d05750805115806142d057508080602001905160208110156142cd57600080fd5b50515b614325576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806153df6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156145ae5760008084838151811061434b57fe5b602002602001015185846001018151811061436257fe5b602002602001015191509150600061437a8383614d4b565b509050600087856001018151811061438e57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146143d6578260006143da565b6000835b91509150600060028a510388106143f15788614432565b6144327f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb878c8b6002018151811061442557fe5b60200260200101516140b0565b905061445f7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb88886140b0565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144a9576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561453457818101518382015260200161451c565b50505050905090810190601f1680156145615780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561458357600080fd5b505af1158015614597573d6000803e3d6000fd5b505060019099019850614330975050505050505050565b50505050565b606060028251101561462757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561463f57600080fd5b50604051908082528060200260200182016040528015614669578160200160208202803683370190505b509050828160018351038151811061467d57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140a8576000806146dd878660018603815181106146c957fe5b602002602001015187868151811061405557fe5b915091506146ff8484815181106146f057fe5b60200260200101518383614b47565b84600185038151811061470e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016146ad565b60005b6001835103811015613e215760008084838151811061476057fe5b602002602001015185846001018151811061477757fe5b602002602001015191509150600061478f8383614d4b565b50905060006147bf7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb85856140b0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561480d57600080fd5b505afa158015614821573d6000803e3d6000fd5b505050506040513d606081101561483757600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614881578284614884565b83835b91509150614909828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614916868383613e26565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461495a5782600061495e565b6000835b91509150600060028c51038a10614975578a6149a9565b6149a97f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb898e8d6002018151811061442557fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614a59578181015183820152602001614a41565b50505050905090810190601f168015614a865780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614aa857600080fd5b505af1158015614abc573d6000803e3d6000fd5b50506001909b019a506147459950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614ba1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806153b5602a913960400191505060405180910390fd5b600083118015614bb15750600082115b614c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b6000614c2a612710614c1e868863ffffffff61519f16565b9063ffffffff61519f16565b90506000614c446126f7614c1e868963ffffffff614ad516565b9050614c616001828481614c5457fe5b049063ffffffff61522516565b9695505050505050565b6000808411614cc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154b46023913960400191505060405180910390fd5b600083118015614cd55750600082115b614d2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b82614d3b858463ffffffff61519f16565b81614d4257fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061546d6023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e0d578284614e10565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614e9757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb9092169163e6a4390591604480820192602092909190829003018186803b158015614f3e57600080fd5b505afa158015614f52573d6000803e3d6000fd5b505050506040513d6020811015614f6857600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561504e57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb9092169163c9c65396916044808201926020929091908290030181600087803b15801561502157600080fd5b505af1158015615035573d6000803e3d6000fd5b505050506040513d602081101561504b57600080fd5b50505b60008061507c7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8b8b615297565b9150915081600014801561508e575080155b1561509e57879350869250615192565b60006150ab898484614c6b565b9050878111615118578581101561510d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061554f6024913960400191505060405180910390fd5b889450925082615190565b6000615125898486614c6b565b90508981111561513157fe5b8781101561518a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154906024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806151ba575050808202828282816151b757fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152a68585614d4b565b5090506152b48686866140b0565b506000806152c38888886140b0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561530857600080fd5b505afa15801561531c573d6000803e3d6000fd5b505050506040513d606081101561533257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461537957808261537c565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656450616e63616b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f41444452455353455350616e63616b65526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656450616e63616b65526f757465723a204558434553534956455f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4c495155494449545950616e63616b65526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212201838952e531dedee26eeaf249aee8685cb03f74ee5973241bef2af16e6f7f97f64736f6c63430006060033

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

000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb0000000000000000000000004200000000000000000000000000000000000006

-----Decoded View---------------
Arg [0] : _factory (address): 0xFDa619b6d20975be80A10332cD39b9a4b0FAa8BB
Arg [1] : _WETH (address): 0x4200000000000000000000000000000000000006

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb
Arg [1] : 0000000000000000000000004200000000000000000000000000000000000006


Deployed ByteCode Sourcemap

16572:19139:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17052:10;:18;17066:4;17052:18;;17045:26;;;;16572:19139;;12:1:-1;9;2:12;21335:691:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21335:691:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21335:691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34709:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34709:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34709:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28792:895;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28792:895:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28792:895:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28792:895:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28792:895:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28792:895:0;;-1:-1:-1;28792:895:0;-1:-1:-1;28792:895: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;28792:895:0;;;;;;;;;;;;;;;;;35476:232;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35476:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35476:232:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35476:232:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35476:232:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35476:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35476:232:0;;-1:-1:-1;35476:232:0;;-1:-1:-1;;;;;35476:232:0:i;22034:724::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22034:724:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22034:724:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25879:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25879:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25879:673:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25879:673:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25879:673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25879:673:0;;-1:-1:-1;25879:673:0;-1:-1:-1;25879:673:0;;;;;;;;;:::i;27911:873::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27911:873:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27911:873:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27911:873:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27911:873:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27911:873:0;;-1:-1:-1;27911:873:0;-1:-1:-1;27911:873:0;;;;;;;;;:::i;24182:827::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24182:827:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24182:827:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31993:761::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31993:761:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31993:761:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31993:761:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31993:761:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31993:761:0;;-1:-1:-1;31993:761:0;-1:-1:-1;31993:761:0;;;;;;;;;:::i;33578:847::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33578:847:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33578:847:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33578:847:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33578:847:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33578:847:0;;-1:-1:-1;33578:847:0;-1:-1:-1;33578:847:0;;;;;;;;;:::i;27219:684::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27219:684:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27219:684:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27219:684:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27219:684:0;;-1:-1:-1;27219:684:0;-1:-1:-1;27219:684:0;;;;;;;;;:::i;34973:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34973:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34973:255:0;;;;;;;;;;;;:::i;26560:651::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26560:651:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26560:651:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26560:651:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26560:651:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26560:651:0;;-1:-1:-1;26560:651:0;-1:-1:-1;26560:651:0;;;;;;;;;:::i;16705:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16705:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34469:232;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34469:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34469:232:0;;;;;;;;;;;;:::i;23561:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23561:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23561:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32762:808::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32762:808:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32762:808:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32762:808:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32762:808:0;;-1:-1:-1;32762:808:0;-1:-1:-1;32762:808:0;;;;;;;;;:::i;20449:878::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20449:878:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20449:878:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16657:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16657:41:0;;;:::i;35236:232::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35236:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35236:232:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35236:232:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35236:232:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35236:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35236:232:0;;-1:-1:-1;35236:232:0;;-1:-1:-1;;;;;35236:232:0:i;22766:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22766:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22766:716:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18588:758::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18588:758:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18588:758:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19354:1052;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19354:1052:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29695:797::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29695:797:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29695:797:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29695:797:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29695:797:0;;-1:-1:-1;29695:797:0;-1:-1:-1;29695:797:0;;;;;;;;;:::i;21335:691::-;21584:19;21605:17;21565:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21662:196:::1;21692:5;21712:4;21731:9;21755:14;21784:12;21819:4;21839:8;21662:15;:196::i;:::-;21635:223:::0;;-1:-1:-1;21635:223:0;-1:-1:-1;21869:51:0::1;21897:5:::0;21904:2;21635:223;21869:27:::1;:51::i;:::-;21937:4;21931:20;;;21952:9;21931:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21931:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21931:31:0;;;;21973:45;22004:2;22008:9;21973:30;:45::i;:::-;21335:691:::0;;;;;;;;;;:::o;34709:256::-;34860:17;34897:60;34925:8;34935:9;34946:10;34897:27;:60::i;:::-;34890:67;34709:256;-1:-1:-1;;;;34709:256:0:o;28792:895::-;29022:24;29003:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29067:29:::1;29092:4;29067:29;:4:::0;;29072:15;;;29067:21;;::::1;;;;;;;;;;;;;:29;;;29059:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29149:53;29178:7;29187:8;29197:4;;29149:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29149:28:0::1;::::0;-1:-1:-1;;;29149:53:0:i:1;:::-;29139:63;;29252:12;29221:7;29246:1;29229:7;:14;:18;29221:27;;;;;;;;;;;;;;:43;;29213:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29321:178;29367:4;;29372:1;29367:7;;;;;;;;;;;;;;;29389:10;29414:49;29437:7;29446:4;;29451:1;29446:7;;;;;;;;;;;;;;;29455:4;;29460:1;29455:7;;;;;;;;;;;;;;;29414:22;:49::i;:::-;29478:7;29486:1;29478:10;;;;;;;;;;;;;;29321:31;:178::i;:::-;29510:35;29516:7;29525:4;;29510:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29539:4:0::1;::::0;-1:-1:-1;29510:5:0::1;::::0;-1:-1:-1;;29510:35:0:i:1;:::-;29562:4;29556:20;;;29577:7;29602:1;29585:7;:14;:18;29577:27;;;;;;;;;;;;;;29556:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29556:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29556:49:0;;;;29616:63;29647:2;29651:7;29676:1;29659:7;:14;:18;29651:27;;;;;;;;;;;;;;29616:30;:63::i;:::-;28792:895:::0;;;;;;;;;:::o;35476:232::-;35603:24;35647:53;35675:7;35684:9;35695:4;35647:27;:53::i;:::-;35640:60;;35476:232;;;;;:::o;22034:724::-;22379:15;22396;22424:12;22439:47;22462:7;22471:6;22479;22439:22;:47::i;:::-;22424:62;;22497:13;22513:10;:36;;22540:9;22513:36;;;22534:2;22513:36;22560:78;;;;;;22586:10;22560:78;;;;22606:4;22560:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22497:52;;-1:-1:-1;22560:25:0;;;;;;:78;;;;;-1:-1:-1;;22560:78:0;;;;;;;;-1:-1:-1;22560:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22560:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22560:78:0;;;;22670:80;22686:6;22694;22702:9;22713:10;22725;22737:2;22741:8;22670:15;:80::i;:::-;22649:101;;;;;;;;22034:724;;;;;;;;;;;;;;;;:::o;25879:673::-;26112:24;26093:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26159:53:::1;26188:7;26197:8;26207:4;;26159:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26159:28:0::1;::::0;-1:-1:-1;;;26159:53:0:i:1;:::-;26149:63;;26262:12;26231:7;26256:1;26239:7;:14;:18;26231:27;;;;;;;;;;;;;;:43;;26223:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26331:178;26377:4;;26382:1;26377:7;;;;;;26331:178;26520:24;26526:7;26535:4;;26520:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26541:2:0;;-1:-1:-1;26520:5:0::1;::::0;-1:-1:-1;;26520:24:0:i:1;27911:873::-:0;28141:24;28122:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28186:29:::1;28211:4;28186:29;:4:::0;;28191:15;;;28186:21;;::::1;;;;;;;;;;;;;:29;;;28178:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28268:53;28296:7;28305:9;28316:4;;28268:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28268:27:0::1;::::0;-1:-1:-1;;;28268:53:0:i:1;:::-;28258:63;;28354:11;28340:7;28348:1;28340:10;;;;;;;;;;;;;;:25;;28332:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24182:827:::0;24539:17;24569:12;24584:44;24607:7;24616:5;24623:4;24584:22;:44::i;:::-;24569:59;;24639:13;24655:10;:36;;24682:9;24655:36;;;24676:2;24655:36;24702:78;;;;;;24728:10;24702:78;;;;24748:4;24702:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24639:52;;-1:-1:-1;24702:25:0;;;;;;:78;;;;;-1:-1:-1;;24702:78:0;;;;;;;;-1:-1:-1;24702:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;24702:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24702:78:0;;;;24803:198;24865:5;24885:9;24909:14;24938:12;24965:2;24982:8;24803:47;:198::i;:::-;24791:210;24182:827;-1:-1:-1;;;;;;;;;;;;;24182:827:0:o;31993:761::-;32236:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32257:176:::1;32303:4;;32308:1;32303:7;;;;;;;;;;;;;;;32325:10;32350:49;32373:7;32382:4;;32387:1;32382:7;;;;;;;;;;;;;;;32391:4;;32396:1;32391:7;;;;;;32350:49;32414:8;32257:31;:176::i;:::-;32444:21;32475:4:::0;;32480:15;;;32475:21;;::::1;;;;;;;;;;;;;32468:39;;;32508:2;32468:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32468:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32468:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32468:43:0;32522:44:::1;::::0;;32468:43:::1;32522:44:::0;;::::1;::::0;;;;;;;;;;;32468:43;;-1:-1:-1;32522:44:0::1;::::0;;;32557:4;;;;;;32522:44;::::1;::::0;32557:4;;32522:44;32557:4;32522:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32563:2:0;;-1:-1:-1;32522:34:0::1;::::0;-1:-1:-1;;32522:44:0:i:1;:::-;32665:12:::0;32599:62:::1;32647:13:::0;32606:4;;32611:15;;;32606:21;;::::1;;;;;;;;;;;;;32599:39;;;32639:2;32599:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32599:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32599:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32599:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;32577:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16870:1;31993:761:::0;;;;;;;:::o;33578:847::-;33818:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33847:29:::1;33872:4;33847:29;:4:::0;;33852:15;;;33847:21;;::::1;;;;;;;;;;;;;:29;;;33839:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33919:176;33965:4;;33970:1;33965:7;;;;;;33919:176;34106:55;34141:4;;34106:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34155:4:0::1;::::0;-1:-1:-1;34106:34:0::1;::::0;-1:-1:-1;;34106:55:0:i:1;:::-;34192:37;::::0;;;;;34223:4:::1;34192:37;::::0;::::1;::::0;;;34172:17:::1;::::0;34192:22:::1;34199:4;34192:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;34192:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34192:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34192:37:0;;-1:-1:-1;34248:25:0;;::::1;;34240:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34336:4;34330:20;;;34351:9;34330:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34330:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34330:31:0;;;;34372:45;34403:2;34407:9;34372:30;:45::i;27219:684::-:0;27430:24;27411:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27486:4:::1;27475:15;;:4;;27480:1;27475:7;;;;;;;;;;;;;;;:15;;;27467:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27543:54;27572:7;27581:9;27592:4;;27543:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27543:28:0::1;::::0;-1:-1:-1;;;27543:54:0:i:1;:::-;27533:64;;27647:12;27616:7;27641:1;27624:7;:14;:18;27616:27;;;;;;;;;;;;;;:43;;27608:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27722:4;27716:19;;;27744:7;27752:1;27744:10;;;;;;;;;;;;;;27716:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27716:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27716:42:0;;;;;27782:4;27776:20;;;27797:49;27820:7;27829:4;;27834:1;27829:7;;;;;;27797:49;27848:7;27856:1;27848:10;;;;;;;;;;;;;;27776:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27776:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27776:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27776:83:0;27769:91:::1;;;;27871:24;27877:7;27886:4;;27871:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27892:2:0;;-1:-1:-1;27871:5:0::1;::::0;-1:-1:-1;;27871:24:0:i:1;:::-;27219:684:::0;;;;;;;;:::o;34973:255::-;35124:16;35160:60;35187:9;35198;35209:10;35160:26;:60::i;26560:651::-;26793:24;26774:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26840:53:::1;26868:7;26877:9;26888:4;;26840:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26840:27:0::1;::::0;-1:-1:-1;;;26840:53:0:i:1;:::-;26830:63;;26926:11;26912:7;26920:1;26912:10;;;;;;;;;;;;;;:25;;26904:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16705:38:::0;;;:::o;34469:232::-;34609:15;34644:49;34665:7;34674:8;34684;34644:20;:49::i;23561:613::-;23839:17;23820:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23885:94:::1;23901:5;23908:4;23914:9;23925:14;23941:12;23963:4;23970:8;23885:15;:94::i;:::-;24029:38;::::0;;;;;24061:4:::1;24029:38;::::0;::::1;::::0;;;23869:110;;-1:-1:-1;23990:78:0::1;::::0;-1:-1:-1;24018:5:0;;24025:2;;24029:23:::1;::::0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24029:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24029:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24029:38:0;23990:27:::1;:78::i;:::-;24085:4;24079:20;;;24100:9;24079:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24079:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24079:31:0;;;;24121:45;24152:2;24156:9;24121:30;:45::i;32762:808::-:0;32983:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33023:4:::1;33012:15;;:4;;33017:1;33012:7;;;;;;;;;;;;;;;:15;;;33004:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33070:16;33089:9;33070:28;;33115:4;33109:19;;;33137:8;33109:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33109:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33109:40:0;;;;;33173:4;33167:20;;;33188:49;33211:7;33220:4;;33225:1;33220:7;;;;;;33188:49;33239:8;33167:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33167:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33167:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33167:81:0;33160:89:::1;;;;33260:21;33291:4:::0;;33296:15;;;33291:21;;::::1;;;;;;;;;;;;;33284:39;;;33324:2;33284:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33284:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33284:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33284:43:0;33338:44:::1;::::0;;33284:43:::1;33338:44:::0;;::::1;::::0;;;;;;;;;;;33284:43;;-1:-1:-1;33338:44:0::1;::::0;;;33373:4;;;;;;33338:44;::::1;::::0;33373:4;;33338:44;33373:4;33338:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33379:2:0;;-1:-1:-1;33338:34:0::1;::::0;-1:-1:-1;;33338:44:0:i:1;:::-;33481:12:::0;33415:62:::1;33463:13:::0;33422:4;;33427:15;;;33422:21;;::::1;;;;;;;;;;;;;33415:39;;;33455:2;33415:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20449:878:0::0;20715:15;20732;20696:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20760:12:::1;20775:47;20798:7;20807:6;20815;20775:22;:47::i;:::-;20833:60;::::0;;;;;20865:10:::1;20833:60;::::0;::::1;::::0;:31:::1;::::0;::::1;:60:::0;;;;;;;;;;;;;;20760:62;;-1:-1:-1;20833:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20833:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20833:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20833:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20967:27:0::1;::::0;;;;;:23:::1;:27:::0;;::::1;;::::0;::::1;::::0;;;20931:15:::1;::::0;;;20967:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;20931:15;20967:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20967:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20967:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20967:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20967:27:0;-1:-1:-1;21006:14:0::1;21026:41;21052:6:::0;21060;21026:25:::1;:41::i;:::-;21005:62;;;21109:6;21099:16;;:6;:16;;;:58;;21140:7;21149;21099:58;;;21119:7;21128;21099:58;21078:79:::0;;-1:-1:-1;21078:79:0;-1:-1:-1;21176:21:0;;::::1;;21168:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21268:10;21257:7;:21;;21249:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16870:1;;;;20449:878:::0;;;;;;;;;;;:::o;16657:41::-;;;:::o;35236:232::-;35363:24;35407:53;35436:7;35445:8;35455:4;35407:28;:53::i;22766:716::-;23094:19;23115:17;23145:12;23160:44;23183:7;23192:5;23199:4;23160:22;:44::i;:::-;23145:59;;23215:13;23231:10;:36;;23258:9;23231:36;;;23252:2;23231:36;23278:78;;;;;;23304:10;23278:78;;;;23324:4;23278:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23215:52;;-1:-1:-1;23278:25:0;;;;;;:78;;;;;-1:-1:-1;;23278:78:0;;;;;;;;-1:-1:-1;23278:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23278:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23278:78:0;;;;23394:80;23413:5;23420:9;23431:14;23447:12;23461:2;23465:8;23394:18;:80::i;:::-;23367:107;;;;-1:-1:-1;22766:716:0;-1:-1:-1;;;;;;;;;;;;;22766:716:0:o;18588:758::-;18891:15;18908;18925:17;18872:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18976:85:::1;18990:6;18998;19006:14;19022;19038:10;19050;18976:13;:85::i;:::-;18955:106:::0;;-1:-1:-1;18955:106:0;-1:-1:-1;19072:12:0::1;19087:47;19110:7;19119:6:::0;19127;19087:22:::1;:47::i;:::-;19072:62;;19145:66;19177:6;19185:10;19197:4;19203:7;19145:31;:66::i;:::-;19222;19254:6;19262:10;19274:4;19280:7;19222:31;:66::i;:::-;19324:4;19311:23;;;19335:2;19311:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19311:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19311:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19311:27:0;18588:758;;;;-1:-1:-1;19311:27:0;;-1:-1:-1;18588:758:0;;-1:-1:-1;;;;;;;;;18588:758:0:o;19354:1052::-;19673:19;19694:17;19713;19645:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19775:176:::1;19803:5;19823:4;19842:18;19875:9;19899:14;19928:12;19775:13;:176::i;:::-;19748:203:::0;;-1:-1:-1;19748:203:0;-1:-1:-1;19962:12:0::1;19977:44;20000:7;20009:5:::0;20016:4:::1;19977:22;:44::i;:::-;19962:59;;20032:69;20064:5;20071:10;20083:4;20089:11;20032:31;:69::i;:::-;20118:4;20112:19;;;20140:9;20112:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20112:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20112:41:0;;;;;20177:4;20171:20;;;20192:4;20198:9;20171:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20171:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20171:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20171:37:0;20164:45:::1;;;;20245:4;20232:23;;;20256:2;20232:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20232:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20232:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20232:27:0;;-1:-1:-1;20310:9:0::1;:21:::0;-1:-1:-1;20306:92:0::1;;;20333:65;20364:10;20388:9;20376;:21;20333:30;:65::i;:::-;16870:1;19354:1052:::0;;;;;;;;;;;:::o;29695:797::-;29903:24;29884:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29959:4:::1;29948:15;;:4;;29953:1;29948:7;;;;;;;;;;;;;;;:15;;;29940:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30016:53;30044:7;30053:9;30064:4;;30016:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30016:27:0::1;::::0;-1:-1:-1;;;30016:53:0:i:1;:::-;30006:63;;30102:9;30088:7;30096:1;30088:10;;;;;;;;;;;;;;:23;;30080:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30170:4;30164:19;;;30192:7;30200:1;30192:10;;;;;;;;;;;;;;30164:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30164:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30164:42:0;;;;;30230:4;30224:20;;;30245:49;30268:7;30277:4;;30282:1;30277:7;;;;;;30245:49;30296:7;30304:1;30296:10;;;;;;;;;;;;;;30224:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30224:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30224:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30224:83:0;30217:91:::1;;;;30319:24;30325:7;30334:4;;30319:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30340:2:0;;-1:-1:-1;30319:5:0::1;::::0;-1:-1:-1;;30319:24:0:i:1;:::-;30406:7;30414:1;30406:10;;;;;;;;;;;;;;30394:9;:22;30390:94;;;30418:66;30449:10;30473:7;30481:1;30473:10;;;;;;;;;;;;;;30461:9;:22;30418:30;:66::i;14421:415::-:0;14619:45;;;14608:10;14619:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14619:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;14619:45:0;179:29:-1;160:49;;14608:57:0;;;;14573:12;;14587:17;;14608:10;;;;14619:45;14608:57;;;25:18:-1;14608:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14608: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;;14572:93:0;;;;14698:7;:57;;;;-1:-1:-1;14710:11:0;;:16;;:44;;;14741:4;14730:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14730:24:0;14710:44;14676:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14421:415;;;;;:::o;15307:219::-;15422:12;;;15380;15422;;;;;;;;;15398:7;;;;15414:5;;15398:37;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;15398:37: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;;15379:56:0;;;15454:7;15446:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15307:219;;;:::o;11334:570::-;11470:17;11519:1;11508:8;:12;11500:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11597:1;11585:9;:13;:31;;;;;11615:1;11602:10;:14;11585:31;11577:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11670:23;11696:18;:8;11709:4;11696:18;:12;:18;:::i;:::-;11670:44;-1:-1:-1;11725:17:0;11745:31;11670:44;11765:10;11745:31;:19;:31;:::i;:::-;11725:51;-1:-1:-1;11787:19:0;11809:41;11834:15;11809:20;:9;11823:5;11809:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;11787:63;;11885:11;11873:9;:23;;;;;;;11334:570;-1:-1:-1;;;;;;;11334:570:0:o;12629:561::-;12767:24;12827:1;12812:4;:11;:16;;12804:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12896:4;:11;12882:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12882:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12882:26:0;;12872:36;;12932:8;12919:7;12927:1;12919:10;;;;;;;;;;;;;:21;;;;;12956:9;12951:232;12985:1;12971:4;:11;:15;12967:1;:19;12951:232;;;13009:17;13028:18;13050:42;13062:7;13071:4;13076:1;13071:7;;;;;;;;;;;;;;13080:4;13085:1;13089;13085:5;13080:11;;;;;;;;;;;;;;13050;:42::i;:::-;13008:84;;;;13124:47;13137:7;13145:1;13137:10;;;;;;;;;;;;;;13149:9;13160:10;13124:12;:47::i;:::-;13107:7;13115:1;13119;13115:5;13107:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;12988:3:0;;12951:232;;;;12629:561;;;;;:::o;10055:177::-;10176:48;;;;;;:32;:48;;;;;;;;;;;;;;;;10144:12;;10176:32;;;;;:48;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;10176:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10176:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10176:48:0;;10055:177;-1:-1:-1;;;;10055:177:0:o;14844:455::-;15072:51;;;15061:10;15072:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15072:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;15072:51:0;179:29:-1;160:49;;15061:63:0;;;;15026:12;;15040:17;;15061:10;;;;15072:51;15061:63;;;25:18:-1;15061:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;15061: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;;15025:99:0;;;;15157:7;:57;;;;-1:-1:-1;15169:11:0;;:16;;:44;;;15200:4;15189:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15189:24:0;15169:44;15135:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14844:455;;;;;;:::o;25120:751::-;25230:9;25225:639;25259:1;25245:4;:11;:15;25241:1;:19;25225:639;;;25283:13;25298:14;25317:4;25322:1;25317:7;;;;;;;;;;;;;;25326:4;25331:1;25335;25331:5;25326:11;;;;;;;;;;;;;;25282:56;;;;25354:14;25374:40;25400:5;25407:6;25374:25;:40::i;:::-;25353:61;;;25429:17;25449:7;25457:1;25461;25457:5;25449:14;;;;;;;;;;;;;;25429:34;;25479:18;25499;25530:6;25521:15;;:5;:15;;;:101;;25600:9;25619:1;25521:101;;;25565:1;25569:9;25521:101;25478:144;;;;25637:10;25668:1;25654:4;:11;:15;25650:1;:19;:80;;25727:3;25650:80;;;25672:52;25695:7;25704:6;25712:4;25717:1;25721;25717:5;25712:11;;;;;;;;;;;;;;25672:22;:52::i;:::-;25637:93;;25758:46;25781:7;25790:5;25797:6;25758:22;:46::i;:::-;25745:65;;;25811:10;25823;25835:2;25849:1;25839:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25839:12:0;87:42:-1;143:17;;-1:-1;25839:12:0;;25745:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;25745:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25745:107:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25262:3:0;;;;;-1:-1:-1;25225:639:0;;-1:-1:-1;;;;;;;;25225:639:0;;;25120:751;;;:::o;13271:582::-;13409:24;13469:1;13454:4;:11;:16;;13446:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13538:4;:11;13524:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13524:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13524:26:0;;13514:36;;13591:9;13561:7;13586:1;13569:7;:14;:18;13561:27;;;;;;;;;;;;;;;;;:39;13628:11;;:15;;13611:235;13645:5;;13611:235;;13673:17;13692:18;13714:42;13726:7;13735:4;13744:1;13740;:5;13735:11;;;;;;;;;;;;;;13748:4;13753:1;13748:7;;;;;;;13714:42;13672:84;;;;13788:46;13800:7;13808:1;13800:10;;;;;;;;;;;;;;13812:9;13823:10;13788:11;:46::i;:::-;13771:7;13783:1;13779;:5;13771:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;13652:3:0;;13611:235;;30639:1346;30752:9;30747:1231;30781:1;30767:4;:11;:15;30763:1;:19;30747:1231;;;30805:13;30820:14;30839:4;30844:1;30839:7;;;;;;;;;;;;;;30848:4;30853:1;30857;30853:5;30848:11;;;;;;;;;;;;;;30804:56;;;;30876:14;30896:40;30922:5;30929:6;30896:25;:40::i;:::-;30875:61;;;30951:17;30984:46;31007:7;31016:5;31023:6;30984:22;:46::i;:::-;30951:80;;31046:19;31080:20;31192:16;31210;31232:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31232:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31232:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31232:18:0;;;;;;;31191:59;;;;;-1:-1:-1;31191:59:0;;-1:-1:-1;31270:20:0;;31317:15;;;;;;;;:103;;31401:8;31411;31317:103;;;31357:8;31367;31317:103;31269:151;;;;31453:56;31496:12;31460:5;31453:23;;;31485:4;31453:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;31453:56:0;31439:70;;31543:69;31571:11;31584:12;31598:13;31543:27;:69::i;:::-;31528:84;;30747:1231;;;;31643:18;31663;31694:6;31685:15;;:5;:15;;;:107;;31767:12;31789:1;31685:107;;;31729:1;31733:12;31685:107;31642:150;;;;31807:10;31838:1;31824:4;:11;:15;31820:1;:19;:80;;31897:3;31820:80;;;31842:52;31865:7;31874:6;31882:4;31887:1;31891;31887:5;31882:11;;;;;;;31842:52;31953:12;;;31963:1;31953:12;;;;;;;;;;31915:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;31807:93;;-1:-1:-1;31915:9:0;;;;;;31925:10;;31937;;31807:93;;31953:12;;31915:51;;;;;;;;31953:12;;31915:51;;;;31953: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;31915:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31915:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30784:3:0;;;;;-1:-1:-1;30747:1231:0;;-1:-1:-1;;;;;;;;;;30747:1231:0;9148:138;9241:5;;;9236:16;;;;9228:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12025:522;12161:16;12210:1;12198:9;:13;12190:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12289:1;12277:9;:13;:31;;;;;12307:1;12294:10;:14;12277:31;12269:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12362:17;12382:35;12411:5;12382:24;:9;12396;12382:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;12362:55;-1:-1:-1;12428:19:0;12450:35;12480:4;12450:25;:10;12465:9;12450:25;:14;:25;:::i;:35::-;12428:57;;12507:32;12537:1;12520:11;12508:9;:23;;;;;;;12507:32;:29;:32;:::i;:::-;12496:43;12025:522;-1:-1:-1;;;;;;12025:522:0:o;10883:329::-;10974:15;11020:1;11010:7;:11;11002:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11091:1;11080:8;:12;:28;;;;;11107:1;11096:8;:12;11080:28;11072:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11196:8;11172:21;:7;11184:8;11172:21;:11;:21;:::i;:::-;:32;;;;;;;10883:329;-1:-1:-1;;;;10883:329:0:o;9618:345::-;9693:14;9709;9754:6;9744:16;;:6;:16;;;;9736:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9839:6;9830:15;;:6;:15;;;:53;;9868:6;9876;9830:53;;;9849:6;9857;9830:53;9811:72;;-1:-1:-1;9811:72:0;-1:-1:-1;9902:20:0;;;9894:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9618:345;;;;;:::o;17174:1406::-;17505:48;;;;;;:62;:48;;;;;;;;;;;;;;;;17404:15;;;;;;17521:7;17505:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;17505:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17505:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17505:48:0;:62;;;17501:146;;;17584:51;;;;;;:35;:51;;;;;;;;;;;;;;;;17600:7;17584:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;17584:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;17584:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17584:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17501:146:0;17658:16;17676;17696:51;17723:7;17732:6;17740;17696:26;:51::i;:::-;17657:90;;;;17762:8;17774:1;17762:13;:30;;;;-1:-1:-1;17779:13:0;;17762:30;17758:815;;;17831:14;;-1:-1:-1;17847:14:0;;-1:-1:-1;17758:815:0;;;17895:22;17920:56;17941:14;17957:8;17967;17920:20;:56::i;:::-;17895:81;;18013:14;17995;:32;17991:571;;18074:10;18056:14;:28;;18048:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18166:14;;-1:-1:-1;18182:14:0;-1:-1:-1;18182:14:0;17991:571;;;18238:22;18263:56;18284:14;18300:8;18310;18263:20;:56::i;:::-;18238:81;;18363:14;18345;:32;;18338:40;;;;18423:10;18405:14;:28;;18397:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18515:14;-1:-1:-1;18531:14:0;;-1:-1:-1;17991:571:0;17758:815;;17174:1406;;;;;;;;;;;:::o;9294:151::-;9352:9;9382:6;;;:30;;-1:-1:-1;;9397:5:0;;;9411:1;9406;9397:5;9406:1;9392:15;;;;;:20;9382:30;9374:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9003:137;9096:5;;;9091:16;;;;9083:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10290:480;10417:16;10435;10465:14;10485:26;10496:6;10504;10485:10;:26::i;:::-;10464:47;;;10522:32;10530:7;10539:6;10547;10522:7;:32::i;:::-;;10566:16;10584;10619:32;10627:7;10636:6;10644;10619:7;:32::i;:::-;10606:58;;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10606:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10606:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10606:60:0;;;;;;;10565:101;;;;;-1:-1:-1;10565:101:0;;-1:-1:-1;10700:16:0;;;;;;;;:62;;10743:8;10753;10700:62;;;10720:8;10730;10700:62;10677:85;;;;-1:-1:-1;10290:480:0;-1:-1:-1;;;;;;;10290:480:0:o

Swarm Source

ipfs://1838952e531dedee26eeaf249aee8685cb03f74ee5973241bef2af16e6f7f97f
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.