Contract 0xc8a45dd787a301c38ad33f692f0d41c18590ef94 5

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xceab20194ff4e5abecda0c365fba9233b06d834e0ca1b8b32c7dc100203af2a8Any Swap In Auto57177302022-11-25 1:46:183 days 10 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.604205454460
0x8a4c61b8721d3de9ca306dfc064d5a255db8ac14d93306eeda04dd9c5f1404f2Any Swap In Auto56834512022-11-22 19:45:205 days 16 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5401630020020
0xbed50556a67da4692beff1d192230c0c9ec5fdf251f41aeddf817c951bee455cAny Swap In Auto56832452022-11-22 19:25:525 days 16 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.540110408230
0x9e7d09a1419c4dcc939863c1185c3eac4532e89bdf40aefb27bc558cfb7beb25Any Swap In Auto56805382022-11-22 15:09:565 days 20 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6044184074570
0xa990ff7f53903bda6321e0a19b3c768bd9328c8dc3a4c53f12d2ddd3f4118d66Any Swap In Auto56691302022-11-21 21:12:286 days 14 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5402366310750
0x3639e8e033fc3319684519ef5dfa34d6dc9ce0f6cf0c1b263a8bcf76ed0aff82Any Swap In Auto56063922022-11-17 18:26:5510 days 17 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6048446570190
0x713434fb4823e65dba19f914123dcfc964add80ec73d1af8ed5cf4b250c2bfb1Any Swap In Auto56039012022-11-17 14:31:2610 days 21 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5879106458430
0xa53400d2cb51da67b8b2fba2b86267b664e23d303bd6120fc407fe30cff1769cAny Swap In Auto55919532022-11-16 19:42:2111 days 16 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6049275818640
0x56aba567660ce433a7a5a297f42911de33250b8579e22da99890845be2821dbcAny Swap In Auto55881082022-11-16 13:38:4711 days 22 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.4204777723770
0xf4a568b6dc9958b0d007dd151973dcbe10e084e1a218a0e7e6ea26e0ef7d2451Any Swap In Auto55870482022-11-16 11:58:2311 days 23 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6049019245510
0x293c867fdf661f4334160162644e98b951b05bb2d362567ee962f411b864ea91Any Swap In Auto55780162022-11-15 21:44:0512 days 14 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6051086972540
0x5808a07080290c0127cd92fdd8f8187191dbb817f6f12f5ed8cfc9e1125e7470Any Swap In Auto55766642022-11-15 19:35:5112 days 16 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6052182862710
0x2ed5e66f64dcc156798303bb11ee2719b37c6d54f10e4c3b071084b71004cfafAny Swap In Auto55758532022-11-15 18:19:0112 days 17 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6050188921270
0xab8c48afd755a318a2f999059f13d813461bd7e65a62720e96ebacfdafde9b65Any Swap In Auto55713472022-11-15 11:11:4813 days 36 mins ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5406836061820
0x83ab303e2d13352fed5464eb5f00ce83f28459aefdcac9e560344dee997f4f44Any Swap In Auto55712472022-11-15 11:02:1913 days 45 mins ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5406842911160
0x563cb341f02d776739823858db300c7d3c53cb8e6bf24fb030b077e2c7f7eca8Any Swap In Auto55697382022-11-15 8:39:2213 days 3 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6051072172280
0xa576e23fb61d23eb682602659fb7cae9b58f71e1cf26d6d02d06dcc68b6490b1Any Swap In Auto55645852022-11-15 0:29:4513 days 11 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6050824789210
0x5fecb3abb085a65ad5f8ef80158304fd9e2c5fea9b79764fe3175479426fc272Any Swap In Auto55645122022-11-15 0:22:4713 days 11 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.6052386562240
0x044ff6859fa90d6aac982b03cb3d89bb4f7a1ad64341dbd35eafaae8b09e0996Any Swap In Auto55636372022-11-14 22:59:3613 days 12 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5504526286970
0xaca196f89acd506069c3a90d0f57d6439bffc246f370fa3dcdb744376439f5dcAny Swap In Auto55555522022-11-14 10:09:4214 days 1 hr ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5504933191160
0x5059f13eaebc446ebd46641fa2ff4fabcbb99d6b35afe80c8f8b0b884ce1b09dAny Swap In Auto55547222022-11-14 8:50:5314 days 2 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5504975040870
0x9ac64a3fd58dc187459ee0015ee931914fa4989707f4cd6c415776db59edc59dAny Swap In Auto55542722022-11-14 8:07:5314 days 3 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5504997421410
0x570d41235b8dcbe5d9c858987a3db7779d92565c8a6bf9ac4e047a41a295d777Any Swap In Auto55537562022-11-14 7:18:2714 days 4 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5505665317230
0x174478a71c24ffb1b421cb99b7df7f1c199fb6a6e0cdd6b874416923783efa57Any Swap In Auto55526282022-11-14 5:30:5314 days 6 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.5504431887040
0x4d8f1d1eddf05ee8f29d03c631aab4b1adb2936af63b246d92d306f649c10a0bAny Swap In Auto55525642022-11-14 5:24:5014 days 6 hrs ago0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.4764588822490
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV6Router

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-08-11
*/

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

pragma solidity >=0.8.2;

interface ISushiswapV2Pair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) 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) {
        unchecked {
            require((z = x + y) >= x, 'ds-math-add-overflow');
        }
    }

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

    function mul(uint x, uint y) internal pure returns (uint z) {
        unchecked {
            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 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 setMinter(address _auth) external;
    function applyMinter() external;
    function revokeMinter(address _auth) external;
    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 transferFrom(address sender, address recipient, uint256 amount) 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 AnyswapV6Router {
    using SafeERC20 for IERC20;
    using SafeMathSushiswap for uint;

    address public immutable factory;
    address public immutable wNATIVE;

    bool public enableSwapTrade;
    modifier swapTradeEnabled() {
        require(enableSwapTrade, 'AnyswapV6Router: SwapTrade disabled');
        _;
    }

    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 LogAnySwapOut(address indexed token, address indexed from, string 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 setEnableSwapTrade(bool enable) external onlyMPC {
        enableSwapTrade = enable;
    }

    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 setMinter(address token, address _auth) external onlyMPC {
        return AnyswapV1ERC20(token).setMinter(_auth);
    }

    function applyMinter(address token) external onlyMPC {
        return AnyswapV1ERC20(token).applyMinter();
    }

    function revokeMinter(address token, address _auth) external onlyMPC {
        return AnyswapV1ERC20(token).revokeMinter(_auth);
    }

    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);
        emit LogAnySwapOut(token, msg.sender, to, amount, cID(), 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));
        emit LogAnySwapOut(token, msg.sender, to, msg.value, cID(), 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]);
        }
    }

    function anySwapOut(address token, string memory to, uint amount, uint toChainID) external {
        AnyswapV1ERC20(token).burn(msg.sender, amount);
        emit LogAnySwapOut(token, msg.sender, to, amount, cID(), toChainID);
    }

    function anySwapOutUnderlying(address token, string memory to, uint amount, uint toChainID) external {
        IERC20(AnyswapV1ERC20(token).underlying()).safeTransferFrom(msg.sender, token, amount);
        emit LogAnySwapOut(token, msg.sender, to, amount, cID(), toChainID);
    }

    function anySwapOutNative(address token, string memory 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));
        emit LogAnySwapOut(token, msg.sender, to, msg.value, cID(), toChainID);
    }

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

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

    // 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 swapTradeEnabled 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":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"string","name":"to","type":"string"},{"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":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"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":"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":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"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":"toChainID","type":"uint256"}],"name":"anySwapOutNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlying","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":"anySwapOutUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"applyMinter","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":"enableSwapTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableSwapTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","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"}]

60c06040523480156200001157600080fd5b506040516200445338038062004453833981016040819052620000349162000081565b600180546001600160a01b0319166001600160a01b03928316179055426002559182166080521660a052620000cb565b80516001600160a01b03811681146200007c57600080fd5b919050565b6000806000606084860312156200009757600080fd5b620000a28462000064565b9250620000b26020850162000064565b9150620000c26040850162000064565b90509250925092565b60805160a0516142c16200019260003960008181610223015281816105590152818161084501528181610904015281816112590152818161144201528181611518015281816115ca0152818161165e01528181611afc01528181611bae01528181611c4201528181611d8a01528181611ec2015281816121680152818161221a01526122ae01526000818161060b01528181610c5801528181610e1f01528181610f37015281816113050152818161243c01528181612fe3015261303301526142c16000f3fe6080604052600436106102135760003560e01c8063825bb13c11610118578063ad615dec116100a0578063d8b9f6101161006f578063d8b9f6101461066d578063d9e35bb21461068d578063dcfb77b1146106ad578063edbdf5e2146106cd578063f75c2664146106ed57600080fd5b8063ad615dec146105d9578063c45a0155146105f9578063c604b0b81461062d578063d06ca61f1461064d57600080fd5b806387cc6e2f116100e757806387cc6e2f146105275780638fd903f51461054757806399a2f2d7146105935780639f122d6c146105a6578063a5e56571146105c657600080fd5b8063825bb13c146104a7578063832e9492146104c757806385f8c259146104e757806387bafe5f1461050757600080fd5b8063353cb3a81161019b578063540dd52c1161016a578063540dd52c146104215780635b7b018c1461043457806365782f56146104545780636a45397214610474578063701bb8911461049457600080fd5b8063353cb3a8146103975780633f88de89146103c1578063456862aa146103e157806352a397d51461040157600080fd5b80630bb57203116101e25780630bb57203146102ea5780631f00ca741461030a578063241dc2df1461033757806325121b76146103575780632fc1e7281461037757600080fd5b80630175b1c414610257578063049b4e7e14610277578063054d50d414610297578063085c6d5e146102ca57600080fd5b3661025257336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610250576102506136d5565b005b600080fd5b34801561026357600080fd5b50610250610272366004613700565b610702565b34801561028357600080fd5b50610250610292366004613809565b6109f3565b3480156102a357600080fd5b506102b76102b2366004613869565b610abb565b6040519081526020015b60405180910390f35b3480156102d657600080fd5b506102506102e53660046138a3565b610ad0565b3480156102f657600080fd5b5061025061030536600461390c565b610b1b565b34801561031657600080fd5b5061032a610325366004613989565b610c51565b6040516102c19190613a47565b34801561034357600080fd5b50610250610352366004613a8b565b610c87565b34801561036357600080fd5b50610250610372366004613ad1565b610c9a565b34801561038357600080fd5b5061032a610392366004613bc2565b610d9d565b3480156103a357600080fd5b506000546103b19060ff1681565b60405190151581526020016102c1565b3480156103cd57600080fd5b506102506103dc366004613700565b611018565b3480156103ed57600080fd5b506103b16103fc366004613c47565b6110d6565b34801561040d57600080fd5b5061032a61041c366004613bc2565b6111d2565b61025061042f366004613c80565b611516565b34801561044057600080fd5b506103b161044f366004613cd9565b611728565b34801561046057600080fd5b5061025061046f36600461390c565b61185f565b34801561048057600080fd5b5061025061048f36600461390c565b611974565b6102b76104a2366004613c47565b611af8565b3480156104b357600080fd5b506102506104c2366004613700565b611d3a565b3480156104d357600080fd5b506102b76104e2366004613cf6565b611d86565b3480156104f357600080fd5b506102b7610502366004613869565b611f38565b34801561051357600080fd5b50610250610522366004613c47565b611f45565b34801561053357600080fd5b50610250610542366004613d38565b611fd5565b34801561055357600080fd5b5061057b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c1565b34801561059f57600080fd5b50466102b7565b3480156105b257600080fd5b506102506105c1366004613c47565b612100565b6102506105d4366004613d64565b612166565b3480156105e557600080fd5b506102b76105f4366004613869565b612382565b34801561060557600080fd5b5061057b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063957600080fd5b50610250610648366004613809565b61238f565b34801561065957600080fd5b5061032a610668366004613989565b612435565b34801561067957600080fd5b5061025061068836600461390c565b612462565b34801561069957600080fd5b506102506106a8366004613cd9565b61256b565b3480156106b957600080fd5b506102506106c8366004613da5565b6125f5565b3480156106d957600080fd5b506102506106e8366004613a8b565b6126a6565b3480156106f957600080fd5b5061057b612742565b61070a612742565b6001600160a01b0316336001600160a01b0316146107435760405162461bcd60e51b815260040161073a90613e69565b60405180910390fd5b6107508585858585612772565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b99190613ea0565b90506001600160a01b0381161580159061083e57506040516370a0823160e01b81526001600160a01b0387811660048301528591908316906370a0823190602401602060405180830381865afa158015610817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083b9190613ebd565b10155b156109ea577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361097757604051620e75bb60e21b81526001600160a01b038316906239d6ec906108aa90889088903090600401613ed6565b6020604051808303816000875af11580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ed9190613ebd565b50604051632e1a7d4d60e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b50505050610972858561284b565b6109ea565b604051620e75bb60e21b81526001600160a01b038316906239d6ec906109a590889088908290600401613ed6565b6020604051808303816000875af11580156109c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e89190613ebd565b505b50505050505050565b610a6c338584876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b9190613ea0565b6001600160a01b031692919061291c565b336001600160a01b0385167f409e0ad946b19f77602d6cf11d59e1796ddaa4828159a0b4fb7fa2ff6b161b798585465b86604051610aad9493929190613f51565b60405180910390a350505050565b6000610ac8848484612976565b949350505050565b610ad8612742565b6001600160a01b0316336001600160a01b031614610b085760405162461bcd60e51b815260040161073a90613e69565b6000805460ff1916911515919091179055565b60005460ff16610b3d5760405162461bcd60e51b815260040161073a90613f80565b8142811015610b5e5760405162461bcd60e51b815260040161073a90613fc3565b85856000818110610b7157610b71613ffa565b9050602002016020810190610b869190613cd9565b604051632770a7eb60e21b8152336004820152602481018a90526001600160a01b039190911690639dc29fac906044016020604051808303816000875af1158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190614010565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c465b89604051610c3f9695949392919061402d565b60405180910390a35050505050505050565b6060610c7e7f00000000000000000000000000000000000000000000000000000000000000008484612a44565b90505b92915050565b610c943385858585612bda565b50505050565b610ca2612742565b6001600160a01b0316336001600160a01b031614610cd25760405162461bcd60e51b815260040161073a90613e69565b60005b87811015610d9057610d7e8b8b83818110610cf257610cf2613ffa565b905060200201358a8a84818110610d0b57610d0b613ffa565b9050602002016020810190610d209190613cd9565b898985818110610d3257610d32613ffa565b9050602002016020810190610d479190613cd9565b888886818110610d5957610d59613ffa565b90506020020135878787818110610d7257610d72613ffa565b90506020020135612772565b80610d88816140ad565b915050610cd5565b5050505050505050505050565b6060610da7612742565b6001600160a01b0316336001600160a01b031614610dd75760405162461bcd60e51b815260040161073a90613e69565b60005460ff16610df95760405162461bcd60e51b815260040161073a90613f80565b8242811015610e1a5760405162461bcd60e51b815260040161073a90613fc3565b610e787f00000000000000000000000000000000000000000000000000000000000000008a898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cb192505050565b9150878260018451610e8a91906140c6565b81518110610e9a57610e9a613ffa565b60200260200101511015610f065760405162461bcd60e51b815260206004820152602d60248201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60448201526c13d55514155517d05353d55395609a1b606482015260840161073a565b610fcc8a88886000818110610f1d57610f1d613ffa565b9050602002016020810190610f329190613cd9565b610fab7f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610f6957610f69613ffa565b9050602002016020810190610f7e9190613cd9565b8c8c6001818110610f9157610f91613ffa565b9050602002016020810190610fa69190613cd9565b612e27565b85600081518110610fbe57610fbe613ffa565b602002602001015187612772565b61100b828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250612f00915050565b5098975050505050505050565b611020612742565b6001600160a01b0316336001600160a01b0316146110505760405162461bcd60e51b815260040161073a90613e69565b61105d8585858585612772565b604051620e75bb60e21b81526001600160a01b038516906239d6ec9061108b90869086908290600401613ed6565b6020604051808303816000875af11580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190613ebd565b505050505050565b60006110e0612742565b6001600160a01b0316336001600160a01b0316146111105760405162461bcd60e51b815260040161073a90613e69565b6001600160a01b0382166111665760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20616464726573732830783029000000604482015260640161073a565b6040516360e232a960e01b81526001600160a01b0383811660048301528416906360e232a9906024016020604051808303816000875af11580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e9190614010565b60606111dc612742565b6001600160a01b0316336001600160a01b03161461120c5760405162461bcd60e51b815260040161073a90613e69565b60005460ff1661122e5760405162461bcd60e51b815260040161073a90613f80565b824281101561124f5760405162461bcd60e51b815260040161073a90613fc3565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876112866001826140c6565b81811061129557611295613ffa565b90506020020160208101906112aa9190613cd9565b6001600160a01b0316146113005760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20494e56414c49445f50415448000000604482015260640161073a565b61135e7f00000000000000000000000000000000000000000000000000000000000000008a898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cb192505050565b915087826001845161137091906140c6565b8151811061138057611380613ffa565b602002602001015110156113ea5760405162461bcd60e51b815260206004820152602b60248201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b606482015260840161073a565b6114018a88886000818110610f1d57610f1d613ffa565b61144082888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612f00915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855161147e91906140c6565b8151811061148e5761148e613ffa565b60200260200101516040518263ffffffff1660e01b81526004016114b491815260200190565b600060405180830381600087803b1580156114ce57600080fd5b505af11580156114e2573d6000803e3d6000fd5b5050505061100b8583600185516114f991906140c6565b8151811061150957611509613ffa565b602002602001015161284b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a29190613ea0565b6001600160a01b0316146115c85760405162461bcd60e51b815260040161073a906140dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561162357600080fd5b505af1158015611637573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0387811660048301523460248301527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af11580156116ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cf9190614010565b6116db576116db6136d5565b336001600160a01b0384167f409e0ad946b19f77602d6cf11d59e1796ddaa4828159a0b4fb7fa2ff6b161b798434468660405161171b9493929190613f51565b60405180910390a3505050565b6000611732612742565b6001600160a01b0316336001600160a01b0316146117625760405162461bcd60e51b815260040161073a90613e69565b6001600160a01b0382166117b85760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20616464726573732830783029000000604482015260640161073a565b6117c0612742565b60008054610100600160a81b0319166101006001600160a01b0393841602179055600180546001600160a01b031916918416919091179055611805426202a300614127565b60028190556001546000546001600160a01b0391821691610100909104167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a21981214660405190815260200160405180910390a45060015b919050565b60005460ff166118815760405162461bcd60e51b815260040161073a90613f80565b81428110156118a25760405162461bcd60e51b815260040161073a90613fc3565b858560008181106118b5576118b5613ffa565b90506020020160208101906118ca9190613cd9565b604051632770a7eb60e21b8152336004820152602481018a90526001600160a01b039190911690639dc29fac906044016020604051808303816000875af1158015611919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193d9190614010565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c46610c2c565b60005460ff166119965760405162461bcd60e51b815260040161073a90613f80565b81428110156119b75760405162461bcd60e51b815260040161073a90613fc3565b611a4933878760008181106119ce576119ce613ffa565b90506020020160208101906119e39190613cd9565b8a898960008181106119f7576119f7613ffa565b9050602002016020810190611a0c9190613cd9565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a37573d6000803e3d6000fd5b85856000818110611a5c57611a5c613ffa565b9050602002016020810190611a719190613cd9565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d0906044016020604051808303816000875af1158015611ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae49190613ebd565b50858560008181106118b5576118b5613ffa565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190613ea0565b6001600160a01b031614611bac5760405162461bcd60e51b815260040161073a906140dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c0757600080fd5b505af1158015611c1b573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0387811660048301523460248301527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015611c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb39190614010565b611cbf57611cbf6136d5565b604051630bebbf4d60e41b81523460048201526001600160a01b03838116602483015284169063bebbf4d0906044016020604051808303816000875af1158015611d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d319190613ebd565b50349392505050565b611d42612742565b6001600160a01b0316336001600160a01b031614611d725760405162461bcd60e51b815260040161073a90613e69565b611d7f8585858585612772565b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e149190613ea0565b6001600160a01b031614611e3a5760405162461bcd60e51b815260040161073a906140dd565b604051620e75bb60e21b81526001600160a01b038516906239d6ec90611e6890339087903090600401613ed6565b6020604051808303816000875af1158015611e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eab9190613ebd565b50604051632e1a7d4d60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611f0e57600080fd5b505af1158015611f22573d6000803e3d6000fd5b50505050611f30828461284b565b509092915050565b6000610ac8848484613102565b611f4d612742565b6001600160a01b0316336001600160a01b031614611f7d5760405162461bcd60e51b815260040161073a90613e69565b60405163cfbd488560e01b81526001600160a01b03828116600483015283169063cfbd4885906024015b600060405180830381600087803b158015611fc157600080fd5b505af11580156110ce573d6000803e3d6000fd5b611fdd612742565b6001600160a01b0316336001600160a01b03161461200d5760405162461bcd60e51b815260040161073a90613e69565b6000612017612742565b6040516340c10f1960e01b81526001600160a01b03808316600483015260248201859052919250908416906340c10f19906044016020604051808303816000875af115801561206a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208e9190614010565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec906120bd90849086908290600401613ed6565b6020604051808303816000875af11580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190613ebd565b612108612742565b6001600160a01b0316336001600160a01b0316146121385760405162461bcd60e51b815260040161073a90613e69565b604051637e51dad560e11b81526001600160a01b03828116600483015283169063fca3b5aa90602401611fa7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f29190613ea0565b6001600160a01b0316146122185760405162461bcd60e51b815260040161073a906140dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561227357600080fd5b505af1158015612287573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0387811660048301523460248301527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af11580156122fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231f9190614010565b61232b5761232b6136d5565b6001600160a01b0380831690339085167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a3446604080519283526020830191909152810186905260600160405180910390a4505050565b6000610ac88484846131cb565b604051632770a7eb60e21b8152336004820152602481018390526001600160a01b03851690639dc29fac906044016020604051808303816000875af11580156123dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124009190614010565b50336001600160a01b0385167f409e0ad946b19f77602d6cf11d59e1796ddaa4828159a0b4fb7fa2ff6b161b79858546610a9c565b6060610c7e7f00000000000000000000000000000000000000000000000000000000000000008484612cb1565b60005460ff166124845760405162461bcd60e51b815260040161073a90613f80565b81428110156124a55760405162461bcd60e51b815260040161073a90613fc3565b6124bc33878760008181106119ce576119ce613ffa565b858560008181106124cf576124cf613ffa565b90506020020160208101906124e49190613cd9565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d0906044016020604051808303816000875af1158015612533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125579190613ebd565b5085856000818110610b7157610b71613ffa565b612573612742565b6001600160a01b0316336001600160a01b0316146125a35760405162461bcd60e51b815260040161073a90613e69565b806001600160a01b0316630d707df86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156125de57600080fd5b505af1158015611d7f573d6000803e3d6000fd5b50565b60005b8781101561269b57612689338a8a8481811061261657612616613ffa565b905060200201602081019061262b9190613cd9565b89898581811061263d5761263d613ffa565b90506020020160208101906126529190613cd9565b88888681811061266457612664613ffa565b9050602002013587878781811061267d5761267d613ffa565b90506020020135612bda565b80612693816140ad565b9150506125f8565b505050505050505050565b6126ea338584876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a37573d6000803e3d6000fd5b6001600160a01b0380841690339086167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a8546604080519283526020830191909152810186905260600160405180910390a450505050565b6000600254421061275d57506001546001600160a01b031690565b5060005461010090046001600160a01b031690565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528516906340c10f19906044016020604051808303816000875af11580156127c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e59190614010565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd5585856128254690565b604080519384526020840192909252908201526060015b60405180910390a45050505050565b604080516000808252602082019092526001600160a01b038416908390604051612875919061413f565b60006040518083038185875af1925050503d80600081146128b2576040519150601f19603f3d011682016040523d82523d6000602084013e6128b7565b606091505b50509050806129175760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201526511905253115160d21b606482015260840161073a565b505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c9490859061325b565b60008084116129cb5760405162461bcd60e51b815260206004820152602d602482015260008051602061426c83398151915260448201526c17d25394155517d05353d55395609a1b606482015260840161073a565b6000831180156129db5750600082115b6129f75760405162461bcd60e51b815260040161073a9061415b565b6000612a05856103e56133e2565b90506000612a1382856133e2565b90506000612a2d83612a27886103e86133e2565b90613446565b9050612a3981836141a9565b979650505050505050565b6060600282511015612a985760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f50415448604482015260640161073a565b815167ffffffffffffffff811115612ab257612ab2613752565b604051908082528060200260200182016040528015612adb578160200160208202803683370190505b509050828160018351612aee91906140c6565b81518110612afe57612afe613ffa565b602002602001018181525050600060018351612b1a91906140c6565b90505b8015612bd257600080612b6d8786612b366001876140c6565b81518110612b4657612b46613ffa565b6020026020010151878681518110612b6057612b60613ffa565b6020026020010151613490565b91509150612b95848481518110612b8657612b86613ffa565b60200260200101518383613102565b84612ba16001866140c6565b81518110612bb157612bb1613ffa565b60200260200101818152505050508080612bca906141cb565b915050612b1d565b509392505050565b604051632770a7eb60e21b81526001600160a01b03868116600483015260248201849052851690639dc29fac906044016020604051808303816000875af1158015612c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4d9190614010565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a85612c954690565b604080519283526020830191909152810186905260600161283c565b6060600282511015612d055760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f50415448604482015260640161073a565b815167ffffffffffffffff811115612d1f57612d1f613752565b604051908082528060200260200182016040528015612d48578160200160208202803683370190505b5090508281600081518110612d5f57612d5f613ffa565b60200260200101818152505060005b60018351612d7c91906140c6565b811015612bd257600080612dc287868581518110612d9c57612d9c613ffa565b602002602001015187866001612db29190614127565b81518110612b6057612b60613ffa565b91509150612dea848481518110612ddb57612ddb613ffa565b60200260200101518383612976565b84612df6856001614127565b81518110612e0657612e06613ffa565b60200260200101818152505050508080612e1f906140ad565b915050612d6e565b6000806000612e36858561355a565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001612ede9291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351612f1191906140c6565b811015610c9457600080848381518110612f2d57612f2d613ffa565b602002602001015185846001612f439190614127565b81518110612f5357612f53613ffa565b6020026020010151915091506000612f6b838361355a565b509050600087612f7c866001614127565b81518110612f8c57612f8c613ffa565b60200260200101519050600080836001600160a01b0316866001600160a01b031614612fba57826000612fbe565b6000835b91509150600060028a51612fd291906140c6565b8810612fde578861302c565b61302c7f0000000000000000000000000000000000000000000000000000000000000000878c61300f8c6002614127565b8151811061301f5761301f613ffa565b6020026020010151612e27565b90506130597f00000000000000000000000000000000000000000000000000000000000000008888612e27565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613096576020820181803683370190505b506040518563ffffffff1660e01b81526004016130b694939291906141e2565b600060405180830381600087803b1580156130d057600080fd5b505af11580156130e4573d6000803e3d6000fd5b505050505050505050505080806130fa906140ad565b915050612f03565b60008084116131585760405162461bcd60e51b815260206004820152602e602482015260008051602061426c83398151915260448201526d17d3d55514155517d05353d5539560921b606482015260840161073a565b6000831180156131685750600082115b6131845760405162461bcd60e51b815260040161073a9061415b565b600061319c6103e861319686886133e2565b906133e2565b905060006131b06103e56131968689613653565b90506131c16001612a2783856141a9565b9695505050505050565b600080841161321a5760405162461bcd60e51b8152602060048201526027602482015260008051602061426c83398151915260448201526617d05353d5539560ca1b606482015260840161073a565b60008311801561322a5750600082115b6132465760405162461bcd60e51b815260040161073a9061415b565b8261325185846133e2565b610ac891906141a9565b61326d826001600160a01b031661369e565b6132b95760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015260640161073a565b600080836001600160a01b0316836040516132d4919061413f565b6000604051808303816000865af19150503d8060008114613311576040519150601f19603f3d011682016040523d82523d6000602084013e613316565b606091505b5091509150816133685760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015260640161073a565b805115610c9457808060200190518101906133839190614010565b610c945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161073a565b60008115806134035750508082028282828161340057613400614193565b04145b610c815760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015260640161073a565b80820182811015610c815760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015260640161073a565b600080600061349f858561355a565b5090506000806134b0888888612e27565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156134ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135119190614226565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b03161461354857808261354b565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b0316036135ce5760405162461bcd60e51b815260206004820152602760248201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446044820152664452455353455360c81b606482015260840161073a565b826001600160a01b0316846001600160a01b0316106135ee5782846135f1565b83835b90925090506001600160a01b03821661364c5760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604482015260640161073a565b9250929050565b80820382811115610c815760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015260640161073a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610ac85750141592915050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03811681146125f257600080fd5b600080600080600060a0868803121561371857600080fd5b85359450602086013561372a816136eb565b9350604086013561373a816136eb565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561379157613791613752565b604052919050565b600082601f8301126137aa57600080fd5b813567ffffffffffffffff8111156137c4576137c4613752565b6137d7601f8201601f1916602001613768565b8181528460208386010111156137ec57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561381f57600080fd5b843561382a816136eb565b9350602085013567ffffffffffffffff81111561384657600080fd5b61385287828801613799565b949794965050505060408301359260600135919050565b60008060006060848603121561387e57600080fd5b505081359360208301359350604090920135919050565b80151581146125f257600080fd5b6000602082840312156138b557600080fd5b81356138c081613895565b9392505050565b60008083601f8401126138d957600080fd5b50813567ffffffffffffffff8111156138f157600080fd5b6020830191508360208260051b850101111561364c57600080fd5b600080600080600080600060c0888a03121561392757600080fd5b8735965060208801359550604088013567ffffffffffffffff81111561394c57600080fd5b6139588a828b016138c7565b909650945050606088013561396c816136eb565b969995985093969295946080840135945060a09093013592915050565b6000806040838503121561399c57600080fd5b8235915060208084013567ffffffffffffffff808211156139bc57600080fd5b818601915086601f8301126139d057600080fd5b8135818111156139e2576139e2613752565b8060051b91506139f3848301613768565b8181529183018401918481019089841115613a0d57600080fd5b938501935b83851015613a375784359250613a27836136eb565b8282529385019390850190613a12565b8096505050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613a7f57835183529284019291840191600101613a63565b50909695505050505050565b60008060008060808587031215613aa157600080fd5b8435613aac816136eb565b93506020850135613abc816136eb565b93969395505050506040820135916060013590565b60008060008060008060008060008060a08b8d031215613af057600080fd5b8a3567ffffffffffffffff80821115613b0857600080fd5b613b148e838f016138c7565b909c509a5060208d0135915080821115613b2d57600080fd5b613b398e838f016138c7565b909a50985060408d0135915080821115613b5257600080fd5b613b5e8e838f016138c7565b909850965060608d0135915080821115613b7757600080fd5b613b838e838f016138c7565b909650945060808d0135915080821115613b9c57600080fd5b50613ba98d828e016138c7565b915080935050809150509295989b9194979a5092959850565b60008060008060008060008060e0898b031215613bde57600080fd5b883597506020890135965060408901359550606089013567ffffffffffffffff811115613c0a57600080fd5b613c168b828c016138c7565b9096509450506080890135613c2a816136eb565b979a969950949793969295929450505060a08201359160c0013590565b60008060408385031215613c5a57600080fd5b8235613c65816136eb565b91506020830135613c75816136eb565b809150509250929050565b600080600060608486031215613c9557600080fd5b8335613ca0816136eb565b9250602084013567ffffffffffffffff811115613cbc57600080fd5b613cc886828701613799565b925050604084013590509250925092565b600060208284031215613ceb57600080fd5b81356138c0816136eb565b600080600060608486031215613d0b57600080fd5b8335613d16816136eb565b9250602084013591506040840135613d2d816136eb565b809150509250925092565b60008060408385031215613d4b57600080fd5b8235613d56816136eb565b946020939093013593505050565b600080600060608486031215613d7957600080fd5b8335613d84816136eb565b92506020840135613d94816136eb565b929592945050506040919091013590565b6000806000806000806000806080898b031215613dc157600080fd5b883567ffffffffffffffff80821115613dd957600080fd5b613de58c838d016138c7565b909a50985060208b0135915080821115613dfe57600080fd5b613e0a8c838d016138c7565b909850965060408b0135915080821115613e2357600080fd5b613e2f8c838d016138c7565b909650945060608b0135915080821115613e4857600080fd5b50613e558b828c016138c7565b999c989b5096995094979396929594505050565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b600060208284031215613eb257600080fd5b81516138c0816136eb565b600060208284031215613ecf57600080fd5b5051919050565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60005b83811015613f14578181015183820152602001613efc565b83811115610c945750506000910152565b60008151808452613f3d816020860160208601613ef9565b601f01601f19169290920160200192915050565b608081526000613f646080830187613f25565b6020830195909552506040810192909252606090910152919050565b60208082526023908201527f416e79737761705636526f757465723a205377617054726164652064697361626040820152621b195960ea1b606082015260800190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561402257600080fd5b81516138c081613895565b60a0808252810186905260008760c08301825b89811015614070578235614053816136eb565b6001600160a01b0316825260209283019290910190600101614040565b50602084019790975250506040810193909352606083019190915260809091015292915050565b634e487b7160e01b600052601160045260246000fd5b6000600182016140bf576140bf614097565b5060010190565b6000828210156140d8576140d8614097565b500390565b6020808252602a908201527f416e79737761705633526f757465723a20756e6465726c79696e67206973206e6040820152696f7420774e415449564560b01b606082015260800190565b6000821982111561413a5761413a614097565b500190565b60008251614151818460208701613ef9565b9190910192915050565b6020808252602a9082015260008051602061426c8339815191526040820152695f4c495155494449545960b01b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826141c657634e487b7160e01b600052601260045260246000fd5b500490565b6000816141da576141da614097565b506000190190565b84815283602082015260018060a01b03831660408201526080606082015260006131c16080830184613f25565b80516001600160701b038116811461185a57600080fd5b60008060006060848603121561423b57600080fd5b6142448461420f565b92506142526020850161420f565b9150604084015163ffffffff81168114613d2d57600080fdfe53757368697377617056324c6962726172793a20494e53554646494349454e54a2646970667358221220deda62a60ddae3b9814dc24147c4badc0948ae85c1cf0ddba94326d13c32da3264736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23000000000000000000000000e19105463d6fe2f2bd86c69ad478f4b76ce49c53

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

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23000000000000000000000000e19105463d6fe2f2bd86c69ad478f4b76ce49c53

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

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


Deployed ByteCode Sourcemap

10450:15628:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11189:10;-1:-1:-1;;;;;11203:7:0;11189:21;;11182:29;;;;:::i;:::-;10450:15628;;;;;17487:718;;;;;;;;;;-1:-1:-1;17487:718:0;;;;;:::i;:::-;;:::i;15705:284::-;;;;;;;;;;-1:-1:-1;15705:284:0;;;;;:::i;:::-;;:::i;25086:246::-;;;;;;;;;;-1:-1:-1;25086:246:0;;;;;:::i;:::-;;:::i;:::-;;;2895:25:1;;;2883:2;2868:18;25086:246:0;;;;;;;;12747:101;;;;;;;;;;-1:-1:-1;12747:101:0;;;;;:::i;:::-;;:::i;20596:433::-;;;;;;;;;;-1:-1:-1;20596:433:0;;;;;:::i;:::-;;:::i;25838:237::-;;;;;;;;;;-1:-1:-1;25838:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14188:157::-;;;;;;;;;;-1:-1:-1;14188:157:0;;;;;:::i;:::-;;:::i;19322:319::-;;;;;;;;;;-1:-1:-1;19322:319:0;;;;;:::i;:::-;;:::i;21890:665::-;;;;;;;;;;-1:-1:-1;21890:665:0;;;;;:::i;:::-;;:::i;10636:27::-;;;;;;;;;;-1:-1:-1;10636:27:0;;;;;;;;;;;9596:14:1;;9589:22;9571:41;;9559:2;9544:18;10636:27:0;9431:187:1;17117:245:0;;;;;;;;;;-1:-1:-1;17117:245:0;;;;;:::i;:::-;;:::i;13221:228::-;;;;;;;;;;-1:-1:-1;13221:228:0;;;;;:::i;:::-;;:::i;23950:903::-;;;;;;;;;;-1:-1:-1;23950:903:0;;;;;:::i;:::-;;:::i;15997:411::-;;;;;;:::i;:::-;;:::i;12856:357::-;;;;;;;;;;-1:-1:-1;12856:357:0;;;;;:::i;:::-;;:::i;22656:433::-;;;;;;;;;;-1:-1:-1;22656:433:0;;;;;:::i;:::-;;:::i;23190:615::-;;;;;;;;;;-1:-1:-1;23190:615:0;;;;;:::i;:::-;;:::i;18213:407::-;;;;;;:::i;:::-;;:::i;16831:173::-;;;;;;;;;;-1:-1:-1;16831:173:0;;;;;:::i;:::-;;:::i;18628:413::-;;;;;;;;;;-1:-1:-1;18628:413:0;;;;;:::i;:::-;;:::i;25340:245::-;;;;;;;;;;-1:-1:-1;25340:245:0;;;;;:::i;:::-;;:::i;13717:136::-;;;;;;;;;;-1:-1:-1;13717:136:0;;;;;:::i;:::-;;:::i;19091:223::-;;;;;;;;;;-1:-1:-1;19091:223:0;;;;;:::i;:::-;;:::i;10595:32::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11743:32:1;;;11725:51;;11713:2;11698:18;10595:32:0;11579:203:1;12650:89:0;;;;;;;;;;-1:-1:-1;12722:9:0;12650:89;;13457:130;;;;;;;;;;-1:-1:-1;13457:130:0;;;;;:::i;:::-;;:::i;14756:405::-;;;;;;:::i;:::-;;:::i;24897:181::-;;;;;;;;;;-1:-1:-1;24897:181:0;;;;;:::i;:::-;;:::i;10556:32::-;;;;;;;;;;;;;;;15463:234;;;;;;;;;;-1:-1:-1;15463:234:0;;;;;:::i;:::-;;:::i;25593:237::-;;;;;;;;;;-1:-1:-1;25593:237:0;;;;;:::i;:::-;;:::i;21130:615::-;;;;;;;;;;-1:-1:-1;21130:615:0;;;;;:::i;:::-;;:::i;13595:114::-;;;;;;;;;;-1:-1:-1;13595:114:0;;;;;:::i;:::-;;:::i;15169:286::-;;;;;;;;;;-1:-1:-1;15169:286:0;;;;;:::i;:::-;;:::i;14470:278::-;;;;;;;;;;-1:-1:-1;14470:278:0;;;;;:::i;:::-;;:::i;12468:174::-;;;;;;;;;;;;;:::i;17487:718::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;;;;;;;;;17609:47:::1;17620:3;17625:5;17632:2;17636:6;17644:11;17609:10;:47::i;:::-;17667:24;17709:5;17667:48;;17726:19;17748:9;-1:-1:-1::0;;;;;17748:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17726:44:::0;-1:-1:-1;;;;;;17785:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;17814:36:0::1;::::0;-1:-1:-1;;;17814:36:0;;-1:-1:-1;;;;;11743:32:1;;;17814:36:0::1;::::0;::::1;11725:51:1::0;17854:6:0;;17814:29;;::::1;::::0;::::1;::::0;11698:18:1;;17814:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;17785:75;17781:417;;;17896:7;-1:-1:-1::0;;;;;17881:22:0::1;:11;-1:-1:-1::0;;;;;17881:22:0::1;::::0;17877:310:::1;;17924:50;::::0;-1:-1:-1;;;17924:50:0;;-1:-1:-1;;;;;17924:23:0;::::1;::::0;::::1;::::0;:50:::1;::::0;17948:2;;17952:6;;17968:4:::1;::::0;17924:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;17993:34:0::1;::::0;-1:-1:-1;;;17993:34:0;;::::1;::::0;::::1;2895:25:1::0;;;18002:7:0::1;-1:-1:-1::0;;;;;17993:26:0::1;::::0;::::1;::::0;2868:18:1;;17993:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18046:45;18080:2;18084:6;18046:33;:45::i;:::-;17877:310;;;18132:39;::::0;-1:-1:-1;;;18132:39:0;;-1:-1:-1;;;;;18132:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;18156:2;;18160:6;;18156:2;;18132:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17877:310;17598:607;;17487:718:::0;;;;;:::o;15705:284::-;15817:86;15877:10;15889:5;15896:6;15839:5;-1:-1:-1;;;;;15824:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15817:59:0;;:86;;:59;:86::i;:::-;15940:10;-1:-1:-1;;;;;15919:62:0;;;15952:2;15956:6;12722:9;15964:5;15971:9;15919:62;;;;;;;;;:::i;:::-;;;;;;;;15705:284;;;;:::o;25086:246::-;25221:14;25260:64;25292:8;25302:9;25313:10;25260:31;:64::i;:::-;25253:71;25086:246;-1:-1:-1;;;;25086:246:0:o;12747:101::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;12816:15:::1;:24:::0;;-1:-1:-1;;12816:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12747:101::o;20596:433::-;10717:15;;;;10709:63;;;;-1:-1:-1;;;10709:63:0;;;;;;;:::i;:::-;20840:8:::1;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::1;;;;;;;:::i;:::-;20876:4:::2;;20881:1;20876:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20861:50;::::0;-1:-1:-1;;;20861:50:0;;20890:10:::2;20861:50;::::0;::::2;16866:51:1::0;16933:18;;;16926:34;;;-1:-1:-1;;;;;20861:28:0;;;::::2;::::0;::::2;::::0;16839:18:1;;20861:50:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;20927:94:0;::::2;20964:10;20927:94;20958:4:::0;;20980:8;20990:12;12722:9;21004:5:::2;21011:9;20927:94;;;;;;;;;;;:::i;:::-;;;;;;;;10783:1:::1;20596:433:::0;;;;;;;:::o;25838:237::-;25964:21;26010:57;26042:7;26051:9;26062:4;26010:31;:57::i;:::-;26003:64;;25838:237;;;;;:::o;14188:157::-;14284:53;14296:10;14308:5;14315:2;14319:6;14327:9;14284:11;:53::i;:::-;14188:157;;;;:::o;19322:319::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;19506:6:::1;19501:133;19518:17:::0;;::::1;19501:133;;;19557:65;19568:3;;19572:1;19568:6;;;;;;;:::i;:::-;;;;;;;19576;;19583:1;19576:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19587:2;;19590:1;19587:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19594:7;;19602:1;19594:10;;;;;;;:::i;:::-;;;;;;;19606:12;;19619:1;19606:15;;;;;;;:::i;:::-;;;;;;;19557:10;:65::i;:::-;19537:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19501:133;;;;19322:319:::0;;;;;;;;;;:::o;21890:665::-;22184:21;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;10717:15:::1;::::0;::::1;;10709:63;;;;-1:-1:-1::0;;;10709:63:0::1;;;;;;;:::i;:::-;22165:8:::2;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::2;;;;;;;:::i;:::-;22228:57:::3;22261:7;22270:8;22280:4;;22228:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;22228:32:0::3;::::0;-1:-1:-1;;;22228:57:0:i:3;:::-;22218:67;;22335:12;22304:7;22329:1;22312:7;:14;:18;;;;:::i;:::-;22304:27;;;;;;;;:::i;:::-;;;;;;;:43;;22296:101;;;::::0;-1:-1:-1;;;22296:101:0;;18831:2:1;22296:101:0::3;::::0;::::3;18813:21:1::0;18870:2;18850:18;;;18843:30;18909:34;18889:18;;;18882:62;-1:-1:-1;;;18960:18:1;;;18953:43;19013:19;;22296:101:0::3;18629:409:1::0;22296:101:0::3;22408:104;22419:3;22424:4;;22429:1;22424:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22433:53;22460:7;22469:4;;22474:1;22469:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22478:4;;22483:1;22478:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22433:26;:53::i;:::-;22488:7;22496:1;22488:10;;;;;;;;:::i;:::-;;;;;;;22500:11;22408:10;:104::i;:::-;22523:24;22529:7;22538:4;;22523:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;22544:2:0;;-1:-1:-1;22523:5:0::3;::::0;-1:-1:-1;;22523:24:0:i:3;:::-;10783:1:::2;21890:665:::0;;;;;;;;;;:::o;17117:245::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;17245:47:::1;17256:3;17261:5;17268:2;17272:6;17280:11;17245:10;:47::i;:::-;17303:51;::::0;-1:-1:-1;;;17303:51:0;;-1:-1:-1;;;;;17303:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;17339:2;;17343:6;;17339:2;;17303:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17117:245:::0;;;;;:::o;13221:228::-;13299:4;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13324:22:0;::::1;13316:64;;;::::0;-1:-1:-1;;;13316:64:0;;19245:2:1;13316:64:0::1;::::0;::::1;19227:21:1::0;19284:2;19264:18;;;19257:30;19323:31;19303:18;;;19296:59;19372:18;;13316:64:0::1;19043:353:1::0;13316:64:0::1;13398:43;::::0;-1:-1:-1;;;13398:43:0;;-1:-1:-1;;;;;11743:32:1;;;13398:43:0::1;::::0;::::1;11725:51:1::0;13398:33:0;::::1;::::0;::::1;::::0;11698:18:1;;13398:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23950:903::-:0;24244:21;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;10717:15:::1;::::0;::::1;;10709:63;;;;-1:-1:-1::0;;;10709:63:0::1;;;;;;;:::i;:::-;24225:8:::2;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24311:7:0::3;24286:32;:4:::0;;24291:15:::3;24305:1;24286:4:::0;24291:15:::3;:::i;:::-;24286:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24286:32:0::3;;24278:74;;;::::0;-1:-1:-1;;;24278:74:0;;19603:2:1;24278:74:0::3;::::0;::::3;19585:21:1::0;19642:2;19622:18;;;19615:30;19681:31;19661:18;;;19654:59;19730:18;;24278:74:0::3;19401:353:1::0;24278:74:0::3;24373:57;24406:7;24415:8;24425:4;;24373:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;24373:32:0::3;::::0;-1:-1:-1;;;24373:57:0:i:3;:::-;24363:67;;24480:12;24449:7;24474:1;24457:7;:14;:18;;;;:::i;:::-;24449:27;;;;;;;;:::i;:::-;;;;;;;:43;;24441:99;;;::::0;-1:-1:-1;;;24441:99:0;;19961:2:1;24441:99:0::3;::::0;::::3;19943:21:1::0;20000:2;19980:18;;;19973:30;20039:34;20019:18;;;20012:62;-1:-1:-1;;;20090:18:1;;;20083:41;20141:19;;24441:99:0::3;19759:407:1::0;24441:99:0::3;24551:105;24562:3;24567:4;;24572:1;24567:7;;;;;;;:::i;24551:105::-;24667:35;24673:7;24682:4;;24667:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;24696:4:0::3;::::0;-1:-1:-1;24667:5:0::3;::::0;-1:-1:-1;;24667:35:0:i:3;:::-;24722:7;-1:-1:-1::0;;;;;24713:26:0::3;;24740:7;24765:1;24748:7;:14;:18;;;;:::i;:::-;24740:27;;;;;;;;:::i;:::-;;;;;;;24713:55;;;;;;;;;;;;;2895:25:1::0;;2883:2;2868:18;;2749:177;24713:55:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;24779:66;24813:2;24817:7;24842:1;24825:7;:14;:18;;;;:::i;:::-;24817:27;;;;;;;;:::i;:::-;;;;;;;24779:33;:66::i;15997:411::-:0;16146:7;-1:-1:-1;;;;;16108:45:0;16123:5;-1:-1:-1;;;;;16108:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16108:45:0;;16100:100;;;;-1:-1:-1;;;16100:100:0;;;;;;;:::i;:::-;16220:7;-1:-1:-1;;;;;16211:25:0;;16244:9;16211:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16274:44:0;;-1:-1:-1;;;16274:44:0;;-1:-1:-1;;;;;16884:32:1;;;16274:44:0;;;16866:51:1;16308:9:0;16933:18:1;;;16926:34;16283:7:0;16274:26;;-1:-1:-1;16274:26:0;;-1:-1:-1;16839:18:1;;;-1:-1:-1;16274:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16267:52;;;;:::i;:::-;16356:10;-1:-1:-1;;;;;16335:65:0;;;16368:2;16372:9;12722;16390;16335:65;;;;;;;;;:::i;:::-;;;;;;;;15997:411;;;:::o;12856:357::-;12915:4;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12940:20:0;::::1;12932:62;;;::::0;-1:-1:-1;;;12932:62:0;;19245:2:1;12932:62:0::1;::::0;::::1;19227:21:1::0;19284:2;19264:18;;;19257:30;19323:31;19303:18;;;19296:59;19372:18;;12932:62:0::1;19043:353:1::0;12932:62:0::1;13015:5;:3;:5::i;:::-;13005:7;:15:::0;;-1:-1:-1;;;;;;13005:15:0::1;;-1:-1:-1::0;;;;;13005:15:0;;::::1;;;::::0;;-1:-1:-1;13031:16:0;;-1:-1:-1;;;;;;13031:16:0::1;::::0;;::::1;::::0;;;::::1;::::0;;13081:27:::1;:15;13099:9;13081:27;:::i;:::-;13058:20;:50:::0;;;13146:7:::1;::::0;::::1;13137::::0;-1:-1:-1;;;;;13146:7:0;;::::1;::::0;::::1;13137::::0;;::::1;;13124:59;12722:9:::0;13124:59:::1;::::0;2895:25:1;;;2883:2;2868:18;13124:59:0::1;;;;;;;-1:-1:-1::0;13201:4:0::1;12451:1;12856:357:::0;;;:::o;22656:433::-;10717:15;;;;10709:63;;;;-1:-1:-1;;;10709:63:0;;;;;;;:::i;:::-;22900:8:::1;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::1;;;;;;;:::i;:::-;22936:4:::2;;22941:1;22936:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22921:50;::::0;-1:-1:-1;;;22921:50:0;;22950:10:::2;22921:50;::::0;::::2;16866:51:1::0;16933:18;;;16926:34;;;-1:-1:-1;;;;;22921:28:0;;;::::2;::::0;::::2;::::0;16839:18:1;;22921:50:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;22987:94:0;::::2;23024:10;22987:94;23018:4:::0;;23040:8;23050:12;12722:9;23064:5:::2;12650:89:::0;23190:615;10717:15;;;;10709:63;;;;-1:-1:-1;;;10709:63:0;;;;;;;:::i;:::-;23444:8:::1;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::1;;;;;;;:::i;:::-;23465:92:::2;23527:10;23539:4;;23544:1;23539:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;23548:8;23487:4;;23492:1;23487:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23472:34:0::2;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;23465:92;23583:4;;23588:1;23583:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;23568:58;::::0;-1:-1:-1;;;23568:58:0;;::::2;::::0;::::2;20889:25:1::0;;;23615:10:0::2;20930:18:1::0;;;20923:60;-1:-1:-1;;;;;23568:36:0;;;::::2;::::0;::::2;::::0;20862:18:1;;23568:58:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23652:4;;23657:1;23652:7;;;;;;;:::i;18213:407::-:0;18289:4;18352:7;-1:-1:-1;;;;;18314:45:0;18329:5;-1:-1:-1;;;;;18314:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18314:45:0;;18306:100;;;;-1:-1:-1;;;18306:100:0;;;;;;;:::i;:::-;18426:7;-1:-1:-1;;;;;18417:25:0;;18450:9;18417:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18480:44:0;;-1:-1:-1;;;18480:44:0;;-1:-1:-1;;;;;16884:32:1;;;18480:44:0;;;16866:51:1;18514:9:0;16933:18:1;;;16926:34;18489:7:0;18480:26;;-1:-1:-1;18480:26:0;;-1:-1:-1;16839:18:1;;;-1:-1:-1;18480:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18473:52;;;;:::i;:::-;18536:49;;-1:-1:-1;;;18536:49:0;;18571:9;18536:49;;;20889:25:1;-1:-1:-1;;;;;20950:32:1;;;20930:18;;;20923:60;18536:34:0;;;;;20862:18:1;;18536:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18603:9:0;;18213:407;-1:-1:-1;;;18213:407:0:o;16831:173::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;16949:47:::1;16960:3;16965:5;16972:2;16976:6;16984:11;16949:10;:47::i;:::-;16831:173:::0;;;;;:::o;18628:413::-;18710:4;18773:7;-1:-1:-1;;;;;18735:45:0;18750:5;-1:-1:-1;;;;;18735:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18735:45:0;;18727:100;;;;-1:-1:-1;;;18727:100:0;;;;;;;:::i;:::-;18838:70;;-1:-1:-1;;;18838:70:0;;-1:-1:-1;;;;;18838:35:0;;;;;:70;;18874:10;;18886:6;;18902:4;;18838:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18919:34:0;;-1:-1:-1;;;18919:34:0;;;;;2895:25:1;;;18928:7:0;-1:-1:-1;;;;;18919:26:0;;;;2868:18:1;;18919:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18964:45;18998:2;19002:6;18964:33;:45::i;:::-;-1:-1:-1;19027:6:0;;18628:413;-1:-1:-1;;18628:413:0:o;25340:245::-;25475:13;25513:64;25544:9;25555;25566:10;25513:30;:64::i;13717:136::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;13804:41:::1;::::0;-1:-1:-1;;;13804:41:0;;-1:-1:-1;;;;;11743:32:1;;;13804:41:0::1;::::0;::::1;11725:51:1::0;13804:34:0;::::1;::::0;::::1;::::0;11698:18:1;;13804:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;19091:223:::0;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;19169:12:::1;19184:5;:3;:5::i;:::-;19200:40;::::0;-1:-1:-1;;;19200:40:0;;-1:-1:-1;;;;;16884:32:1;;;19200:40:0::1;::::0;::::1;16866:51:1::0;16933:18;;;16926:34;;;19169:20:0;;-1:-1:-1;19200:26:0;;::::1;::::0;::::1;::::0;16839:18:1;;19200:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19251:55:0::1;::::0;-1:-1:-1;;;19251:55:0;;-1:-1:-1;;;;;19251:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;19287:4;;19293:6;;19287:4;;19251:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13457:130::-:0;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;13541:38:::1;::::0;-1:-1:-1;;;13541:38:0;;-1:-1:-1;;;;;11743:32:1;;;13541:38:0::1;::::0;::::1;11725:51:1::0;13541:31:0;::::1;::::0;::::1;::::0;11698:18:1;;13541:38:0::1;11579:203:1::0;14756:405:0;14899:7;-1:-1:-1;;;;;14861:45:0;14876:5;-1:-1:-1;;;;;14861:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14861:45:0;;14853:100;;;;-1:-1:-1;;;14853:100:0;;;;;;;:::i;:::-;14973:7;-1:-1:-1;;;;;14964:25:0;;14997:9;14964:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15027:44:0;;-1:-1:-1;;;15027:44:0;;-1:-1:-1;;;;;16884:32:1;;;15027:44:0;;;16866:51:1;15061:9:0;16933:18:1;;;16926:34;15036:7:0;15027:26;;-1:-1:-1;15027:26:0;;-1:-1:-1;16839:18:1;;;-1:-1:-1;15027:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15020:52;;;;:::i;:::-;-1:-1:-1;;;;;15088:65:0;;;;15109:10;;15088:65;;;15125:9;12722;15088:65;;;21196:25:1;;;21252:2;21237:18;;21230:34;;;;21280:18;;21273:34;;;21184:2;21169:18;15088:65:0;;;;;;;14756:405;;;:::o;24897:181::-;24985:12;25017:53;25042:7;25051:8;25061;25017:24;:53::i;15463:234::-;15565:46;;-1:-1:-1;;;15565:46:0;;15592:10;15565:46;;;16866:51:1;16933:18;;;16926:34;;;-1:-1:-1;;;;;15565:26:0;;;;;16839:18:1;;15565:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15648:10:0;-1:-1:-1;;;;;15627:62:0;;;15660:2;15664:6;12722:9;15672:5;12650:89;25593:237;25719:21;25765:57;25798:7;25807:8;25817:4;25765:32;:57::i;21130:615::-;10717:15;;;;10709:63;;;;-1:-1:-1;;;10709:63:0;;;;;;;:::i;:::-;21384:8:::1;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::1;;;;;;;:::i;:::-;21405:92:::2;21467:10;21479:4;;21484:1;21479:7;;;;;;;:::i;21405:92::-;21523:4;;21528:1;21523:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21508:58;::::0;-1:-1:-1;;;21508:58:0;;::::2;::::0;::::2;20889:25:1::0;;;21555:10:0::2;20930:18:1::0;;;20923:60;-1:-1:-1;;;;;21508:36:0;;;::::2;::::0;::::2;::::0;20862:18:1;;21508:58:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21592:4;;21597:1;21592:7;;;;;;;:::i;13595:114::-:0;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;13681:5:::1;-1:-1:-1::0;;;;;13666:33:0::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;12451:1;13595:114:::0;:::o;15169:286::-;15317:6;15312:136;15329:17;;;15312:136;;;15368:68;15380:10;15392:6;;15399:1;15392:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15403:2;;15406:1;15403:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15410:7;;15418:1;15410:10;;;;;;;:::i;:::-;;;;;;;15422;;15433:1;15422:13;;;;;;;:::i;:::-;;;;;;;15368:11;:68::i;:::-;15348:3;;;;:::i;:::-;;;;15312:136;;;;15169:286;;;;;;;;:::o;14470:278::-;14576:86;14636:10;14648:5;14655:6;14598:5;-1:-1:-1;;;;;14583:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14576:86;-1:-1:-1;;;;;14678:62:0;;;;14699:10;;14678:62;;;14715:6;12722:9;14678:62;;;21196:25:1;;;21252:2;21237:18;;21230:34;;;;21280:18;;21273:34;;;21184:2;21169:18;14678:62:0;;;;;;;14470:278;;;;:::o;12468:174::-;12504:7;12547:20;;12528:15;:39;12524:86;;-1:-1:-1;12591:7:0;;-1:-1:-1;;;;;12591:7:0;;12468:174::o;12524:86::-;-1:-1:-1;12627:7:0;;;;;-1:-1:-1;;;;;12627:7:0;;12468:174::o;16488:229::-;16599:38;;-1:-1:-1;;;16599:38:0;;-1:-1:-1;;;;;16884:32:1;;;16599:38:0;;;16866:51:1;16933:18;;;16926:34;;;16599:26:0;;;;;16839:18:1;;16599:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16678:2;-1:-1:-1;;;;;16653:56:0;16671:5;-1:-1:-1;;;;;16653:56:0;16666:3;16653:56;16682:6;16690:11;16703:5;12722:9;;12650:89;16703:5;16653:56;;;21196:25:1;;;21252:2;21237:18;;21230:34;;;;21280:18;;;21273:34;21184:2;21169:18;16653:56:0;;;;;;;;16488:229;;;;;:::o;6740:201::-;6851:12;;;6813;6851;;;;;;;;;-1:-1:-1;;;;;6830:7:0;;;6844:5;;6830:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6812:52;;;6883:7;6875:58;;;;-1:-1:-1;;;6875:58:0;;21799:2:1;6875:58:0;;;21781:21:1;21838:2;21818:18;;;21811:30;21877:34;21857:18;;;21850:62;-1:-1:-1;;;21928:18:1;;;21921:36;21974:19;;6875:58:0;21597:402:1;6875:58:0;6801:140;6740:201;;:::o;9286:::-;9410:68;;;-1:-1:-1;;;;;22262:15:1;;;9410:68:0;;;22244:34:1;22314:15;;22294:18;;;22287:43;22346:18;;;;22339:34;;;9410:68:0;;;;;;;;;;22179:18:1;;;;9410:68:0;;;;;;;;-1:-1:-1;;;;;9410:68:0;-1:-1:-1;;;9410:68:0;;;9384:95;;9403:5;;9384:18;:95::i;3115:521::-;3208:14;3254:1;3243:8;:12;3235:70;;;;-1:-1:-1;;;3235:70:0;;22586:2:1;3235:70:0;;;22568:21:1;22625:2;22605:18;;;22598:30;-1:-1:-1;;;;;;;;;;;22644:18:1;;;22637:62;-1:-1:-1;;;22715:18:1;;;22708:43;22768:19;;3235:70:0;22384:409:1;3235:70:0;3336:1;3324:9;:13;:31;;;;;3354:1;3341:10;:14;3324:31;3316:86;;;;-1:-1:-1;;;3316:86:0;;;;;;;:::i;:::-;3413:20;3436:17;:8;3449:3;3436:12;:17::i;:::-;3413:40;-1:-1:-1;3464:14:0;3481:31;3413:40;3501:10;3481:19;:31::i;:::-;3464:48;-1:-1:-1;3523:16:0;3542:40;3566:15;3542:19;:9;3556:4;3542:13;:19::i;:::-;:23;;:40::i;:::-;3523:59;-1:-1:-1;3605:23:0;3523:59;3605:9;:23;:::i;:::-;3593:35;3115:521;-1:-1:-1;;;;;;;3115:521:0:o;4909:534::-;5010:21;5067:1;5052:4;:11;:16;;5044:61;;;;-1:-1:-1;;;5044:61:0;;23765:2:1;5044:61:0;;;23747:21:1;;;23784:18;;;23777:30;23843:34;23823:18;;;23816:62;23895:18;;5044:61:0;23563:356:1;5044:61:0;5137:4;:11;5126:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5126:23:0;;5116:33;;5190:9;5160:7;5185:1;5168:7;:14;:18;;;;:::i;:::-;5160:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;5215:6;5238:1;5224:4;:11;:15;;;;:::i;:::-;5215:24;;5210:226;5241:5;;5210:226;;5269:14;;5304:42;5316:7;5325:4;5330:5;5334:1;5330;:5;:::i;:::-;5325:11;;;;;;;;:::i;:::-;;;;;;;5338:4;5343:1;5338:7;;;;;;;;:::i;:::-;;;;;;;5304:11;:42::i;:::-;5268:78;;;;5378:46;5390:7;5398:1;5390:10;;;;;;;;:::i;:::-;;;;;;;5402:9;5413:10;5378:11;:46::i;:::-;5361:7;5369:5;5373:1;5369;:5;:::i;:::-;5361:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;5253:183;;5248:3;;;;;:::i;:::-;;;;5210:226;;;;4909:534;;;;;:::o;13861:231::-;13972:40;;-1:-1:-1;;;13972:40:0;;-1:-1:-1;;;;;16884:32:1;;;13972:40:0;;;16866:51:1;16933:18;;;16926:34;;;13972:26:0;;;;;16839:18:1;;13972:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14055:2;-1:-1:-1;;;;;14028:56:0;14049:4;-1:-1:-1;;;;;14028:56:0;14042:5;-1:-1:-1;;;;;14028:56:0;;14059:6;14067:5;12722:9;;12650:89;14067:5;14028:56;;;21196:25:1;;;21252:2;21237:18;;21230:34;;;;21280:18;;21273:34;;;21184:2;21169:18;14028:56:0;20994:319:1;4315:513:0;4416:21;4473:1;4458:4;:11;:16;;4450:61;;;;-1:-1:-1;;;4450:61:0;;23765:2:1;4450:61:0;;;23747:21:1;;;23784:18;;;23777:30;23843:34;23823:18;;;23816:62;23895:18;;4450:61:0;23563:356:1;4450:61:0;4543:4;:11;4532:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4532:23:0;;4522:33;;4579:8;4566:7;4574:1;4566:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;4603:6;4598:223;4629:1;4615:4;:11;:15;;;;:::i;:::-;4611:1;:19;4598:223;;;4653:14;4669:15;4688:42;4700:7;4709:4;4714:1;4709:7;;;;;;;;:::i;:::-;;;;;;;4718:4;4723:1;4727;4723:5;;;;:::i;:::-;4718:11;;;;;;;;:::i;4688:42::-;4652:78;;;;4762:47;4775:7;4783:1;4775:10;;;;;;;;:::i;:::-;;;;;;;4787:9;4798:10;4762:12;:47::i;:::-;4745:7;4753:5;:1;4757;4753:5;:::i;:::-;4745:14;;;;;;;;:::i;:::-;;;;;;:64;;;;;4637:184;;4632:3;;;;;:::i;:::-;;;;4598:223;;1614:490;1703:12;1729:14;1745;1763:26;1774:6;1782;1763:10;:26::i;:::-;1938:32;;-1:-1:-1;;24292:2:1;24288:15;;;24284:24;;1938:32:0;;;24272:37:1;24343:15;;;24339:24;24325:12;;;24318:46;1728:61:0;;-1:-1:-1;1728:61:0;-1:-1:-1;1902:7:0;;24380:12:1;;1938:32:0;;;;;;;;;;;;1928:43;;;;;;1841:251;;;;;;;;-1:-1:-1;;;;;;24762:26:1;;24825:2;24821:15;;;;-1:-1:-1;;24817:53:1;24813:1;24804:11;;24797:74;24896:2;24887:12;;24880:28;24938:66;24933:2;24924:12;;24917:88;25030:2;25021:12;;24403:636;1841:251:0;;;;-1:-1:-1;;1841:251:0;;;;;;;;;1831:262;;1841:251;1831:262;;;;;1614:490;-1:-1:-1;;;;;;1614:490:0:o;19752:743::-;19859:6;19854:634;19885:1;19871:4;:11;:15;;;;:::i;:::-;19867:1;:19;19854:634;;;19909:13;19924:14;19943:4;19948:1;19943:7;;;;;;;;:::i;:::-;;;;;;;19952:4;19957:1;19961;19957:5;;;;:::i;:::-;19952:11;;;;;;;;:::i;:::-;;;;;;;19908:56;;;;19980:14;19999:44;20029:5;20036:6;19999:29;:44::i;:::-;-1:-1:-1;19979:64:0;-1:-1:-1;20058:14:0;20075:7;20083:5;:1;20087;20083:5;:::i;:::-;20075:14;;;;;;;;:::i;:::-;;;;;;;20058:31;;20105:15;20122;20150:6;-1:-1:-1;;;;;20141:15:0;:5;-1:-1:-1;;;;;20141:15:0;;:61;;20183:9;20199:1;20141:61;;;20165:1;20169:9;20141:61;20104:98;;;;20217:10;20248:1;20234:4;:11;:15;;;;:::i;:::-;20230:1;:19;:84;;20311:3;20230:84;;;20252:56;20279:7;20288:6;20296:4;20301:5;:1;20305;20301:5;:::i;:::-;20296:11;;;;;;;;:::i;:::-;;;;;;;20252:26;:56::i;:::-;20217:97;;20346:50;20373:7;20382:5;20389:6;20346:26;:50::i;:::-;-1:-1:-1;;;;;20329:73:0;;20421:10;20433;20445:2;20459:1;20449:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20449:12:0;;20329:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19893:595;;;;;;;19888:3;;;;;:::i;:::-;;;;19854:634;;3757:476;3850:13;3896:1;3884:9;:13;3876:72;;;;-1:-1:-1;;;3876:72:0;;25710:2:1;3876:72:0;;;25692:21:1;25749:2;25729:18;;;25722:30;-1:-1:-1;;;;;;;;;;;25768:18:1;;;25761:62;-1:-1:-1;;;25839:18:1;;;25832:44;25893:19;;3876:72:0;25508:410:1;3876:72:0;3979:1;3967:9;:13;:31;;;;;3997:1;3984:10;:14;3967:31;3959:86;;;;-1:-1:-1;;;3959:86:0;;;;;;;:::i;:::-;4056:14;4073:34;4102:4;4073:24;:9;4087;4073:13;:24::i;:::-;:28;;:34::i;:::-;4056:51;-1:-1:-1;4118:16:0;4137:34;4167:3;4137:25;:10;4152:9;4137:14;:25::i;:34::-;4118:53;-1:-1:-1;4193:32:0;4223:1;4194:23;4118:53;4194:9;:23;:::i;4193:32::-;4182:43;3757:476;-1:-1:-1;;;;;;3757:476:0:o;2668:325::-;2750:12;2793:1;2783:7;:11;2775:63;;;;-1:-1:-1;;;2775:63:0;;26125:2:1;2775:63:0;;;26107:21:1;26164:2;26144:18;;;26137:30;-1:-1:-1;;;;;;;;;;;26183:18:1;;;26176:62;-1:-1:-1;;;26254:18:1;;;26247:37;26301:19;;2775:63:0;25923:403:1;2775:63:0;2868:1;2857:8;:12;:28;;;;;2884:1;2873:8;:12;2857:28;2849:83;;;;-1:-1:-1;;;2849:83:0;;;;;;;:::i;:::-;2977:8;2953:21;:7;2965:8;2953:11;:21::i;:::-;:32;;;;:::i;9845:598::-;9933:27;9941:5;-1:-1:-1;;;;;9933:25:0;;:27::i;:::-;9925:71;;;;-1:-1:-1;;;9925:71:0;;26533:2:1;9925:71:0;;;26515:21:1;26572:2;26552:18;;;26545:30;26611:33;26591:18;;;26584:61;26662:18;;9925:71:0;26331:355:1;9925:71:0;10070:12;10084:23;10119:5;-1:-1:-1;;;;;10111:19:0;10131:4;10111:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10069:67;;;;10155:7;10147:52;;;;-1:-1:-1;;;10147:52:0;;26893:2:1;10147:52:0;;;26875:21:1;;;26912:18;;;26905:30;26971:34;26951:18;;;26944:62;27023:18;;10147:52:0;26691:356:1;10147:52:0;10216:17;;:21;10212:224;;10358:10;10347:30;;;;;;;;;;;;:::i;:::-;10339:85;;;;-1:-1:-1;;;10339:85:0;;27254:2:1;10339:85:0;;;27236:21:1;27293:2;27273:18;;;27266:30;27332:34;27312:18;;;27305:62;-1:-1:-1;;;27383:18:1;;;27376:40;27433:19;;10339:85:0;27052:406:1;808:178:0;860:6;912;;;:30;;-1:-1:-1;;927:5:0;;;941:1;936;927:5;936:1;922:15;;;;:::i;:::-;;:20;912:30;904:63;;;;-1:-1:-1;;;904:63:0;;27665:2:1;904:63:0;;;27647:21:1;27704:2;27684:18;;;27677:30;-1:-1:-1;;;27723:18:1;;;27716:50;27783:18;;904:63:0;27463:344:1;463:164:0;572:5;;;567:16;;;;559:49;;;;-1:-1:-1;;;559:49:0;;28014:2:1;559:49:0;;;27996:21:1;28053:2;28033:18;;;28026:30;-1:-1:-1;;;28072:18:1;;;28065:50;28132:18;;559:49:0;27812:344:1;2162:393:0;2255:13;2270;2297:14;2316:26;2327:6;2335;2316:10;:26::i;:::-;2296:46;;;2354:13;2369;2404:32;2412:7;2421:6;2429;2404:7;:32::i;:::-;-1:-1:-1;;;;;2387:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2353:98;-1:-1:-1;;;;;2353:98:0;;;-1:-1:-1;;;;;2353:98:0;;;2495:6;-1:-1:-1;;;;;2485:16:0;:6;-1:-1:-1;;;;;2485:16:0;;:62;;2528:8;2538;2485:62;;;2505:8;2515;2485:62;2462:85;;;;-1:-1:-1;2162:393:0;-1:-1:-1;;;;;;;2162:393:0:o;1169:353::-;1244:14;1260;1305:6;-1:-1:-1;;;;;1295:16:0;:6;-1:-1:-1;;;;;1295:16:0;;1287:68;;;;-1:-1:-1;;;1287:68:0;;29011:2:1;1287:68:0;;;28993:21:1;29050:2;29030:18;;;29023:30;29089:34;29069:18;;;29062:62;-1:-1:-1;;;29140:18:1;;;29133:37;29187:19;;1287:68:0;28809:403:1;1287:68:0;1394:6;-1:-1:-1;;;;;1385:15:0;:6;-1:-1:-1;;;;;1385:15:0;;:53;;1423:6;1431;1385:53;;;1404:6;1412;1385:53;1366:72;;-1:-1:-1;1366:72:0;-1:-1:-1;;;;;;1457:20:0;;1449:65;;;;-1:-1:-1;;;1449:65:0;;29419:2:1;1449:65:0;;;29401:21:1;;;29438:18;;;29431:30;29497:34;29477:18;;;29470:62;29549:18;;1449:65:0;29217:356:1;1449:65:0;1169:353;;;;;:::o;635:165::-;744:5;;;739:16;;;;731:50;;;;-1:-1:-1;;;731:50:0;;29780:2:1;731:50:0;;;29762:21:1;29819:2;29799:18;;;29792:30;-1:-1:-1;;;29838:18:1;;;29831:51;29899:18;;731:50:0;29578:345:1;8665:374:0;8725:4;8948:20;;8791:66;8988:15;;;;;:42;;-1:-1:-1;9007:23:0;;;8980:51;-1:-1:-1;;8665:374:0:o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:131;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;282:594;377:6;385;393;401;409;462:3;450:9;441:7;437:23;433:33;430:53;;;479:1;476;469:12;430:53;515:9;502:23;492:33;;575:2;564:9;560:18;547:32;588:31;613:5;588:31;:::i;:::-;638:5;-1:-1:-1;695:2:1;680:18;;667:32;708:33;667:32;708:33;:::i;:::-;282:594;;;;-1:-1:-1;760:7:1;;814:2;799:18;;786:32;;-1:-1:-1;865:3:1;850:19;837:33;;282:594;-1:-1:-1;;282:594:1:o;881:127::-;942:10;937:3;933:20;930:1;923:31;973:4;970:1;963:15;997:4;994:1;987:15;1013:275;1084:2;1078:9;1149:2;1130:13;;-1:-1:-1;;1126:27:1;1114:40;;1184:18;1169:34;;1205:22;;;1166:62;1163:88;;;1231:18;;:::i;:::-;1267:2;1260:22;1013:275;;-1:-1:-1;1013:275:1:o;1293:531::-;1336:5;1389:3;1382:4;1374:6;1370:17;1366:27;1356:55;;1407:1;1404;1397:12;1356:55;1443:6;1430:20;1469:18;1465:2;1462:26;1459:52;;;1491:18;;:::i;:::-;1535:55;1578:2;1559:13;;-1:-1:-1;;1555:27:1;1584:4;1551:38;1535:55;:::i;:::-;1615:2;1606:7;1599:19;1661:3;1654:4;1649:2;1641:6;1637:15;1633:26;1630:35;1627:55;;;1678:1;1675;1668:12;1627:55;1743:2;1736:4;1728:6;1724:17;1717:4;1708:7;1704:18;1691:55;1791:1;1766:16;;;1784:4;1762:27;1755:38;;;;1770:7;1293:531;-1:-1:-1;;;1293:531:1:o;1829:594::-;1925:6;1933;1941;1949;2002:3;1990:9;1981:7;1977:23;1973:33;1970:53;;;2019:1;2016;2009:12;1970:53;2058:9;2045:23;2077:31;2102:5;2077:31;:::i;:::-;2127:5;-1:-1:-1;2183:2:1;2168:18;;2155:32;2210:18;2199:30;;2196:50;;;2242:1;2239;2232:12;2196:50;2265;2307:7;2298:6;2287:9;2283:22;2265:50;:::i;:::-;1829:594;;2255:60;;-1:-1:-1;;;;2362:2:1;2347:18;;2334:32;;2413:2;2398:18;2385:32;;1829:594;-1:-1:-1;1829:594:1:o;2428:316::-;2505:6;2513;2521;2574:2;2562:9;2553:7;2549:23;2545:32;2542:52;;;2590:1;2587;2580:12;2542:52;-1:-1:-1;;2613:23:1;;;2683:2;2668:18;;2655:32;;-1:-1:-1;2734:2:1;2719:18;;;2706:32;;2428:316;-1:-1:-1;2428:316:1:o;2931:118::-;3017:5;3010:13;3003:21;2996:5;2993:32;2983:60;;3039:1;3036;3029:12;3054:241;3110:6;3163:2;3151:9;3142:7;3138:23;3134:32;3131:52;;;3179:1;3176;3169:12;3131:52;3218:9;3205:23;3237:28;3259:5;3237:28;:::i;:::-;3284:5;3054:241;-1:-1:-1;;;3054:241:1:o;3300:367::-;3363:8;3373:6;3427:3;3420:4;3412:6;3408:17;3404:27;3394:55;;3445:1;3442;3435:12;3394:55;-1:-1:-1;3468:20:1;;3511:18;3500:30;;3497:50;;;3543:1;3540;3533:12;3497:50;3580:4;3572:6;3568:17;3556:29;;3640:3;3633:4;3623:6;3620:1;3616:14;3608:6;3604:27;3600:38;3597:47;3594:67;;;3657:1;3654;3647:12;3672:847;3803:6;3811;3819;3827;3835;3843;3851;3904:3;3892:9;3883:7;3879:23;3875:33;3872:53;;;3921:1;3918;3911:12;3872:53;3957:9;3944:23;3934:33;;4014:2;4003:9;3999:18;3986:32;3976:42;;4069:2;4058:9;4054:18;4041:32;4096:18;4088:6;4085:30;4082:50;;;4128:1;4125;4118:12;4082:50;4167:70;4229:7;4220:6;4209:9;4205:22;4167:70;:::i;:::-;4256:8;;-1:-1:-1;4141:96:1;-1:-1:-1;;4341:2:1;4326:18;;4313:32;4354:31;4313:32;4354:31;:::i;:::-;3672:847;;;;-1:-1:-1;3672:847:1;;;;4404:5;4456:3;4441:19;;4428:33;;-1:-1:-1;4508:3:1;4493:19;;;4480:33;;3672:847;-1:-1:-1;;3672:847:1:o;4524:1089::-;4617:6;4625;4678:2;4666:9;4657:7;4653:23;4649:32;4646:52;;;4694:1;4691;4684:12;4646:52;4730:9;4717:23;4707:33;;4759:2;4812;4801:9;4797:18;4784:32;4835:18;4876:2;4868:6;4865:14;4862:34;;;4892:1;4889;4882:12;4862:34;4930:6;4919:9;4915:22;4905:32;;4975:7;4968:4;4964:2;4960:13;4956:27;4946:55;;4997:1;4994;4987:12;4946:55;5033:2;5020:16;5055:2;5051;5048:10;5045:36;;;5061:18;;:::i;:::-;5107:2;5104:1;5100:10;5090:20;;5130:28;5154:2;5150;5146:11;5130:28;:::i;:::-;5192:15;;;5262:11;;;5258:20;;;5223:12;;;;5290:19;;;5287:39;;;5322:1;5319;5312:12;5287:39;5346:11;;;;5366:217;5382:6;5377:3;5374:15;5366:217;;;5462:3;5449:17;5436:30;;5479:31;5504:5;5479:31;:::i;:::-;5523:18;;;5399:12;;;;5561;;;;5366:217;;;5602:5;5592:15;;;;;;;;4524:1089;;;;;:::o;5618:632::-;5789:2;5841:21;;;5911:13;;5814:18;;;5933:22;;;5760:4;;5789:2;6012:15;;;;5986:2;5971:18;;;5760:4;6055:169;6069:6;6066:1;6063:13;6055:169;;;6130:13;;6118:26;;6199:15;;;;6164:12;;;;6091:1;6084:9;6055:169;;;-1:-1:-1;6241:3:1;;5618:632;-1:-1:-1;;;;;;5618:632:1:o;6255:525::-;6341:6;6349;6357;6365;6418:3;6406:9;6397:7;6393:23;6389:33;6386:53;;;6435:1;6432;6425:12;6386:53;6474:9;6461:23;6493:31;6518:5;6493:31;:::i;:::-;6543:5;-1:-1:-1;6600:2:1;6585:18;;6572:32;6613:33;6572:32;6613:33;:::i;:::-;6255:525;;6665:7;;-1:-1:-1;;;;6719:2:1;6704:18;;6691:32;;6770:2;6755:18;6742:32;;6255:525::o;6785:1720::-;7015:6;7023;7031;7039;7047;7055;7063;7071;7079;7087;7140:3;7128:9;7119:7;7115:23;7111:33;7108:53;;;7157:1;7154;7147:12;7108:53;7197:9;7184:23;7226:18;7267:2;7259:6;7256:14;7253:34;;;7283:1;7280;7273:12;7253:34;7322:70;7384:7;7375:6;7364:9;7360:22;7322:70;:::i;:::-;7411:8;;-1:-1:-1;7296:96:1;-1:-1:-1;7499:2:1;7484:18;;7471:32;;-1:-1:-1;7515:16:1;;;7512:36;;;7544:1;7541;7534:12;7512:36;7583:72;7647:7;7636:8;7625:9;7621:24;7583:72;:::i;:::-;7674:8;;-1:-1:-1;7557:98:1;-1:-1:-1;7762:2:1;7747:18;;7734:32;;-1:-1:-1;7778:16:1;;;7775:36;;;7807:1;7804;7797:12;7775:36;7846:72;7910:7;7899:8;7888:9;7884:24;7846:72;:::i;:::-;7937:8;;-1:-1:-1;7820:98:1;-1:-1:-1;8025:2:1;8010:18;;7997:32;;-1:-1:-1;8041:16:1;;;8038:36;;;8070:1;8067;8060:12;8038:36;8109:72;8173:7;8162:8;8151:9;8147:24;8109:72;:::i;:::-;8200:8;;-1:-1:-1;8083:98:1;-1:-1:-1;8288:3:1;8273:19;;8260:33;;-1:-1:-1;8305:16:1;;;8302:36;;;8334:1;8331;8324:12;8302:36;;8373:72;8437:7;8426:8;8415:9;8411:24;8373:72;:::i;:::-;8347:98;;8464:8;8454:18;;;8491:8;8481:18;;;6785:1720;;;;;;;;;;;;;:::o;8510:916::-;8650:6;8658;8666;8674;8682;8690;8698;8706;8759:3;8747:9;8738:7;8734:23;8730:33;8727:53;;;8776:1;8773;8766:12;8727:53;8812:9;8799:23;8789:33;;8869:2;8858:9;8854:18;8841:32;8831:42;;8920:2;8909:9;8905:18;8892:32;8882:42;;8975:2;8964:9;8960:18;8947:32;9002:18;8994:6;8991:30;8988:50;;;9034:1;9031;9024:12;8988:50;9073:70;9135:7;9126:6;9115:9;9111:22;9073:70;:::i;:::-;9162:8;;-1:-1:-1;9047:96:1;-1:-1:-1;;9247:3:1;9232:19;;9219:33;9261:31;9219:33;9261:31;:::i;:::-;8510:916;;;;-1:-1:-1;8510:916:1;;;;;;9311:5;;-1:-1:-1;;;9363:3:1;9348:19;;9335:33;;9415:3;9400:19;9387:33;;8510:916::o;9623:388::-;9691:6;9699;9752:2;9740:9;9731:7;9727:23;9723:32;9720:52;;;9768:1;9765;9758:12;9720:52;9807:9;9794:23;9826:31;9851:5;9826:31;:::i;:::-;9876:5;-1:-1:-1;9933:2:1;9918:18;;9905:32;9946:33;9905:32;9946:33;:::i;:::-;9998:7;9988:17;;;9623:388;;;;;:::o;10016:525::-;10103:6;10111;10119;10172:2;10160:9;10151:7;10147:23;10143:32;10140:52;;;10188:1;10185;10178:12;10140:52;10227:9;10214:23;10246:31;10271:5;10246:31;:::i;:::-;10296:5;-1:-1:-1;10352:2:1;10337:18;;10324:32;10379:18;10368:30;;10365:50;;;10411:1;10408;10401:12;10365:50;10434;10476:7;10467:6;10456:9;10452:22;10434:50;:::i;:::-;10424:60;;;10531:2;10520:9;10516:18;10503:32;10493:42;;10016:525;;;;;:::o;10546:247::-;10605:6;10658:2;10646:9;10637:7;10633:23;10629:32;10626:52;;;10674:1;10671;10664:12;10626:52;10713:9;10700:23;10732:31;10757:5;10732:31;:::i;10798:456::-;10875:6;10883;10891;10944:2;10932:9;10923:7;10919:23;10915:32;10912:52;;;10960:1;10957;10950:12;10912:52;10999:9;10986:23;11018:31;11043:5;11018:31;:::i;:::-;11068:5;-1:-1:-1;11120:2:1;11105:18;;11092:32;;-1:-1:-1;11176:2:1;11161:18;;11148:32;11189:33;11148:32;11189:33;:::i;:::-;11241:7;11231:17;;;10798:456;;;;;:::o;11259:315::-;11327:6;11335;11388:2;11376:9;11367:7;11363:23;11359:32;11356:52;;;11404:1;11401;11394:12;11356:52;11443:9;11430:23;11462:31;11487:5;11462:31;:::i;:::-;11512:5;11564:2;11549:18;;;;11536:32;;-1:-1:-1;;;11259:315:1:o;11787:456::-;11864:6;11872;11880;11933:2;11921:9;11912:7;11908:23;11904:32;11901:52;;;11949:1;11946;11939:12;11901:52;11988:9;11975:23;12007:31;12032:5;12007:31;:::i;:::-;12057:5;-1:-1:-1;12114:2:1;12099:18;;12086:32;12127:33;12086:32;12127:33;:::i;:::-;11787:456;;12179:7;;-1:-1:-1;;;12233:2:1;12218:18;;;;12205:32;;11787:456::o;12248:1404::-;12442:6;12450;12458;12466;12474;12482;12490;12498;12551:3;12539:9;12530:7;12526:23;12522:33;12519:53;;;12568:1;12565;12558:12;12519:53;12608:9;12595:23;12637:18;12678:2;12670:6;12667:14;12664:34;;;12694:1;12691;12684:12;12664:34;12733:70;12795:7;12786:6;12775:9;12771:22;12733:70;:::i;:::-;12822:8;;-1:-1:-1;12707:96:1;-1:-1:-1;12910:2:1;12895:18;;12882:32;;-1:-1:-1;12926:16:1;;;12923:36;;;12955:1;12952;12945:12;12923:36;12994:72;13058:7;13047:8;13036:9;13032:24;12994:72;:::i;:::-;13085:8;;-1:-1:-1;12968:98:1;-1:-1:-1;13173:2:1;13158:18;;13145:32;;-1:-1:-1;13189:16:1;;;13186:36;;;13218:1;13215;13208:12;13186:36;13257:72;13321:7;13310:8;13299:9;13295:24;13257:72;:::i;:::-;13348:8;;-1:-1:-1;13231:98:1;-1:-1:-1;13436:2:1;13421:18;;13408:32;;-1:-1:-1;13452:16:1;;;13449:36;;;13481:1;13478;13471:12;13449:36;;13520:72;13584:7;13573:8;13562:9;13558:24;13520:72;:::i;:::-;12248:1404;;;;-1:-1:-1;12248:1404:1;;-1:-1:-1;12248:1404:1;;;;;;13611:8;-1:-1:-1;;;12248:1404:1:o;13657:350::-;13859:2;13841:21;;;13898:2;13878:18;;;13871:30;13937:28;13932:2;13917:18;;13910:56;13998:2;13983:18;;13657:350::o;14012:251::-;14082:6;14135:2;14123:9;14114:7;14110:23;14106:32;14103:52;;;14151:1;14148;14141:12;14103:52;14183:9;14177:16;14202:31;14227:5;14202:31;:::i;14268:184::-;14338:6;14391:2;14379:9;14370:7;14366:23;14362:32;14359:52;;;14407:1;14404;14397:12;14359:52;-1:-1:-1;14430:16:1;;14268:184;-1:-1:-1;14268:184:1:o;14457:375::-;-1:-1:-1;;;;;14715:15:1;;;14697:34;;14762:2;14747:18;;14740:34;;;;14810:15;;;14805:2;14790:18;;14783:43;14647:2;14632:18;;14457:375::o;14837:258::-;14909:1;14919:113;14933:6;14930:1;14927:13;14919:113;;;15009:11;;;15003:18;14990:11;;;14983:39;14955:2;14948:10;14919:113;;;15050:6;15047:1;15044:13;15041:48;;;-1:-1:-1;;15085:1:1;15067:16;;15060:27;14837:258::o;15100:::-;15142:3;15180:5;15174:12;15207:6;15202:3;15195:19;15223:63;15279:6;15272:4;15267:3;15263:14;15256:4;15249:5;15245:16;15223:63;:::i;:::-;15340:2;15319:15;-1:-1:-1;;15315:29:1;15306:39;;;;15347:4;15302:50;;15100:258;-1:-1:-1;;15100:258:1:o;15363:435::-;15596:3;15585:9;15578:22;15559:4;15617:46;15658:3;15647:9;15643:19;15635:6;15617:46;:::i;:::-;15694:2;15679:18;;15672:34;;;;-1:-1:-1;15737:2:1;15722:18;;15715:34;;;;15780:2;15765:18;;;15758:34;15609:54;15363:435;-1:-1:-1;15363:435:1:o;15803:399::-;16005:2;15987:21;;;16044:2;16024:18;;;16017:30;16083:34;16078:2;16063:18;;16056:62;-1:-1:-1;;;16149:2:1;16134:18;;16127:33;16192:3;16177:19;;15803:399::o;16207:348::-;16409:2;16391:21;;;16448:2;16428:18;;;16421:30;16487:26;16482:2;16467:18;;16460:54;16546:2;16531:18;;16207:348::o;16560:127::-;16621:10;16616:3;16612:20;16609:1;16602:31;16652:4;16649:1;16642:15;16676:4;16673:1;16666:15;16971:245;17038:6;17091:2;17079:9;17070:7;17066:23;17062:32;17059:52;;;17107:1;17104;17097:12;17059:52;17139:9;17133:16;17158:28;17180:5;17158:28;:::i;17221:1001::-;17533:3;17546:22;;;17518:19;;17603:22;;;17485:4;17683:6;17656:3;17641:19;;17485:4;17717:304;17731:6;17728:1;17725:13;17717:304;;;17806:6;17793:20;17826:31;17851:5;17826:31;:::i;:::-;-1:-1:-1;;;;;17882:31:1;17870:44;;17937:4;17996:15;;;;17961:12;;;;17910:1;17746:9;17717:304;;;-1:-1:-1;18072:4:1;18057:20;;18050:36;;;;-1:-1:-1;;18117:2:1;18102:18;;18095:34;;;;18160:2;18145:18;;18138:34;;;;18203:3;18188:19;;;18181:35;18038:3;17221:1001;-1:-1:-1;;17221:1001:1:o;18227:127::-;18288:10;18283:3;18279:20;18276:1;18269:31;18319:4;18316:1;18309:15;18343:4;18340:1;18333:15;18359:135;18398:3;18419:17;;;18416:43;;18439:18;;:::i;:::-;-1:-1:-1;18486:1:1;18475:13;;18359:135::o;18499:125::-;18539:4;18567:1;18564;18561:8;18558:34;;;18572:18;;:::i;:::-;-1:-1:-1;18609:9:1;;18499:125::o;20171:406::-;20373:2;20355:21;;;20412:2;20392:18;;;20385:30;20451:34;20446:2;20431:18;;20424:62;-1:-1:-1;;;20517:2:1;20502:18;;20495:40;20567:3;20552:19;;20171:406::o;20582:128::-;20622:3;20653:1;20649:6;20646:1;20643:13;20640:39;;;20659:18;;:::i;:::-;-1:-1:-1;20695:9:1;;20582:128::o;21318:274::-;21447:3;21485:6;21479:13;21501:53;21547:6;21542:3;21535:4;21527:6;21523:17;21501:53;:::i;:::-;21570:16;;;;;21318:274;-1:-1:-1;;21318:274:1:o;22798:406::-;23000:2;22982:21;;;23039:2;23019:18;;;23012:30;-1:-1:-1;;;;;;;;;;;23073:2:1;23058:18;;23051:62;-1:-1:-1;;;23144:2:1;23129:18;;23122:40;23194:3;23179:19;;22798:406::o;23209:127::-;23270:10;23265:3;23261:20;23258:1;23251:31;23301:4;23298:1;23291:15;23325:4;23322:1;23315:15;23341:217;23381:1;23407;23397:132;;23451:10;23446:3;23442:20;23439:1;23432:31;23486:4;23483:1;23476:15;23514:4;23511:1;23504:15;23397:132;-1:-1:-1;23543:9:1;;23341:217::o;23924:136::-;23963:3;23991:5;23981:39;;24000:18;;:::i;:::-;-1:-1:-1;;;24036:18:1;;23924:136::o;25044:459::-;25275:6;25264:9;25257:25;25318:6;25313:2;25302:9;25298:18;25291:34;25390:1;25386;25381:3;25377:11;25373:19;25365:6;25361:32;25356:2;25345:9;25341:18;25334:60;25430:3;25425:2;25414:9;25410:18;25403:31;25238:4;25451:46;25492:3;25481:9;25477:19;25469:6;25451:46;:::i;28161:188::-;28240:13;;-1:-1:-1;;;;;28282:42:1;;28272:53;;28262:81;;28339:1;28336;28329:12;28354:450;28441:6;28449;28457;28510:2;28498:9;28489:7;28485:23;28481:32;28478:52;;;28526:1;28523;28516:12;28478:52;28549:40;28579:9;28549:40;:::i;:::-;28539:50;;28608:49;28653:2;28642:9;28638:18;28608:49;:::i;:::-;28598:59;;28700:2;28689:9;28685:18;28679:25;28744:10;28737:5;28733:22;28726:5;28723:33;28713:61;;28770:1;28767;28760:12

Swarm Source

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