Contract 0x7dae51bd3e3376b8c7c4900e9107f12be3af1ba8

Mdex 
 
Txn Hash
Block
From
To
Value [Txn Fee]
0xa5b3752580f39ca3287dcd935a991cd6508150023590cb0d972619b84a39036f(pending)2021-05-08 4:25:351 sec ago0xf95758fab903ab726ea3be6159b6fc0bb09f1a4e IN 0x7dae51bd3e3376b8c7c4900e9107f12be3af1ba80 BNB(Pending)
0xc952cb472175c5db9e21083d99e05010de39b03ddd35a47fdb19df33ff1484f472326732021-05-08 4:25:2610 secs ago0xf95758fab903ab726ea3be6159b6fc0bb09f1a4e IN  Mdex: Router0 BNB0.003372075
0x54c93d6a311be3708349e84588742302b08459e7c00eed804e9fbb71ad2c59ef72326722021-05-08 4:25:2313 secs ago0xd9370487e63c5aea5849a2099c7dedac7c7946da IN  Mdex: Router0 BNB0.0012819717
0x2a0da0740b0fd1128c42932e47457aa21f8b01326cb794b7e6fd5a5b364367fa72326692021-05-08 4:25:1422 secs ago0x35e205966f4a94e2dec3cd563e94f84a200896a9 IN  Mdex: Router0 BNB0.0009651903
0xc6ca0eafc81004882fbbc9d36b88da3f99e77d07a3cbf6f14a80876129fb80ac72326662021-05-08 4:25:0531 secs ago0x2d3cee08b80d7daf268072ce4adcfa4fd1b41a92 IN  Mdex: Router0 BNB0.001061225
0x87cab2493c28465a2a3c572d803bbcd286f843f36da25fff2cb3c7187779aa9372326642021-05-08 4:24:5937 secs ago0xfd7b727d3cbed41e0da491154d485b29f2dcca50 IN  Mdex: Router3.148076491138681 BNB0.0012565125
0x3be2188fd74d68969ee0a112b27d0386d5d9c95f59a41322c93624b8d535369572326632021-05-08 4:24:5640 secs ago0x22b1de00d32059ae1944c10c755e90d39cc56373 IN  Mdex: Router0 BNB0.0014373177
0xed3d0ab0ab8ca6346b1eb89e59f5e3eef25ac6c56857da8e6fa5267f488abc7a72326582021-05-08 4:24:4155 secs ago0x14f865e9eddd1e51fff2b381e6c66746e3aa68c8 IN  Mdex: Router0 BNB0.00173635
0x46c8d1c8cf68020f3a0f944d182ed5ab8713723856c45c54f98343c6be39922472326562021-05-08 4:24:351 min ago0xf95758fab903ab726ea3be6159b6fc0bb09f1a4e IN  Mdex: Router0 BNB0.00373347
0xc3680f0dbd20911ae7353038d2ec827fc7f85ad3962c9a82fff70e0fada05a1372326542021-05-08 4:24:291 min ago0x47dcec175ad657df063105b5ce1b1b6f186133a6 IN  Mdex: Router0 BNB0.000760755
0x4248f2a57b039ea50065933cfa23832eaee0688c1d712b7e7209e228590bf12072326542021-05-08 4:24:291 min ago0xfd7b727d3cbed41e0da491154d485b29f2dcca50 IN  Mdex: Router0 BNB0.0010830003
0x043538012474eac13acc2b242cb275e630fd53573078f0b1dae755f00d3a798d72326522021-05-08 4:24:231 min ago0x5fa14270c772a99f956f49e5b10fee39d0550d3d IN  Mdex: Router0 BNB0.0035165696
0xb0f8c200f8a575e21a011173ab9d83d04009a48c830b035a69edcbb2820de7a872326512021-05-08 4:24:201 min ago0xd3772072ffc18eda0eac69830b3623d19e3e715d IN  Mdex: Router0 BNB0.0012108216
0xf04470efc2307fb1a6aa4ed6f2be416a44ed3f993715a9ffde783f9e64a7955972326492021-05-08 4:24:141 min ago0xb6195f19ed5fd93f9cf311aae2b547a9ac5095db IN  Mdex: Router0 BNB0.00086044
0x8c9892bc94393bb5b1da21988c7f0dbba3628b1bedaf27484e83863ad3090a7672326492021-05-08 4:24:141 min ago0xd9370487e63c5aea5849a2099c7dedac7c7946da IN  Mdex: Router0 BNB0.0009650934
0x02088b9116d2501a97534796d7ae0dc74a7837f6220c100dc4ff8e7f6583413272326482021-05-08 4:24:111 min ago0xf95758fab903ab726ea3be6159b6fc0bb09f1a4e IN  Mdex: Router0 BNB0.00054909
0x14830b0db8d6bd04e6ee3ca392d02d9f82dd616f1d3f5452de4471fbb270441372326452021-05-08 4:24:021 min ago0xa3de166c39ece7b53e754c8ebeedd41a552d2507 IN  Mdex: Router0 BNB0.001468495
0x34c08f9ffb4f94bf65442fb2c8f356a2f655d38b920135e55ee0017231eaf0b672326452021-05-08 4:24:021 min ago0x72774e2fe1992d5da8c6e9cef73fd2ab980c0b98 IN  Mdex: Router0 BNB0.0014811
0x0842f36c406e1d38993a65065286cf382221daf8b1ec7bb25e039332d60a5ba272326452021-05-08 4:24:021 min ago0xb119504b4cfb6e588ca3b1658471084550cb3a4c IN  Mdex: Router0 BNB0.0011126211
0x295a5c6e574aad4d469f185ebba1594497fa9e3cef5616bb9560bcbeb5a01c9972326432021-05-08 4:23:561 min ago0x4586f323dcf558bae83b574dec200b5c7c420563 IN  Mdex: Router0 BNB0.000900335
0xc939789e2ec5d0b2fe6453e7571c1739dc7f4310a47dcb09053802aec07fde3f72326432021-05-08 4:23:561 min ago0x5a4b01202210483f22214ca34e5eca345e123777 IN  Mdex: Router0 BNB0.0013549476
0x86925f26f3c6a407eb2b4bd7413cbe22ad97a4e94e893f3a1730d687edb62fda72326402021-05-08 4:23:471 min ago0x5fa14270c772a99f956f49e5b10fee39d0550d3d IN  Mdex: Router0 BNB0.0035165696
0x7d11fda610c809d4ee40b0618a7c0959aa54f8170eb3de5648d8ea3f9657e69772326392021-05-08 4:23:441 min ago0x96fc3e0b73c1c77d9e5d9f7ec7cd802199b05cdd IN  Mdex: Router0 BNB0.0015183669
0xa5931052c18d3225e96890a6d5ad7655bc3ca09cb4b15d3a3a36c06de3ea012a72326372021-05-08 4:23:381 min ago0x5666afb8ffd4e2f44c703e6728e802137638b2db IN  Mdex: Router0 BNB0.001052755
0x5ba56144a691d356f126b8041caa0f9378b80bd94308d29bebae6d80d9392e4f72326352021-05-08 4:23:322 mins ago0xf95758fab903ab726ea3be6159b6fc0bb09f1a4e IN  Mdex: Router0 BNB0.003372255
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x87cab2493c28465a2a3c572d803bbcd286f843f36da25fff2cb3c7187779aa9372326642021-05-08 4:24:5937 secs ago Mdex: Router Binance: WBNB Token3.14807649113868138 BNB
0x3be2188fd74d68969ee0a112b27d0386d5d9c95f59a41322c93624b8d535369572326632021-05-08 4:24:5640 secs ago Mdex: Router0x22b1de00d32059ae1944c10c755e90d39cc563730.007855572764636189 BNB
0x3be2188fd74d68969ee0a112b27d0386d5d9c95f59a41322c93624b8d535369572326632021-05-08 4:24:5640 secs ago Binance: WBNB Token Mdex: Router0.007855572764636189 BNB
0xed3d0ab0ab8ca6346b1eb89e59f5e3eef25ac6c56857da8e6fa5267f488abc7a72326582021-05-08 4:24:4155 secs ago Mdex: Router0x14f865e9eddd1e51fff2b381e6c66746e3aa68c82.303345821720715254 BNB
0xed3d0ab0ab8ca6346b1eb89e59f5e3eef25ac6c56857da8e6fa5267f488abc7a72326582021-05-08 4:24:4155 secs ago Binance: WBNB Token Mdex: Router2.303345821720715254 BNB
0x789746e497592a9f779c7db65cae71f3ee9f3c2a696986b437707090c38bbe2972326562021-05-08 4:24:351 min ago Mdex: Router 0x9fea97d294b83a8f3e42abae39d4bd23a6f34e7662.982206788851989962 BNB
0x789746e497592a9f779c7db65cae71f3ee9f3c2a696986b437707090c38bbe2972326562021-05-08 4:24:351 min ago Binance: WBNB Token Mdex: Router62.982206788851989962 BNB
0x043538012474eac13acc2b242cb275e630fd53573078f0b1dae755f00d3a798d72326522021-05-08 4:24:231 min ago Mdex: Router0x5fa14270c772a99f956f49e5b10fee39d0550d3d1.961485461399246226 BNB
0x043538012474eac13acc2b242cb275e630fd53573078f0b1dae755f00d3a798d72326522021-05-08 4:24:231 min ago Binance: WBNB Token Mdex: Router1.961485461399246226 BNB
0xb0f8c200f8a575e21a011173ab9d83d04009a48c830b035a69edcbb2820de7a872326512021-05-08 4:24:201 min ago Mdex: Router0xd3772072ffc18eda0eac69830b3623d19e3e715d0.872200693407427265 BNB
0xb0f8c200f8a575e21a011173ab9d83d04009a48c830b035a69edcbb2820de7a872326512021-05-08 4:24:201 min ago Binance: WBNB Token Mdex: Router0.872200693407427265 BNB
0xe379e998d68830637b83836b7279c908eec9f8e60a28786e12ba2f3d05e1942572326492021-05-08 4:24:141 min ago Mdex: Router 0x9fea97d294b83a8f3e42abae39d4bd23a6f34e768.190869384784278259 BNB
0xe379e998d68830637b83836b7279c908eec9f8e60a28786e12ba2f3d05e1942572326492021-05-08 4:24:141 min ago Binance: WBNB Token Mdex: Router8.190869384784278259 BNB
0xbf145eda8bfebd89247ac62d20ff3a694d927fe65842ebc4ca25fa39311d1ce572326462021-05-08 4:24:051 min ago Mdex: Router 0x9fea97d294b83a8f3e42abae39d4bd23a6f34e7663.043873423804016459 BNB
0xbf145eda8bfebd89247ac62d20ff3a694d927fe65842ebc4ca25fa39311d1ce572326462021-05-08 4:24:051 min ago Binance: WBNB Token Mdex: Router63.043873423804016459 BNB
0x34c08f9ffb4f94bf65442fb2c8f356a2f655d38b920135e55ee0017231eaf0b672326452021-05-08 4:24:021 min ago Mdex: Router0x72774e2fe1992d5da8c6e9cef73fd2ab980c0b98157.275658765763224522 BNB
0x34c08f9ffb4f94bf65442fb2c8f356a2f655d38b920135e55ee0017231eaf0b672326452021-05-08 4:24:021 min ago Binance: WBNB Token Mdex: Router157.275658765763224522 BNB
0xd6cc719c6708930905617e9671e444850367ea5312b29157bdd729e702bb4d2b72326452021-05-08 4:24:021 min ago Mdex: Router 0x9fea97d294b83a8f3e42abae39d4bd23a6f34e7611.066300000000000931 BNB
0xd6cc719c6708930905617e9671e444850367ea5312b29157bdd729e702bb4d2b72326452021-05-08 4:24:021 min ago Binance: WBNB Token Mdex: Router11.066300000000000931 BNB
0x86925f26f3c6a407eb2b4bd7413cbe22ad97a4e94e893f3a1730d687edb62fda72326402021-05-08 4:23:471 min ago Mdex: Router0x5fa14270c772a99f956f49e5b10fee39d0550d3d3.468240066112568619 BNB
0x86925f26f3c6a407eb2b4bd7413cbe22ad97a4e94e893f3a1730d687edb62fda72326402021-05-08 4:23:471 min ago Binance: WBNB Token Mdex: Router3.468240066112568619 BNB
0x91f68ef3fa54eb84abc6d9de25bb66a70d382c5b49cfc97f0a186dac32ce5b4972326302021-05-08 4:23:172 mins ago Mdex: Router Binance: WBNB Token29.929835462616663888 BNB
0x30f2ead92bd0a93ba7444661027e6e26c131af79fdb9f8bb7e95be7154909e6272326302021-05-08 4:23:172 mins ago Mdex: Router0x5fa14270c772a99f956f49e5b10fee39d0550d3d3.1453118892139851 BNB
0x30f2ead92bd0a93ba7444661027e6e26c131af79fdb9f8bb7e95be7154909e6272326302021-05-08 4:23:172 mins ago Binance: WBNB Token Mdex: Router3.1453118892139851 BNB
0x079e5002a9a3db0f0c015f33dec64d6929be1ef6807500c4e3f15fff4aae397972326282021-05-08 4:23:112 mins ago Mdex: Router 0x9fea97d294b83a8f3e42abae39d4bd23a6f34e766.019800000000001225 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MdexRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

pragma solidity =0.6.6;

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

    function FEE_RATE_DENOMINATOR() external view returns (uint256);

    function feeRateNumerator() external view returns (uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    function pairFeeToRate(address) external view returns (uint256);

    function pairFees(address) external view returns (uint256);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function addPair(address) external returns (bool);

    function delPair(address) external returns (bool);

    function getSupportListLength() external view returns (uint256);

    function isSupportPair(address pair) external view returns (bool);

    function getSupportPair(uint256 index) external view returns (address);

    function setFeeRateNumerator(uint256) external;

    function setPairFees(address pair, uint256 fee) external;

    function setDefaultFeeToRate(uint256) external;

    function setPairFeeToRate(address pair, uint256 rate) external;

    function getPairFees(address) external view returns (uint256);

    function getPairRate(address) external view returns (uint256);

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

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

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view 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 IMdexPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WBNB() external pure returns (address);

    function swapMining() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view 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);

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

interface ISwapMining {
    function swap(address account, address input, address output, uint256 amount) external returns (bool);
}

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

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

interface IWBNB {
    function deposit() external payable;

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

    function withdraw(uint) external;
}

library SafeMath {
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;

    function wad() public pure returns (uint256) {
        return WAD;
    }

    function ray() public pure returns (uint256) {
        return RAY;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function sqrt(uint256 a) internal pure returns (uint256 b) {
        if (a > 3) {
            b = a;
            uint256 x = a / 2 + 1;
            while (x < b) {
                b = x;
                x = (a / x + x) / 2;
            }
        } else if (a != 0) {
            b = 1;
        }
    }

    function wmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / WAD;
    }

    function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), WAD / 2) / WAD;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / RAY;
    }

    function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), RAY / 2) / RAY;
    }

    function wdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, WAD), b);
    }

    function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, WAD), b / 2) / b;
    }

    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, RAY), b);
    }

    function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, RAY), b / 2) / b;
    }

    function wpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = WAD;
        while (n > 0) {
            if (n % 2 != 0) {
                result = wmul(result, x);
            }
            x = wmul(x, x);
            n /= 2;
        }
        return result;
    }

    function rpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = RAY;
        while (n > 0) {
            if (n % 2 != 0) {
                result = rmul(result, x);
            }
            x = rmul(x, x);
            n /= 2;
        }
        return result;
    }
}

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

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

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

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

contract Ownable {
    address private _owner;

    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner");
        _;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
}

contract MdexRouter is IMdexRouter, Ownable {
    using SafeMath for uint256;

    address public immutable override factory;
    address public immutable override WBNB;
    address public override swapMining;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'MdexRouter: EXPIRED');
        _;
    }

    constructor(address _factory, address _WBNB) public {
        factory = _factory;
        WBNB = _WBNB;
    }

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

    function pairFor(address tokenA, address tokenB) public view returns (address pair){
        pair = IMdexFactory(factory).pairFor(tokenA, tokenB);
    }

    function setSwapMining(address _swapMininng) public onlyOwner {
        swapMining = _swapMininng;
    }

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

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

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

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

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWBNB(WBNB).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = pairFor(tokenA, tokenB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }

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

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWBNB(WBNB).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = pairFor(token, WBNB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

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

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

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

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    payable
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[0] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).deposit{value : amounts[0]}();
        assert(IWBNB(WBNB).transfer(pairFor(path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }

    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

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

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
    external
    virtual
    override
    payable
    ensure(deadline)
    {
        require(path[0] == WBNB, 'MdexRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWBNB(WBNB).deposit{value : amountIn}();
        assert(IWBNB(WBNB).transfer(pairFor(path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
    external
    virtual
    override
    ensure(deadline)
    {
        require(path[path.length - 1] == WBNB, 'MdexRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WBNB).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) public view override returns (uint256 amountB) {
        return IMdexFactory(factory).quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) public view override returns (uint256 amountOut){
        return IMdexFactory(factory).getAmountOut(amountIn, reserveIn, reserveOut, token0, token1);
    }

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) public view override returns (uint256 amountIn){
        return IMdexFactory(factory).getAmountIn(amountOut, reserveIn, reserveOut, token0, token1);
    }

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

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

}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WBNB","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"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","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":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"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":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapMininng","type":"address"}],"name":"setSwapMining","outputs":[],"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":[],"name":"swapMining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b506040516200516e3803806200516e8339818101604052604081101561003557600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614fb9620001b5600039806101ec5280610ec65280610f015280610fe352806112e452806118aa5280611b7e5280611fc852806120c2528061217852806122465280612491528061251952806128435280612abf5280612b6e5280612c3a5280612ccf5280612d43528061337952806136315280613666528061369a528061370e52806138ae5280613af55280613b7d52508061109952806113d5528061167e5280611960528061230252806126a85280612892528061294d52806129cd52806130d1528061323f52806132a35280613313528061396952806140cf528061442d528061463f528061493152806149df5280614a865280614b225280614c175250614fb96000f3fe6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610cfc578063f2fde38b14610d7c578063f305d71914610daf578063fb3bdb4114610df557610215565b8063c45a015514610b72578063cd7290d514610b87578063d06ca61f14610bd4578063ded9382a14610c8957610215565b8063ad615dec116100d1578063ad615dec14610a08578063af2979eb14610a3e578063b6f9de9514610a91578063baa2abde14610b1557610215565b80638da5cb5b146109565780638dd950021461096b57806396ed28f91461098057806399ef4b87146109bb57610215565b80634e5eda111161017a578063715018a611610149578063715018a614610791578063791ac947146107a65780637ff36ab51461083c5780638803dbee146108c057610215565b80634e5eda11146106125780634f887183146106435780635b0d5984146106765780635c11d795146106fb57610215565b80632195995c116101b65780632195995c146104215780632f54bf6e1461049f57806338ed1739146104e65780634a25d94a1461057c57610215565b806302751cec1461021a57806318cbafe5146102865780631f00ca741461036c57610215565b3661021557336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e79565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b5061031c600480360360a08110156102a957600080fd5b813591602081013591810190606081016040820135600160201b8111156102cf57600080fd5b8201836020820111156102e157600080fd5b803590602001918460208302840111600160201b8311171561030257600080fd5b91935091506001600160a01b038135169060200135610f93565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610358578181015183820152602001610340565b505050509050019250505060405180910390f35b34801561037857600080fd5b5061031c6004803603604081101561038f57600080fd5b81359190810190604081016020820135600160201b8111156103b057600080fd5b8201836020820111156103c257600080fd5b803590602001918460208302840111600160201b831117156103e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113a3945050505050565b34801561042d57600080fd5b5061026d600480360361016081101561044557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561151e565b3480156104ab57600080fd5b506104d2600480360360208110156104c257600080fd5b50356001600160a01b03166115f7565b604080519115158252519081900360200190f35b3480156104f257600080fd5b5061031c600480360360a081101561050957600080fd5b813591602081013591810190606081016040820135600160201b81111561052f57600080fd5b82018360208201111561054157600080fd5b803590602001918460208302840111600160201b8311171561056257600080fd5b91935091506001600160a01b03813516906020013561160b565b34801561058857600080fd5b5061031c600480360360a081101561059f57600080fd5b813591602081013591810190606081016040820135600160201b8111156105c557600080fd5b8201836020820111156105d757600080fd5b803590602001918460208302840111600160201b831117156105f857600080fd5b91935091506001600160a01b03813516906020013561185a565b34801561061e57600080fd5b50610627611aea565b604080516001600160a01b039092168252519081900360200190f35b34801561064f57600080fd5b506102136004803603602081101561066657600080fd5b50356001600160a01b0316611af9565b34801561068257600080fd5b506106e9600480360361014081101561069a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611b75565b60408051918252519081900360200190f35b34801561070757600080fd5b50610213600480360360a081101561071e57600080fd5b813591602081013591810190606081016040820135600160201b81111561074457600080fd5b82018360208201111561075657600080fd5b803590602001918460208302840111600160201b8311171561077757600080fd5b91935091506001600160a01b038135169060200135611c62565b34801561079d57600080fd5b50610213611ed6565b3480156107b257600080fd5b50610213600480360360a08110156107c957600080fd5b813591602081013591810190606081016040820135600160201b8111156107ef57600080fd5b82018360208201111561080157600080fd5b803590602001918460208302840111600160201b8311171561082257600080fd5b91935091506001600160a01b038135169060200135611f7a565b61031c6004803603608081101561085257600080fd5b81359190810190604081016020820135600160201b81111561087357600080fd5b82018360208201111561088557600080fd5b803590602001918460208302840111600160201b831117156108a657600080fd5b91935091506001600160a01b0381351690602001356121fe565b3480156108cc57600080fd5b5061031c600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b038135169060200135612635565b34801561096257600080fd5b50610627612832565b34801561097757600080fd5b50610627612841565b34801561098c57600080fd5b50610627600480360360408110156109a357600080fd5b506001600160a01b0381358116916020013516612865565b3480156109c757600080fd5b506106e9600480360360a08110156109de57600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661290b565b348015610a1457600080fd5b506106e960048036036060811015610a2b57600080fd5b50803590602081013590604001356129c9565b348015610a4a57600080fd5b506106e9600480360360c0811015610a6157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a73565b61021360048036036080811015610aa757600080fd5b81359190810190604081016020820135600160201b811115610ac857600080fd5b820183602082011115610ada57600080fd5b803590602001918460208302840111600160201b83111715610afb57600080fd5b91935091506001600160a01b038135169060200135612bf4565b348015610b2157600080fd5b5061026d600480360360e0811015610b3857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612f5f565b348015610b7e57600080fd5b5061062761323d565b348015610b9357600080fd5b506106e9600480360360a0811015610baa57600080fd5b508035906020810135906040810135906001600160a01b0360608201358116916080013516613261565b348015610be057600080fd5b5061031c60048036036040811015610bf757600080fd5b81359190810190604081016020820135600160201b811115610c1857600080fd5b820183602082011115610c2a57600080fd5b803590602001918460208302840111600160201b83111715610c4b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506132e9945050505050565b348015610c9557600080fd5b5061026d6004803603610140811015610cad57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561336e565b348015610d0857600080fd5b50610d5e6004803603610100811015610d2057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613461565b60408051938452602084019290925282820152519081900360600190f35b348015610d8857600080fd5b5061021360048036036020811015610d9f57600080fd5b50356001600160a01b031661357c565b610d5e600480360360c0811015610dc557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356135e2565b61031c60048036036080811015610e0b57600080fd5b81359190810190604081016020820135600160201b811115610e2c57600080fd5b820183602082011115610e3e57600080fd5b803590602001918460208302840111600160201b83111715610e5f57600080fd5b91935091506001600160a01b038135169060200135613866565b6000808242811015610ec0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b610eef897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612f5f565b9093509150610eff898685613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b50505050610f878583613e35565b50965096945050505050565b60608142811015610fd9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061101357fe5b905060200201356001600160a01b03166001600160a01b03161461106c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561114457600080fd5b8101908080516040519392919084600160201b82111561116357600080fd5b90830190602082018581111561117857600080fd5b82518660208202830111600160201b8211171561119457600080fd5b82525081516020918201928201910280838360005b838110156111c15781810151838201526020016111a9565b50505050905001604052505050915086826001845103815181106111e157fe5b602002602001015110156112265760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b6112a38686600081811061123657fe5b905060200201356001600160a01b0316336112898989600081811061125757fe5b905060200201356001600160a01b03168a8a600181811061127457fe5b905060200201356001600160a01b0316612865565b8560008151811061129657fe5b6020026020010151613f2d565b6112e28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061408a915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061132157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b50505050611398848360018551038151811061138b57fe5b6020026020010151613e35565b509695505050505050565b604080516307c0329d60e21b815260048101848152602482019283528351604483015283516060936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693631f00ca7493889388939192606401906020808601910280838360005b8381101561142b578181015183820152602001611413565b50505050905001935050505060006040518083038186803b15801561144f57600080fd5b505afa158015611463573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561148c57600080fd5b8101908080516040519392919084600160201b8211156114ab57600080fd5b9083019060208201858111156114c057600080fd5b82518660208202830111600160201b821117156114dc57600080fd5b82525081516020918201928201910280838360005b838110156115095781810151838201526020016114f1565b50505050905001604052505050905092915050565b600080600061152d8e8e612865565b905060008761153c578c611540565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115b657600080fd5b505af11580156115ca573d6000803e3d6000fd5b505050506115dd8f8f8f8f8f8f8f612f5f565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b60608142811015611651576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561172957600080fd5b8101908080516040519392919084600160201b82111561174857600080fd5b90830190602082018581111561175d57600080fd5b82518660208202830111600160201b8211171561177957600080fd5b82525081516020918201928201910280838360005b838110156117a657818101518382015260200161178e565b50505050905001604052505050915086826001845103815181106117c657fe5b6020026020010151101561180b5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b61181b8686600081811061123657fe5b6113988287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b606081428110156118a0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106118da57fe5b905060200201356001600160a01b03166001600160a01b031614611933576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611a0b57600080fd5b8101908080516040519392919084600160201b821115611a2a57600080fd5b908301906020820185811115611a3f57600080fd5b82518660208202830111600160201b82111715611a5b57600080fd5b82525081516020918201928201910280838360005b83811015611a88578181015183820152602001611a70565b5050505090500160405250505091508682600081518110611aa557fe5b602002602001015111156112265760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6001546001600160a01b031681565b611b02336115f7565b611b53576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ba28c7f0000000000000000000000000000000000000000000000000000000000000000612865565b9050600086611bb1578b611bb5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b50505050611c518d8d8d8d8d8d612a73565b9d9c50505050505050505050505050565b8042811015611ca6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b611cfa85856000818110611cb657fe5b905060200201356001600160a01b031633611cf488886000818110611cd757fe5b905060200201356001600160a01b03168989600181811061127457fe5b8a613f2d565b600085856000198101818110611d0c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6020811015611d9b57600080fd5b50516040805160208881028281018201909352888252929350611ddd9290918991899182918501908490808284376000920191909152508892506143e8915050565b86611e8f8288886000198101818110611df257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b505afa158015611e6b573d6000803e3d6000fd5b505050506040513d6020811015611e8157600080fd5b50519063ffffffff6148b716565b1015611ecc5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b5050505050505050565b611edf336115f7565b611f30576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611fbe576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611ff857fe5b905060200201356001600160a01b03166001600160a01b031614612051576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b61206185856000818110611cb657fe5b61209f8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143e8915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561210957600080fd5b505afa15801561211d573d6000803e3d6000fd5b505050506040513d602081101561213357600080fd5b50519050868110156121765760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121dc57600080fd5b505af11580156121f0573d6000803e3d6000fd5b50505050611ecc8482613e35565b60608142811015612244576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061227b57fe5b905060200201356001600160a01b03166001600160a01b0316146122d4576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152346004820181815260248301938452604483018990526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363d06ca61f938b928b929091606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561237057600080fd5b505afa158015612384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156123ad57600080fd5b8101908080516040519392919084600160201b8211156123cc57600080fd5b9083019060208201858111156123e157600080fd5b82518660208202830111600160201b821117156123fd57600080fd5b82525081516020918201928201910280838360005b8381101561242a578181015183820152602001612412565b505050509050016040525050509150868260018451038151811061244a57fe5b6020026020010151101561248f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106124cb57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255688886000818110611cd757fe5b8460008151811061256357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050506040513d60208110156125e457600080fd5b50516125ec57fe5b61262b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b5095945050505050565b6060814281101561267b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561271657600080fd5b505afa15801561272a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561275357600080fd5b8101908080516040519392919084600160201b82111561277257600080fd5b90830190602082018581111561278757600080fd5b82518660208202830111600160201b821117156127a357600080fd5b82525081516020918201928201910280838360005b838110156127d05781810151838201526020016127b8565b50505050905001604052505050915086826000815181106127ed57fe5b6020026020010151111561180b5760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516396ed28f960e01b81526001600160a01b038481166004830152838116602483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916396ed28f9916044808301926020929190829003018186803b1580156128d857600080fd5b505afa1580156128ec573d6000803e3d6000fd5b505050506040513d602081101561290257600080fd5b50519392505050565b604080516399ef4b8760e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916399ef4b879160a4808301926020929190829003018186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d60208110156129bd57600080fd5b50519695505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612a3f57600080fd5b505afa158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b5051949350505050565b60008142811015612ab9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b612ae8887f00000000000000000000000000000000000000000000000000000000000000008989893089612f5f565b604080516370a0823160e01b81523060048201529051919450612b6c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d6020811015612b6557600080fd5b5051613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b505050506113988483613e35565b8042811015612c38576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110612c6f57fe5b905060200201356001600160a01b03166001600160a01b031614612cc8576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d2857600080fd5b505af1158015612d3c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612d8088886000818110611cd757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b5051612e0257fe5b600086866000198101818110612e1457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d6020811015612ea357600080fd5b50516040805160208981028281018201909352898252929350612ee59290918a918a9182918501908490808284376000920191909152508992506143e8915050565b87611e8f8289896000198101818110612efa57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b6000808242811015612fa6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6000612fb28b8b612865565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b505050506040513d602081101561303757600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561308457600080fd5b505af1158015613098573d6000803e3d6000fd5b505050506040513d60408110156130ae57600080fd5b8101908080519060200190929190805190602001909291905050509150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa568f8f6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561315e57600080fd5b505afa158015613172573d6000803e3d6000fd5b505050506040513d604081101561318857600080fd5b505190506001600160a01b038e8116908216146131a65781836131a9565b82825b90975095508a8710156131ed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b8986101561322c5760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040805163cd7290d560e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f0000000000000000000000000000000000000000000000000000000000000000169163cd7290d59160a4808301926020929190829003018186803b15801561299357600080fd5b6040805163d06ca61f60e01b815260048101848152602482019283528351604483015283516060937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169363d06ca61f9388938893919260640190602080860191028083836000831561142b578181015183820152602001611413565b600080600061339d8d7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506000876133ac578c6133b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561342657600080fd5b505af115801561343a573d6000803e3d6000fd5b5050505061344c8e8e8e8e8e8e610e79565b909f909e509c50505050505050505050505050565b600080600083428110156134aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6134b88c8c8c8c8c8c614900565b909450925060006134c98d8d612865565b90506134d78d338388613f2d565b6134e38c338387613f2d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b505050506040513d602081101561356557600080fd5b5051949d939c50939a509198505050505050505050565b613585336115f7565b6135d6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6135df81614d15565b50565b6000806000834281101561362b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6136598a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614900565b9094509250600061368a8b7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506136988b338388613f2d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050506040513d60208110156137b657600080fd5b50516137be57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561381657600080fd5b505af115801561382a573d6000803e3d6000fd5b505050506040513d602081101561384057600080fd5b50519250348410156138585761385833853403613e35565b505096509650969350505050565b606081428110156138ac576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106138e357fe5b905060200201356001600160a01b03166001600160a01b03161461393c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b81526004810189815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928b928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156139d757600080fd5b505afa1580156139eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613a1457600080fd5b8101908080516040519392919084600160201b821115613a3357600080fd5b908301906020820185811115613a4857600080fd5b82518660208202830111600160201b82111715613a6457600080fd5b82525081516020918201928201910280838360005b83811015613a91578181015183820152602001613a79565b5050505090500160405250505091503482600081518110613aae57fe5b60200260200101511115613af35760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110613b2f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b6257600080fd5b505af1158015613b76573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb613bba88886000818110611cd757fe5b84600081518110613bc757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613c1e57600080fd5b505af1158015613c32573d6000803e3d6000fd5b505050506040513d6020811015613c4857600080fd5b5051613c5057fe5b613c8f8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b81600081518110613c9c57fe5b602002602001015134111561262b5761262b3383600081518110613cbc57fe5b60200260200101513403613e35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613d485780518252601f199092019160209182019101613d29565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613daa576040519150601f19603f3d011682016040523d82523d6000602084013e613daf565b606091505b5091509150818015613ddd575080511580613ddd5750808060200190516020811015613dda57600080fd5b50515b613e2e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613e815780518252601f199092019160209182019101613e62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ee3576040519150601f19603f3d011682016040523d82523d6000602084013e613ee8565b606091505b5050905080613f285760405162461bcd60e51b8152600401808060200182810382526023815260200180614f1d6023913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613fb25780518252601f199092019160209182019101613f93565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614014576040519150601f19603f3d011682016040523d82523d6000602084013e614019565b606091505b5091509150818015614047575080511580614047575080806020019051602081101561404457600080fd5b50515b6140825760405162461bcd60e51b8152600401808060200182810382526024815260200180614f606024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156143e2576000808483815181106140a857fe5b60200260200101518584600101815181106140bf57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d604081101561418657600080fd5b5051875190915060009088906001870190811061419f57fe5b60209081029190910101516001549091506001600160a01b03161561424f576001546040805163152cf14360e31b81523360048201526001600160a01b0387811660248301528681166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b505050506040513d602081101561424c57600080fd5b50505b600080836001600160a01b0316866001600160a01b03161461427357826000614277565b6000835b91509150600060028a5103881061428e57886142ae565b6142ae868b8a600201815181106142a157fe5b6020026020010151612865565b90506142ba8787612865565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156142f7576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614368578181015183820152602001614350565b50505050905090810190601f1680156143955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156143b757600080fd5b505af11580156143cb573d6000803e3d6000fd5b50506001909901985061408d975050505050505050565b50505050565b60005b6001835103811015613f285760008084838151811061440657fe5b602002602001015185846001018151811061441d57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b1580156144ba57600080fd5b505afa1580156144ce573d6000803e3d6000fd5b505050506040513d60408110156144e457600080fd5b5051905060006144f48484612865565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561453557600080fd5b505afa158015614549573d6000803e3d6000fd5b505050506040513d606081101561455f57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461459c57828461459f565b83835b915091506145fd828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b604080516399ef4b8760e01b81526004810183905260248101859052604481018490526001600160a01b038d811660648301528c8116608483015291519298507f0000000000000000000000000000000000000000000000000000000000000000909116916399ef4b879160a480820192602092909190829003018186803b15801561468857600080fd5b505afa15801561469c573d6000803e3d6000fd5b505050506040513d60208110156146b257600080fd5b50516001549095506001600160a01b031615935061475f92505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561473257600080fd5b505af1158015614746573d6000803e3d6000fd5b505050506040513d602081101561475c57600080fd5b50505b600080856001600160a01b0316886001600160a01b03161461478357826000614787565b6000835b91509150600060028c51038a1061479e578a6147b1565b6147b1888d8c600201815181106142a157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561483b578181015183820152602001614823565b50505050905090810190601f1680156148685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561488a57600080fd5b505af115801561489e573d6000803e3d6000fd5b50506001909b019a506143eb9950505050505050505050565b60006148f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614db5565b9392505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561497a57600080fd5b505afa15801561498e573d6000803e3d6000fd5b505050506040513d60208110156149a457600080fd5b50516001600160a01b03161415614a5757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614a2a57600080fd5b505af1158015614a3e573d6000803e3d6000fd5b505050506040513d6020811015614a5457600080fd5b50505b6040805163354aedbd60e21b81526001600160a01b038a811660048301528981166024830152825160009384937f00000000000000000000000000000000000000000000000000000000000000009093169263d52bb6f49260448083019392829003018186803b158015614aca57600080fd5b505afa158015614ade573d6000803e3d6000fd5b505050506040513d6040811015614af457600080fd5b508051602090910151909250905081158015614b0e575080155b15614b1e57879350869250614d08565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614b9457600080fd5b505afa158015614ba8573d6000803e3d6000fd5b505050506040513d6020811015614bbe57600080fd5b50519050878111614c135785811015614c085760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b889450925082614d06565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85876040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614c8957600080fd5b505afa158015614c9d573d6000803e3d6000fd5b505050506040513d6020811015614cb357600080fd5b5051905089811115614cc157fe5b87811015614d005760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b038116614d5a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e4d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614e445760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614e09578181015183820152602001614df1565b50505050905090810190601f168015614e365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d646578526f757465723a20494e53554646494349454e545f425f414d4f554e544d646578526f757465723a20494e56414c49445f5041544800000000000000004d646578526f757465723a20494e53554646494349454e545f415f414d4f554e544d646578526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444d646578526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a464736f6c634300060600330000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

18180:18375:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18696:10;-1:-1:-1;;;;;18710:4:0;18696:18;;18689:26;;;;18180:18375;;12:1:-1;9;2:12;23030:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23030:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23030:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30025:790;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30025:790:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30025:790:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30025:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30025:790:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30025:790:0;;-1:-1:-1;30025:790:0;-1:-1:-1;;;;;;30025:790: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;30025:790:0;;;;;;;;;;;;;;;;;36354:196;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36354:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36354:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36354:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36354:196:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36354:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36354:196:0;;-1:-1:-1;36354:196:0;;-1:-1:-1;;;;;36354:196:0:i;23711:647::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23711:647:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23711:647:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17349:104::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17349:104:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17349:104:0;-1:-1:-1;;;;;17349:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;27427:593;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27427:593:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27427:593:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27427:593:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27427:593:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27427:593:0;;-1:-1:-1;27427:593:0;-1:-1:-1;;;;;;27427:593:0;;;;;;;;:::i;29249:768::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29249:768:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29249:768:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29249:768:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29249:768:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29249:768:0;;-1:-1:-1;29249:768:0;-1:-1:-1;;;;;;29249:768:0;;;;;;;;:::i;18359:34::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18359:34:0;;;:::i;:::-;;;;-1:-1:-1;;;;;18359:34:0;;;;;;;;;;;;;;18957:106;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18957:106:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18957:106:0;-1:-1:-1;;;;;18957:106:0;;:::i;25792:688::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25792:688:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25792:688:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33065:683;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33065:683:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33065:683:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33065:683:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33065:683:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33065:683:0;;-1:-1:-1;33065:683:0;-1:-1:-1;;;;;;33065:683:0;;;;;;;;:::i;17461:140::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17461:140:0;;;:::i;34559:791::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34559:791:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34559:791:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34559:791:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34559:791:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34559:791:0;;-1:-1:-1;34559:791:0;-1:-1:-1;;;;;;34559:791:0;;;;;;;;:::i;28607:634::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28607:634:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28607:634:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28607:634:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28607:634:0;;-1:-1:-1;28607:634:0;-1:-1:-1;;;;;;28607:634:0;;;;;;;;:::i;28028:571::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28028:571:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28028:571:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28028:571:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28028:571:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28028:571:0;;-1:-1:-1;28028:571:0;-1:-1:-1;;;;;;28028:571:0;;;;;;;;:::i;17262:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17262:79:0;;;:::i;18314:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18314:38:0;;;:::i;18795:154::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18795:154:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;18795:154:0;;;;;;;;;;:::i;35599:268::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35599:268:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;35599:268:0;;;;;;;;;;;;;-1:-1:-1;;;;;35599:268:0;;;;;;;;;;;;:::i;35394:197::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35394:197:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35394:197:0;;;;;;;;;;;;:::i;25084:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25084:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25084:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33756:795::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33756:795:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33756:795:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33756:795:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33756:795:0;;-1:-1:-1;33756:795:0;-1:-1:-1;;;;;;33756:795:0;;;;;;;;:::i;22189:833::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22189:833:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22189:833:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18266:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18266:41:0;;;:::i;35875:267::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35875:267:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;35875:267:0;;;;;;;;;;;;;-1:-1:-1;;;;;35875:267:0;;;;;;;;;;;;:::i;36150:196::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36150:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36150:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36150:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36150:196:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36150:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36150:196:0;;-1:-1:-1;36150:196:0;;-1:-1:-1;;;;;36150:196:0:i;24366:639::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24366:639:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24366:639:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20487:707::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20487:707:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20487:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;17846:109;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17846:109:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17846:109:0;-1:-1:-1;;;;;17846:109:0;;:::i;21202:944::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21202:944:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30823:747::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30823:747:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30823:747:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30823:747:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30823:747:0;;-1:-1:-1;30823:747:0;-1:-1:-1;;;;;;30823:747:0;;;;;;;;:::i;23030:673::-;23267:16;23285:14;23248:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;23339:196:::1;23369:5;23389:4;23408:9;23432:14;23461:12;23496:4;23516:8;23339:15;:196::i;:::-;23312:223:::0;;-1:-1:-1;23312:223:0;-1:-1:-1;23546:51:0::1;23574:5:::0;23581:2;23312:223;23546:27:::1;:51::i;:::-;23614:4;-1:-1:-1::0;;;;;23608:20:0::1;;23629:9;23608:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23608:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23608:31:0;;;;23650:45;23681:2;23685:9;23650:30;:45::i;:::-;23030:673:::0;;;;;;;;;;:::o;30025:790::-;30219:21;30195:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30291:4:0::1;30266:29;:4:::0;;-1:-1:-1;;30271:15:0;;30266:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30266:21:0::1;-1:-1:-1::0;;;;;30266:29:0::1;;30258:66;;;::::0;;-1:-1:-1;;;30258:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30258:66:0;;;;;;;;;;;;;::::1;;30345:51;::::0;;-1:-1:-1;;;30345:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30358:7:0::1;30345:35;::::0;::::1;::::0;30381:8;;30391:4;;;;30345:51;;30391:4;30345:51:::1;::::0;::::1;::::0;30391:4;30345:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30345:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30345:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30345:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;30345:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;30345:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;30345:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;30345:51:0;::::1;::::0;::::1;::::0;412:14:-1;30345:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;30345:51:0;;;;;;;;::::0;::::1;;30335:61;;30446:12;30415:7;30440:1;30423:7;:14;:18;30415:27;;;;;;;;;;;;;;:43;;30407:94;;;;-1:-1:-1::0;;;30407:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30512:115;30558:4;;30563:1;30558:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30558:7:0::1;30567:10;30579:25;30587:4;;30592:1;30587:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30587:7:0::1;30596:4;;30601:1;30596:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30596:7:0::1;30579;:25::i;:::-;30606:7;30614:1;30606:10;;;;;;;;;;;;;;30512:31;:115::i;:::-;30638:35;30644:7;30653:4;;30638:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30667:4:0::1;::::0;-1:-1:-1;30638:5:0::1;::::0;-1:-1:-1;;30638:35:0:i:1;:::-;30690:4;-1:-1:-1::0;;;;;30684:20:0::1;;30705:7;30730:1;30713:7;:14;:18;30705:27;;;;;;;;;;;;;;30684:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30684:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30684:49:0;;;;30744:63;30775:2;30779:7;30804:1;30787:7;:14;:18;30779:27;;;;;;;;;;;;;;30744:30;:63::i;:::-;30025:790:::0;;;;;;;;;:::o;36354:196::-;36491:51;;;-1:-1:-1;;;36491:51:0;;;;;;;;;;;;;;;;;;;;;;36448:24;;-1:-1:-1;;;;;36504:7:0;36491:34;;;;36526:9;;36537:4;;36491:51;;;;;;;;;;;;;;-1:-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;36491:51:0;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36491:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36491:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36491:51:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;15:2;7:11;;4:2;;;31:1;28;21:12;4:2;36491:51:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;36491:51:0;;421:4:-1;412:14;;;;36491:51:0;;;;;412:14:-1;36491:51:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36491:51:0;;;;;;;;;;;36484:58;;36354:196;;;;:::o;23711:647::-;24017:12;24031;24056;24071:23;24079:6;24087;24071:7;:23::i;:::-;24056:38;;24105:10;24118;:34;;24143:9;24118:34;;;-1:-1:-1;;24118:34:0;24163:75;;;-1:-1:-1;;;24163:75:0;;24186:10;24163:75;;;;24206:4;24163:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24105:47;;-1:-1:-1;;;;;;24163:22:0;;;;;:75;;;;;-1:-1:-1;;24163:75:0;;;;;;;;-1:-1:-1;24163:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;24163:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24163:75:0;;;;24270:80;24286:6;24294;24302:9;24313:10;24325;24337:2;24341:8;24270:15;:80::i;:::-;24249:101;;;;;;;;23711:647;;;;;;;;;;;;;;;;:::o;17349:104::-;17404:4;17439:6;-1:-1:-1;;;;;17439:6:0;;;17428:17;;;;17349:104::o;27427:593::-;27651:21;27632:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;27695:51:::1;::::0;;-1:-1:-1;;;27695:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27708:7:0::1;27695:35;::::0;::::1;::::0;27731:8;;27741:4;;;;27695:51;;27741:4;27695:51:::1;::::0;::::1;::::0;27741:4;27695:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;27695:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27695:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27695:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;27695:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;27695:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;27695:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;27695:51:0;::::1;::::0;::::1;::::0;412:14:-1;27695:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;27695:51:0;;;;;;;;::::0;::::1;;27685:61;;27796:12;27765:7;27790:1;27773:7;:14;:18;27765:27;;;;;;;;;;;;;;:43;;27757:94;;;;-1:-1:-1::0;;;27757:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27862:115;27908:4;;27913:1;27908:7;;;;;;27862:115;27988:24;27994:7;28003:4;;27988:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28009:2:0;;-1:-1:-1;27988:5:0::1;::::0;-1:-1:-1;;27988:24:0:i:1;29249:768::-:0;29443:21;29419:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29515:4:0::1;29490:29;:4:::0;;-1:-1:-1;;29495:15:0;;29490:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29490:21:0::1;-1:-1:-1::0;;;;;29490:29:0::1;;29482:66;;;::::0;;-1:-1:-1;;;29482:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29482:66:0;;;;;;;;;;;;;::::1;;29569:51;::::0;;-1:-1:-1;;;29569:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29582:7:0::1;29569:34;::::0;::::1;::::0;29604:9;;29615:4;;;;29569:51;;29615:4;29569:51:::1;::::0;::::1;::::0;29615:4;29569:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29569:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29569:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29569:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29569:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;29569:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;29569:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;29569:51:0;::::1;::::0;::::1;::::0;412:14:-1;29569:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;29569:51:0;;;;;;;;::::0;::::1;;29559:61;;29653:11;29639:7;29647:1;29639:10;;;;;;;;;;;;;;:25;;29631:72;;;;-1:-1:-1::0;;;29631:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18359:34:::0;;;-1:-1:-1;;;;;18359:34:0;;:::o;18957:106::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19030:10:::1;:25:::0;;-1:-1:-1;;;;;;19030:25:0::1;-1:-1:-1::0;;;;;19030:25:0;;;::::1;::::0;;;::::1;::::0;;18957:106::o;25792:688::-;26110:14;26137:12;26152:20;26160:5;26167:4;26152:7;:20::i;:::-;26137:35;;26183:10;26196;:34;;26221:9;26196:34;;;-1:-1:-1;;26196:34:0;26241:75;;;-1:-1:-1;;;26241:75:0;;26264:10;26241:75;;;;26284:4;26241:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26183:47;;-1:-1:-1;;;;;;26241:22:0;;;;;:75;;;;;-1:-1:-1;;26241:75:0;;;;;;;;-1:-1:-1;26241:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;26241:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26241:75:0;;;;26339:133;26401:5;26408:9;26419:14;26435:12;26449:2;26453:8;26339:47;:133::i;:::-;26327:145;25792:688;-1:-1:-1;;;;;;;;;;;;;25792:688:0:o;33065:683::-;33299:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;33320:113:::1;33366:4;;33371:1;33366:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33366:7:0::1;33375:10;33387:25;33395:4;;33400:1;33395:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33395:7:0::1;33404:4;;33409:1;33404:7;;;;;;33387:25;33414:8;33320:31;:113::i;:::-;33444:18;33472:4:::0;;-1:-1:-1;;33477:15:0;;33472:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33472:21:0::1;-1:-1:-1::0;;;;;33465:39:0::1;;33505:2;33465:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33465:43:0::1;-1:-1:-1::0;;;;;33465:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33465:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33465:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33465:43:0;33519:44:::1;::::0;;33465:43:::1;33519:44:::0;;::::1;::::0;;;;;;;;;;;33465:43;;-1:-1:-1;33519:44:0::1;::::0;;;33554:4;;;;;;33519:44;::::1;::::0;33554:4;;33519:44;33554:4;33519:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33560:2:0;;-1:-1:-1;33519:34:0::1;::::0;-1:-1:-1;;33519:44:0:i:1;:::-;33662:12:::0;33596:62:::1;33644:13:::0;33603:4;;-1:-1:-1;;33608:15:0;;33603:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33603:21:0::1;-1:-1:-1::0;;;;;33596:39:0::1;;33636:2;33596:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33596:43:0::1;-1:-1:-1::0;;;;;33596:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33596:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33596:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33596:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;33574:166;;;;-1:-1:-1::0;;;33574:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:1;33065:683:::0;;;;;;;:::o;17461:140::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17560:1:::1;17544:6:::0;;17523:40:::1;::::0;-1:-1:-1;;;;;17544:6:0;;::::1;::::0;17523:40:::1;::::0;17560:1;;17523:40:::1;17591:1;17574:19:::0;;-1:-1:-1;;;;;;17574:19:0::1;::::0;;17461:140::o;34559:791::-;34810:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34869:4:0::1;34844:29;:4:::0;;-1:-1:-1;;34849:15:0;;34844:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34844:21:0::1;-1:-1:-1::0;;;;;34844:29:0::1;;34836:66;;;::::0;;-1:-1:-1;;;34836:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34836:66:0;;;;;;;;;;;;;::::1;;34913:113;34959:4;;34964:1;34959:7;;;;;;34913:113;35037:55;35072:4;;35037:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35086:4:0::1;::::0;-1:-1:-1;35037:34:0::1;::::0;-1:-1:-1;;35037:55:0:i:1;:::-;35120:37;::::0;;-1:-1:-1;;;35120:37:0;;35151:4:::1;35120:37;::::0;::::1;::::0;;;35103:14:::1;::::0;-1:-1:-1;;;;;35127:4:0::1;35120:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;35120:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35120:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35120:37:0;;-1:-1:-1;35176:25:0;;::::1;;35168:76;;;;-1:-1:-1::0;;;35168:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35261:4;-1:-1:-1::0;;;;;35255:20:0::1;;35276:9;35255:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35255:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35255:31:0;;;;35297:45;35328:2;35332:9;35297:30;:45::i;28607:634::-:0;28799:21;28775:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;28857:4:::1;-1:-1:-1::0;;;;;28846:15:0::1;:4;;28851:1;28846:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28846:7:0::1;-1:-1:-1::0;;;;;28846:15:0::1;;28838:52;;;::::0;;-1:-1:-1;;;28838:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28838:52:0;;;;;;;;;;;;;::::1;;28911;::::0;;-1:-1:-1;;;28911:52:0;;28947:9:::1;28911:52;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28924:7:0::1;28911:35;::::0;::::1;::::0;28958:4;;;;28911:52;;;;28958:4;28911:52:::1;::::0;::::1;::::0;28958:4;28911:52;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28911:52:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28911:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28911:52:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28911:52:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;28911:52:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;28911:52:0;;421:4:-1::1;412:14:::0;;::::1;::::0;28911:52:0;::::1;::::0;::::1;::::0;412:14:-1;28911:52:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;28911:52:0;;;;;;;;::::0;::::1;;28901:62;;29013:12;28982:7;29007:1;28990:7;:14;:18;28982:27;;;;;;;;;;;;;;:43;;28974:94;;;;-1:-1:-1::0;;;28974:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29085:4;-1:-1:-1::0;;;;;29079:19:0::1;;29107:7;29115:1;29107:10;;;;;;;;;;;;;;29079:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29079:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29079:41:0;;;;;29144:4;-1:-1:-1::0;;;;;29138:20:0::1;;29159:25;29167:4;;29172:1;29167:7;;;;;;29159:25;29186:7;29194:1;29186:10;;;;;;;;;;;;;;29138:59;;;;;;;;;;;;;-1:-1:-1::0;;;;;29138:59:0::1;-1:-1:-1::0;;;;;29138:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29138:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29138:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29138:59:0;29131:67:::1;;;;29209:24;29215:7;29224:4;;29209:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29230:2:0;;-1:-1:-1;29209:5:0::1;::::0;-1:-1:-1;;29209:24:0:i:1;:::-;28607:634:::0;;;;;;;;:::o;28028:571::-;28252:21;28233:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;28296:51:::1;::::0;;-1:-1:-1;;;28296:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28309:7:0::1;28296:34;::::0;::::1;::::0;28331:9;;28342:4;;;;28296:51;;28342:4;28296:51:::1;::::0;::::1;::::0;28342:4;28296:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28296:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28296:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28296:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28296:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;28296:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;28296:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;28296:51:0;::::1;::::0;::::1;::::0;412:14:-1;28296:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;28296:51:0;;;;;;;;::::0;::::1;;28286:61;;28380:11;28366:7;28374:1;28366:10;;;;;;;;;;;;;;:25;;28358:72;;;;-1:-1:-1::0;;;28358:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17262:79:::0;17300:7;17327:6;-1:-1:-1;;;;;17327:6:0;17262:79;:::o;18314:38::-;;;:::o;18795:154::-;18896:45;;;-1:-1:-1;;;18896:45:0;;-1:-1:-1;;;;;18896:45:0;;;;;;;;;;;;;;;;18865:12;;18909:7;18896:29;;;;:45;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;18896:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18896:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18896:45:0;;18795:154;-1:-1:-1;;;18795:154:0:o;35599:268::-;35776:83;;;-1:-1:-1;;;35776:83:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35776:83:0;;;;;;;;;;;;;;;;35740:17;;35789:7;35776:34;;;;:83;;;;;;;;;;;;;;:34;:83;;;2:2:-1;;;;27:1;24;17:12;2:2;35776:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35776:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35776:83:0;;35599:268;-1:-1:-1;;;;;;35599:268:0:o;35394:197::-;35492:15;35540:7;-1:-1:-1;;;;;35527:27:0;;35555:7;35564:8;35574;35527:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35527:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35527:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35527:56:0;;35394:197;-1:-1:-1;;;;35394:197:0:o;25084:700::-;25350:14;25331:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;25393:196:::1;25423:5;25443:4;25462:9;25486:14;25515:12;25550:4;25570:8;25393:15;:196::i;:::-;25639:38;::::0;;-1:-1:-1;;;25639:38:0;;25671:4:::1;25639:38;::::0;::::1;::::0;;;25377:212;;-1:-1:-1;25600:78:0::1;::::0;-1:-1:-1;25628:5:0;;25635:2;;-1:-1:-1;;;;;25639:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;25639:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25639:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25639:38:0;25600:27:::1;:78::i;:::-;25695:4;-1:-1:-1::0;;;;;25689:20:0::1;;25710:9;25689:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25689:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25689:31:0;;;;25731:45;25762:2;25766:9;25731:30;:45::i;33756:795::-:0;33996:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;34041:4:::1;-1:-1:-1::0;;;;;34030:15:0::1;:4;;34035:1;34030:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34030:7:0::1;-1:-1:-1::0;;;;;34030:15:0::1;;34022:52;;;::::0;;-1:-1:-1;;;34022:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34022:52:0;;;;;;;;;;;;;::::1;;34085:13;34101:9;34085:25;;34127:4;-1:-1:-1::0;;;;;34121:19:0::1;;34149:8;34121:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34121:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34121:39:0;;;;;34184:4;-1:-1:-1::0;;;;;34178:20:0::1;;34199:25;34207:4;;34212:1;34207:7;;;;;;34199:25;34226:8;34178:57;;;;;;;;;;;;;-1:-1:-1::0;;;;;34178:57:0::1;-1:-1:-1::0;;;;;34178:57:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34178:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34178:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34178:57:0;34171:65:::1;;;;34247:18;34275:4:::0;;-1:-1:-1;;34280:15:0;;34275:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34275:21:0::1;-1:-1:-1::0;;;;;34268:39:0::1;;34308:2;34268:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34268:43:0::1;-1:-1:-1::0;;;;;34268:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34268:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34268:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34268:43:0;34322:44:::1;::::0;;34268:43:::1;34322:44:::0;;::::1;::::0;;;;;;;;;;;34268:43;;-1:-1:-1;34322:44:0::1;::::0;;;34357:4;;;;;;34322:44;::::1;::::0;34357:4;;34322:44;34357:4;34322:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34363:2:0;;-1:-1:-1;34322:34:0::1;::::0;-1:-1:-1;;34322:44:0:i:1;:::-;34465:12:::0;34399:62:::1;34447:13:::0;34406:4;;-1:-1:-1;;34411:15:0;;34406:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34406:21:0::1;-1:-1:-1::0;;;;;34399:39:0::1;;34439:2;34399:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34399:43:0::1;-1:-1:-1::0;;;;;34399:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;22189:833:0::0;22443:12;22457;22424:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;22482:12:::1;22497:23;22505:6;22513;22497:7;:23::i;:::-;22531:57;::::0;;-1:-1:-1;;;22531:57:0;;22560:10:::1;22531:57;::::0;::::1;::::0;-1:-1:-1;;;;;22531:28:0;::::1;:57:::0;;;;;;;;;;;;;;22482:38;;-1:-1:-1;22531:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;22531:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22531:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22531:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;22665:24:0::1;::::0;;-1:-1:-1;;;22665:24:0;;-1:-1:-1;;;;;22665:24:0;;::::1;;::::0;::::1;::::0;;;22635:12:::1;::::0;;;22665:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;22635:12;22665:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22665:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22665:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;22665:24:0;;;;;;;;;;;;;;;;;;;;;;;;;22634:55;;;;22701:14;22733:7;-1:-1:-1::0;;;;;22720:32:0::1;;22753:6;22761;22720:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;22720:48:0::1;-1:-1:-1::0;;;;;22720:48:0::1;;;;;;-1:-1:-1::0;;;;;22720:48:0::1;-1:-1:-1::0;;;;;22720:48:0::1;;;;;;;;;;::::0;::::1;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22720:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22720:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22720:48:0;;-1:-1:-1;;;;;;22800:16:0;;::::1;::::0;;::::1;;:58;;22841:7;22850;22800:58;;;22820:7;22829;22800:58;22779:79:::0;;-1:-1:-1;22779:79:0;-1:-1:-1;22877:21:0;;::::1;;22869:67;;;;-1:-1:-1::0;;;22869:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22966:10;22955:7;:21;;22947:67;;;;-1:-1:-1::0;;;22947:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:1;;;;22189:833:::0;;;;;;;;;;;:::o;18266:41::-;;;:::o;35875:267::-;36051:83;;;-1:-1:-1;;;36051:83:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36051:83:0;;;;;;;;;;;;;;;;36016:16;;36064:7;36051:33;;;;:83;;;;;;;;;;;;;;:33;:83;;;2:2:-1;;;;27:1;24;17:12;36150:196:0;36287:51;;;-1:-1:-1;;;36287:51:0;;;;;;;;;;;;;;;;;;;;;;36244:24;;36300:7;-1:-1:-1;;;;;36287:35:0;;;;:51;;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;24366:639:0;24655:16;24673:14;24700:12;24715:20;24723:5;24730:4;24715:7;:20::i;:::-;24700:35;;24746:10;24759;:34;;24784:9;24759:34;;;-1:-1:-1;;24759:34:0;24804:75;;;-1:-1:-1;;;24804:75:0;;24827:10;24804:75;;;;24847:4;24804:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24746:47;;-1:-1:-1;;;;;;24804:22:0;;;;;:75;;;;;-1:-1:-1;;24804:75:0;;;;;;;;-1:-1:-1;24804:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;24804:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24804:75:0;;;;24917:80;24936:5;24943:9;24954:14;24970:12;24984:2;24988:8;24917:18;:80::i;:::-;24890:107;;;;-1:-1:-1;24366:639:0;-1:-1:-1;;;;;;;;;;;;;24366:639:0:o;20487:707::-;20775:12;20789;20803:14;20756:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;20851:85:::1;20865:6;20873;20881:14;20897;20913:10;20925;20851:13;:85::i;:::-;20830:106:::0;;-1:-1:-1;20830:106:0;-1:-1:-1;20947:12:0::1;20962:23;20970:6:::0;20978;20962:7:::1;:23::i;:::-;20947:38;;20996:66;21028:6;21036:10;21048:4;21054:7;20996:31;:66::i;:::-;21073;21105:6;21113:10;21125:4;21131:7;21073:31;:66::i;:::-;21172:4;-1:-1:-1::0;;;;;21162:20:0::1;;21183:2;21162:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;21162:24:0::1;-1:-1:-1::0;;;;;21162:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21162:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21162:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21162:24:0;20487:707;;;;-1:-1:-1;21162:24:0;;-1:-1:-1;20487:707:0;;-1:-1:-1;;;;;;;;;20487:707:0:o;17846:109::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17919:28:::1;17938:8;17919:18;:28::i;:::-;17846:109:::0;:::o;21202:944::-;21455:16;21473:14;21489;21436:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;21543:176:::1;21571:5;21591:4;21610:18;21643:9;21667:14;21696:12;21543:13;:176::i;:::-;21516:203:::0;;-1:-1:-1;21516:203:0;-1:-1:-1;21730:12:0::1;21745:20;21753:5:::0;21760:4:::1;21745:7;:20::i;:::-;21730:35;;21776:69;21808:5;21815:10;21827:4;21833:11;21776:31;:69::i;:::-;21862:4;-1:-1:-1::0;;;;;21856:19:0::1;;21884:9;21856:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21856:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21856:40:0;;;;;21920:4;-1:-1:-1::0;;;;;21914:20:0::1;;21935:4;21941:9;21914:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;21914:37:0::1;-1:-1:-1::0;;;;;21914:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21914:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21914:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21914:37:0;21907:45:::1;;;;21985:4;-1:-1:-1::0;;;;;21975:20:0::1;;21996:2;21975:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;21975:24:0::1;-1:-1:-1::0;;;;;21975:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21975:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21975:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21975:24:0;;-1:-1:-1;22050:9:0::1;:21:::0;-1:-1:-1;22046:92:0::1;;;22073:65;22104:10;22128:9;22116;:21;22073:30;:65::i;:::-;18514:1;21202:944:::0;;;;;;;;;;;:::o;30823:747::-;31012:21;30988:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;31070:4:::1;-1:-1:-1::0;;;;;31059:15:0::1;:4;;31064:1;31059:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31059:7:0::1;-1:-1:-1::0;;;;;31059:15:0::1;;31051:52;;;::::0;;-1:-1:-1;;;31051:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31051:52:0;;;;;;;;;;;;;::::1;;31124:51;::::0;;-1:-1:-1;;;31124:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31137:7:0::1;31124:34;::::0;::::1;::::0;31159:9;;31170:4;;;;31124:51;;31170:4;31124:51:::1;::::0;::::1;::::0;31170:4;31124:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31124:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31124:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31124:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;31124:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;31124:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;31124:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;31124:51:0;::::1;::::0;::::1;::::0;412:14:-1;31124:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;31124:51:0;;;;;;;;::::0;::::1;;31114:61;;31208:9;31194:7;31202:1;31194:10;;;;;;;;;;;;;;:23;;31186:70;;;;-1:-1:-1::0;;;31186:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31273:4;-1:-1:-1::0;;;;;31267:19:0::1;;31295:7;31303:1;31295:10;;;;;;;;;;;;;;31267:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31267:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31267:41:0;;;;;31332:4;-1:-1:-1::0;;;;;31326:20:0::1;;31347:25;31355:4;;31360:1;31355:7;;;;;;31347:25;31374:7;31382:1;31374:10;;;;;;;;;;;;;;31326:59;;;;;;;;;;;;;-1:-1:-1::0;;;;;31326:59:0::1;-1:-1:-1::0;;;;;31326:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31326:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31326:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31326:59:0;31319:67:::1;;;;31397:24;31403:7;31412:4;;31397:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31418:2:0;;-1:-1:-1;31397:5:0::1;::::0;-1:-1:-1;;31397:24:0:i:1;:::-;31484:7;31492:1;31484:10;;;;;;;;;;;;;;31472:9;:22;31468:94;;;31496:66;31527:10;31551:7;31559:1;31551:10;;;;;;;;;;;;;;31539:9;:22;31496:30;:66::i;16098:361::-:0;16293:45;;;-1:-1:-1;;;;;16293:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16293:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16282:57:0;;;;16247:12;;16261:17;;16282:10;;;;16293:45;16282:57;;;25:18:-1;16282:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16282: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;;16246:93:0;;;;16358:7;:57;;;;-1:-1:-1;16370:11:0;;:16;;:44;;;16401:4;16390:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16390:24:0;16370:44;16350:101;;;;;-1:-1:-1;;;16350:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16098:361;;;;;:::o;16877:197::-;16987:12;;;16947;16987;;;;;;;;;-1:-1:-1;;;;;16964:7:0;;;16980:5;;16964:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16964:36: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;;16946:54:0;;;17019:7;17011:55;;;;-1:-1:-1;;;17011:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16877:197;;;:::o;16467:402::-;16692:51;;;-1:-1:-1;;;;;16692:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16692:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16681:63:0;;;;16646:12;;16660:17;;16681:10;;;;16692:51;16681:63;;;25:18:-1;16681:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16681: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;;16645:99:0;;;;16763:7;:57;;;;-1:-1:-1;16775:11:0;;:16;;:44;;;16806:4;16795:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16795:24:0;16775:44;16755:106;;;;-1:-1:-1;;;16755:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16467:402;;;;;;:::o;26591:828::-;26698:6;26693:719;26724:1;26710:4;:11;:15;26706:1;:19;26693:719;;;26748:13;26763:14;26782:4;26787:1;26782:7;;;;;;;;;;;;;;26791:4;26796:1;26800;26796:5;26791:11;;;;;;;;;;;;;;26747:56;;;;26819:14;26851:7;-1:-1:-1;;;;;26838:32:0;;26871:5;26878:6;26838:47;;;;;;;;;;;;;-1:-1:-1;;;;;26838:47:0;-1:-1:-1;;;;;26838:47:0;;;;;;-1:-1:-1;;;;;26838:47:0;-1:-1:-1;;;;;26838:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26838:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26838:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26838:47:0;26917:14;;26838:47;;-1:-1:-1;26900:14:0;;26917:7;;26929:1;26925:5;;;26917:14;;;;;;;;;;;;;;;;26950:10;;26917:14;;-1:-1:-1;;;;;;26950:10:0;:24;26946:131;;27007:10;;26995:66;;;-1:-1:-1;;;26995:66:0;;27024:10;26995:66;;;;-1:-1:-1;;;;;26995:66:0;;;;;;;;;;;;;;;;;;;;;;27007:10;;;;;26995:28;;:66;;;;;;;;;;;;;;27007:10;;26995:66;;;2:2:-1;;;;27:1;24;17:12;2:2;26995:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26995:66:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;26946:131:0;27092:15;27109;27137:6;-1:-1:-1;;;;;27128:15:0;:5;-1:-1:-1;;;;;27128:15:0;;:61;;27170:9;27186:1;27128:61;;;27152:1;27156:9;27128:61;27091:98;;;;27204:10;27235:1;27221:4;:11;:15;27217:1;:19;:56;;27270:3;27217:56;;;27239:28;27247:6;27255:4;27260:1;27264;27260:5;27255:11;;;;;;;;;;;;;;27239:7;:28::i;:::-;27204:69;;27298:22;27306:5;27313:6;27298:7;:22::i;:::-;-1:-1:-1;;;;;27288:38:0;;27345:10;27357;27369:2;27383:1;27373:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;27373:12:0;87:42:-1;143:17;;-1:-1;27373:12:0;;27288:112;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27288:112:0;-1:-1:-1;;;;;27288:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27288:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27288:112:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26727:3:0;;;;;-1:-1:-1;26693:719:0;;-1:-1:-1;;;;;;;;26693:719:0;;;26591:828;;;:::o;31717:1340::-;31830:6;31825:1225;31856:1;31842:4;:11;:15;31838:1;:19;31825:1225;;;31880:13;31895:14;31914:4;31919:1;31914:7;;;;;;;;;;;;;;31923:4;31928:1;31932;31928:5;31923:11;;;;;;;;;;;;;;31879:56;;;;31951:14;31983:7;-1:-1:-1;;;;;31970:32:0;;32003:5;32010:6;31970:47;;;;;;;;;;;;;-1:-1:-1;;;;;31970:47:0;-1:-1:-1;;;;;31970:47:0;;;;;;-1:-1:-1;;;;;31970:47:0;-1:-1:-1;;;;;31970:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31970:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31970:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31970:47:0;;-1:-1:-1;32032:14:0;32059:22;32067:5;32074:6;32059:7;:22::i;:::-;32032:50;;32097:16;32128:17;32219:13;32234;32252:4;-1:-1:-1;;;;;32252:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32252:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32252:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32252:18:0;;;;;;;32218:52;;;;;-1:-1:-1;32218:52:0;;-1:-1:-1;32290:17:0;;-1:-1:-1;;;;;32331:15:0;;;;;;;:61;;32373:8;32383;32331:61;;;32350:8;32360;32331:61;32289:103;;;;32425:56;32468:12;32432:5;-1:-1:-1;;;;;32425:23:0;;32457:4;32425:38;;;;;;;;;;;;;-1:-1:-1;;;;;32425:38:0;-1:-1:-1;;;;;32425:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;32425:56:0;32515:91;;;-1:-1:-1;;;32515:91:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32515:91:0;;;;;;;;;;;;;;;;;;-1:-1:-1;32528:7:0;32515:34;;;;;;:91;;;;;;;;;;;;;;;:34;:91;;;2:2:-1;;;;27:1;24;17:12;2:2;32515:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32515:91:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32515:91:0;32640:10;;32515:91;;-1:-1:-1;;;;;;32640:10:0;:24;;-1:-1:-1;32636:134:0;;-1:-1:-1;;;32636:134:0;32697:10;;32685:69;;;-1:-1:-1;;;32685:69:0;;32714:10;32685:69;;;;-1:-1:-1;;;;;32685:69:0;;;;;;;;;;;;;;;;;;;;;;32697:10;;;;;32685:28;;:69;;;;;;;;;;;;;;32697:10;;32685:69;;;2:2:-1;;;;27:1;24;17:12;2:2;32685:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32685:69:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;32636:134:0;32785:15;32802;32830:6;-1:-1:-1;;;;;32821:15:0;:5;-1:-1:-1;;;;;32821:15:0;;:67;;32866:12;32885:1;32821:67;;;32845:1;32849:12;32821:67;32784:104;;;;32903:10;32934:1;32920:4;:11;:15;32916:1;:19;:56;;32969:3;32916:56;;;32938:28;32946:6;32954:4;32959:1;32963;32959:5;32954:11;;;;;;;32938:28;33025:12;;;33035:1;33025:12;;;;;;;;;;-1:-1:-1;;;32987:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32987:51:0;;;;;;;;;;;;;;;;;;;;;;32903:69;;-1:-1:-1;32987:9:0;;;;;;32997:10;;33009;;32903:69;;33025:12;;32987:51;;;;;;;;33025:12;;32987:51;;;;33025: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;32987:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32987:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31859:3:0;;;;;-1:-1:-1;31825:1225:0;;-1:-1:-1;;;;;;;;;;31825:1225:0;11881:136;11939:7;11966:43;11970:1;11973;11966:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11959:50;11881:136;-1:-1:-1;;;11881:136:0:o;19103:1376::-;19416:45;;;-1:-1:-1;;;19416:45:0;;-1:-1:-1;;;;;19416:45:0;;;;;;;;;;;;;;;;19321:12;;;;;;19429:7;19416:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;19416:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19416:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19416:45:0;-1:-1:-1;;;;;19416:59:0;;19412:140;;;19492:48;;;-1:-1:-1;;;19492:48:0;;-1:-1:-1;;;;;19492:48:0;;;;;;;;;;;;;;;;19505:7;19492:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;19492:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;19492:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19492:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;19412:140:0;19595:49;;;-1:-1:-1;;;19595:49:0;;-1:-1:-1;;;;;19595:49:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;19608:7:0;19595:33;;;;;;:49;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;19595:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19595:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19595:49:0;;;;;;;;;-1:-1:-1;19595:49:0;-1:-1:-1;19659:13:0;;:30;;;;-1:-1:-1;19676:13:0;;19659:30;19655:817;;;19728:14;;-1:-1:-1;19744:14:0;;-1:-1:-1;19655:817:0;;;19792:19;19827:7;-1:-1:-1;;;;;19814:27:0;;19842:14;19858:8;19868;19814:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19814:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19814:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19814:63:0;;-1:-1:-1;19896:32:0;;;19892:569;;19975:10;19957:14;:28;;19949:74;;;;-1:-1:-1;;;19949:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20064:14;;-1:-1:-1;20080:14:0;-1:-1:-1;20080:14:0;19892:569;;;20136:19;20171:7;-1:-1:-1;;;;;20158:27:0;;20186:14;20202:8;20212;20158:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20158:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20158:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20158:63:0;;-1:-1:-1;20247:32:0;;;;20240:40;;;;20325:10;20307:14;:28;;20299:74;;;;-1:-1:-1;;;20299:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20414:14;-1:-1:-1;20430:14:0;;-1:-1:-1;19892:569:0;19655:817;;19103:1376;;;;;;;;;;;:::o;17609:229::-;-1:-1:-1;;;;;17683:22:0;;17675:73;;;;-1:-1:-1;;;17675:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17785:6;;;17764:38;;-1:-1:-1;;;;;17764:38:0;;;;17785:6;;;17764:38;;;17813:6;:17;;-1:-1:-1;;;;;;17813:17:0;-1:-1:-1;;;;;17813:17:0;;;;;;;;;;17609:229::o;12025:192::-;12111:7;12147:12;12139:6;;;;12131:29;;;;-1:-1:-1;;;12131:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12131:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12183:5:0;;;12025:192::o

Swarm Source

ipfs://f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a4
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.