Contract 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c 20

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x319c1a67d142c6db54f0ee99b96ffdb101bc26d7cadae1663dc0785591b70320Any Swap In Auto48439552022-09-28 15:15:4122 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.3917349669810
0xe93346fa01da498214536de49e9c1488054a4889c0a7d33730d2a42458e054b8Any Swap In Auto48435862022-09-28 14:40:4657 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.3917376633260
0x24a902668437a79926eb3ed89ad71c076b74550a5bf6e01c88aceb6c8450a484Any Swap Out48435672022-09-28 14:38:5858 mins ago0x68a498caa761d29247b1e08b4893baaf373676ac IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.2463472130510
0xe4f23b816b3c357bcca1e0f631981d6e5b094b1e065560885723d0f412f96f97Any Swap In Auto48433992022-09-28 14:23:041 hr 14 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.391672173530
0x988795a229d5d6bf292698b097026759ed23aefff713e8adff25d31b585c5106Any Swap In Auto48432402022-09-28 14:07:591 hr 29 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.3107375685420
0xa0f65583cfa2dce2d2dbc6bab6f2c68b78f7a128ba79865818e7da6c9fcbeb67Any Swap In Auto48405372022-09-28 9:51:225 hrs 46 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.3916827849420
0x7310fe27098c198982103505c2db18fcf65729460ddc3413cacac0b9e08ec6c4Any Swap Out48402132022-09-28 9:20:456 hrs 17 mins ago0xe85f14ca3abc4724a666d8beb0a5793a84a94a7a IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.2463550332630
0xba2eca8bbd48c46be9f537eba124ce060609924801bac77306b409bb01c7137eAny Swap In Auto48389062022-09-28 7:16:508 hrs 21 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.7653842402130
0x844f4424f7240ce484924fc6e97e311cf03b431452b01410efc9b4234614cf6fAny Swap In Auto48388892022-09-28 7:15:148 hrs 22 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO1.0355899175690
0x5a10333cbc2cd38edf8e81433a5acbad8a53485f8e30638cb1a40d3284a4ffdfAny Swap Out48332522022-09-27 22:20:5317 hrs 16 mins ago0xa311f7ca3eb2fb98123a807f9b8e4bbbdbdcb2ee IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.197252517466 4,911.054835468
0xc744e017a1b5ee2f25574b902fd442c3996156114d2f79da8f1cb0681b0dafecAny Swap Out48323182022-09-27 20:52:0618 hrs 45 mins ago0xb55f4c426a0ce3c40a803f92bef84c5226819d02 IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.247059458548 4,912.59785147
0xca0268b7521ad99aad08a67dcde3a4023a8d8bc5515ec9b031378105044dcae8Any Swap Out Und...48319702022-09-27 20:18:5419 hrs 18 mins ago0x2d34ddb6b5edebac00b255260869862a6e07f814 IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.636716070103 4,911.113708681
0x0250e3aaec57f2872bfc115db51d810e902e9cdf5b469aed0ffe911b7e3d7ad9Any Swap In Auto48295992022-09-27 16:33:5523 hrs 3 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO1.0356156421560
0x5ee0aa34ef07c9b447541b0d0b56477369f62ddf1c3e2080ec205e6ae99d183dAny Swap In Auto48294812022-09-27 16:22:4223 hrs 15 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.8903541033950
0x56a359c5dc7e10cca0c3de207805fd4a19b2b699c0416e27cc24e9ee8242fa71Any Swap Out48281212022-09-27 14:13:291 day 1 hr ago0xb47612b64a8f58698c9ac62d099ece0d3b99d8c0 IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.197311043774 4,911.289204084
0x9052fc83f975df50aff326234f77edaa5e59c944daf1cfe3c64205f3bce78fb1Any Swap Out48271652022-09-27 12:42:411 day 2 hrs ago0xa311f7ca3eb2fb98123a807f9b8e4bbbdbdcb2ee IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.197263686144 4,911.33290537
0xeb1f346e7b3198d66d69773123d67bbc3095ca3221bc9303301a7a187f88ff70Any Swap Out48267332022-09-27 12:01:471 day 3 hrs ago0x2b5101e9b75b099c197dfdbf57513a96b13acbf7 IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.246461492167 4,911.35252018
0x1e4344393948dfcb929857e85ebb46673e1f5860d811b1dc0a7559794c866092Any Swap In Auto48264672022-09-27 11:36:261 day 4 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.3919937910080
0x09419045ad37488227b651ba7654b02bf6c0a760f2d819777fc541b5eb101fcdAny Swap In Auto48258622022-09-27 10:39:061 day 4 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.310723508240
0x9a89848b1a6962436decfbf5c9719fc8164f077aeabc696423e25869ae37c22fAny Swap Out48245722022-09-27 8:36:371 day 7 hrs ago0xd1f02f69b9ca9fd4ac52fed6c55db92c8f81ce90 IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.247001773013 4,911.450816515
0x9d4ef1be74563a96b70487d82cf91f7e26013a685ce8b7a6877af4b8d9207f8aAny Swap Out48239702022-09-27 7:39:231 day 7 hrs ago0xdc98bc5cde9aa6af16d10e73e15d39a0d9768805 IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.246467824353 4,911.478704594
0x150394736c45119c5d09700b52f76b917a7bf8053816687cde0ca11abb374edbAny Swap Out48237282022-09-27 7:16:301 day 8 hrs ago0xd1f02f69b9ca9fd4ac52fed6c55db92c8f81ce90 IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.247003738678 4,911.489902347
0xc2a8fe877e7911b7a487bc9abf6235d943ada2f71d2caf170f11032d604c33e0Any Swap Out48235092022-09-27 6:55:461 day 8 hrs ago0xd1f02f69b9ca9fd4ac52fed6c55db92c8f81ce90 IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.247004249141 4,911.500052522
0x5c6696ea26053fc575b40742a75fc490fcfc17fb3ea57e1498a0c1a69e78abd1Any Swap Out48232962022-09-27 6:35:201 day 9 hrs ago0xd1f02f69b9ca9fd4ac52fed6c55db92c8f81ce90 IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.247004741017 4,911.509833119
0x04fba4b005cea231d30506cc8d7b3ad0a2ceaeab8d7de1906ec96985528d1784Any Swap Out Und...48232862022-09-27 6:34:231 day 9 hrs ago0x4011ee4762c73ad36570cd46463f59484f0e3bfc IN  0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0 CRO0.636811688488 4,911.510280887
[ Download CSV Export 
Latest 14 internal transactions
Parent Txn Hash Block From To Value
0xe91e95fc5207eabd16fbfe1cf83e8205a3bef01152d0ef3d87a5ea60674b3f9548104392022-09-26 10:15:352 days 5 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0xdb7a5cff55aa586948723ae31fc7f804f8d3b321900 CRO
0xe91e95fc5207eabd16fbfe1cf83e8205a3bef01152d0ef3d87a5ea60674b3f9548104392022-09-26 10:15:352 days 5 hrs ago Cronos: WCRO Token 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c900 CRO
0xafecead33838d0bf8c9510b40cdc9f82cc986e5f1775ab5f05c191d7ca1f96d148104112022-09-26 10:12:552 days 5 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0xdb7a5cff55aa586948723ae31fc7f804f8d3b3213,930 CRO
0xafecead33838d0bf8c9510b40cdc9f82cc986e5f1775ab5f05c191d7ca1f96d148104112022-09-26 10:12:552 days 5 hrs ago Cronos: WCRO Token 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c3,930 CRO
0x04c1490b25d24abf21c60b6e4b1aeb06b37bd1dae2fb98c0955eb44a46da475e48098352022-09-26 9:18:222 days 6 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c Cronos: WCRO Token900 CRO
0x8bab7f1eeeb8a200c1a0f84969a2d254af0802ae0fe0eda86c5edbe4f69ea36548094102022-09-26 8:38:082 days 6 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c Cronos: WCRO Token4,000 CRO
0xc27dc643ae89bce40e2919a5b4a74679a664d952b17d93d22953e59803e93e8243156082022-08-24 23:02:4434 days 16 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c Cronos: WCRO Token340 CRO
0xa28cc44012e7c043909b7467ff5ad7484cee184541d159ef46ce940edaf1137240760102022-08-09 5:46:4350 days 9 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c Cronos: WCRO Token100 CRO
0x26cfd921db82108063e5d7b72ab4033e2eb100afbaebeaf69755465dbd0c9d0040615302022-08-08 6:54:5151 days 8 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0x8e9df7202da4e7b49267bf5af464e01722b3330f35 CRO
0x26cfd921db82108063e5d7b72ab4033e2eb100afbaebeaf69755465dbd0c9d0040615302022-08-08 6:54:5151 days 8 hrs ago Cronos: WCRO Token 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c35 CRO
0x77634b6b008dab0a6d4fac670654be14f1f403001139d0f3b67bf632f892f57c40613272022-08-08 6:35:4251 days 9 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c Cronos: WCRO Token105 CRO
0x1d16473321daee09e2669821a3071a5bd00c0fc4bff2bd38fca900932e6b6dc640569082022-08-07 23:38:5851 days 15 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c0x8b7230f45209306aee243cb0fee41438f1e15f9425 CRO
0x1d16473321daee09e2669821a3071a5bd00c0fc4bff2bd38fca900932e6b6dc640569082022-08-07 23:38:5851 days 15 hrs ago Cronos: WCRO Token 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c25 CRO
0xa100e74c53e5a165378a6ccb366a8ca5206852c4a58d53ef9b67f91cae1305bc40537162022-08-07 18:37:2451 days 21 hrs ago 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c Cronos: WCRO Token25 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV3Router

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-01-12
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.8.2;

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

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

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

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

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

library SushiswapV2Library {
    using SafeMathSushiswap for uint;

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

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint160(uint256(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash
            )))));
    }

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

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

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

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

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

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'SushiswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

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

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

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

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

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

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

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

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

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

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

interface AnyswapV1ERC20 {
    function mint(address to, uint256 amount) external returns (bool);
    function burn(address from, uint256 amount) external returns (bool);
    function changeVault(address newVault) external returns (bool);
    function depositVault(uint amount, address to) external returns (uint);
    function withdrawVault(address from, uint amount, address to) external returns (uint);
    function underlying() external view returns (address);
    function deposit(uint amount, address to) external returns (uint);
    function withdraw(uint amount, address to) external returns (uint);
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AnyswapV3Router {
    using SafeERC20 for IERC20;
    using SafeMathSushiswap for uint;

    address public immutable factory;
    address public immutable wNATIVE;

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

    constructor(address _factory, address _wNATIVE, address _mpc) {
        _newMPC = _mpc;
        _newMPCEffectiveTime = block.timestamp;
        factory = _factory;
        wNATIVE = _wNATIVE;
    }

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

    address private _oldMPC;
    address private _newMPC;
    uint256 private _newMPCEffectiveTime;


    event LogChangeMPC(address indexed oldMPC, address indexed newMPC, uint indexed effectiveTime, uint chainID);
    event LogChangeRouter(address indexed oldRouter, address indexed newRouter, uint chainID);
    event LogAnySwapIn(bytes32 indexed txhash, address indexed token, address indexed to, uint amount, uint fromChainID, uint toChainID);
    event LogAnySwapOut(address indexed token, address indexed from, address indexed to, uint amount, uint fromChainID, uint toChainID);
    event LogAnySwapTradeTokensForTokens(address[] path, address indexed from, address indexed to, uint amountIn, uint amountOutMin, uint fromChainID, uint toChainID);
    event LogAnySwapTradeTokensForNative(address[] path, address indexed from, address indexed to, uint amountIn, uint amountOutMin, uint fromChainID, uint toChainID);

    modifier onlyMPC() {
        require(msg.sender == mpc(), "AnyswapV3Router: FORBIDDEN");
        _;
    }

    function mpc() public view returns (address) {
        if (block.timestamp >= _newMPCEffectiveTime) {
            return _newMPC;
        }
        return _oldMPC;
    }

    function cID() public view returns (uint id) {
        assembly {id := chainid()}
    }

    function changeMPC(address newMPC) public onlyMPC returns (bool) {
        require(newMPC != address(0), "AnyswapV3Router: address(0x0)");
        _oldMPC = mpc();
        _newMPC = newMPC;
        _newMPCEffectiveTime = block.timestamp + 2*24*3600;
        emit LogChangeMPC(_oldMPC, _newMPC, _newMPCEffectiveTime, cID());
        return true;
    }

    function changeVault(address token, address newVault) public onlyMPC returns (bool) {
        require(newVault != address(0), "AnyswapV3Router: address(0x0)");
        return AnyswapV1ERC20(token).changeVault(newVault);
    }

    function _anySwapOut(address from, address token, address to, uint amount, uint toChainID) internal {
        AnyswapV1ERC20(token).burn(from, amount);
        emit LogAnySwapOut(token, from, to, amount, cID(), toChainID);
    }

    // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to`
    function anySwapOut(address token, address to, uint amount, uint toChainID) external {
        _anySwapOut(msg.sender, token, to, amount, toChainID);
    }

    // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to` by minting with `underlying`
    function anySwapOutUnderlying(address token, address to, uint amount, uint toChainID) external {
        IERC20(AnyswapV1ERC20(token).underlying()).safeTransferFrom(msg.sender, token, amount);
        AnyswapV1ERC20(token).depositVault(amount, msg.sender);
        _anySwapOut(msg.sender, token, to, amount, toChainID);
    }

    function anySwapOutNative(address token, address to, uint toChainID) external payable {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        IwNATIVE(wNATIVE).deposit{value: msg.value}();
        assert(IwNATIVE(wNATIVE).transfer(token, msg.value));
        AnyswapV1ERC20(token).depositVault(msg.value, msg.sender);
        _anySwapOut(msg.sender, token, to, msg.value, toChainID);
    }

    function anySwapOutUnderlyingWithPermit(
        address from,
        address token,
        address to,
        uint amount,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external {
        address _underlying = AnyswapV1ERC20(token).underlying();
        IERC20(_underlying).permit(from, address(this), amount, deadline, v, r, s);
        IERC20(_underlying).safeTransferFrom(from, token, amount);
        AnyswapV1ERC20(token).depositVault(amount, from);
        _anySwapOut(from, token, to, amount, toChainID);
    }

    function anySwapOutUnderlyingWithTransferPermit(
        address from,
        address token,
        address to,
        uint amount,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external {
        IERC20(AnyswapV1ERC20(token).underlying()).transferWithPermit(from, token, amount, deadline, v, r, s);
        AnyswapV1ERC20(token).depositVault(amount, from);
        _anySwapOut(from, token, to, amount, toChainID);
    }

    function anySwapOut(address[] calldata tokens, address[] calldata to, uint[] calldata amounts, uint[] calldata toChainIDs) external {
        for (uint i = 0; i < tokens.length; i++) {
            _anySwapOut(msg.sender, tokens[i], to[i], amounts[i], toChainIDs[i]);
        }
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID
    function _anySwapIn(bytes32 txs, address token, address to, uint amount, uint fromChainID) internal {
        AnyswapV1ERC20(token).mint(to, amount);
        emit LogAnySwapIn(txs, token, to, amount, fromChainID, cID());
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID
    // triggered by `anySwapOut`
    function anySwapIn(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying`
    function anySwapInUnderlying(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
        AnyswapV1ERC20(token).withdrawVault(to, amount, to);
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying` if possible
    function anySwapInAuto(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
        AnyswapV1ERC20 _anyToken = AnyswapV1ERC20(token);
        address _underlying = _anyToken.underlying();
        if (_underlying != address(0) && IERC20(_underlying).balanceOf(token) >= amount) {
            if (_underlying == wNATIVE) {
                _anyToken.withdrawVault(to, amount, address(this));
                IwNATIVE(wNATIVE).withdraw(amount);
                TransferHelper.safeTransferNative(to, amount);
            } else {
                _anyToken.withdrawVault(to, amount, to);
            }
        }
    }

    function depositNative(address token, address to) external payable returns (uint) {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        IwNATIVE(wNATIVE).deposit{value: msg.value}();
        assert(IwNATIVE(wNATIVE).transfer(token, msg.value));
        AnyswapV1ERC20(token).depositVault(msg.value, to);
        return msg.value;
    }

    function withdrawNative(address token, uint amount, address to) external returns (uint) {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        AnyswapV1ERC20(token).withdrawVault(msg.sender, amount, address(this));
        IwNATIVE(wNATIVE).withdraw(amount);
        TransferHelper.safeTransferNative(to, amount);
        return amount;
    }

    // extracts mpc fee from bridge fees
    function anySwapFeeTo(address token, uint amount) external onlyMPC {
        address _mpc = mpc();
        AnyswapV1ERC20(token).mint(_mpc, amount);
        AnyswapV1ERC20(token).withdrawVault(_mpc, amount, _mpc);
    }

    function anySwapIn(bytes32[] calldata txs, address[] calldata tokens, address[] calldata to, uint256[] calldata amounts, uint[] calldata fromChainIDs) external onlyMPC {
        for (uint i = 0; i < tokens.length; i++) {
            _anySwapIn(txs[i], tokens[i], to[i], amounts[i], fromChainIDs[i]);
        }
    }

    // **** 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,) = SushiswapV2Library.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? SushiswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            ISushiswapV2Pair(SushiswapV2Library.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlying(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).safeTransferFrom(msg.sender, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, msg.sender);
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlyingWithPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        address _underlying = AnyswapV1ERC20(path[0]).underlying();
        IERC20(_underlying).permit(from, address(this), amountIn, deadline, v, r, s);
        IERC20(_underlying).safeTransferFrom(from, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        {
        address[] memory _path = path;
        address _from = from;
        address _to = to;
        uint _amountIn = amountIn;
        uint _amountOutMin = amountOutMin;
        uint _cID = cID();
        uint _toChainID = toChainID;
        emit LogAnySwapTradeTokensForTokens(_path, _from, _to, _amountIn, _amountOutMin, _cID, _toChainID);
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).transferWithPermit(from, path[0], amountIn, deadline, v, r, s);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, from, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // Swaps `amounts[path.length-1]` `path[path.length-1]` to `to` on this chain
    // Triggered by `anySwapOutExactTokensForTokens`
    function anySwapInExactTokensForTokens(
        bytes32 txs,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint fromChainID
    ) external onlyMPC virtual ensure(deadline) returns (uint[] memory amounts) {
        amounts = SushiswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SushiswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        _anySwapIn(txs, path[0], SushiswapV2Library.pairFor(factory, path[0], path[1]), amounts[0], fromChainID);
        _swap(amounts, path, to);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNative(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForNative(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlying(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).safeTransferFrom(msg.sender, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, msg.sender);
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForNative(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlyingWithPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        address _underlying = AnyswapV1ERC20(path[0]).underlying();
        IERC20(_underlying).permit(from, address(this), amountIn, deadline, v, r, s);
        IERC20(_underlying).safeTransferFrom(from, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        {
        address[] memory _path = path;
        address _from = from;
        address _to = to;
        uint _amountIn = amountIn;
        uint _amountOutMin = amountOutMin;
        uint _cID = cID();
        uint _toChainID = toChainID;
        emit LogAnySwapTradeTokensForNative(_path, _from, _to, _amountIn, _amountOutMin, _cID, _toChainID);
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).transferWithPermit(from, path[0], amountIn, deadline, v, r, s);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        emit LogAnySwapTradeTokensForNative(path, from, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // Swaps `amounts[path.length-1]` `path[path.length-1]` to `to` on this chain
    // Triggered by `anySwapOutExactTokensForNative`
    function anySwapInExactTokensForNative(
        bytes32 txs,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint fromChainID
    ) external onlyMPC virtual ensure(deadline) returns (uint[] memory amounts) {
        require(path[path.length - 1] == wNATIVE, 'AnyswapV3Router: INVALID_PATH');
        amounts = SushiswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AnyswapV3Router: INSUFFICIENT_OUTPUT_AMOUNT');
        _anySwapIn(txs, path[0],  SushiswapV2Library.pairFor(factory, path[0], path[1]), amounts[0], fromChainID);
        _swap(amounts, path, address(this));
        IwNATIVE(wNATIVE).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferNative(to, amounts[amounts.length - 1]);
    }

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_wNATIVE","type":"address"},{"internalType":"address","name":"_mpc","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapTradeTokensForNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapTradeTokensForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chainID","type":"uint256"}],"name":"LogChangeMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":true,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"uint256","name":"chainID","type":"uint256"}],"name":"LogChangeRouter","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"anySwapFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"txs","type":"bytes32[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"fromChainIDs","type":"uint256[]"}],"name":"anySwapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInAuto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"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"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInExactTokensForNative","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"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"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"toChainIDs","type":"uint256[]"}],"name":"anySwapOut","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNative","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlyingWithTransferPermit","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokens","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlyingWithTransferPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlyingWithTransferPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cID","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMPC","type":"address"}],"name":"changeMPC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"depositNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","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":"pure","type":"function"},{"inputs":[],"name":"wNATIVE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b506040516200504d3803806200504d833981016040819052620000349162000095565b600180546001600160a01b039092166001600160a01b0319909216919091179055426002556001600160601b0319606092831b8116608052911b1660a052620000df565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600060608486031215620000ab57600080fd5b620000b68462000078565b9250620000c66020850162000078565b9150620000d66040850162000078565b90509250925092565b60805160601c60a05160601c614eb6620001976000396000818161020d0152818161051601528181610820015281816108ef015281816116270152818161181001528181611cc401528181611d8501528181611e0b01528181611f7d015281816120d301528181612aa001528181612b610152612be70152600081816105e801528181610cbf01528181610e6401528181610f7c015281816116d30152818161302401528181613b0a0152613b5a0152614eb66000f3fe6080604052600436106101fd5760003560e01c8063832e94921161010d578063a5e56571116100a0578063d06ca61f1161006f578063d06ca61f1461062a578063d8b9f6101461064a578063dcfb77b11461066a578063edbdf5e21461068a578063f75c2664146106aa57600080fd5b8063a5e56571146105a3578063ad615dec146105b6578063c45a0155146105d6578063c8e174f61461060a57600080fd5b80638fd903f5116100dc5780638fd903f51461050457806399a2f2d71461055057806399cd84b5146105635780639aa1ac611461058357600080fd5b8063832e94921461048457806385f8c259146104a457806387cc6e2f146104c45780638d7d3eea146104e457600080fd5b80633f88de89116101905780635b7b018c1161015f5780635b7b018c146103f157806365782f56146104115780636a45397214610431578063701bb89114610451578063825bb13c1461046457600080fd5b80633f88de8914610361578063456862aa146103815780634d93bb94146103b157806352a397d5146103d157600080fd5b80631f00ca74116101cc5780631f00ca74146102d4578063241dc2df1461030157806325121b76146103215780632fc1e7281461034157600080fd5b80630175b1c414610241578063054d50d4146102615780630bb57203146102945780631b91a934146102b457600080fd5b3661023c57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461023a5761023a614df0565b005b600080fd5b34801561024d57600080fd5b5061023a61025c36600461477d565b6106bf565b34801561026d57600080fd5b5061028161027c366004614a07565b6109ed565b6040519081526020015b60405180910390f35b3480156102a057600080fd5b5061023a6102af36600461498a565b610a02565b3480156102c057600080fd5b5061023a6102cf366004614371565b610b22565b3480156102e057600080fd5b506102f46102ef3660046148b2565b610cb8565b60405161028b9190614b9e565b34801561030d57600080fd5b5061023a61031c36600461443d565b610cee565b34801561032d57600080fd5b5061023a61033c36600461466a565b610d01565b34801561034d57600080fd5b506102f461035c3660046147cf565b610e04565b34801561036d57600080fd5b5061023a61037c36600461477d565b61105d565b34801561038d57600080fd5b506103a161039c366004614338565b61112a565b604051901515815260200161028b565b3480156103bd57600080fd5b5061023a6103cc3660046144f1565b611235565b3480156103dd57600080fd5b506102f46103ec3660046147cf565b6115c2565b3480156103fd57600080fd5b506103a161040c3660046142f7565b6118e4565b34801561041d57600080fd5b5061023a61042c36600461498a565b611a0c565b34801561043d57600080fd5b5061023a61044c36600461498a565b611b0b565b61028161045f366004614338565b611cc0565b34801561047057600080fd5b5061023a61047f36600461477d565b611f2d565b34801561049057600080fd5b5061028161049f3660046144af565b611f79565b3480156104b057600080fd5b506102816104bf366004614a07565b612149565b3480156104d057600080fd5b5061023a6104df366004614483565b612156565b3480156104f057600080fd5b5061023a6104ff366004614371565b61229c565b34801561051057600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161028b565b34801561055c57600080fd5b5046610281565b34801561056f57600080fd5b5061023a61057e3660046144f1565b61242e565b34801561058f57600080fd5b5061023a61059e3660046144f1565b612776565b61023a6105b13660046143fc565b612a9e565b3480156105c257600080fd5b506102816105d1366004614a07565b612d11565b3480156105e257600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b34801561061657600080fd5b5061023a6106253660046144f1565b612d1e565b34801561063657600080fd5b506102f46106453660046148b2565b61301d565b34801561065657600080fd5b5061023a61066536600461498a565b61304a565b34801561067657600080fd5b5061023a6106853660046145a6565b613140565b34801561069657600080fd5b5061023a6106a536600461443d565b6131e6565b3480156106b657600080fd5b506105386132b3565b6106c76132b3565b6001600160a01b0316336001600160a01b0316146107005760405162461bcd60e51b81526004016106f790614c64565b60405180910390fd5b61070d85858585856132de565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561074d57600080fd5b505afa158015610761573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610785919061431b565b90506001600160a01b0381161580159061081957506040516370a0823160e01b81526001600160a01b0387811660048301528591908316906370a082319060240160206040518083038186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108169190614899565b10155b156109e4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316141561096257604051620e75bb60e21b81526001600160a01b038316906239d6ec9061088690889088903090600401614aa9565b602060405180830381600087803b1580156108a057600080fd5b505af11580156108b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614899565b50604051632e1a7d4d60e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561093b57600080fd5b505af115801561094f573d6000803e3d6000fd5b5050505061095d85856133c4565b6109e4565b604051620e75bb60e21b81526001600160a01b038316906239d6ec9061099090889088908290600401614aa9565b602060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614899565b505b50505050505050565b60006109fa848484613490565b949350505050565b8142811015610a235760405162461bcd60e51b81526004016106f790614c9b565b85856000818110610a3657610a36614e1c565b9050602002016020810190610a4b91906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401610a78929190614a90565b602060405180830381600087803b158015610a9257600080fd5b505af1158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca919061475b565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c465b89604051610b1096959493929190614acc565b60405180910390a35050505050505050565b876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5b57600080fd5b505afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b93919061431b565b6001600160a01b031663605629d68a8a89898989896040518863ffffffff1660e01b8152600401610bca9796959493929190614a4f565b602060405180830381600087803b158015610be457600080fd5b505af1158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c919061475b565b50604051630bebbf4d60e41b8152600481018790526001600160a01b038a8116602483015289169063bebbf4d090604401602060405180830381600087803b158015610c6757600080fd5b505af1158015610c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9f9190614899565b50610cad898989898561355e565b505050505050505050565b6060610ce57f00000000000000000000000000000000000000000000000000000000000000008484613642565b90505b92915050565b610cfb338585858561355e565b50505050565b610d096132b3565b6001600160a01b0316336001600160a01b031614610d395760405162461bcd60e51b81526004016106f790614c64565b60005b87811015610df757610de58b8b83818110610d5957610d59614e1c565b905060200201358a8a84818110610d7257610d72614e1c565b9050602002016020810190610d8791906142f7565b898985818110610d9957610d99614e1c565b9050602002016020810190610dae91906142f7565b888886818110610dc057610dc0614e1c565b90506020020135878787818110610dd957610dd9614e1c565b905060200201356132de565b80610def81614dd5565b915050610d3c565b5050505050505050505050565b6060610e0e6132b3565b6001600160a01b0316336001600160a01b031614610e3e5760405162461bcd60e51b81526004016106f790614c64565b8242811015610e5f5760405162461bcd60e51b81526004016106f790614c9b565b610ebd7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b9150878260018451610ecf9190614d7b565b81518110610edf57610edf614e1c565b60200260200101511015610f4b5760405162461bcd60e51b815260206004820152602d60248201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60448201526c13d55514155517d05353d55395609a1b60648201526084016106f7565b6110118a88886000818110610f6257610f62614e1c565b9050602002016020810190610f7791906142f7565b610ff07f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610fae57610fae614e1c565b9050602002016020810190610fc391906142f7565b8c8c6001818110610fd657610fd6614e1c565b9050602002016020810190610feb91906142f7565b61394e565b8560008151811061100357611003614e1c565b6020026020010151876132de565b611050828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613a27915050565b5098975050505050505050565b6110656132b3565b6001600160a01b0316336001600160a01b0316146110955760405162461bcd60e51b81526004016106f790614c64565b6110a285858585856132de565b604051620e75bb60e21b81526001600160a01b038516906239d6ec906110d090869086908290600401614aa9565b602060405180830381600087803b1580156110ea57600080fd5b505af11580156110fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111229190614899565b505050505050565b60006111346132b3565b6001600160a01b0316336001600160a01b0316146111645760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166111ba5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b6040516360e232a960e01b81526001600160a01b0383811660048301528416906360e232a990602401602060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce5919061475b565b84428110156112565760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061126b5761126b614e1c565b905060200201602081019061128091906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b857600080fd5b505afa1580156112cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f0919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b815260040161132a9796959493929190614a4f565b600060405180830381600087803b15801561134457600080fd5b505af1158015611358573d6000803e3d6000fd5b5050505061139a8d8b8b600081811061137357611373614e1c565b905060200201602081019061138891906142f7565b6001600160a01b03841691908f613c29565b898960008181106113ad576113ad614e1c565b90506020020160208101906113c291906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561140e57600080fd5b505af1158015611422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114469190614899565b508989600081811061145a5761145a614e1c565b905060200201602081019061146f91906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161149c929190614a90565b602060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ee919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006115524690565b90506000899050846001600160a01b0316866001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f489878787876040516115a4959493929190614b36565b60405180910390a35050505050505050505050505050505050505050565b60606115cc6132b3565b6001600160a01b0316336001600160a01b0316146115fc5760405162461bcd60e51b81526004016106f790614c64565b824281101561161d5760405162461bcd60e51b81526004016106f790614c9b565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168787611654600182614d7b565b81811061166357611663614e1c565b905060200201602081019061167891906142f7565b6001600160a01b0316146116ce5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20494e56414c49445f5041544800000060448201526064016106f7565b61172c7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b915087826001845161173e9190614d7b565b8151811061174e5761174e614e1c565b602002602001015110156117b85760405162461bcd60e51b815260206004820152602b60248201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b60648201526084016106f7565b6117cf8a88886000818110610f6257610f62614e1c565b61180e82888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a27915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855161184c9190614d7b565b8151811061185c5761185c614e1c565b60200260200101516040518263ffffffff1660e01b815260040161188291815260200190565b600060405180830381600087803b15801561189c57600080fd5b505af11580156118b0573d6000803e3d6000fd5b505050506110508583600185516118c79190614d7b565b815181106118d7576118d7614e1c565b60200260200101516133c4565b60006118ee6132b3565b6001600160a01b0316336001600160a01b03161461191e5760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166119745760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b61197c6132b3565b600080546001600160a01b03199081166001600160a01b0393841617909155600180549091169184169190911790556119b8426202a300614d22565b60028190556001546000546001600160a01b0391821691167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a21981214660405190815260200160405180910390a45060015b919050565b8142811015611a2d5760405162461bcd60e51b81526004016106f790614c9b565b85856000818110611a4057611a40614e1c565b9050602002016020810190611a5591906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401611a82929190614a90565b602060405180830381600087803b158015611a9c57600080fd5b505af1158015611ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad4919061475b565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c46610afd565b8142811015611b2c5760405162461bcd60e51b81526004016106f790614c9b565b611c023387876000818110611b4357611b43614e1c565b9050602002016020810190611b5891906142f7565b8a89896000818110611b6c57611b6c614e1c565b9050602002016020810190611b8191906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b505afa158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf1919061431b565b6001600160a01b0316929190613c29565b85856000818110611c1557611c15614e1c565b9050602002016020810190611c2a91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b158015611c7457600080fd5b505af1158015611c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cac9190614899565b5085856000818110611a4057611a40614e1c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2557600080fd5b505afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d919061431b565b6001600160a01b031614611d835760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250611e45915086903490600401614a90565b602060405180830381600087803b158015611e5f57600080fd5b505af1158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e97919061475b565b611ea357611ea3614df0565b604051630bebbf4d60e41b81523460048201526001600160a01b03838116602483015284169063bebbf4d090604401602060405180830381600087803b158015611eec57600080fd5b505af1158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f249190614899565b50349392505050565b611f356132b3565b6001600160a01b0316336001600160a01b031614611f655760405162461bcd60e51b81526004016106f790614c64565b611f7285858585856132de565b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611fde57600080fd5b505afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612016919061431b565b6001600160a01b03161461203c5760405162461bcd60e51b81526004016106f790614c1a565b604051620e75bb60e21b81526001600160a01b038516906239d6ec9061206a90339087903090600401614aa9565b602060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614899565b50604051632e1a7d4d60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505061214182846133c4565b509092915050565b60006109fa848484613c83565b61215e6132b3565b6001600160a01b0316336001600160a01b03161461218e5760405162461bcd60e51b81526004016106f790614c64565b60006121986132b3565b6040516340c10f1960e01b81529091506001600160a01b038416906340c10f19906121c99084908690600401614a90565b602060405180830381600087803b1580156121e357600080fd5b505af11580156121f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221b919061475b565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec9061224a90849086908290600401614aa9565b602060405180830381600087803b15801561226457600080fd5b505af1158015612278573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb9190614899565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d757600080fd5b505afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f919061431b565b60405163d505accf60e01b81529091506001600160a01b0382169063d505accf9061234a908d9030908c908c908c908c908c90600401614a4f565b600060405180830381600087803b15801561236457600080fd5b505af1158015612378573d6000803e3d6000fd5b50612392925050506001600160a01b0382168b8b8a613c29565b604051630bebbf4d60e41b8152600481018890526001600160a01b038b811660248301528a169063bebbf4d090604401602060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124149190614899565b506124228a8a8a8a8661355e565b50505050505050505050565b844281101561244f5760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061246457612464614e1c565b905060200201602081019061247991906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156124b157600080fd5b505afa1580156124c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e9919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b81526004016125239796959493929190614a4f565b600060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b5050505061256c8d8b8b600081811061137357611373614e1c565b8989600081811061257f5761257f614e1c565b905060200201602081019061259491906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b1580156125e057600080fd5b505af11580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190614899565b508989600081811061262c5761262c614e1c565b905060200201602081019061264191906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161266e929190614a90565b602060405180830381600087803b15801561268857600080fd5b505af115801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c0919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006127244690565b90506000899050846001600160a01b0316866001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b389878787876040516115a4959493929190614b36565b84428110156127975760405162461bcd60e51b81526004016106f790614c9b565b888860008181106127aa576127aa614e1c565b90506020020160208101906127bf91906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156127f757600080fd5b505afa15801561280b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282f919061431b565b6001600160a01b031663605629d68d8b8b600081811061285157612851614e1c565b905060200201602081019061286691906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b815260040161288d9796959493929190614a4f565b602060405180830381600087803b1580156128a757600080fd5b505af11580156128bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128df919061475b565b50888860008181106128f3576128f3614e1c565b905060200201602081019061290891906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561295457600080fd5b505af1158015612968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298c9190614899565b50888860008181106129a0576129a0614e1c565b90506020020160208101906129b591906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b81526004016129e2929190614a90565b602060405180830381600087803b1580156129fc57600080fd5b505af1158015612a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a34919061475b565b50866001600160a01b03168c6001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b38b8b8f8f612a754690565b89604051612a8896959493929190614acc565b60405180910390a3505050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0157600080fd5b505afa158015612b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b39919061431b565b6001600160a01b031614612b5f5760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612bba57600080fd5b505af1158015612bce573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250612c21915086903490600401614a90565b602060405180830381600087803b158015612c3b57600080fd5b505af1158015612c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c73919061475b565b612c7f57612c7f614df0565b604051630bebbf4d60e41b81523460048201523360248201526001600160a01b0384169063bebbf4d090604401602060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614899565b50612d0c338484348561355e565b505050565b60006109fa848484613d4c565b8442811015612d3f5760405162461bcd60e51b81526004016106f790614c9b565b88886000818110612d5257612d52614e1c565b9050602002016020810190612d6791906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9f57600080fd5b505afa158015612db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd7919061431b565b6001600160a01b031663605629d68d8b8b6000818110612df957612df9614e1c565b9050602002016020810190612e0e91906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b8152600401612e359796959493929190614a4f565b602060405180830381600087803b158015612e4f57600080fd5b505af1158015612e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e87919061475b565b5088886000818110612e9b57612e9b614e1c565b9050602002016020810190612eb091906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b158015612efc57600080fd5b505af1158015612f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f349190614899565b5088886000818110612f4857612f48614e1c565b9050602002016020810190612f5d91906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b8152600401612f8a929190614a90565b602060405180830381600087803b158015612fa457600080fd5b505af1158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc919061475b565b50866001600160a01b03168c6001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f48b8b8f8f612a754690565b6060610ce57f000000000000000000000000000000000000000000000000000000000000000084846137d8565b814281101561306b5760405162461bcd60e51b81526004016106f790614c9b565b6130823387876000818110611b4357611b43614e1c565b8585600081811061309557613095614e1c565b90506020020160208101906130aa91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312c9190614899565b5085856000818110610a3657610a36614e1c565b60005b87811015610cad576131d4338a8a8481811061316157613161614e1c565b905060200201602081019061317691906142f7565b89898581811061318857613188614e1c565b905060200201602081019061319d91906142f7565b8888868181106131af576131af614e1c565b905060200201358787878181106131c8576131c8614e1c565b9050602002013561355e565b806131de81614dd5565b915050613143565b613225338584876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b604051630bebbf4d60e41b8152600481018390523360248201526001600160a01b0385169063bebbf4d090604401602060405180830381600087803b15801561326d57600080fd5b505af1158015613281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a59190614899565b50610cfb338585858561355e565b600060025442106132ce57506001546001600160a01b031690565b506000546001600160a01b031690565b6040516340c10f1960e01b81526001600160a01b038516906340c10f199061330c9086908690600401614a90565b602060405180830381600087803b15801561332657600080fd5b505af115801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e919061475b565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd55858561339e4690565b604080519384526020840192909252908201526060015b60405180910390a45050505050565b604080516000808252602082019092526001600160a01b0384169083906040516133ee9190614a33565b60006040518083038185875af1925050503d806000811461342b576040519150601f19603f3d011682016040523d82523d6000602084013e613430565b606091505b5050905080612d0c5760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201526511905253115160d21b60648201526084016106f7565b60008084116134e55760405162461bcd60e51b815260206004820152602d6024820152600080516020614e6183398151915260448201526c17d25394155517d05353d55395609a1b60648201526084016106f7565b6000831180156134f55750600082115b6135115760405162461bcd60e51b81526004016106f790614be2565b600061351f856103e5613ddc565b9050600061352d8285613ddc565b9050600061354783613541886103e8613ddc565b90613e43565b90506135538183614d3a565b979650505050505050565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac9061358c9088908690600401614a90565b602060405180830381600087803b1580156135a657600080fd5b505af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de919061475b565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a856136264690565b60408051928352602083019190915281018690526060016133b5565b60606002825110156136965760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff8111156136b0576136b0614e32565b6040519080825280602002602001820160405280156136d9578160200160208202803683370190505b5090508281600183516136ec9190614d7b565b815181106136fc576136fc614e1c565b6020026020010181815250506000600183516137189190614d7b565b90505b80156137d05760008061376b8786613734600187614d7b565b8151811061374457613744614e1c565b602002602001015187868151811061375e5761375e614e1c565b6020026020010151613e98565b9150915061379384848151811061378457613784614e1c565b60200260200101518383613c83565b8461379f600186614d7b565b815181106137af576137af614e1c565b602002602001018181525050505080806137c890614dbe565b91505061371b565b509392505050565b606060028251101561382c5760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff81111561384657613846614e32565b60405190808252806020026020018201604052801561386f578160200160208202803683370190505b509050828160008151811061388657613886614e1c565b60200260200101818152505060005b600183516138a39190614d7b565b8110156137d0576000806138e9878685815181106138c3576138c3614e1c565b6020026020010151878660016138d99190614d22565b8151811061375e5761375e614e1c565b9150915061391184848151811061390257613902614e1c565b60200260200101518383613490565b8461391d856001614d22565b8151811061392d5761392d614e1c565b6020026020010181815250505050808061394690614dd5565b915050613895565b600080600061395d8585613f71565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001613a059291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351613a389190614d7b565b811015610cfb57600080848381518110613a5457613a54614e1c565b602002602001015185846001613a6a9190614d22565b81518110613a7a57613a7a614e1c565b6020026020010151915091506000613a928383613f71565b509050600087613aa3866001614d22565b81518110613ab357613ab3614e1c565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613ae157826000613ae5565b6000835b91509150600060028a51613af99190614d7b565b8810613b055788613b53565b613b537f0000000000000000000000000000000000000000000000000000000000000000878c613b368c6002614d22565b81518110613b4657613b46614e1c565b602002602001015161394e565b9050613b807f0000000000000000000000000000000000000000000000000000000000000000888861394e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613bbd576020820181803683370190505b506040518563ffffffff1660e01b8152600401613bdd9493929190614cd2565b600060405180830381600087803b158015613bf757600080fd5b505af1158015613c0b573d6000803e3d6000fd5b50505050505050505050508080613c2190614dd5565b915050613a2a565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610cfb90859061406b565b6000808411613cd95760405162461bcd60e51b815260206004820152602e6024820152600080516020614e6183398151915260448201526d17d3d55514155517d05353d5539560921b60648201526084016106f7565b600083118015613ce95750600082115b613d055760405162461bcd60e51b81526004016106f790614be2565b6000613d1d6103e8613d178688613ddc565b90613ddc565b90506000613d316103e5613d1786896141f2565b9050613d4260016135418385614d3a565b9695505050505050565b6000808411613d9b5760405162461bcd60e51b81526020600482015260276024820152600080516020614e6183398151915260448201526617d05353d5539560ca1b60648201526084016106f7565b600083118015613dab5750600082115b613dc75760405162461bcd60e51b81526004016106f790614be2565b82613dd28584613ddc565b6109fa9190614d3a565b6000811580613e0057508282613df28183614d5c565b9250613dfe9083614d3a565b145b610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016106f7565b600082613e508382614d22565b9150811015610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016106f7565b6000806000613ea78585613f71565b509050600080613eb888888861394e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ef057600080fd5b505afa158015613f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f289190614854565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614613f5f578082613f62565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b03161415613fe65760405162461bcd60e51b815260206004820152602760248201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446044820152664452455353455360c81b60648201526084016106f7565b826001600160a01b0316846001600160a01b031610614006578284614009565b83835b90925090506001600160a01b0382166140645760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a205a45524f5f4144445245535360448201526064016106f7565b9250929050565b61407d826001600160a01b0316614248565b6140c95760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016106f7565b600080836001600160a01b0316836040516140e49190614a33565b6000604051808303816000865af19150503d8060008114614121576040519150601f19603f3d011682016040523d82523d6000602084013e614126565b606091505b5091509150816141785760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016106f7565b805115610cfb5780806020019051810190614193919061475b565b610cfb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106f7565b6000826141ff8382614d7b565b9150811115610ce85760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016106f7565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906109fa5750141592915050565b8035611a0781614e48565b60008083601f84011261429c57600080fd5b50813567ffffffffffffffff8111156142b457600080fd5b6020830191508360208260051b850101111561406457600080fd5b80516001600160701b0381168114611a0757600080fd5b803560ff81168114611a0757600080fd5b60006020828403121561430957600080fd5b813561431481614e48565b9392505050565b60006020828403121561432d57600080fd5b815161431481614e48565b6000806040838503121561434b57600080fd5b823561435681614e48565b9150602083013561436681614e48565b809150509250929050565b60008060008060008060008060006101208a8c03121561439057600080fd5b893561439b81614e48565b985060208a01356143ab81614e48565b975060408a01356143bb81614e48565b965060608a0135955060808a013594506143d760a08b016142e6565b935060c08a0135925060e08a013591506101008a013590509295985092959850929598565b60008060006060848603121561441157600080fd5b833561441c81614e48565b9250602084013561442c81614e48565b929592945050506040919091013590565b6000806000806080858703121561445357600080fd5b843561445e81614e48565b9350602085013561446e81614e48565b93969395505050506040820135916060013590565b6000806040838503121561449657600080fd5b82356144a181614e48565b946020939093013593505050565b6000806000606084860312156144c457600080fd5b83356144cf81614e48565b92506020840135915060408401356144e681614e48565b809150509250925092565b60008060008060008060008060008060006101408c8e03121561451357600080fd5b8b3561451e81614e48565b9a5060208c0135995060408c0135985060608c013567ffffffffffffffff81111561454857600080fd5b6145548e828f0161428a565b90995097505060808c013561456881614e48565b955060a08c0135945061457d60c08d016142e6565b935060e08c013592506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806000806000806080898b0312156145c257600080fd5b883567ffffffffffffffff808211156145da57600080fd5b6145e68c838d0161428a565b909a50985060208b01359150808211156145ff57600080fd5b61460b8c838d0161428a565b909850965060408b013591508082111561462457600080fd5b6146308c838d0161428a565b909650945060608b013591508082111561464957600080fd5b506146568b828c0161428a565b999c989b5096995094979396929594505050565b60008060008060008060008060008060a08b8d03121561468957600080fd5b8a3567ffffffffffffffff808211156146a157600080fd5b6146ad8e838f0161428a565b909c509a5060208d01359150808211156146c657600080fd5b6146d28e838f0161428a565b909a50985060408d01359150808211156146eb57600080fd5b6146f78e838f0161428a565b909850965060608d013591508082111561471057600080fd5b61471c8e838f0161428a565b909650945060808d013591508082111561473557600080fd5b506147428d828e0161428a565b915080935050809150509295989b9194979a5092959850565b60006020828403121561476d57600080fd5b8151801515811461431457600080fd5b600080600080600060a0868803121561479557600080fd5b8535945060208601356147a781614e48565b935060408601356147b781614e48565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b0312156147eb57600080fd5b883597506020890135965060408901359550606089013567ffffffffffffffff81111561481757600080fd5b6148238b828c0161428a565b909650945050608089013561483781614e48565b979a969950949793969295929450505060a08201359160c0013590565b60008060006060848603121561486957600080fd5b614872846142cf565b9250614880602085016142cf565b9150604084015163ffffffff811681146144e657600080fd5b6000602082840312156148ab57600080fd5b5051919050565b600080604083850312156148c557600080fd5b8235915060208084013567ffffffffffffffff808211156148e557600080fd5b818601915086601f8301126148f957600080fd5b81358181111561490b5761490b614e32565b8060051b604051601f19603f8301168101818110858211171561493057614930614e32565b604052828152858101935084860182860187018b101561494f57600080fd5b600095505b83861015614979576149658161427f565b855260019590950194938601938601614954565b508096505050505050509250929050565b600080600080600080600060c0888a0312156149a557600080fd5b8735965060208801359550604088013567ffffffffffffffff8111156149ca57600080fd5b6149d68a828b0161428a565b90965094505060608801356149ea81614e48565b969995985093969295946080840135945060a09093013592915050565b600080600060608486031215614a1c57600080fd5b505081359360208301359350604090920135919050565b60008251614a45818460208701614d92565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60a0808252810186905260008760c08301825b89811015614b0f578235614af281614e48565b6001600160a01b0316825260209283019290910190600101614adf565b50602084019790975250506040810193909352606083019190915260809091015292915050565b60a0808252865190820181905260009060209060c0840190828a01845b82811015614b785781516001600160a01b031684529284019290840190600101614b53565b505050908301969096525060408101939093526060830191909152608090910152919050565b6020808252825182820181905260009190848201906040850190845b81811015614bd657835183529284019291840191600101614bba565b50909695505050505050565b6020808252602a90820152600080516020614e618339815191526040820152695f4c495155494449545960b01b606082015260800190565b6020808252602a908201527f416e79737761705633526f757465723a20756e6465726c79696e67206973206e6040820152696f7420774e415449564560b01b606082015260800190565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152614d0b8160a0850160208701614d92565b601f01601f19169190910160a00195945050505050565b60008219821115614d3557614d35614e06565b500190565b600082614d5757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614d7657614d76614e06565b500290565b600082821015614d8d57614d8d614e06565b500390565b60005b83811015614dad578181015183820152602001614d95565b83811115610cfb5750506000910152565b600081614dcd57614dcd614e06565b506000190190565b6000600019821415614de957614de9614e06565b5060010190565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614e5d57600080fd5b5056fe53757368697377617056324c6962726172793a20494e53554646494349454e54a264697066735822122073407528f159bfea36d084e49afe223dc0f542434e791cc076c52d87bb5c136a64736f6c63430008060033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23000000000000000000000000f39fee2fdfe7db022591f4a82e3537fa0b55fb9c

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

000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23000000000000000000000000f39fee2fdfe7db022591f4a82e3537fa0b55fb9c

-----Decoded View---------------
Arg [0] : _factory (address): 0xc35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : _wNATIVE (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Arg [2] : _mpc (address): 0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Arg [2] : 000000000000000000000000f39fee2fdfe7db022591f4a82e3537fa0b55fb9c


Deployed ByteCode Sourcemap

13444:18910:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14019:10;-1:-1:-1;;;;;14033:7:0;14019:21;;14012:29;;;;:::i;:::-;13444:18910;;;;;19939:718;;;;;;;;;;-1:-1:-1;19939:718:0;;;;;:::i;:::-;;:::i;31362:246::-;;;;;;;;;;-1:-1:-1;31362:246:0;;;;;:::i;:::-;;:::i;:::-;;;27805:25:1;;;27793:2;27778:18;31362:246:0;;;;;;;;23048:416;;;;;;;;;;-1:-1:-1;23048:416:0;;;;;:::i;:::-;;:::i;18068:498::-;;;;;;;;;;-1:-1:-1;18068:498:0;;;;;:::i;:::-;;:::i;32114:237::-;;;;;;;;;;-1:-1:-1;32114:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16376:157::-;;;;;;;;;;-1:-1:-1;16376:157:0;;;;;:::i;:::-;;:::i;21774:319::-;;;;;;;;;;-1:-1:-1;21774:319:0;;;;;:::i;:::-;;:::i;26271:648::-;;;;;;;;;;-1:-1:-1;26271:648:0;;;;;:::i;:::-;;:::i;19569:245::-;;;;;;;;;;-1:-1:-1;19569:245:0;;;;;:::i;:::-;;:::i;15813:228::-;;;;;;;;;;-1:-1:-1;15813:228:0;;;;;:::i;:::-;;:::i;:::-;;;19606:14:1;;19599:22;19581:41;;19569:2;19554:18;15813:228:0;19536:92:1;28236:1067:0;;;;;;;;;;-1:-1:-1;28236:1067:0;;;;;:::i;:::-;;:::i;30243:886::-;;;;;;;;;;-1:-1:-1;30243:886:0;;;;;:::i;:::-;;:::i;15448:357::-;;;;;;;;;;-1:-1:-1;15448:357:0;;;;;:::i;:::-;;:::i;27020:416::-;;;;;;;;;;-1:-1:-1;27020:416:0;;;;;:::i;:::-;;:::i;27537:598::-;;;;;;;;;;-1:-1:-1;27537:598:0;;;;;:::i;:::-;;:::i;20665:407::-;;;;;;:::i;:::-;;:::i;19283:173::-;;;;;;;;;;-1:-1:-1;19283:173:0;;;;;:::i;:::-;;:::i;21080:413::-;;;;;;;;;;-1:-1:-1;21080:413:0;;;;;:::i;:::-;;:::i;31616:245::-;;;;;;;;;;-1:-1:-1;31616:245:0;;;;;:::i;:::-;;:::i;21543:223::-;;;;;;;;;;-1:-1:-1;21543:223:0;;;;;:::i;:::-;;:::i;17462:598::-;;;;;;;;;;-1:-1:-1;17462:598:0;;;;;:::i;:::-;;:::i;13589:32::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15087:32:1;;;15069:51;;15057:2;15042:18;13589:32:0;15024:102:1;15351:89:0;;;;;;;;;;-1:-1:-1;15423:9:0;15351:89;;24264:1067;;;;;;;;;;-1:-1:-1;24264:1067:0;;;;;:::i;:::-;;:::i;25432:694::-;;;;;;;;;;-1:-1:-1;25432:694:0;;;;;:::i;:::-;;:::i;16995:459::-;;;;;;:::i;:::-;;:::i;31173:181::-;;;;;;;;;;-1:-1:-1;31173:181:0;;;;;:::i;:::-;;:::i;13550:32::-;;;;;;;;;;;;;;;29404:694;;;;;;;;;;-1:-1:-1;29404:694:0;;;;;:::i;:::-;;:::i;31869:237::-;;;;;;;;;;-1:-1:-1;31869:237:0;;;;;:::i;:::-;;:::i;23565:598::-;;;;;;;;;;-1:-1:-1;23565:598:0;;;;;:::i;:::-;;:::i;18574:286::-;;;;;;;;;;-1:-1:-1;18574:286:0;;;;;:::i;:::-;;:::i;16658:329::-;;;;;;;;;;-1:-1:-1;16658:329:0;;;;;:::i;:::-;;:::i;15169:174::-;;;;;;;;;;;;;:::i;19939:718::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;;;;;;;;;20061:47:::1;20072:3;20077:5;20084:2;20088:6;20096:11;20061:10;:47::i;:::-;20119:24;20161:5;20119:48;;20178:19;20200:9;-1:-1:-1::0;;;;;20200:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20178:44:::0;-1:-1:-1;;;;;;20237:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;20266:36:0::1;::::0;-1:-1:-1;;;20266:36:0;;-1:-1:-1;;;;;15087:32:1;;;20266:36:0::1;::::0;::::1;15069:51:1::0;20306:6:0;;20266:29;;::::1;::::0;::::1;::::0;15042:18:1;;20266:36:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;20237:75;20233:417;;;20348:7;-1:-1:-1::0;;;;;20333:22:0::1;:11;-1:-1:-1::0;;;;;20333:22:0::1;;20329:310;;;20376:50;::::0;-1:-1:-1;;;20376:50:0;;-1:-1:-1;;;;;20376:23:0;::::1;::::0;::::1;::::0;:50:::1;::::0;20400:2;;20404:6;;20420:4:::1;::::0;20376:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;20445:34:0::1;::::0;-1:-1:-1;;;20445:34:0;;::::1;::::0;::::1;27805:25:1::0;;;20454:7:0::1;-1:-1:-1::0;;;;;20445:26:0::1;::::0;::::1;::::0;27778:18:1;;20445:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20498:45;20532:2;20536:6;20498:33;:45::i;:::-;20329:310;;;20584:39;::::0;-1:-1:-1;;;20584:39:0;;-1:-1:-1;;;;;20584:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;20608:2;;20612:6;;20608:2;;20584:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20329:310;20050:607;;19939:718:::0;;;;;:::o;31362:246::-;31497:14;31536:64;31568:8;31578:9;31589:10;31536:31;:64::i;:::-;31529:71;31362:246;-1:-1:-1;;;;31362:246:0:o;23048:416::-;23275:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;23311:4:::1;;23316:1;23311:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23296:28:0::1;;23325:10;23337:8;23296:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;23362:94:0;::::1;23399:10;23362:94;23393:4:::0;;23415:8;23425:12;15423:9;23439:5:::1;23446:9;23362:94;;;;;;;;;;;:::i;:::-;;;;;;;;23048:416:::0;;;;;;;;:::o;18068:498::-;18362:5;-1:-1:-1;;;;;18347:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18340:61:0;;18402:4;18408:5;18415:6;18423:8;18433:1;18436;18439;18340:101;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18452:48:0;;-1:-1:-1;;;18452:48:0;;;;;28015:25:1;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;18452:34:0;;;;;27988:18:1;;18452:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18511:47;18523:4;18529:5;18536:2;18540:6;18548:9;18511:11;:47::i;:::-;18068:498;;;;;;;;;:::o;32114:237::-;32240:21;32286:57;32318:7;32327:9;32338:4;32286:31;:57::i;:::-;32279:64;;32114:237;;;;;:::o;16376:157::-;16472:53;16484:10;16496:5;16503:2;16507:6;16515:9;16472:11;:53::i;:::-;16376:157;;;;:::o;21774:319::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;21958:6:::1;21953:133;21970:17:::0;;::::1;21953:133;;;22009:65;22020:3;;22024:1;22020:6;;;;;;;:::i;:::-;;;;;;;22028;;22035:1;22028:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22039:2;;22042:1;22039:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22046:7;;22054:1;22046:10;;;;;;;:::i;:::-;;;;;;;22058:12;;22071:1;22058:15;;;;;;;:::i;:::-;;;;;;;22009:10;:65::i;:::-;21989:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21953:133;;;;21774:319:::0;;;;;;;;;;:::o;26271:648::-;26548:21;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;26529:8:::1;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1::0;;;13672:64:0::1;;;;;;;:::i;:::-;26592:57:::2;26625:7;26634:8;26644:4;;26592:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;26592:32:0::2;::::0;-1:-1:-1;;;26592:57:0:i:2;:::-;26582:67;;26699:12;26668:7;26693:1;26676:7;:14;:18;;;;:::i;:::-;26668:27;;;;;;;;:::i;:::-;;;;;;;:43;;26660:101;;;::::0;-1:-1:-1;;;26660:101:0;;22886:2:1;26660:101:0::2;::::0;::::2;22868:21:1::0;22925:2;22905:18;;;22898:30;22964:34;22944:18;;;22937:62;-1:-1:-1;;;23015:18:1;;;23008:43;23068:19;;26660:101:0::2;22858:235:1::0;26660:101:0::2;26772:104;26783:3;26788:4;;26793:1;26788:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26797:53;26824:7;26833:4;;26838:1;26833:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26842:4;;26847:1;26842:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26797:26;:53::i;:::-;26852:7;26860:1;26852:10;;;;;;;;:::i;:::-;;;;;;;26864:11;26772:10;:104::i;:::-;26887:24;26893:7;26902:4;;26887:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;26908:2:0;;-1:-1:-1;26887:5:0::2;::::0;-1:-1:-1;;26887:24:0:i:2;:::-;15152:1:::1;26271:648:::0;;;;;;;;;;:::o;19569:245::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;19697:47:::1;19708:3;19713:5;19720:2;19724:6;19732:11;19697:10;:47::i;:::-;19755:51;::::0;-1:-1:-1;;;19755:51:0;;-1:-1:-1;;;;;19755:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;19791:2;;19795:6;;19791:2;;19755:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19569:245:::0;;;;;:::o;15813:228::-;15891:4;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15916:22:0;::::1;15908:64;;;::::0;-1:-1:-1;;;15908:64:0;;21415:2:1;15908:64:0::1;::::0;::::1;21397:21:1::0;21454:2;21434:18;;;21427:30;21493:31;21473:18;;;21466:59;21542:18;;15908:64:0::1;21387:179:1::0;15908:64:0::1;15990:43;::::0;-1:-1:-1;;;15990:43:0;;-1:-1:-1;;;;;15087:32:1;;;15990:43:0::1;::::0;::::1;15069:51:1::0;15990:33:0;::::1;::::0;::::1;::::0;15042:18:1;;15990:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28236:1067::-:0;28564:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;28585:19:::1;28622:4;;28627:1;28622:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28607:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28585:58;;28661:11;-1:-1:-1::0;;;;;28654:26:0::1;;28681:4;28695;28702:8;28712;28722:1;28725;28728;28654:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28741:61;28778:4;28784;;28789:1;28784:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28741:36:0;::::1;::::0;:61;28793:8;28741:36:::1;:61::i;:::-;28828:4;;28833:1;28828:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28813:52;::::0;-1:-1:-1;;;28813:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;28813:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;28813:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28891:4;;28896:1;28891:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28876:28:0::1;;28905:4;28911:8;28876:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28942:22;28967:4;;28942:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28982:13;28998:4;28982:20;;29013:11;29027:2;29013:16;;29040:14;29057:8;29040:25;;29076:18;29097:12;29076:33;;29120:9;29132:5;15423:9:::0;;15351:89;29132:5:::1;29120:17;;29148:15;29166:9;29148:27;;29236:3;-1:-1:-1::0;;;;;29191:93:0::1;29229:5;-1:-1:-1::0;;;;;29191:93:0::1;;29222:5;29241:9;29252:13;29267:4;29273:10;29191:93;;;;;;;;;;:::i;:::-;;;;;;;;28931:365;;;;;;;28574:729;28236:1067:::0;;;;;;;;;;;;:::o;30243:886::-;30520:21;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;30501:8:::1;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1::0;;;13672:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30587:7:0::2;30562:32;:4:::0;;30567:15:::2;30581:1;30562:4:::0;30567:15:::2;:::i;:::-;30562:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30562:32:0::2;;30554:74;;;::::0;-1:-1:-1;;;30554:74:0;;24784:2:1;30554:74:0::2;::::0;::::2;24766:21:1::0;24823:2;24803:18;;;24796:30;24862:31;24842:18;;;24835:59;24911:18;;30554:74:0::2;24756:179:1::0;30554:74:0::2;30649:57;30682:7;30691:8;30701:4;;30649:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;30649:32:0::2;::::0;-1:-1:-1;;;30649:57:0:i:2;:::-;30639:67;;30756:12;30725:7;30750:1;30733:7;:14;:18;;;;:::i;:::-;30725:27;;;;;;;;:::i;:::-;;;;;;;:43;;30717:99;;;::::0;-1:-1:-1;;;30717:99:0;;25142:2:1;30717:99:0::2;::::0;::::2;25124:21:1::0;25181:2;25161:18;;;25154:30;25220:34;25200:18;;;25193:62;-1:-1:-1;;;25271:18:1;;;25264:41;25322:19;;30717:99:0::2;25114:233:1::0;30717:99:0::2;30827:105;30838:3;30843:4;;30848:1;30843:7;;;;;;;:::i;30827:105::-;30943:35;30949:7;30958:4;;30943:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;30972:4:0::2;::::0;-1:-1:-1;30943:5:0::2;::::0;-1:-1:-1;;30943:35:0:i:2;:::-;30998:7;-1:-1:-1::0;;;;;30989:26:0::2;;31016:7;31041:1;31024:7;:14;:18;;;;:::i;:::-;31016:27;;;;;;;;:::i;:::-;;;;;;;30989:55;;;;;;;;;;;;;27805:25:1::0;;27793:2;27778:18;;27760:76;30989:55:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;31055:66;31089:2;31093:7;31118:1;31101:7;:14;:18;;;;:::i;:::-;31093:27;;;;;;;;:::i;:::-;;;;;;;31055:33;:66::i;15448:357::-:0;15507:4;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15532:20:0;::::1;15524:62;;;::::0;-1:-1:-1;;;15524:62:0;;21415:2:1;15524:62:0::1;::::0;::::1;21397:21:1::0;21454:2;21434:18;;;21427:30;21493:31;21473:18;;;21466:59;21542:18;;15524:62:0::1;21387:179:1::0;15524:62:0::1;15607:5;:3;:5::i;:::-;15597:7;:15:::0;;-1:-1:-1;;;;;;15597:15:0;;::::1;-1:-1:-1::0;;;;;15597:15:0;;::::1;;::::0;;;-1:-1:-1;15623:16:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;15673:27:::1;:15;15691:9;15673:27;:::i;:::-;15650:20;:50:::0;;;15738:7:::1;::::0;::::1;15729::::0;-1:-1:-1;;;;;15738:7:0;;::::1;::::0;15729::::1;15716:59;15423:9:::0;15716:59:::1;::::0;27805:25:1;;;27793:2;27778:18;15716:59:0::1;;;;;;;-1:-1:-1::0;15793:4:0::1;15152:1;15448:357:::0;;;:::o;27020:416::-;27247:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;27283:4:::1;;27288:1;27283:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27268:28:0::1;;27297:10;27309:8;27268:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;27334:94:0;::::1;27371:10;27334:94;27365:4:::0;;27387:8;27397:12;15423:9;27411:5:::1;15351:89:::0;27537:598;27774:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;27795:92:::1;27857:10;27869:4;;27874:1;27869:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27878:8;27817:4;;27822:1;27817:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27802:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27795:61:0::1;::::0;:92;;:61:::1;:92::i;:::-;27913:4;;27918:1;27913:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27898:58;::::0;-1:-1:-1;;;27898:58:0;;::::1;::::0;::::1;28015:25:1::0;;;27945:10:0::1;28056:18:1::0;;;28049:60;-1:-1:-1;;;;;27898:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;27898:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27982:4;;27987:1;27982:7;;;;;;;:::i;20665:407::-:0;20741:4;20804:7;-1:-1:-1;;;;;20766:45:0;20781:5;-1:-1:-1;;;;;20766:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20766:45:0;;20758:100;;;;-1:-1:-1;;;20758:100:0;;;;;;;:::i;:::-;20878:7;-1:-1:-1;;;;;20869:25:0;;20902:9;20869:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20932:44:0;;-1:-1:-1;;;20932:44:0;;-1:-1:-1;;;;;20941:7:0;20932:26;;-1:-1:-1;20932:26:0;;-1:-1:-1;20932:44:0;;-1:-1:-1;20959:5:0;;20966:9;;20932:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20925:52;;;;:::i;:::-;20988:49;;-1:-1:-1;;;20988:49:0;;21023:9;20988:49;;;28015:25:1;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;20988:34:0;;;;;27988:18:1;;20988:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21055:9:0;;20665:407;-1:-1:-1;;;20665:407:0:o;19283:173::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;19401:47:::1;19412:3;19417:5;19424:2;19428:6;19436:11;19401:10;:47::i;:::-;19283:173:::0;;;;;:::o;21080:413::-;21162:4;21225:7;-1:-1:-1;;;;;21187:45:0;21202:5;-1:-1:-1;;;;;21187:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21187:45:0;;21179:100;;;;-1:-1:-1;;;21179:100:0;;;;;;;:::i;:::-;21290:70;;-1:-1:-1;;;21290:70:0;;-1:-1:-1;;;;;21290:35:0;;;;;:70;;21326:10;;21338:6;;21354:4;;21290:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21371:34:0;;-1:-1:-1;;;21371:34:0;;;;;27805:25:1;;;21380:7:0;-1:-1:-1;;;;;21371:26:0;;;;27778:18:1;;21371:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21416:45;21450:2;21454:6;21416:33;:45::i;:::-;-1:-1:-1;21479:6:0;;21080:413;-1:-1:-1;;21080:413:0:o;31616:245::-;31751:13;31789:64;31820:9;31831;31842:10;31789:30;:64::i;21543:223::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;21621:12:::1;21636:5;:3;:5::i;:::-;21652:40;::::0;-1:-1:-1;;;21652:40:0;;21621:20;;-1:-1:-1;;;;;;21652:26:0;::::1;::::0;::::1;::::0;:40:::1;::::0;21621:20;;21685:6;;21652:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21703:55:0::1;::::0;-1:-1:-1;;;21703:55:0;;-1:-1:-1;;;;;21703:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;21739:4;;21745:6;;21739:4;;21703:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17462:598::-:0;17726:19;17763:5;-1:-1:-1;;;;;17748:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17793:74;;-1:-1:-1;;;17793:74:0;;17726:56;;-1:-1:-1;;;;;;17793:26:0;;;;;:74;;17820:4;;17834;;17841:6;;17849:8;;17859:1;;17862;;17865;;17793:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17878:57:0;;-1:-1:-1;;;;;;;;17878:36:0;;17915:4;17921:5;17928:6;17878:36;:57::i;:::-;17946:48;;-1:-1:-1;;;17946:48:0;;;;;28015:25:1;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;17946:34:0;;;;;27988:18:1;;17946:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18005:47;18017:4;18023:5;18030:2;18034:6;18042:9;18005:11;:47::i;:::-;17715:345;17462:598;;;;;;;;;:::o;24264:1067::-;24592:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;24613:19:::1;24650:4;;24655:1;24650:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24635:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24613:58;;24689:11;-1:-1:-1::0;;;;;24682:26:0::1;;24709:4;24723;24730:8;24740;24750:1;24753;24756;24682:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24769:61;24806:4;24812;;24817:1;24812:7;;;;;;;:::i;24769:61::-;24856:4;;24861:1;24856:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;24841:52;::::0;-1:-1:-1;;;24841:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;24841:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;24841:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24919:4;;24924:1;24919:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24904:28:0::1;;24933:4;24939:8;24904:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24970:22;24995:4;;24970:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25010:13;25026:4;25010:20;;25041:11;25055:2;25041:16;;25068:14;25085:8;25068:25;;25104:18;25125:12;25104:33;;25148:9;25160:5;15423:9:::0;;15351:89;25160:5:::1;25148:17;;25176:15;25194:9;25176:27;;25264:3;-1:-1:-1::0;;;;;25219:93:0::1;25257:5;-1:-1:-1::0;;;;;25219:93:0::1;;25250:5;25269:9;25280:13;25295:4;25301:10;25219:93;;;;;;;;;;:::i;25432:694::-:0;25768:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;25811:4:::1;;25816:1;25811:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25796:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25789:63:0::1;;25853:4;25859;;25864:1;25859:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;25868:8;25878;25888:1;25891;25894;25789:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25922:4;;25927:1;25922:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;25907:52;::::0;-1:-1:-1;;;25907:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;25907:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;25907:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25985:4;;25990:1;25985:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25970:28:0::1;;25999:4;26005:8;25970:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26073:2;-1:-1:-1::0;;;;;26030:88:0::1;26067:4;-1:-1:-1::0;;;;;26030:88:0::1;;26061:4;;26077:8;26087:12;26101:5;15423:9:::0;;15351:89;26101:5:::1;26108:9;26030:88;;;;;;;;;;;:::i;:::-;;;;;;;;25432:694:::0;;;;;;;;;;;;:::o;16995:459::-;17138:7;-1:-1:-1;;;;;17100:45:0;17115:5;-1:-1:-1;;;;;17100:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17100:45:0;;17092:100;;;;-1:-1:-1;;;17092:100:0;;;;;;;:::i;:::-;17212:7;-1:-1:-1;;;;;17203:25:0;;17236:9;17203:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17266:44:0;;-1:-1:-1;;;17266:44:0;;-1:-1:-1;;;;;17275:7:0;17266:26;;-1:-1:-1;17266:26:0;;-1:-1:-1;17266:44:0;;-1:-1:-1;17293:5:0;;17300:9;;17266:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17259:52;;;;:::i;:::-;17322:57;;-1:-1:-1;;;17322:57:0;;17357:9;17322:57;;;28015:25:1;17368:10:0;28056:18:1;;;28049:60;-1:-1:-1;;;;;17322:34:0;;;;;27988:18:1;;17322:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17390:56;17402:10;17414:5;17421:2;17425:9;17436;17390:11;:56::i;:::-;16995:459;;;:::o;31173:181::-;31261:12;31293:53;31318:7;31327:8;31337;31293:24;:53::i;29404:694::-;29740:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;29783:4:::1;;29788:1;29783:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29768:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29761:63:0::1;;29825:4;29831;;29836:1;29831:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29840:8;29850;29860:1;29863;29866;29761:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29894:4;;29899:1;29894:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29879:52;::::0;-1:-1:-1;;;29879:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;29879:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;29879:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29957:4;;29962:1;29957:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29942:28:0::1;;29971:4;29977:8;29942:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30045:2;-1:-1:-1::0;;;;;30002:88:0::1;30039:4;-1:-1:-1::0;;;;;30002:88:0::1;;30033:4;;30049:8;30059:12;30073:5;15423:9:::0;;15351:89;31869:237;31995:21;32041:57;32074:7;32083:8;32093:4;32041:32;:57::i;23565:598::-;23802:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;23823:92:::1;23885:10;23897:4;;23902:1;23897:7;;;;;;;:::i;23823:92::-;23941:4;;23946:1;23941:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;23926:58;::::0;-1:-1:-1;;;23926:58:0;;::::1;::::0;::::1;28015:25:1::0;;;23973:10:0::1;28056:18:1::0;;;28049:60;-1:-1:-1;;;;;23926:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;23926:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24010:4;;24015:1;24010:7;;;;;;;:::i;18574:286::-:0;18722:6;18717:136;18734:17;;;18717:136;;;18773:68;18785:10;18797:6;;18804:1;18797:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18808:2;;18811:1;18808:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18815:7;;18823:1;18815:10;;;;;;;:::i;:::-;;;;;;;18827;;18838:1;18827:13;;;;;;;:::i;:::-;;;;;;;18773:11;:68::i;:::-;18753:3;;;;:::i;:::-;;;;18717:136;;16658:329;16764:86;16824:10;16836:5;16843:6;16786:5;-1:-1:-1;;;;;16771:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16764:86;16861:54;;-1:-1:-1;;;16861:54:0;;;;;28015:25:1;;;16904:10:0;28056:18:1;;;28049:60;-1:-1:-1;;;;;16861:34:0;;;;;27988:18:1;;16861:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16926:53;16938:10;16950:5;16957:2;16961:6;16969:9;16926:11;:53::i;15169:174::-;15205:7;15248:20;;15229:15;:39;15225:86;;-1:-1:-1;15292:7:0;;-1:-1:-1;;;;;15292:7:0;;15169:174::o;15225:86::-;-1:-1:-1;15328:7:0;;-1:-1:-1;;;;;15328:7:0;;15169:174::o;18940:229::-;19051:38;;-1:-1:-1;;;19051:38:0;;-1:-1:-1;;;;;19051:26:0;;;;;:38;;19078:2;;19082:6;;19051:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19130:2;-1:-1:-1;;;;;19105:56:0;19123:5;-1:-1:-1;;;;;19105:56:0;19118:3;19105:56;19134:6;19142:11;19155:5;15423:9;;15351:89;19155:5;19105:56;;;28951:25:1;;;29007:2;28992:18;;28985:34;;;;29035:18;;;29028:34;28939:2;28924:18;19105:56:0;;;;;;;;18940:229;;;;;:::o;8838:201::-;8949:12;;;8911;8949;;;;;;;;;-1:-1:-1;;;;;8928:7:0;;;8942:5;;8928:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8910:52;;;8981:7;8973:58;;;;-1:-1:-1;;;8973:58:0;;23661:2:1;8973:58:0;;;23643:21:1;23700:2;23680:18;;;23673:30;23739:34;23719:18;;;23712:62;-1:-1:-1;;;23790:18:1;;;23783:36;23836:19;;8973:58:0;23633:228:1;5213:521:0;5306:14;5352:1;5341:8;:12;5333:70;;;;-1:-1:-1;;;5333:70:0;;26726:2:1;5333:70:0;;;26708:21:1;26765:2;26745:18;;;26738:30;-1:-1:-1;;;;;;;;;;;26784:18:1;;;26777:62;-1:-1:-1;;;26855:18:1;;;26848:43;26908:19;;5333:70:0;26698:235:1;5333:70:0;5434:1;5422:9;:13;:31;;;;;5452:1;5439:10;:14;5422:31;5414:86;;;;-1:-1:-1;;;5414:86:0;;;;;;;:::i;:::-;5511:20;5534:17;:8;5547:3;5534:12;:17::i;:::-;5511:40;-1:-1:-1;5562:14:0;5579:31;5511:40;5599:10;5579:19;:31::i;:::-;5562:48;-1:-1:-1;5621:16:0;5640:40;5664:15;5640:19;:9;5654:4;5640:13;:19::i;:::-;:23;;:40::i;:::-;5621:59;-1:-1:-1;5703:23:0;5621:59;5703:9;:23;:::i;:::-;5691:35;5213:521;-1:-1:-1;;;;;;;5213:521:0:o;16049:231::-;16160:40;;-1:-1:-1;;;16160:40:0;;-1:-1:-1;;;;;16160:26:0;;;;;:40;;16187:4;;16193:6;;16160:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16243:2;-1:-1:-1;;;;;16216:56:0;16237:4;-1:-1:-1;;;;;16216:56:0;16230:5;-1:-1:-1;;;;;16216:56:0;;16247:6;16255:5;15423:9;;15351:89;16255:5;16216:56;;;28951:25:1;;;29007:2;28992:18;;28985:34;;;;29035:18;;29028:34;;;28939:2;28924:18;16216:56:0;28906:162:1;7007:534:0;7108:21;7165:1;7150:4;:11;:16;;7142:61;;;;-1:-1:-1;;;7142:61:0;;27500:2:1;7142:61:0;;;27482:21:1;;;27519:18;;;27512:30;27578:34;27558:18;;;27551:62;27630:18;;7142:61:0;27472:182:1;7142:61:0;7235:4;:11;7224:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7224:23:0;;7214:33;;7288:9;7258:7;7283:1;7266:7;:14;:18;;;;:::i;:::-;7258:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;7313:6;7336:1;7322:4;:11;:15;;;;:::i;:::-;7313:24;;7308:226;7339:5;;7308:226;;7367:14;;7402:42;7414:7;7423:4;7428:5;7432:1;7428;:5;:::i;:::-;7423:11;;;;;;;;:::i;:::-;;;;;;;7436:4;7441:1;7436:7;;;;;;;;:::i;:::-;;;;;;;7402:11;:42::i;:::-;7366:78;;;;7476:46;7488:7;7496:1;7488:10;;;;;;;;:::i;:::-;;;;;;;7500:9;7511:10;7476:11;:46::i;:::-;7459:7;7467:5;7471:1;7467;:5;:::i;:::-;7459:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;7351:183;;7346:3;;;;;:::i;:::-;;;;7308:226;;;;7007:534;;;;;:::o;6413:513::-;6514:21;6571:1;6556:4;:11;:16;;6548:61;;;;-1:-1:-1;;;6548:61:0;;27500:2:1;6548:61:0;;;27482:21:1;;;27519:18;;;27512:30;27578:34;27558:18;;;27551:62;27630:18;;6548:61:0;27472:182:1;6548:61:0;6641:4;:11;6630:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6630:23:0;;6620:33;;6677:8;6664:7;6672:1;6664:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;6701:6;6696:223;6727:1;6713:4;:11;:15;;;;:::i;:::-;6709:1;:19;6696:223;;;6751:14;6767:15;6786:42;6798:7;6807:4;6812:1;6807:7;;;;;;;;:::i;:::-;;;;;;;6816:4;6821:1;6825;6821:5;;;;:::i;:::-;6816:11;;;;;;;;:::i;6786:42::-;6750:78;;;;6860:47;6873:7;6881:1;6873:10;;;;;;;;:::i;:::-;;;;;;;6885:9;6896:10;6860:12;:47::i;:::-;6843:7;6851:5;:1;6855;6851:5;:::i;:::-;6843:14;;;;;;;;:::i;:::-;;;;;;:64;;;;;6735:184;;6730:3;;;;;:::i;:::-;;;;6696:223;;3712:490;3801:12;3827:14;3843;3861:26;3872:6;3880;3861:10;:26::i;:::-;4036:32;;-1:-1:-1;;13892:2:1;13888:15;;;13884:24;;4036:32:0;;;13872:37:1;13943:15;;;13939:24;13925:12;;;13918:46;3826:61:0;;-1:-1:-1;3826:61:0;-1:-1:-1;4000:7:0;;13980:12:1;;4036:32:0;;;;;;;;;;;;4026:43;;;;;;3939:251;;;;;;;;-1:-1:-1;;;;;;14641:26:1;;14704:2;14700:15;;;;-1:-1:-1;;14696:53:1;14692:1;14683:11;;14676:74;14775:2;14766:12;;14759:28;14817:66;14812:2;14803:12;;14796:88;14909:2;14900:12;;14631:287;3939:251:0;;;;-1:-1:-1;;3939:251:0;;;;;;;;;3929:262;;3939:251;3929:262;;;;;3712:490;-1:-1:-1;;;;;;3712:490:0:o;22204:743::-;22311:6;22306:634;22337:1;22323:4;:11;:15;;;;:::i;:::-;22319:1;:19;22306:634;;;22361:13;22376:14;22395:4;22400:1;22395:7;;;;;;;;:::i;:::-;;;;;;;22404:4;22409:1;22413;22409:5;;;;:::i;:::-;22404:11;;;;;;;;:::i;:::-;;;;;;;22360:56;;;;22432:14;22451:44;22481:5;22488:6;22451:29;:44::i;:::-;-1:-1:-1;22431:64:0;-1:-1:-1;22510:14:0;22527:7;22535:5;:1;22539;22535:5;:::i;:::-;22527:14;;;;;;;;:::i;:::-;;;;;;;22510:31;;22557:15;22574;22602:6;-1:-1:-1;;;;;22593:15:0;:5;-1:-1:-1;;;;;22593:15:0;;:61;;22635:9;22651:1;22593:61;;;22617:1;22621:9;22593:61;22556:98;;;;22669:10;22700:1;22686:4;:11;:15;;;;:::i;:::-;22682:1;:19;:84;;22763:3;22682:84;;;22704:56;22731:7;22740:6;22748:4;22753:5;:1;22757;22753:5;:::i;:::-;22748:11;;;;;;;;:::i;:::-;;;;;;;22704:26;:56::i;:::-;22669:97;;22798:50;22825:7;22834:5;22841:6;22798:26;:50::i;:::-;-1:-1:-1;;;;;22781:73:0;;22873:10;22885;22897:2;22911:1;22901:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22901:12:0;;22781:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22345:595;;;;;;;22340:3;;;;;:::i;:::-;;;;22306:634;;12280:201;12404:68;;;-1:-1:-1;;;;;15389:15:1;;;12404:68:0;;;15371:34:1;15441:15;;15421:18;;;15414:43;15473:18;;;;15466:34;;;12404:68:0;;;;;;;;;;15306:18:1;;;;12404:68:0;;;;;;;;-1:-1:-1;;;;;12404:68:0;-1:-1:-1;;;12404:68:0;;;12378:95;;12397:5;;12378:18;:95::i;5855:476::-;5948:13;5994:1;5982:9;:13;5974:72;;;;-1:-1:-1;;;5974:72:0;;22122:2:1;5974:72:0;;;22104:21:1;22161:2;22141:18;;;22134:30;-1:-1:-1;;;;;;;;;;;22180:18:1;;;22173:62;-1:-1:-1;;;22251:18:1;;;22244:44;22305:19;;5974:72:0;22094:236:1;5974:72:0;6077:1;6065:9;:13;:31;;;;;6095:1;6082:10;:14;6065:31;6057:86;;;;-1:-1:-1;;;6057:86:0;;;;;;;:::i;:::-;6154:14;6171:34;6200:4;6171:24;:9;6185;6171:13;:24::i;:::-;:28;;:34::i;:::-;6154:51;-1:-1:-1;6216:16:0;6235:34;6265:3;6235:25;:10;6250:9;6235:14;:25::i;:34::-;6216:53;-1:-1:-1;6291:32:0;6321:1;6292:23;6216:53;6292:9;:23;:::i;6291:32::-;6280:43;5855:476;-1:-1:-1;;;;;;5855:476:0:o;4766:325::-;4848:12;4891:1;4881:7;:11;4873:63;;;;-1:-1:-1;;;4873:63:0;;25554:2:1;4873:63:0;;;25536:21:1;25593:2;25573:18;;;25566:30;-1:-1:-1;;;;;;;;;;;25612:18:1;;;25605:62;-1:-1:-1;;;25683:18:1;;;25676:37;25730:19;;4873:63:0;25526:229:1;4873:63:0;4966:1;4955:8;:12;:28;;;;;4982:1;4971:8;:12;4955:28;4947:83;;;;-1:-1:-1;;;4947:83:0;;;;;;;:::i;:::-;5075:8;5051:21;:7;5063:8;5051:11;:21::i;:::-;:32;;;;:::i;2942:142::-;2994:6;3021;;;:30;;-1:-1:-1;3050:1:0;3045;3036:5;3045:1;3050;3036:5;:::i;:::-;3032:9;-1:-1:-1;3031:15:0;;3032:9;3031:15;:::i;:::-;:20;3021:30;3013:63;;;;-1:-1:-1;;;3013:63:0;;21773:2:1;3013:63:0;;;21755:21:1;21812:2;21792:18;;;21785:30;-1:-1:-1;;;21831:18:1;;;21824:50;21891:18;;3013:63:0;21745:170:1;2669:128:0;2721:6;2763:1;2753:5;2757:1;2763;2753:5;:::i;:::-;2749:9;;;2748:16;;2740:49;;;;-1:-1:-1;;;2740:49:0;;22537:2:1;2740:49:0;;;22519:21:1;22576:2;22556:18;;;22549:30;-1:-1:-1;;;22595:18:1;;;22588:50;22655:18;;2740:49:0;22509:170:1;4260:393:0;4353:13;4368;4395:14;4414:26;4425:6;4433;4414:10;:26::i;:::-;4394:46;;;4452:13;4467;4502:32;4510:7;4519:6;4527;4502:7;:32::i;:::-;-1:-1:-1;;;;;4485:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4451:98;-1:-1:-1;;;;;4451:98:0;;;-1:-1:-1;;;;;4451:98:0;;;4593:6;-1:-1:-1;;;;;4583:16:0;:6;-1:-1:-1;;;;;4583:16:0;;:62;;4626:8;4636;4583:62;;;4603:8;4613;4583:62;4560:85;;;;-1:-1:-1;4260:393:0;-1:-1:-1;;;;;;;4260:393:0:o;3267:353::-;3342:14;3358;3403:6;-1:-1:-1;;;;;3393:16:0;:6;-1:-1:-1;;;;;3393:16:0;;;3385:68;;;;-1:-1:-1;;;3385:68:0;;21007:2:1;3385:68:0;;;20989:21:1;21046:2;21026:18;;;21019:30;21085:34;21065:18;;;21058:62;-1:-1:-1;;;21136:18:1;;;21129:37;21183:19;;3385:68:0;20979:229:1;3385:68:0;3492:6;-1:-1:-1;;;;;3483:15:0;:6;-1:-1:-1;;;;;3483:15:0;;:53;;3521:6;3529;3483:53;;;3502:6;3510;3483:53;3464:72;;-1:-1:-1;3464:72:0;-1:-1:-1;;;;;;3555:20:0;;3547:65;;;;-1:-1:-1;;;3547:65:0;;24423:2:1;3547:65:0;;;24405:21:1;;;24442:18;;;24435:30;24501:34;24481:18;;;24474:62;24553:18;;3547:65:0;24395:182:1;3547:65:0;3267:353;;;;;:::o;12839:598::-;12927:27;12935:5;-1:-1:-1;;;;;12927:25:0;;:27::i;:::-;12919:71;;;;-1:-1:-1;;;12919:71:0;;27140:2:1;12919:71:0;;;27122:21:1;27179:2;27159:18;;;27152:30;27218:33;27198:18;;;27191:61;27269:18;;12919:71:0;27112:181:1;12919:71:0;13064:12;13078:23;13113:5;-1:-1:-1;;;;;13105:19:0;13125:4;13105:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13063:67;;;;13149:7;13141:52;;;;-1:-1:-1;;;13141:52:0;;23300:2:1;13141:52:0;;;23282:21:1;;;23319:18;;;23312:30;23378:34;23358:18;;;23351:62;23430:18;;13141:52:0;23272:182:1;13141:52:0;13210:17;;:21;13206:224;;13352:10;13341:30;;;;;;;;;;;;:::i;:::-;13333:85;;;;-1:-1:-1;;;13333:85:0;;26315:2:1;13333:85:0;;;26297:21:1;26354:2;26334:18;;;26327:30;26393:34;26373:18;;;26366:62;-1:-1:-1;;;26444:18:1;;;26437:40;26494:19;;13333:85:0;26287:232:1;2805:129:0;2857:6;2899:1;2889:5;2893:1;2899;2889:5;:::i;:::-;2885:9;;;2884:16;;2876:50;;;;-1:-1:-1;;;2876:50:0;;20246:2:1;2876:50:0;;;20228:21:1;20285:2;20265:18;;;20258:30;-1:-1:-1;;;20304:18:1;;;20297:51;20365:18;;2876:50:0;20218:171:1;11659:374:0;11719:4;11942:20;;11785:66;11982:15;;;;;:42;;-1:-1:-1;12001:23:0;;;11974:51;-1:-1:-1;;11659:374:0:o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;153:367::-;216:8;226:6;280:3;273:4;265:6;261:17;257:27;247:2;;298:1;295;288:12;247:2;-1:-1:-1;321:20:1;;364:18;353:30;;350:2;;;396:1;393;386:12;350:2;433:4;425:6;421:17;409:29;;493:3;486:4;476:6;473:1;469:14;461:6;457:27;453:38;450:47;447:2;;;510:1;507;500:12;525:188;604:13;;-1:-1:-1;;;;;646:42:1;;636:53;;626:2;;703:1;700;693:12;718:156;784:20;;844:4;833:16;;823:27;;813:2;;864:1;861;854:12;879:247;938:6;991:2;979:9;970:7;966:23;962:32;959:2;;;1007:1;1004;997:12;959:2;1046:9;1033:23;1065:31;1090:5;1065:31;:::i;:::-;1115:5;949:177;-1:-1:-1;;;949:177:1:o;1131:251::-;1201:6;1254:2;1242:9;1233:7;1229:23;1225:32;1222:2;;;1270:1;1267;1260:12;1222:2;1302:9;1296:16;1321:31;1346:5;1321:31;:::i;1387:388::-;1455:6;1463;1516:2;1504:9;1495:7;1491:23;1487:32;1484:2;;;1532:1;1529;1522:12;1484:2;1571:9;1558:23;1590:31;1615:5;1590:31;:::i;:::-;1640:5;-1:-1:-1;1697:2:1;1682:18;;1669:32;1710:33;1669:32;1710:33;:::i;:::-;1762:7;1752:17;;;1474:301;;;;;:::o;1780:945::-;1909:6;1917;1925;1933;1941;1949;1957;1965;1973;2026:3;2014:9;2005:7;2001:23;1997:33;1994:2;;;2043:1;2040;2033:12;1994:2;2082:9;2069:23;2101:31;2126:5;2101:31;:::i;:::-;2151:5;-1:-1:-1;2208:2:1;2193:18;;2180:32;2221:33;2180:32;2221:33;:::i;:::-;2273:7;-1:-1:-1;2332:2:1;2317:18;;2304:32;2345:33;2304:32;2345:33;:::i;:::-;2397:7;-1:-1:-1;2451:2:1;2436:18;;2423:32;;-1:-1:-1;2502:3:1;2487:19;;2474:33;;-1:-1:-1;2526:37:1;2558:3;2543:19;;2526:37;:::i;:::-;2516:47;;2610:3;2599:9;2595:19;2582:33;2572:43;;2662:3;2651:9;2647:19;2634:33;2624:43;;2714:3;2703:9;2699:19;2686:33;2676:43;;1984:741;;;;;;;;;;;:::o;2730:456::-;2807:6;2815;2823;2876:2;2864:9;2855:7;2851:23;2847:32;2844:2;;;2892:1;2889;2882:12;2844:2;2931:9;2918:23;2950:31;2975:5;2950:31;:::i;:::-;3000:5;-1:-1:-1;3057:2:1;3042:18;;3029:32;3070:33;3029:32;3070:33;:::i;:::-;2834:352;;3122:7;;-1:-1:-1;;;3176:2:1;3161:18;;;;3148:32;;2834:352::o;3191:525::-;3277:6;3285;3293;3301;3354:3;3342:9;3333:7;3329:23;3325:33;3322:2;;;3371:1;3368;3361:12;3322:2;3410:9;3397:23;3429:31;3454:5;3429:31;:::i;:::-;3479:5;-1:-1:-1;3536:2:1;3521:18;;3508:32;3549:33;3508:32;3549:33;:::i;:::-;3312:404;;3601:7;;-1:-1:-1;;;;3655:2:1;3640:18;;3627:32;;3706:2;3691:18;3678:32;;3312:404::o;3721:315::-;3789:6;3797;3850:2;3838:9;3829:7;3825:23;3821:32;3818:2;;;3866:1;3863;3856:12;3818:2;3905:9;3892:23;3924:31;3949:5;3924:31;:::i;:::-;3974:5;4026:2;4011:18;;;;3998:32;;-1:-1:-1;;;3808:228:1:o;4041:456::-;4118:6;4126;4134;4187:2;4175:9;4166:7;4162:23;4158:32;4155:2;;;4203:1;4200;4193:12;4155:2;4242:9;4229:23;4261:31;4286:5;4261:31;:::i;:::-;4311:5;-1:-1:-1;4363:2:1;4348:18;;4335:32;;-1:-1:-1;4419:2:1;4404:18;;4391:32;4432:33;4391:32;4432:33;:::i;:::-;4484:7;4474:17;;;4145:352;;;;;:::o;4502:1200::-;4667:6;4675;4683;4691;4699;4707;4715;4723;4731;4739;4747:7;4801:3;4789:9;4780:7;4776:23;4772:33;4769:2;;;4818:1;4815;4808:12;4769:2;4857:9;4844:23;4876:31;4901:5;4876:31;:::i;:::-;4926:5;-1:-1:-1;4978:2:1;4963:18;;4950:32;;-1:-1:-1;5029:2:1;5014:18;;5001:32;;-1:-1:-1;5084:2:1;5069:18;;5056:32;5111:18;5100:30;;5097:2;;;5143:1;5140;5133:12;5097:2;5182:70;5244:7;5235:6;5224:9;5220:22;5182:70;:::i;:::-;5271:8;;-1:-1:-1;5156:96:1;-1:-1:-1;;5358:3:1;5343:19;;5330:33;5372;5330;5372;:::i;:::-;5424:7;-1:-1:-1;5478:3:1;5463:19;;5450:33;;-1:-1:-1;5502:37:1;5534:3;5519:19;;5502:37;:::i;:::-;5492:47;;5586:3;5575:9;5571:19;5558:33;5548:43;;5638:3;5627:9;5623:19;5610:33;5600:43;;5691:3;5680:9;5676:19;5663:33;5652:44;;4759:943;;;;;;;;;;;;;;:::o;5707:1404::-;5901:6;5909;5917;5925;5933;5941;5949;5957;6010:3;5998:9;5989:7;5985:23;5981:33;5978:2;;;6027:1;6024;6017:12;5978:2;6067:9;6054:23;6096:18;6137:2;6129:6;6126:14;6123:2;;;6153:1;6150;6143:12;6123:2;6192:70;6254:7;6245:6;6234:9;6230:22;6192:70;:::i;:::-;6281:8;;-1:-1:-1;6166:96:1;-1:-1:-1;6369:2:1;6354:18;;6341:32;;-1:-1:-1;6385:16:1;;;6382:2;;;6414:1;6411;6404:12;6382:2;6453:72;6517:7;6506:8;6495:9;6491:24;6453:72;:::i;:::-;6544:8;;-1:-1:-1;6427:98:1;-1:-1:-1;6632:2:1;6617:18;;6604:32;;-1:-1:-1;6648:16:1;;;6645:2;;;6677:1;6674;6667:12;6645:2;6716:72;6780:7;6769:8;6758:9;6754:24;6716:72;:::i;:::-;6807:8;;-1:-1:-1;6690:98:1;-1:-1:-1;6895:2:1;6880:18;;6867:32;;-1:-1:-1;6911:16:1;;;6908:2;;;6940:1;6937;6930:12;6908:2;;6979:72;7043:7;7032:8;7021:9;7017:24;6979:72;:::i;:::-;5968:1143;;;;-1:-1:-1;5968:1143:1;;-1:-1:-1;5968:1143:1;;;;;;7070:8;-1:-1:-1;;;5968:1143:1:o;7116:1720::-;7346:6;7354;7362;7370;7378;7386;7394;7402;7410;7418;7471:3;7459:9;7450:7;7446:23;7442:33;7439:2;;;7488:1;7485;7478:12;7439:2;7528:9;7515:23;7557:18;7598:2;7590:6;7587:14;7584:2;;;7614:1;7611;7604:12;7584:2;7653:70;7715:7;7706:6;7695:9;7691:22;7653:70;:::i;:::-;7742:8;;-1:-1:-1;7627:96:1;-1:-1:-1;7830:2:1;7815:18;;7802:32;;-1:-1:-1;7846:16:1;;;7843:2;;;7875:1;7872;7865:12;7843:2;7914:72;7978:7;7967:8;7956:9;7952:24;7914:72;:::i;:::-;8005:8;;-1:-1:-1;7888:98:1;-1:-1:-1;8093:2:1;8078:18;;8065:32;;-1:-1:-1;8109:16:1;;;8106:2;;;8138:1;8135;8128:12;8106:2;8177:72;8241:7;8230:8;8219:9;8215:24;8177:72;:::i;:::-;8268:8;;-1:-1:-1;8151:98:1;-1:-1:-1;8356:2:1;8341:18;;8328:32;;-1:-1:-1;8372:16:1;;;8369:2;;;8401:1;8398;8391:12;8369:2;8440:72;8504:7;8493:8;8482:9;8478:24;8440:72;:::i;:::-;8531:8;;-1:-1:-1;8414:98:1;-1:-1:-1;8619:3:1;8604:19;;8591:33;;-1:-1:-1;8636:16:1;;;8633:2;;;8665:1;8662;8655:12;8633:2;;8704:72;8768:7;8757:8;8746:9;8742:24;8704:72;:::i;:::-;8678:98;;8795:8;8785:18;;;8822:8;8812:18;;;7429:1407;;;;;;;;;;;;;:::o;8841:277::-;8908:6;8961:2;8949:9;8940:7;8936:23;8932:32;8929:2;;;8977:1;8974;8967:12;8929:2;9009:9;9003:16;9062:5;9055:13;9048:21;9041:5;9038:32;9028:2;;9084:1;9081;9074:12;9123:594;9218:6;9226;9234;9242;9250;9303:3;9291:9;9282:7;9278:23;9274:33;9271:2;;;9320:1;9317;9310:12;9271:2;9356:9;9343:23;9333:33;;9416:2;9405:9;9401:18;9388:32;9429:31;9454:5;9429:31;:::i;:::-;9479:5;-1:-1:-1;9536:2:1;9521:18;;9508:32;9549:33;9508:32;9549:33;:::i;:::-;9261:456;;;;-1:-1:-1;9601:7:1;;9655:2;9640:18;;9627:32;;-1:-1:-1;9706:3:1;9691:19;9678:33;;9261:456;-1:-1:-1;;9261:456:1:o;9722:916::-;9862:6;9870;9878;9886;9894;9902;9910;9918;9971:3;9959:9;9950:7;9946:23;9942:33;9939:2;;;9988:1;9985;9978:12;9939:2;10024:9;10011:23;10001:33;;10081:2;10070:9;10066:18;10053:32;10043:42;;10132:2;10121:9;10117:18;10104:32;10094:42;;10187:2;10176:9;10172:18;10159:32;10214:18;10206:6;10203:30;10200:2;;;10246:1;10243;10236:12;10200:2;10285:70;10347:7;10338:6;10327:9;10323:22;10285:70;:::i;:::-;10374:8;;-1:-1:-1;10259:96:1;-1:-1:-1;;10459:3:1;10444:19;;10431:33;10473:31;10431:33;10473:31;:::i;:::-;9929:709;;;;-1:-1:-1;9929:709:1;;;;;;10523:5;;-1:-1:-1;;;10575:3:1;10560:19;;10547:33;;10627:3;10612:19;10599:33;;9929:709::o;10643:450::-;10730:6;10738;10746;10799:2;10787:9;10778:7;10774:23;10770:32;10767:2;;;10815:1;10812;10805:12;10767:2;10838:40;10868:9;10838:40;:::i;:::-;10828:50;;10897:49;10942:2;10931:9;10927:18;10897:49;:::i;:::-;10887:59;;10989:2;10978:9;10974:18;10968:25;11033:10;11026:5;11022:22;11015:5;11012:33;11002:2;;11059:1;11056;11049:12;11098:184;11168:6;11221:2;11209:9;11200:7;11196:23;11192:32;11189:2;;;11237:1;11234;11227:12;11189:2;-1:-1:-1;11260:16:1;;11179:103;-1:-1:-1;11179:103:1:o;11287:1200::-;11380:6;11388;11441:2;11429:9;11420:7;11416:23;11412:32;11409:2;;;11457:1;11454;11447:12;11409:2;11493:9;11480:23;11470:33;;11522:2;11575;11564:9;11560:18;11547:32;11598:18;11639:2;11631:6;11628:14;11625:2;;;11655:1;11652;11645:12;11625:2;11693:6;11682:9;11678:22;11668:32;;11738:7;11731:4;11727:2;11723:13;11719:27;11709:2;;11760:1;11757;11750:12;11709:2;11796;11783:16;11818:2;11814;11811:10;11808:2;;;11824:18;;:::i;:::-;11870:2;11867:1;11863:10;11902:2;11896:9;11965:2;11961:7;11956:2;11952;11948:11;11944:25;11936:6;11932:38;12020:6;12008:10;12005:22;12000:2;11988:10;11985:18;11982:46;11979:2;;;12031:18;;:::i;:::-;12067:2;12060:22;12117:18;;;12151:15;;;;-1:-1:-1;12186:11:1;;;12216;;;12212:20;;12209:33;-1:-1:-1;12206:2:1;;;12255:1;12252;12245:12;12206:2;12277:1;12268:10;;12287:169;12301:2;12298:1;12295:9;12287:169;;;12358:23;12377:3;12358:23;:::i;:::-;12346:36;;12319:1;12312:9;;;;;12402:12;;;;12434;;12287:169;;;12291:3;12475:6;12465:16;;;;;;;;11399:1088;;;;;:::o;12492:847::-;12623:6;12631;12639;12647;12655;12663;12671;12724:3;12712:9;12703:7;12699:23;12695:33;12692:2;;;12741:1;12738;12731:12;12692:2;12777:9;12764:23;12754:33;;12834:2;12823:9;12819:18;12806:32;12796:42;;12889:2;12878:9;12874:18;12861:32;12916:18;12908:6;12905:30;12902:2;;;12948:1;12945;12938:12;12902:2;12987:70;13049:7;13040:6;13029:9;13025:22;12987:70;:::i;:::-;13076:8;;-1:-1:-1;12961:96:1;-1:-1:-1;;13161:2:1;13146:18;;13133:32;13174:31;13133:32;13174:31;:::i;:::-;12682:657;;;;-1:-1:-1;12682:657:1;;;;13224:5;13276:3;13261:19;;13248:33;;-1:-1:-1;13328:3:1;13313:19;;;13300:33;;12682:657;-1:-1:-1;;12682:657:1:o;13344:316::-;13421:6;13429;13437;13490:2;13478:9;13469:7;13465:23;13461:32;13458:2;;;13506:1;13503;13496:12;13458:2;-1:-1:-1;;13529:23:1;;;13599:2;13584:18;;13571:32;;-1:-1:-1;13650:2:1;13635:18;;;13622:32;;13448:212;-1:-1:-1;13448:212:1:o;14003:274::-;14132:3;14170:6;14164:13;14186:53;14232:6;14227:3;14220:4;14212:6;14208:17;14186:53;:::i;:::-;14255:16;;;;;14140:137;-1:-1:-1;;14140:137:1:o;15511:670::-;-1:-1:-1;;;;;15878:15:1;;;15860:34;;15930:15;;;;15925:2;15910:18;;15903:43;15977:2;15962:18;;15955:34;;;;16020:2;16005:18;;15998:34;;;;16081:4;16069:17;16063:3;16048:19;;16041:46;15840:3;16103:19;;16096:35;16162:3;16147:19;;16140:35;;;;15809:3;15794:19;;15776:405::o;16186:274::-;-1:-1:-1;;;;;16378:32:1;;;;16360:51;;16442:2;16427:18;;16420:34;16348:2;16333:18;;16315:145::o;16465:375::-;-1:-1:-1;;;;;16723:15:1;;;16705:34;;16770:2;16755:18;;16748:34;;;;16818:15;;;16813:2;16798:18;;16791:43;16655:2;16640:18;;16622:218::o;16845:1001::-;17157:3;17170:22;;;17142:19;;17227:22;;;17109:4;17307:6;17280:3;17265:19;;17109:4;17341:304;17355:6;17352:1;17349:13;17341:304;;;17430:6;17417:20;17450:31;17475:5;17450:31;:::i;:::-;-1:-1:-1;;;;;17506:31:1;17494:44;;17561:4;17620:15;;;;17585:12;;;;17534:1;17370:9;17341:304;;;-1:-1:-1;17696:4:1;17681:20;;17674:36;;;;-1:-1:-1;;17741:2:1;17726:18;;17719:34;;;;17784:2;17769:18;;17762:34;;;;17827:3;17812:19;;;17805:35;17662:3;17118:728;-1:-1:-1;;17118:728:1:o;17851:948::-;18153:3;18166:22;;;18237:13;;18138:19;;;18259:22;;;18105:4;;18335;;18312:3;18297:19;;;18362:15;;;18105:4;18405:195;18419:6;18416:1;18413:13;18405:195;;;18484:13;;-1:-1:-1;;;;;18480:39:1;18468:52;;18540:12;;;;18575:15;;;;18516:1;18434:9;18405:195;;;-1:-1:-1;;;18636:18:1;;;18629:34;;;;-1:-1:-1;18694:2:1;18679:18;;18672:34;;;;18737:2;18722:18;;18715:34;;;;18780:3;18765:19;;;18758:35;18617:3;18114:685;-1:-1:-1;18114:685:1:o;18804:632::-;18975:2;19027:21;;;19097:13;;19000:18;;;19119:22;;;18946:4;;18975:2;19198:15;;;;19172:2;19157:18;;;18946:4;19241:169;19255:6;19252:1;19249:13;19241:169;;;19316:13;;19304:26;;19385:15;;;;19350:12;;;;19277:1;19270:9;19241:169;;;-1:-1:-1;19427:3:1;;18955:481;-1:-1:-1;;;;;;18955:481:1:o;19633:406::-;19835:2;19817:21;;;19874:2;19854:18;;;19847:30;-1:-1:-1;;;;;;;;;;;19908:2:1;19893:18;;19886:62;-1:-1:-1;;;19979:2:1;19964:18;;19957:40;20029:3;20014:19;;19807:232::o;20394:406::-;20596:2;20578:21;;;20635:2;20615:18;;;20608:30;20674:34;20669:2;20654:18;;20647:62;-1:-1:-1;;;20740:2:1;20725:18;;20718:40;20790:3;20775:19;;20568:232::o;23866:350::-;24068:2;24050:21;;;24107:2;24087:18;;;24080:30;24146:28;24141:2;24126:18;;24119:56;24207:2;24192:18;;24040:176::o;25760:348::-;25962:2;25944:21;;;26001:2;25981:18;;;25974:30;26040:26;26035:2;26020:18;;26013:54;26099:2;26084:18;;25934:174::o;28120:624::-;28351:6;28340:9;28333:25;28394:6;28389:2;28378:9;28374:18;28367:34;28466:1;28462;28457:3;28453:11;28449:19;28441:6;28437:32;28432:2;28421:9;28417:18;28410:60;28506:3;28501:2;28490:9;28486:18;28479:31;28314:4;28539:6;28533:13;28583:6;28577:3;28566:9;28562:19;28555:35;28599:67;28659:6;28653:3;28642:9;28638:19;28633:2;28625:6;28621:15;28599:67;:::i;:::-;28727:2;28706:15;-1:-1:-1;;28702:29:1;28687:45;;;;28734:3;28683:55;;28323:421;-1:-1:-1;;;;;28323:421:1:o;29073:128::-;29113:3;29144:1;29140:6;29137:1;29134:13;29131:2;;;29150:18;;:::i;:::-;-1:-1:-1;29186:9:1;;29121:80::o;29206:217::-;29246:1;29272;29262:2;;29316:10;29311:3;29307:20;29304:1;29297:31;29351:4;29348:1;29341:15;29379:4;29376:1;29369:15;29262:2;-1:-1:-1;29408:9:1;;29252:171::o;29428:168::-;29468:7;29534:1;29530;29526:6;29522:14;29519:1;29516:21;29511:1;29504:9;29497:17;29493:45;29490:2;;;29541:18;;:::i;:::-;-1:-1:-1;29581:9:1;;29480:116::o;29601:125::-;29641:4;29669:1;29666;29663:8;29660:2;;;29674:18;;:::i;:::-;-1:-1:-1;29711:9:1;;29650:76::o;29731:258::-;29803:1;29813:113;29827:6;29824:1;29821:13;29813:113;;;29903:11;;;29897:18;29884:11;;;29877:39;29849:2;29842:10;29813:113;;;29944:6;29941:1;29938:13;29935:2;;;-1:-1:-1;;29979:1:1;29961:16;;29954:27;29784:205::o;29994:136::-;30033:3;30061:5;30051:2;;30070:18;;:::i;:::-;-1:-1:-1;;;30106:18:1;;30041:89::o;30135:135::-;30174:3;-1:-1:-1;;30195:17:1;;30192:2;;;30215:18;;:::i;:::-;-1:-1:-1;30262:1:1;30251:13;;30182:88::o;30275:127::-;30336:10;30331:3;30327:20;30324:1;30317:31;30367:4;30364:1;30357:15;30391:4;30388:1;30381:15;30407:127;30468:10;30463:3;30459:20;30456:1;30449:31;30499:4;30496:1;30489:15;30523:4;30520:1;30513:15;30539:127;30600:10;30595:3;30591:20;30588:1;30581:31;30631:4;30628:1;30621:15;30655:4;30652:1;30645:15;30671:127;30732:10;30727:3;30723:20;30720:1;30713:31;30763:4;30760:1;30753:15;30787:4;30784:1;30777:15;30803:131;-1:-1:-1;;;;;30878:31:1;;30868:42;;30858:2;;30924:1;30921;30914:12;30858:2;30848:86;:::o

Swarm Source

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