Contract 0xc10ef9f491c9b59f936957026020c321651ac078 9

 

Contract Overview

Multichain: anyCall V6
Balance:
118.317054272033118878 FTM

FTM Value:
$63.04 (@ $0.53/FTM)
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xff3394132d90683312f289c916798238edc8aeb83b263aff5c56cb243a1454bfAny Exec545664892023-01-28 0:10:4210 days 2 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.108604918589
0x16d24424471098f60b7291641aeb4228b30f05318f716a530012157a84d379a9Any Exec539010502023-01-16 23:26:3221 days 2 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.023388383157
0xf62ef6845d3a246a750781d7239a7fab61ea4d0854bac28ee98aff0a23178f86Any Exec539004922023-01-16 23:08:4421 days 3 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.022388958476
0x6ca539f0f6d680a3741baffd665662500f1693435a528f74e380b0920537139fAny Exec536283972023-01-12 11:32:3225 days 14 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.023148162792
0x8b22a6d4400579e1fd7c5e33d0e442c528fda41fe577d32ca7644aa5a39c13c1Any Exec535636062023-01-11 5:33:5626 days 20 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.021519696
0x2d54330f13bf26b6343c9ca7ecb9e36632ff53c325c2986b600be49e19c0950eAny Exec535634172023-01-11 5:25:3326 days 20 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.017086913962
0x94a2147f5fe30ebad97c3aeb4a11c02a1db01366c023ec28f0970877d41bd29cAny Exec535278342023-01-10 7:58:1027 days 18 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.025937213031
0xa3d7552143b36900b4e3336334c107d98a7314aeb64fff17880c78790b6ecdb5Any Exec535009172023-01-09 19:29:3228 days 6 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.017721990664
0xbce6ccbdba132c1561a65d5637395622c5bae6f37bb8ed289dfaafda7e8b8d68Any Exec534999872023-01-09 19:03:0128 days 7 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.016136609507
0x5d3e41709f1d2bf6f63081a68fb88b8984f8e6f21534f6313457e26f8b750407Any Exec522221662022-12-12 15:28:0756 days 10 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.002719186362
0x18c369e4a262756b681f6809faa8b6a89f2dd041c9e394d3101785c86f3c897bAny Exec522115952022-12-12 10:48:0656 days 15 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.005061126568
0x133de6ae2a232b9002fa5b921dcc62801c5582e21bf5f2985528f554e14e80fdAny Exec521083702022-12-10 11:22:1958 days 14 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.013268817323
0x120c1b7461a4feec5a86ef78f8420eb7572f46dd36d3702eb09de066164e09f1Any Exec520430982022-12-09 0:57:2960 days 1 hr ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.0437756704
0x0b82c5a0f729238fc4d3b865d4f77f1c5636043e7316bc835b405825827ed716Any Exec520363012022-12-08 20:16:5060 days 5 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.013633281335
0x09013a32732adaa870093b3f72e6cf1e8976ea3b4f60b3efd3fcb5f93863acb1Any Exec519225572022-12-05 16:26:1663 days 9 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.250115272246
0x64a84974870d14d632e5b7ec3f041b28811b71f5a8ad5b5ed379502a491ab2ecAny Exec519222262022-12-05 16:06:5863 days 10 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.092663318974
0x446f1f8302f3ff9866d214dd5b5a2dede8a6c13b8b6331ff908dae8162a1e1ceAny Exec519209152022-12-05 15:02:5063 days 11 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.572597472282
0x370ed878a8b5a5470937b383f5861037cd78416c3b6b36fd37c487ab77fc991cAny Exec519194382022-12-05 14:21:2063 days 11 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM2.83413081515
0xe6f8c98ea33f58baf8c9f1eada34c46f73c36c5c85fa2bf4a27a9d889fa3bb8bAny Exec518931902022-12-04 22:33:4364 days 3 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.017629923527
0xbcaef72398c523896a179cab649a5bddca5ae1efd93199180490c0126dbaa670Any Exec518926912022-12-04 22:10:4464 days 4 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.020939591618
0x58f485cfd991f07c7579c92e7e9f2772dede48146c8960b4093b5d2cde39ffc3Any Exec518925422022-12-04 22:04:2264 days 4 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.018640115874
0xf5074a3e66d689ec3a78e19dadfba5b18ddb2435e75073ee462ff139e3df1d2fAny Exec518906062022-12-04 20:52:1864 days 5 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.042152920349
0xfdfc60e764ee013097695fdeda2126ee8ed6c882fc2c7339f9170624c4f04aceAny Exec517615792022-12-02 6:21:2466 days 19 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.004654164897
0xbc091c0b22fc882760cbd0eeaf5026d0b17d5f4dda80281308e19740458f0473Any Exec517607072022-12-02 6:04:2966 days 20 hrs ago0xe2eaa2d2497798c0f9ec76120841de3131fbde66 IN  Multichain: anyCall V60 FTM0.005200338
0xa753686fab5f34434adb96d5dbd32891054cc5e962834c9c0da15a1aa8d0a1f0Deposit517478242022-12-02 1:40:1367 days 35 mins ago0x493343df15710f49b85b98050d3acf974d759b98 IN  Multichain: anyCall V61 FTM0.003288374393
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6468a9aaf7fc3666fbe625d209d72fa766712056f27a3abd1b1d714f2af69ab2552124862023-02-06 18:41:327 hrs 34 mins ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde6618.02 FTM
0x6468a9aaf7fc3666fbe625d209d72fa766712056f27a3abd1b1d714f2af69ab2552124862023-02-06 18:41:327 hrs 34 mins ago 0x1a06200755f687f2edc683b9b061f5790e2cbe4d Multichain: anyCall V618.02 FTM
0x6ce9ccd4c25f69c2474528f088d2cc26ada8c660cf3fd249fa4e01c9d47f095c550022482023-02-03 16:49:493 days 9 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde663.29 FTM
0x6ce9ccd4c25f69c2474528f088d2cc26ada8c660cf3fd249fa4e01c9d47f095c550022482023-02-03 16:49:493 days 9 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V63.29 FTM
0x3a46f70cdfb6dfacf94672d1387b7a4058799914136d2a7fa961bc148c1e2938547677002023-01-31 6:54:486 days 19 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde663.61 FTM
0x3a46f70cdfb6dfacf94672d1387b7a4058799914136d2a7fa961bc148c1e2938547677002023-01-31 6:54:486 days 19 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V63.61 FTM
0xccf8389f56bea25e1aa6f103612a694cf1548853c5fab8bb956d5174bd6e7db4546983082023-01-30 3:05:077 days 23 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde6650 FTM
0xccf8389f56bea25e1aa6f103612a694cf1548853c5fab8bb956d5174bd6e7db4546983082023-01-30 3:05:077 days 23 hrs ago 0x700843380021776970a28a7a74da3e5908755fcc Multichain: anyCall V650 FTM
0x31af90e219a7cbfc14be5388930fe585437150d0e3a14172fe3eef8c58a89718546569432023-01-29 11:29:428 days 14 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde663.29 FTM
0x31af90e219a7cbfc14be5388930fe585437150d0e3a14172fe3eef8c58a89718546569432023-01-29 11:29:428 days 14 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V63.29 FTM
0x487cb2196143c397c3a26ef1d9cbad55a7348dd1ef4b072253abbadc340f0392546131022023-01-28 20:27:079 days 5 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde663.29 FTM
0x487cb2196143c397c3a26ef1d9cbad55a7348dd1ef4b072253abbadc340f0392546131022023-01-28 20:27:079 days 5 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V63.29 FTM
0x6cc2f6e282577625215d8b4f6dca4e8dcfe32747a30fdc5121e1278845b492c4545728882023-01-28 2:20:049 days 23 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde663.29 FTM
0x6cc2f6e282577625215d8b4f6dca4e8dcfe32747a30fdc5121e1278845b492c4545728882023-01-28 2:20:049 days 23 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V63.29 FTM
0x225858d0411418ba082d0e8cdf584f367404a581bfed016fc28f71821a1f0810545662662023-01-28 0:06:2910 days 2 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde664.89 FTM
0x225858d0411418ba082d0e8cdf584f367404a581bfed016fc28f71821a1f0810545662662023-01-28 0:06:2910 days 2 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V64.89 FTM
0x1c9fde57f5cfb7ced3b489cc6d3b38335c565b69826ee4da5baabd5c556b50ea545662502023-01-28 0:06:1410 days 2 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde664.89 FTM
0x1c9fde57f5cfb7ced3b489cc6d3b38335c565b69826ee4da5baabd5c556b50ea545662502023-01-28 0:06:1410 days 2 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V64.89 FTM
0x5b3adbbe23623733c5b4ec728a09c41710851ab8bf7063a954763c75598dd91c545662402023-01-28 0:06:0410 days 2 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde664.89 FTM
0x5b3adbbe23623733c5b4ec728a09c41710851ab8bf7063a954763c75598dd91c545662402023-01-28 0:06:0410 days 2 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V64.89 FTM
0x2d5c7a41d50366109bb2e0cbf0716f6bfa4c742839221aff8429c90bae7d2e12545662352023-01-28 0:06:0010 days 2 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde664.89 FTM
0x2d5c7a41d50366109bb2e0cbf0716f6bfa4c742839221aff8429c90bae7d2e12545662352023-01-28 0:06:0010 days 2 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V64.89 FTM
0xf1b42ea898a623b04f110ea8f736e697a5c2406fbd9c03ce075614d5250d8eb1545662322023-01-28 0:05:5710 days 2 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde664.89 FTM
0xf1b42ea898a623b04f110ea8f736e697a5c2406fbd9c03ce075614d5250d8eb1545662322023-01-28 0:05:5710 days 2 hrs ago 0xa0c94183a74cf22de491dcbb02fc7433267c6d32 Multichain: anyCall V64.89 FTM
0x0bbfd16d47119282762fa264e3a6dec9cdedd33e7f1ac2b9bbda077240cb0f13545661982023-01-28 0:05:1710 days 2 hrs ago Multichain: anyCall V60xe2eaa2d2497798c0f9ec76120841de3131fbde664.89 FTM
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xFC23152E04D6039b796c91C9E2FaAaeDc704B33f

Contract Name:
AnyCallV6Proxy

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2022-05-30
*/

/**
 *Submitted for verification at BscScan.com on 2022-05-12
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.6;

/// IApp interface of the application
interface IApp {
    /// (required) call on the destination chain to exec the interaction
    function anyExecute(bytes calldata _data) external returns (bool success, bytes memory result);

    /// (optional,advised) call back on the originating chain if the cross chain interaction fails
    function anyFallback(address _to, bytes calldata _data) external;
}

/// anycall executor is the delegator to execute contract calling (like a sandbox)
contract AnyCallExecutor {
    struct Context {
        address from;
        uint256 fromChainID;
        uint256 nonce;
    }

    Context public context;
    address public creator;

    constructor() {
        creator = msg.sender;
    }

    function execute(
        address _to,
        bytes calldata _data,
        address _from,
        uint256 _fromChainID,
        uint256 _nonce
    ) external returns (bool success, bytes memory result) {
        if (msg.sender != creator) {
            return (false, "AnyCallExecutor: caller is not the creator");
        }
        context = Context({from: _from, fromChainID: _fromChainID, nonce: _nonce});
        (success, result) = IApp(_to).anyExecute(_data);
        context = Context({from: address(0), fromChainID: 0, nonce: 0});
    }
}

/// anycall proxy is a universal protocal to complete cross-chain interaction.
/// 1. the client call `anyCall` on the originating chain
///         to submit a request for a cross chain interaction
/// 2. the mpc network verify the request and call `anyExec` on the destination chain
///         to execute a cross chain interaction
/// 3. if step 2 failed and step 1 has set non-zero fallback,
///         then call `anyFallback` on the originating chain
contract AnyCallV6Proxy {
    // Packed fee information (only 1 storage slot)
    struct FeeData {
        uint128 accruedFees;
        uint128 premium;
    }

    // App config
    struct AppConfig {
        address app; // the application contract address
        address appAdmin; // account who admin the application's config
        uint256 appFlags; // flags of the application
    }

    // Src fee is (baseFees + msg.data.length*feesPerByte)
    struct SrcFeeConfig {
        uint256 baseFees;
        uint256 feesPerByte;
    }

    // Exec record
    struct ExecRecord {
        address to;
        bytes data;
    }

    // Context of the request on originating chain
    struct RequestContext {
        bytes32 txhash;
        address from;
        uint256 fromChainID;
        uint256 nonce;
        uint256 flags;
    }

    // anycall version
    string constant ANYCALL_VERSION = "v6.0";

    // Flags constant
    uint256 public constant FLAG_MERGE_CONFIG_FLAGS = 0x1;
    uint256 public constant FLAG_PAY_FEE_ON_SRC = 0x1 << 1;

    // App Modes constant
    uint256 public constant APPMODE_USE_CUSTOM_SRC_FEES = 0x1;

    // Modes constant
    uint256 public constant PERMISSIONLESS_MODE = 0x1;
    uint256 public constant FREE_MODE = 0x1 << 1;

    // Extra cost of execution (SSTOREs.SLOADs,ADDs,etc..)
    // TODO: analysis to verify the correct overhead gas usage
    uint256 constant EXECUTION_OVERHEAD = 100000;

    // key is app address
    mapping(address => string) public appIdentifier;

    // key is appID, a unique identifier for each project
    mapping(string => AppConfig) public appConfig;
    mapping(string => mapping(address => bool)) public appExecWhitelist;
    mapping(string => address[]) public appHistoryWhitelist;
    mapping(string => bool) public appBlacklist;
    mapping(uint256 => SrcFeeConfig) public srcDefaultFees; // key is chainID
    mapping(string => mapping(uint256 => SrcFeeConfig)) public srcCustomFees;
    mapping(string => uint256) public appDefaultModes;
    mapping(string => mapping(uint256 => uint256)) public appCustomModes;

    mapping(address => bool) public isAdmin;
    address[] public admins;

    address public mpc;
    address public pendingMPC;

    uint256 public mode;
    bool public paused;

    uint256 public minReserveBudget;
    mapping(address => uint256) public executionBudget;
    FeeData private _feeData;

    // applications should give permission to this executor
    AnyCallExecutor public executor;

    mapping(bytes32 => ExecRecord) public retryExecRecords;

    mapping(bytes32 => bool) public execCompleted;
    uint256 nonce;

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1);
        unlocked = 0;
        _;
        unlocked = 1;
    }

    event LogAnyCall(
        address indexed from,
        address indexed to,
        bytes data,
        address _fallback,
        uint256 indexed toChainID,
        uint256 flags,
        string appID,
        uint256 nonce
    );

    event LogAnyExec(
        bytes32 indexed txhash,
        address indexed from,
        address indexed to,
        uint256 fromChainID,
        uint256 nonce,
        bool success,
        bytes result
    );

    event Deposit(address indexed account, uint256 amount);
    event Withdraw(address indexed account, uint256 amount);
    event SetBlacklist(string appID, bool flag);
    event SetWhitelist(string appID, address indexed whitelist, bool flag);
    event UpdatePremium(uint256 oldPremium, uint256 newPremium);
    event AddAdmin(address admin);
    event RemoveAdmin(address admin);
    event ChangeMPC(address indexed oldMPC, address indexed newMPC, uint256 timestamp);
    event ApplyMPC(address indexed oldMPC, address indexed newMPC, uint256 timestamp);
    event SetAppConfig(string appID, address indexed app, address indexed appAdmin, uint256 appFlags);
    event UpgradeApp(string appID, address indexed oldApp, address indexed newApp);
    event StoreRetryExecRecord(bytes32 indexed txhash, address indexed from, address indexed to, uint256 fromChainID, uint256 nonce, bytes data);
    event DoneRetryExecRecord(bytes32 indexed txhash, address indexed from, uint256 fromChainID, uint256 nonce);

    constructor(
        address _admin,
        address _mpc,
        uint128 _premium,
        uint256 _mode
    ) {
        require(_mpc != address(0), "zero mpc address");
        if (_admin != address(0)) {
            isAdmin[_admin] = true;
            admins.push(_admin);
        }
        if (_mpc != _admin) {
            isAdmin[_mpc] = true;
            admins.push(_mpc);
        }

        mpc = _mpc;
        _feeData.premium = _premium;
        mode = _mode;

        executor = new AnyCallExecutor();

        emit ApplyMPC(address(0), _mpc, block.timestamp);
        emit UpdatePremium(0, _premium);
    }

    /// @dev Access control function
    modifier onlyMPC() {
        require(msg.sender == mpc, "only MPC");
        _;
    }

    /// @dev Access control function
    modifier onlyAdmin() {
        require(isAdmin[msg.sender], "only admin");
        _;
    }

    /// @dev pausable control function
    modifier whenNotPaused() {
        require(!paused, "paused");
        _;
    }

    /// @dev Charge an account for execution costs on this chain
    /// @param _from The account to charge for execution costs
    modifier charge(address _from, uint256 _flags) {
        uint256 gasUsed;

        // Prepare charge fee on the destination chain
        if (!_isSet(mode, FREE_MODE)) {
            if (!_isSet(_flags, FLAG_PAY_FEE_ON_SRC)) {
                require(executionBudget[_from] >= minReserveBudget, "less than min budget");
                gasUsed = gasleft() + EXECUTION_OVERHEAD;
            }
        }

        _;

        // Charge fee on the dest chain
        if (gasUsed > 0) {
            uint256 totalCost = (gasUsed - gasleft()) * (tx.gasprice + _feeData.premium);
            uint256 budget = executionBudget[_from];
            require(budget > totalCost, "no enough budget");
            executionBudget[_from] = budget - totalCost;
            _feeData.accruedFees += uint128(totalCost);
        }
    }

    /// @dev set paused flag to pause/unpause functions
    function setPaused(bool _paused) external onlyAdmin {
        paused = _paused;
    }

    function _paySrcFees(uint256 fees) internal {
        require(msg.value >= fees, "no enough src fee");
        if (fees > 0) { // pay fees
            (bool success,) = mpc.call{value: fees}("");
            require(success);
        }
        if (msg.value > fees) { // return remaining amount
            (bool success,) = msg.sender.call{value: msg.value - fees}("");
            require(success);
        }
    }

    /**
        @notice Submit a request for a cross chain interaction
        @param _to The target to interact with on `_toChainID`
        @param _data The calldata supplied for the interaction with `_to`
        @param _fallback The address to call back on the originating chain
            if the cross chain interaction fails
            for security reason, it must be zero or `msg.sender` address
        @param _toChainID The target chain id to interact with
        @param _flags The flags of app on the originating chain
    */
    function anyCall(
        address _to,
        bytes calldata _data,
        address _fallback,
        uint256 _toChainID,
        uint256 _flags
    ) external lock payable whenNotPaused {
        require(_fallback == address(0) || _fallback == msg.sender, "wrong fallback");
        string memory _appID = appIdentifier[msg.sender];

        require(!appBlacklist[_appID], "blacklist");

        bool _permissionlessMode = _isSet(mode, PERMISSIONLESS_MODE);
        if (!_permissionlessMode) {
            require(appExecWhitelist[_appID][msg.sender], "no permission");
        }

        if (!_isSet(mode, FREE_MODE)) {
            AppConfig storage config = appConfig[_appID];
            require(
                (_permissionlessMode && config.app == address(0)) ||
                msg.sender == config.app,
                "app not exist"
            );

            if (_isSet(_flags, FLAG_MERGE_CONFIG_FLAGS) && config.app == msg.sender) {
                _flags |= config.appFlags;
            }

            if (_isSet(_flags, FLAG_PAY_FEE_ON_SRC)) {
                uint256 fees = _calcSrcFees(_appID, _toChainID, _data.length);
                _paySrcFees(fees);
            } else if (msg.value > 0) {
                _paySrcFees(0);
            }
        }

        nonce++;
        emit LogAnyCall(msg.sender, _to, _data, _fallback, _toChainID, _flags, _appID, nonce);
    }

    /**
        @notice Execute a cross chain interaction
        @dev Only callable by the MPC
        @param _to The cross chain interaction target
        @param _data The calldata supplied for interacting with target
        @param _fallback The address to call on originating chain if the interaction fails
        @param _appID The app identifier to check whitelist
        @param _ctx The context of the request on originating chain
    */
    function anyExec(
        address _to,
        bytes memory _data,
        address _fallback,
        string memory _appID,
        RequestContext memory _ctx
    ) external lock whenNotPaused charge(_ctx.from, _ctx.flags) onlyMPC {
        address _from = _ctx.from;

        require(_fallback == address(0) || _fallback == _from, "wrong fallback");

        require(!appBlacklist[_appID], "blacklist");

        if (!_isSet(mode, PERMISSIONLESS_MODE)) {
            require(appExecWhitelist[_appID][_to], "no permission");
        }

        bytes32 uniqID = calcUniqID(_ctx.txhash, _from, _ctx.fromChainID, _ctx.nonce);
        require(!execCompleted[uniqID], "exec completed");

        bool success;
        {
            bytes memory result;
            try executor.execute(_to, _data, _from, _ctx.fromChainID, _ctx.nonce) returns (bool succ, bytes memory res) {
                (success, result) = (succ, res);
            } catch Error(string memory reason) {
                result = bytes(reason);
            } catch (bytes memory reason) {
                result = reason;
            }
            emit LogAnyExec(_ctx.txhash, _from, _to, _ctx.fromChainID, _ctx.nonce, success, result);
        }

        if (success) {
            execCompleted[uniqID] = true;
        } else if (_fallback == address(0)) {
            retryExecRecords[uniqID] = ExecRecord(_to, _data);
            emit StoreRetryExecRecord(_ctx.txhash, _from, _to, _ctx.fromChainID, _ctx.nonce, _data);
        } else {
            // Call the fallback on the originating chain with the call information (to, data)
            nonce++;
            emit LogAnyCall(
                _from,
                _fallback,
                abi.encodeWithSelector(IApp.anyFallback.selector, _to, _data),
                address(0),
                _ctx.fromChainID,
                0, // pay fee on dest chain
                _appID,
                nonce);
        }
    }

    function _isSet(uint256 _value, uint256 _testBits) internal pure returns (bool) {
        return (_value & _testBits) == _testBits;
    }

    // @notice Calc unique ID
    function calcUniqID(bytes32 _txhash, address _from, uint256 _fromChainID, uint256 _nonce) public pure returns (bytes32) {
        return keccak256(abi.encode(_txhash, _from, _fromChainID, _nonce));
    }

    /// @notice Retry stored exec record
    function retryExec(bytes32 _txhash, address _from, uint256 _fromChainID, uint256 _nonce) external {
        bytes32 uniqID = calcUniqID(_txhash, _from, _fromChainID, _nonce);
        require(!execCompleted[uniqID], "exec completed");

        ExecRecord storage record = retryExecRecords[uniqID];
        require(record.to != address(0), "no retry record");

        address _to = record.to;
        bytes memory _data = record.data;

        // Clear record
        record.to = address(0);
        record.data = "";

        (bool success,) = executor.execute(_to, _data, _from, _fromChainID, _nonce);
        require(success);

        execCompleted[uniqID] = true;
        emit DoneRetryExecRecord(_txhash, _from, _fromChainID, _nonce);
    }

    /// @notice Deposit native currency crediting `_account` for execution costs on this chain
    /// @param _account The account to deposit and credit for
    function deposit(address _account) external payable {
        executionBudget[_account] += msg.value;
        emit Deposit(_account, msg.value);
    }

    /// @notice Withdraw a previous deposit from your account
    /// @param _amount The amount to withdraw from your account
    function withdraw(uint256 _amount) external {
        executionBudget[msg.sender] -= _amount;
        emit Withdraw(msg.sender, _amount);
        (bool success,) = msg.sender.call{value: _amount}("");
        require(success);
    }

    /// @notice Withdraw all accrued execution fees
    /// @dev The MPC is credited in the native currency
    function withdrawAccruedFees() external {
        uint256 fees = _feeData.accruedFees;
        _feeData.accruedFees = 0;
        (bool success,) = mpc.call{value: fees}("");
        require(success);
    }

    /// @notice Set app blacklist
    function setBlacklist(string calldata _appID, bool _flag) external onlyAdmin {
        appBlacklist[_appID] = _flag;
        emit SetBlacklist(_appID, _flag);
    }

    /// @notice Set app blacklist in batch
    function setBlacklists(string[] calldata _appIDs, bool _flag) external onlyAdmin {
        for (uint256 i = 0; i < _appIDs.length; i++) {
            this.setBlacklist(_appIDs[i], _flag);
        }
    }

    /// @notice Set the premimum for cross chain executions
    /// @param _premium The premium per gas
    function setPremium(uint128 _premium) external onlyAdmin {
        emit UpdatePremium(_feeData.premium, _premium);
        _feeData.premium = _premium;
    }

    /// @notice Set minimum exection budget for cross chain executions
    /// @param _minBudget The minimum exection budget
    function setMinReserveBudget(uint128 _minBudget) external onlyAdmin {
        minReserveBudget = _minBudget;
    }

    /// @notice Set mode
    function setMode(uint256 _mode) external onlyAdmin {
        mode = _mode;
    }

    /// @notice Change mpc
    function changeMPC(address _mpc) external onlyMPC {
        pendingMPC = _mpc;
        emit ChangeMPC(mpc, _mpc, block.timestamp);
    }

    /// @notice Apply mpc
    function applyMPC() external {
        require(msg.sender == pendingMPC);
        emit ApplyMPC(mpc, pendingMPC, block.timestamp);
        mpc = pendingMPC;
        pendingMPC = address(0);
    }

    /// @notice Get the total accrued fees in native currency
    /// @dev Fees increase when executing cross chain requests
    function accruedFees() external view returns(uint128) {
        return _feeData.accruedFees;
    }

    /// @notice Get the gas premium cost
    /// @dev This is similar to priority fee in eip-1559, except instead of going
    ///     to the miner it is given to the MPC executing cross chain requests
    function premium() external view returns(uint128) {
        return _feeData.premium;
    }

    /// @notice Add admin
    function addAdmin(address _admin) external onlyMPC {
        require(!isAdmin[_admin]);
        isAdmin[_admin] = true;
        admins.push(_admin);
        emit AddAdmin(_admin);
    }

    /// @notice Remove admin
    function removeAdmin(address _admin) external onlyMPC {
        require(isAdmin[_admin]);
        isAdmin[_admin] = false;
        uint256 length = admins.length;
        for (uint256 i = 0; i < length - 1; i++) {
            if (admins[i] == _admin) {
                admins[i] = admins[length - 1];
                break;
            }
        }
        admins.pop();
        emit RemoveAdmin(_admin);
    }

    /// @notice Get all admins
    function getAllAdmins() external view returns (address[] memory) {
        return admins;
    }

    /// @notice Init app config
    function initAppConfig(
        string calldata _appID,
        address _app,
        address _admin,
        uint256 _flags,
        address[] calldata _whitelist
    ) external onlyAdmin {
        require(bytes(_appID).length > 0, "empty appID");
        require(_app != address(0), "zero app address");

        AppConfig storage config = appConfig[_appID];
        require(config.app == address(0), "app exist");

        appIdentifier[_app] = _appID;

        config.app = _app;
        config.appAdmin = _admin;
        config.appFlags = _flags;

        address[] memory whitelist = new address[](1+_whitelist.length);
        whitelist[0] = _app;
        for (uint256 i = 0; i < _whitelist.length; i++) {
            whitelist[i+1] = _whitelist[i];
        }
        _setAppWhitelist(_appID, whitelist, true);

        emit SetAppConfig(_appID, _app, _admin, _flags);
    }

    /// @notice Update app config
    /// can be operated only by mpc or app admin
    /// the config.app will always keep unchanged here
    function updateAppConfig(
        address _app,
        address _admin,
        uint256 _flags,
        address[] calldata _whitelist
    ) external {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");

        if (_admin != address(0)) {
            config.appAdmin = _admin;
        }
        config.appFlags = _flags;
        if (_whitelist.length > 0) {
            _setAppWhitelist(_appID, _whitelist, true);
        }

        emit SetAppConfig(_appID, _app, _admin, _flags);
    }

    /// @notice Upgrade app
    /// can be operated only by mpc or app admin
    /// change config.app to a new address
    /// require the `_newApp` is not inited
    function upgradeApp(address _oldApp, address _newApp) external {
        string memory _appID = appIdentifier[_oldApp];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _oldApp && _oldApp != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");
        require(bytes(appIdentifier[_newApp]).length == 0, "new app is inited");

        config.app = _newApp;

        emit UpgradeApp(_appID, _oldApp, _newApp);
    }

    /// @notice Add whitelist
    function addWhitelist(address _app, address[] memory _whitelist) external {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");

        _setAppWhitelist(_appID, _whitelist, true);
    }

    /// @notice Remove whitelist
    function removeWhitelist(address _app, address[] memory _whitelist) external {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");

        _setAppWhitelist(_appID, _whitelist, false);
    }

    function _setAppWhitelist(string memory _appID, address[] memory _whitelist, bool _flag) internal {
        mapping(address => bool) storage whitelist = appExecWhitelist[_appID];
        address[] storage historyWhitelist = appHistoryWhitelist[_appID];
        address addr;
        for (uint256 i = 0; i < _whitelist.length; i++) {
            addr = _whitelist[i];
            if (whitelist[addr] == _flag) {
                continue;
            }
            if (_flag) {
                historyWhitelist.push(addr);
            }
            whitelist[addr] = _flag;
            emit SetWhitelist(_appID, addr, _flag);
        }
    }

    /// @notice Get history whitelist length
    function getHistoryWhitelistLength(string memory _appID) external view returns (uint256) {
        return appHistoryWhitelist[_appID].length;
    }

    /// @notice Get all history whitelist
    function getAllHistoryWhitelist(string memory _appID) external view returns (address[] memory) {
        return appHistoryWhitelist[_appID];
    }

    /// @notice Tidy history whitelist to be same with actual whitelist
    function tidyHistoryWhitelist(string memory _appID) external {
        mapping(address => bool) storage actualWhitelist = appExecWhitelist[_appID];
        address[] storage historyWhitelist = appHistoryWhitelist[_appID];
        uint256 histLength = historyWhitelist.length;
        uint256 popIndex = histLength;
        address addr;
        for (uint256 i = 0; i < popIndex; ) {
            addr = historyWhitelist[i];
            if (actualWhitelist[addr]) {
                i++;
            } else {
                popIndex--;
                historyWhitelist[i] = historyWhitelist[popIndex];
            }
        }
        for (uint256 i = popIndex; i < histLength; i++) {
            historyWhitelist.pop();
        }
    }

    /// @notice Set default src fees
    function setDefaultSrcFees(
        uint256[] calldata _toChainIDs,
        uint256[] calldata _baseFees,
        uint256[] calldata _feesPerByte
    ) external onlyAdmin {
        uint256 length = _toChainIDs.length;
        require(length == _baseFees.length && length == _feesPerByte.length);

        for (uint256 i = 0; i < length; i++) {
            srcDefaultFees[_toChainIDs[i]] = SrcFeeConfig(_baseFees[i], _feesPerByte[i]);
        }
    }

    /// @notice Set custom src fees
    function setCustomSrcFees(
        address _app,
        uint256[] calldata _toChainIDs,
        uint256[] calldata _baseFees,
        uint256[] calldata _feesPerByte
    ) external onlyAdmin {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(_isSet(config.appFlags, FLAG_PAY_FEE_ON_SRC), "flag not set");

        uint256 length = _toChainIDs.length;
        require(length == _baseFees.length && length == _feesPerByte.length);

        mapping(uint256 => SrcFeeConfig) storage _srcFees = srcCustomFees[_appID];
        for (uint256 i = 0; i < length; i++) {
            _srcFees[_toChainIDs[i]] = SrcFeeConfig(_baseFees[i], _feesPerByte[i]);
        }
    }

    /// @notice Set app modes
    function setAppModes(
        address _app,
        uint256 _appDefaultMode,
        uint256[] calldata _toChainIDs,
        uint256[] calldata _appCustomModes
    ) external onlyAdmin {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];
        require(config.app == _app && _app != address(0), "app not exist");

        uint256 length = _toChainIDs.length;
        require(length == _appCustomModes.length);

        appDefaultModes[_appID] = _appDefaultMode;

        for (uint256 i = 0; i < length; i++) {
            appCustomModes[_appID][_toChainIDs[i]] = _appCustomModes[i];
        }
    }

    /// @notice Calc fees
    function calcSrcFees(
        address _app,
        uint256 _toChainID,
        uint256 _dataLength
    ) external view returns (uint256) {
        string memory _appID = appIdentifier[_app];
        return _calcSrcFees(_appID, _toChainID, _dataLength);
    }

    /// @notice Calc fees
    function calcSrcFees(
        string calldata _appID,
        uint256 _toChainID,
        uint256 _dataLength
    ) external view returns (uint256) {
        return _calcSrcFees(_appID, _toChainID, _dataLength);
    }

    /// @notice Is use custom src fees
    function isUseCustomSrcFees(string memory _appID, uint256 _toChainID) public view returns (bool) {
        uint256 _appMode = appCustomModes[_appID][_toChainID];
        if (_isSet(_appMode, APPMODE_USE_CUSTOM_SRC_FEES)) {
            return true;
        }
        _appMode = appDefaultModes[_appID];
        return _isSet(_appMode, APPMODE_USE_CUSTOM_SRC_FEES);
    }

    function _calcSrcFees(
        string memory _appID,
        uint256 _toChainID,
        uint256 _dataLength
    ) internal view returns (uint256) {
        SrcFeeConfig memory customFees = srcCustomFees[_appID][_toChainID];
        uint256 customBaseFees = customFees.baseFees;
        uint256 customFeesPerBytes = customFees.feesPerByte;

        if (isUseCustomSrcFees(_appID, _toChainID)) {
            return customBaseFees + _dataLength * customFeesPerBytes;
        }

        SrcFeeConfig memory defaultFees = srcDefaultFees[_toChainID];
        uint256 defaultBaseFees = defaultFees.baseFees;
        uint256 defaultFeesPerBytes = defaultFees.feesPerByte;

        uint256 baseFees = (customBaseFees > defaultBaseFees) ? customBaseFees : defaultBaseFees;
        uint256 feesPerByte = (customFeesPerBytes > defaultFeesPerBytes) ? customFeesPerBytes : defaultFeesPerBytes;

        return baseFees + _dataLength * feesPerByte;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_mpc","type":"address"},{"internalType":"uint128","name":"_premium","type":"uint128"},{"internalType":"uint256","name":"_mode","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AddAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ApplyMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ChangeMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DoneRetryExecRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"_fallback","type":"address"},{"indexed":true,"internalType":"uint256","name":"toChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"flags","type":"uint256"},{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"LogAnyCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"result","type":"bytes"}],"name":"LogAnyExec","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"RemoveAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"app","type":"address"},{"indexed":true,"internalType":"address","name":"appAdmin","type":"address"},{"indexed":false,"internalType":"uint256","name":"appFlags","type":"uint256"}],"name":"SetAppConfig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"whitelist","type":"address"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"StoreRetryExecRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPremium","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPremium","type":"uint256"}],"name":"UpdatePremium","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"oldApp","type":"address"},{"indexed":true,"internalType":"address","name":"newApp","type":"address"}],"name":"UpgradeApp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"APPMODE_USE_CUSTOM_SRC_FEES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLAG_MERGE_CONFIG_FLAGS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLAG_PAY_FEE_ON_SRC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_MODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMISSIONLESS_MODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accruedFees","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_fallback","type":"address"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_flags","type":"uint256"}],"name":"anyCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_fallback","type":"address"},{"internalType":"string","name":"_appID","type":"string"},{"components":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"fromChainID","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"flags","type":"uint256"}],"internalType":"struct AnyCallV6Proxy.RequestContext","name":"_ctx","type":"tuple"}],"name":"anyExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appConfig","outputs":[{"internalType":"address","name":"app","type":"address"},{"internalType":"address","name":"appAdmin","type":"address"},{"internalType":"uint256","name":"appFlags","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"appCustomModes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appDefaultModes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"appExecWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"appHistoryWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"appIdentifier","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_dataLength","type":"uint256"}],"name":"calcSrcFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_dataLength","type":"uint256"}],"name":"calcSrcFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_txhash","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_fromChainID","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"calcUniqID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_mpc","type":"address"}],"name":"changeMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"execCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"executionBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"contract AnyCallExecutor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllAdmins","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"getAllHistoryWhitelist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"getHistoryWhitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"address","name":"_app","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_flags","type":"uint256"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"initAppConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"uint256","name":"_toChainID","type":"uint256"}],"name":"isUseCustomSrcFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minReserveBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMPC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premium","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_txhash","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_fromChainID","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"retryExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"retryExecRecords","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256","name":"_appDefaultMode","type":"uint256"},{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_appCustomModes","type":"uint256[]"}],"name":"setAppModes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_appIDs","type":"string[]"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBlacklists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_baseFees","type":"uint256[]"},{"internalType":"uint256[]","name":"_feesPerByte","type":"uint256[]"}],"name":"setCustomSrcFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_baseFees","type":"uint256[]"},{"internalType":"uint256[]","name":"_feesPerByte","type":"uint256[]"}],"name":"setDefaultSrcFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_minBudget","type":"uint128"}],"name":"setMinReserveBudget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_premium","type":"uint128"}],"name":"setPremium","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"srcCustomFees","outputs":[{"internalType":"uint256","name":"baseFees","type":"uint256"},{"internalType":"uint256","name":"feesPerByte","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"srcDefaultFees","outputs":[{"internalType":"uint256","name":"baseFees","type":"uint256"},{"internalType":"uint256","name":"feesPerByte","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"tidyHistoryWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_flags","type":"uint256"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"updateAppConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldApp","type":"address"},{"internalType":"address","name":"_newApp","type":"address"}],"name":"upgradeApp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAccruedFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260016016553480156200001657600080fd5b506040516200518d3803806200518d833981016040819052620000399162000290565b6001600160a01b038316620000875760405162461bcd60e51b815260206004820152601060248201526f7a65726f206d7063206164647265737360801b604482015260640160405180910390fd5b6001600160a01b03841615620000ec576001600160a01b0384166000818152600960205260408120805460ff19166001908117909155600a805491820181559091526000805160206200516d8339815191520180546001600160a01b03191690911790555b836001600160a01b0316836001600160a01b0316146200015b576001600160a01b0383166000818152600960205260408120805460ff19166001908117909155600a805491820181559091526000805160206200516d8339815191520180546001600160a01b03191690911790555b600b80546001600160a01b0385166001600160a01b0319909116179055601180546001600160801b03808516600160801b029116179055600d819055604051620001a59062000265565b604051809103906000f080158015620001c2573d6000803e3d6000fd5b50601280546001600160a01b0319166001600160a01b03928316179055604051428152908416906000907fa2e29fe96457476993f3188189d22408c86df0c977ec90a31b979c899800d0659060200160405180910390a360408051600081526001600160801b03841660208201527fec6b0785fd83ba51c66ca8c8bb1e4fbdd02a0cced0457a21583fdf399eb3e000910160405180910390a150505050620002f0565b6104d28062004c9b83390190565b80516001600160a01b03811681146200028b57600080fd5b919050565b60008060008060808587031215620002a757600080fd5b620002b28562000273565b9350620002c26020860162000273565b60408601519093506001600160801b0381168114620002e057600080fd5b6060959095015193969295505050565b61499b80620003006000396000f3fe60806040526004361061038b5760003560e01c806384271a6c116101dc578063bd45c4e711610102578063d8f1bd68116100a0578063f340fa011161006f578063f340fa0114610b98578063f75c266414610bab578063f830e7b414610bcb578063fadd10a214610beb57600080fd5b8063d8f1bd6814610b0e578063dfde3fdb14610b2e578063e0a73a9314610b5e578063e9523c9714610b8357600080fd5b8063c1e26e33116100dc578063c1e26e3314610aae578063c3294bb5146105bb578063c34c08e514610ace578063d72dd3b414610aee57600080fd5b8063bd45c4e714610a7b578063bf5d3f2414610a8e578063c0ab8899146109af57600080fd5b8063ab818db71161017a578063afdd2aed11610149578063afdd2aed146109f9578063b041758714610a19578063b63b38d014610a46578063b854bb5614610a5b57600080fd5b8063ab818db71461098f578063ac61b46f146109af578063ada82c7d146109c4578063aeb79211146109d957600080fd5b806395ec1be8116101b657806395ec1be8146105bb57806397f8a94f146109045780639a295d4914610924578063a86529d81461094457600080fd5b806384271a6c1461087557806389168e1814610895578063908c07c5146108b557600080fd5b806354b09ac5116102c1578063682c20581161025f578063732a8eda1161022e578063732a8eda146107c357806374bdda60146107fb578063796a9e43146108285780637a67bbf91461085557600080fd5b8063682c2058146107095780636c0cf7b71461073b5780636e6e8a021461078357806370480275146107a357600080fd5b80635c975abb1161029b5780635c975abb146106665780635ffdc9ca14610680578063667cb4b7146106c957806366c96b37146106e957600080fd5b806354b09ac5146106105780635689f039146106305780635b7b018c1461064657600080fd5b80632898bff81161032e578063304281cb11610308578063304281cb1461053c5780633083d598146105bb578063439b3e1c146105d05780634a578150146105f057600080fd5b80632898bff8146104d8578063295a5212146104f85780632e1a7d4d1461051c57600080fd5b80631785f53c1161036a5780631785f53c1461043a57806322b6a4e11461045a57806324d7806c146104885780632687b2b1146104b857600080fd5b80626a5fa11461039057806314bfd6d0146103e057806316c38b3c14610418575b600080fd5b34801561039c57600080fd5b506103cb6103ab366004613b0a565b805160208183018101805160048252928201919093012091525460ff1681565b60405190151581526020015b60405180910390f35b3480156103ec57600080fd5b506104006103fb366004613b3e565b610c0b565b6040516001600160a01b0390911681526020016103d7565b34801561042457600080fd5b50610438610433366004613b65565b610c35565b005b34801561044657600080fd5b50610438610455366004613b9e565b610c80565b34801561046657600080fd5b5061047a610475366004613b3e565b610e43565b6040516103d7929190613c11565b34801561049457600080fd5b506103cb6104a3366004613b9e565b60096020526000908152604090205460ff1681565b3480156104c457600080fd5b506104386104d3366004613cc9565b610ef2565b3480156104e457600080fd5b506104386104f3366004613d66565b611207565b34801561050457600080fd5b5061050e600d5481565b6040519081526020016103d7565b34801561052857600080fd5b50610438610537366004613b3e565b611244565b34801561054857600080fd5b50610595610557366004613b0a565b805180820160209081018051600180835293830192909401919091209290528154908201546002909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016103d7565b3480156105c757600080fd5b5061050e600181565b3480156105dc57600080fd5b506104386105eb366004613d66565b611302565b3480156105fc57600080fd5b5061043861060b366004613d8f565b61139e565b34801561061c57600080fd5b5061050e61062b366004613e86565b611a8f565b34801561063c57600080fd5b5061050e600f5481565b34801561065257600080fd5b50610438610661366004613b9e565b611ad6565b34801561067257600080fd5b50600e546103cb9060ff1681565b34801561068c57600080fd5b506106b461069b366004613b3e565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016103d7565b3480156106d557600080fd5b506104386106e4366004613ec1565b611b5c565b3480156106f557600080fd5b5061050e610704366004613ef4565b611d69565b34801561071557600080fd5b506011546001600160801b03165b6040516001600160801b0390911681526020016103d7565b34801561074757600080fd5b5061050e610756366004613f44565b81516020818401810180516008825292820194820194909420919093529091526000908152604090205481565b34801561078f57600080fd5b5061043861079e366004613f88565b611db7565b3480156107af57600080fd5b506104386107be366004613b9e565b611f12565b3480156107cf57600080fd5b5061050e6107de366004613b0a565b805160208183018101805160078252928201919093012091525481565b34801561080757600080fd5b5061050e610816366004613b9e565b60106020526000908152604090205481565b34801561083457600080fd5b50610848610843366004613b0a565b611ffe565b6040516103d79190614048565b34801561086157600080fd5b50610438610870366004614095565b612078565b34801561088157600080fd5b50610438610890366004613e86565b612140565b3480156108a157600080fd5b506104386108b03660046140eb565b6123b7565b3480156108c157600080fd5b506106b46108d0366004613f44565b8151602081840181018051600682529282019482019490942091909352909152600090815260409020805460019091015482565b34801561091057600080fd5b5061040061091f366004613f44565b6124a7565b34801561093057600080fd5b5061043861093f366004614184565b6124ee565b34801561095057600080fd5b506103cb61095f3660046141ee565b81516020818401810180516002825292820194820194909420919093529091526000908152604090205460ff1681565b34801561099b57600080fd5b5061050e6109aa366004614232565b6126e1565b3480156109bb57600080fd5b5061050e600281565b3480156109d057600080fd5b5061043861279d565b3480156109e557600080fd5b506104386109f4366004614265565b6127de565b348015610a0557600080fd5b50610438610a143660046142d3565b6129f7565b348015610a2557600080fd5b50610a39610a34366004613b9e565b612c58565b6040516103d7919061435d565b348015610a5257600080fd5b50610438612cf2565b348015610a6757600080fd5b506103cb610a76366004613f44565b612d79565b610438610a89366004614370565b612df1565b348015610a9a57600080fd5b50610438610aa93660046143e6565b61316a565b348015610aba57600080fd5b50610438610ac9366004613b0a565b61320b565b348015610ada57600080fd5b50601254610400906001600160a01b031681565b348015610afa57600080fd5b50610438610b09366004613b3e565b61338d565b348015610b1a57600080fd5b50610438610b29366004613f88565b6133c1565b348015610b3a57600080fd5b506103cb610b49366004613b3e565b60146020526000908152604090205460ff1681565b348015610b6a57600080fd5b50601154600160801b90046001600160801b0316610723565b348015610b8f57600080fd5b50610848613516565b610438610ba6366004613b9e565b613578565b348015610bb757600080fd5b50600b54610400906001600160a01b031681565b348015610bd757600080fd5b50600c54610400906001600160a01b031681565b348015610bf757600080fd5b5061050e610c06366004613b0a565b6135e6565b600a8181548110610c1b57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526009602052604090205460ff16610c6d5760405162461bcd60e51b8152600401610c649061441d565b60405180910390fd5b600e805460ff1916911515919091179055565b600b546001600160a01b03163314610caa5760405162461bcd60e51b8152600401610c6490614441565b6001600160a01b03811660009081526009602052604090205460ff16610ccf57600080fd5b6001600160a01b0381166000908152600960205260408120805460ff19169055600a54905b610cff600183614479565b811015610dcc57826001600160a01b0316600a8281548110610d2357610d23614490565b6000918252602090912001546001600160a01b03161415610dba57600a610d4b600184614479565b81548110610d5b57610d5b614490565b600091825260209091200154600a80546001600160a01b039092169183908110610d8757610d87614490565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610dcc565b80610dc4816144a6565b915050610cf4565b50600a805480610dde57610dde6144c1565b6000828152602090819020600019908301810180546001600160a01b03191690559091019091556040516001600160a01b03841681527f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b910160405180910390a15050565b601360205260009081526040902080546001820180546001600160a01b039092169291610e6f906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9b906144d7565b8015610ee85780601f10610ebd57610100808354040283529160200191610ee8565b820191906000526020600020905b815481529060010190602001808311610ecb57829003601f168201915b5050505050905082565b3360009081526009602052604090205460ff16610f215760405162461bcd60e51b8152600401610c649061441d565b85610f5c5760405162461bcd60e51b815260206004820152600b60248201526a195b5c1d1e48185c1c125160aa1b6044820152606401610c64565b6001600160a01b038516610fa55760405162461bcd60e51b815260206004820152601060248201526f7a65726f20617070206164647265737360801b6044820152606401610c64565b600060018888604051610fb9929190614512565b90815260405190819003602001902080549091506001600160a01b03161561100f5760405162461bcd60e51b8152602060048201526009602482015268185c1c08195e1a5cdd60ba1b6044820152606401610c64565b6001600160a01b0386166000908152602081905260409020611032908989613909565b5080546001600160a01b038088166001600160a01b031992831617835560018084018054928916929093169190911790915560028201859055600090611079908490614522565b6001600160401b0381111561109057611090613a16565b6040519080825280602002602001820160405280156110b9578160200160208202803683370190505b50905086816000815181106110d0576110d0614490565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b838110156111685784848281811061110d5761110d614490565b90506020020160208101906111229190613b9e565b8261112e836001614522565b8151811061113e5761113e614490565b6001600160a01b039092166020928302919091019091015280611160816144a6565b9150506110f3565b506111ad89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506001915061360e9050565b856001600160a01b0316876001600160a01b03167fe6814e9c971e79d8cfa0cb8a20ef274c921710f5df7a6e19ca62fb272dc45cf58b8b896040516111f493929190614563565b60405180910390a3505050505050505050565b3360009081526009602052604090205460ff166112365760405162461bcd60e51b8152600401610c649061441d565b6001600160801b0316600f55565b3360009081526010602052604081208054839290611263908490614479565b909155505060405181815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a26000336001600160a01b0316826040515b60006040518083038185875af1925050503d80600081146112eb576040519150601f19603f3d011682016040523d82523d6000602084013e6112f0565b606091505b50509050806112fe57600080fd5b5050565b3360009081526009602052604090205460ff166113315760405162461bcd60e51b8152600401610c649061441d565b60115460408051600160801b9092046001600160801b039081168352831660208301527fec6b0785fd83ba51c66ca8c8bb1e4fbdd02a0cced0457a21583fdf399eb3e000910160405180910390a1601180546001600160801b03928316600160801b029216919091179055565b6016546001146113ad57600080fd5b6000601655600e5460ff16156113ee5760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610c64565b806020015181608001516000611409600d5460029081161490565b61148a5760028083161461148a57600f546001600160a01b03841660009081526010602052604090205410156114785760405162461bcd60e51b81526020600482015260146024820152731b195cdcc81d1a185b881b5a5b88189d5919d95d60621b6044820152606401610c64565b620186a05a6114879190614522565b90505b600b546001600160a01b031633146114b45760405162461bcd60e51b8152600401610c6490614441565b60208401516001600160a01b03871615806114e05750806001600160a01b0316876001600160a01b0316145b61151d5760405162461bcd60e51b815260206004820152600e60248201526d77726f6e672066616c6c6261636b60901b6044820152606401610c64565b60048660405161152d9190614587565b9081526040519081900360200190205460ff16156115795760405162461bcd60e51b8152602060048201526009602482015268189b1858dadb1a5cdd60ba1b6044820152606401610c64565b600d546001908116146115fa576002866040516115969190614587565b90815260408051602092819003830190206001600160a01b038c166000908152925290205460ff166115fa5760405162461bcd60e51b815260206004820152600d60248201526c3737903832b936b4b9b9b4b7b760991b6044820152606401610c64565b600061161486600001518388604001518960600151611a8f565b60008181526014602052604090205490915060ff16156116675760405162461bcd60e51b815260206004820152600e60248201526d195e1958c818dbdb5c1b195d195960921b6044820152606401610c64565b60006060601260009054906101000a90046001600160a01b03166001600160a01b031663978802398d8d878c604001518d606001516040518663ffffffff1660e01b81526004016116bc9594939291906145a3565b6000604051808303816000875af19250505080156116fc57506040513d6000823e601f3d908101601f191682016040526116f991908101906145e1565b60015b61176857611708614678565b806308c379a0141561172f575061171d614694565b806117285750611731565b905061176e565b505b3d80801561175b576040519150601f19603f3d011682016040523d82523d6000602084013e611760565b606091505b50905061176e565b90925090505b8b6001600160a01b0316846001600160a01b031689600001517f0a2dd9a3c77dd69c3b4a5c5ef91fe5f43dfa5365029792e918b9db16ad2c35aa8b604001518c6060015187876040516117c4949392919061471d565b60405180910390a45080156117f1576000828152601460205260409020805460ff1916600117905561197b565b6001600160a01b0389166118bd576040805180820182526001600160a01b038d8116825260208083018e815260008781526013835294909420835181546001600160a01b03191693169290921782559251805192939192611858926001850192019061398d565b509050508a6001600160a01b0316836001600160a01b031688600001517fdad73de9dcb4c7934ccf673a532ca1547846f401631886090cb5c83c2e9ccd498a604001518b606001518f6040516118b09392919061474e565b60405180910390a461197b565b601580549060006118cd836144a6565b91905055508660400151896001600160a01b0316846001600160a01b03167fa17aef042e1a5dd2b8e68f0d0d92f9a6a0b35dc25be1d12c0cb3135bfd8951c963a35fe8bf60e01b8f8f604051602401611927929190613c11565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506000808e60155460405161197295949392919061476d565b60405180910390a45b505081159050611a80576011546000906119a590600160801b90046001600160801b03163a614522565b5a6119b09084614479565b6119ba91906147bb565b6001600160a01b038516600090815260106020526040902054909150818111611a185760405162461bcd60e51b815260206004820152601060248201526f1b9bc8195b9bdd59da08189d5919d95d60821b6044820152606401610c64565b611a228282614479565b6001600160a01b03861660009081526010602052604081209190915560118054849290611a599084906001600160801b03166147da565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555050505b50506001601655505050505050565b604080516020808201969096526001600160a01b03949094168482015260608401929092526080808401919091528151808403909101815260a09092019052805191012090565b600b546001600160a01b03163314611b005760405162461bcd60e51b8152600401610c6490614441565b600c80546001600160a01b0319166001600160a01b03838116918217909255600b54604051428152919216907f587ad0bc9a6955b6c850bc4f90ab8c66b32e2a6919d4244e459ac74ffa4a88849060200160405180910390a350565b6001600160a01b03821660009081526020819052604081208054611b7f906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611bab906144d7565b8015611bf85780601f10611bcd57610100808354040283529160200191611bf8565b820191906000526020600020905b815481529060010190602001808311611bdb57829003601f168201915b505050505090506000600182604051611c119190614587565b90815260405190819003602001902080549091506001600160a01b03908116908516148015611c4857506001600160a01b03841615155b611c645760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b0316331480611c89575060018101546001600160a01b031633145b611ca55760405162461bcd60e51b8152600401610c649061482c565b6001600160a01b03831660009081526020819052604090208054611cc8906144d7565b159050611d0b5760405162461bcd60e51b81526020600482015260116024820152701b995dc8185c1c081a5cc81a5b9a5d1959607a1b6044820152606401610c64565b80546001600160a01b0319166001600160a01b038481169182178355604051908616907fd037ce9f8e96b2c7cdea421a50a484949e5f9e1e4914834059493cbfbf65862290611d5b90869061435d565b60405180910390a350505050565b6000611dae85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792508691506137509050565b95945050505050565b6001600160a01b03821660009081526020819052604081208054611dda906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e06906144d7565b8015611e535780601f10611e2857610100808354040283529160200191611e53565b820191906000526020600020905b815481529060010190602001808311611e3657829003601f168201915b505050505090506000600182604051611e6c9190614587565b90815260405190819003602001902080549091506001600160a01b03908116908516148015611ea357506001600160a01b03841615155b611ebf5760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b0316331480611ee4575060018101546001600160a01b031633145b611f005760405162461bcd60e51b8152600401610c649061482c565b611f0c8284600161360e565b50505050565b600b546001600160a01b03163314611f3c5760405162461bcd60e51b8152600401610c6490614441565b6001600160a01b03811660009081526009602052604090205460ff1615611f6257600080fd5b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600a805491820181559093527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920180546001600160a01b0319168417905590519182527fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba910160405180910390a150565b60606003826040516120109190614587565b908152604080519182900360209081018320805480830285018301909352828452919083018282801561206c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161204e575b50505050509050919050565b3360009081526009602052604090205460ff166120a75760405162461bcd60e51b8152600401610c649061441d565b60005b82811015611f0c573063bf5d3f248585848181106120ca576120ca614490565b90506020028101906120dc919061484c565b856040518463ffffffff1660e01b81526004016120fb93929190614892565b600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b505050508080612138906144a6565b9150506120aa565b600061214e85858585611a8f565b60008181526014602052604090205490915060ff16156121a15760405162461bcd60e51b815260206004820152600e60248201526d195e1958c818dbdb5c1b195d195960921b6044820152606401610c64565b600081815260136020526040902080546001600160a01b03166121f85760405162461bcd60e51b815260206004820152600f60248201526e1b9bc81c995d1c9e481c9958dbdc99608a1b6044820152606401610c64565b80546001820180546001600160a01b039092169160009190612219906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612245906144d7565b80156122925780601f1061226757610100808354040283529160200191612292565b820191906000526020600020905b81548152906001019060200180831161227557829003601f168201915b505086546001600160a01b031916875550506040805160208101918290526000908190529293506122c89260018701925061398d565b50601254604051639788023960e01b81526000916001600160a01b03169063978802399061230290869086908d908d908d906004016145a3565b6000604051808303816000875af1158015612321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261234991908101906145e1565b5090508061235657600080fd5b60008581526014602052604090819020805460ff19166001179055516001600160a01b038916908a907f819e22d91cf6246af3647f0722340d66b71cae69d9c6b1cbbf015ed0ec46c9c4906111f4908b908b90918252602082015260400190565b3360009081526009602052604090205460ff166123e65760405162461bcd60e51b8152600401610c649061441d565b8483811480156123f557508082145b6123fe57600080fd5b60005b8181101561249d57604051806040016040528087878481811061242657612426614490565b90506020020135815260200185858481811061244457612444614490565b90506020020135815250600560008a8a8581811061246457612464614490565b60209081029290920135835250818101929092526040016000208251815591015160019091015580612495816144a6565b915050612401565b5050505050505050565b815160208184018101805160038252928201918501919091209190528054829081106124d257600080fd5b6000918252602090912001546001600160a01b03169150829050565b3360009081526009602052604090205460ff1661251d5760405162461bcd60e51b8152600401610c649061441d565b6001600160a01b03861660009081526020819052604081208054612540906144d7565b80601f016020809104026020016040519081016040528092919081815260200182805461256c906144d7565b80156125b95780601f1061258e576101008083540402835291602001916125b9565b820191906000526020600020905b81548152906001019060200180831161259c57829003601f168201915b5050505050905060006001826040516125d29190614587565b90815260405190819003602001902080549091506001600160a01b0390811690891614801561260957506001600160a01b03881615155b6126255760405162461bcd60e51b8152600401610c6490614805565b8483811461263257600080fd5b876007846040516126439190614587565b9081526040519081900360200190205560005b818110156126d55785858281811061267057612670614490565b905060200201356008856040516126879190614587565b908152602001604051809103902060008a8a858181106126a9576126a9614490565b9050602002013581526020019081526020016000208190555080806126cd906144a6565b915050612656565b50505050505050505050565b6001600160a01b03831660009081526020819052604081208054829190612707906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612733906144d7565b80156127805780601f1061275557610100808354040283529160200191612780565b820191906000526020600020905b81548152906001019060200180831161276357829003601f168201915b50505050509050612792818585613750565b9150505b9392505050565b601180546fffffffffffffffffffffffffffffffff198116909155600b546040516001600160801b03909216916000916001600160a01b03169083906112ae565b6001600160a01b03851660009081526020819052604081208054612801906144d7565b80601f016020809104026020016040519081016040528092919081815260200182805461282d906144d7565b801561287a5780601f1061284f5761010080835404028352916020019161287a565b820191906000526020600020905b81548152906001019060200180831161285d57829003601f168201915b5050505050905060006001826040516128939190614587565b90815260405190819003602001902080549091506001600160a01b039081169088161480156128ca57506001600160a01b03871615155b6128e65760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b031633148061290b575060018101546001600160a01b031633145b6129275760405162461bcd60e51b8152600401610c649061482c565b6001600160a01b03861615612954576001810180546001600160a01b0319166001600160a01b0388161790555b6002810185905582156129a1576129a1828585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506001925061360e915050565b856001600160a01b0316876001600160a01b03167fe6814e9c971e79d8cfa0cb8a20ef274c921710f5df7a6e19ca62fb272dc45cf584886040516129e69291906148b8565b60405180910390a350505050505050565b3360009081526009602052604090205460ff16612a265760405162461bcd60e51b8152600401610c649061441d565b6001600160a01b03871660009081526020819052604081208054612a49906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612a75906144d7565b8015612ac25780601f10612a9757610100808354040283529160200191612ac2565b820191906000526020600020905b815481529060010190602001808311612aa557829003601f168201915b505050505090506000600182604051612adb9190614587565b90815260405190819003602001902080549091506001600160a01b03908116908a16148015612b1257506001600160a01b03891615155b612b2e5760405162461bcd60e51b8152600401610c6490614805565b600280820154811614612b725760405162461bcd60e51b815260206004820152600c60248201526b199b1859c81b9bdd081cd95d60a21b6044820152606401610c64565b868581148015612b8157508084145b612b8a57600080fd5b6000600684604051612b9c9190614587565b9081526020016040518091039020905060005b82811015612c4a5760405180604001604052808a8a84818110612bd457612bd4614490565b905060200201358152602001888884818110612bf257612bf2614490565b905060200201358152508260008d8d85818110612c1157612c11614490565b60209081029290920135835250818101929092526040016000208251815591015160019091015580612c42816144a6565b915050612baf565b505050505050505050505050565b60006020819052908152604090208054612c71906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612c9d906144d7565b8015612cea5780601f10612cbf57610100808354040283529160200191612cea565b820191906000526020600020905b815481529060010190602001808311612ccd57829003601f168201915b505050505081565b600c546001600160a01b03163314612d0957600080fd5b600c54600b546040514281526001600160a01b0392831692909116907fa2e29fe96457476993f3188189d22408c86df0c977ec90a31b979c899800d0659060200160405180910390a3600c8054600b80546001600160a01b03199081166001600160a01b03841617909155169055565b600080600884604051612d8c9190614587565b908152604080516020928190038301902060008681529252902054905060018082161415612dbe576001915050612deb565b600784604051612dce9190614587565b9081526040519081900360200190205490506001808216145b9150505b92915050565b601654600114612e0057600080fd5b6000601655600e5460ff1615612e415760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610c64565b6001600160a01b0383161580612e5f57506001600160a01b03831633145b612e9c5760405162461bcd60e51b815260206004820152600e60248201526d77726f6e672066616c6c6261636b60901b6044820152606401610c64565b3360009081526020819052604081208054612eb6906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612ee2906144d7565b8015612f2f5780601f10612f0457610100808354040283529160200191612f2f565b820191906000526020600020905b815481529060010190602001808311612f1257829003601f168201915b50505050509050600481604051612f469190614587565b9081526040519081900360200190205460ff1615612f925760405162461bcd60e51b8152602060048201526009602482015268189b1858dadb1a5cdd60ba1b6044820152606401610c64565b6000612fa3600d5460019081161490565b90508061301557600282604051612fba9190614587565b9081526040805160209281900383019020336000908152925290205460ff166130155760405162461bcd60e51b815260206004820152600d60248201526c3737903832b936b4b9b9b4b7b760991b6044820152606401610c64565b600d546002908116146130ee5760006001836040516130349190614587565b90815260200160405180910390209050818015613059575080546001600160a01b0316155b8061306d575080546001600160a01b031633145b6130895760405162461bcd60e51b8152600401610c6490614805565b60018085161480156130a4575080546001600160a01b031633145b156130b3578060020154841793505b600280851614156130dc5760006130cb84878a613750565b90506130d68161383d565b506130ec565b34156130ec576130ec600061383d565b505b601580549060006130fe836144a6565b919050555083886001600160a01b0316336001600160a01b03167fa17aef042e1a5dd2b8e68f0d0d92f9a6a0b35dc25be1d12c0cb3135bfd8951c98a8a8a8989601554604051613153969594939291906148da565b60405180910390a450506001601655505050505050565b3360009081526009602052604090205460ff166131995760405162461bcd60e51b8152600401610c649061441d565b80600484846040516131ac929190614512565b908152604051908190036020018120805492151560ff19909316929092179091557f8450ad9faca1edf7a8a033ed0adf98a354d14b22658565ca76f3e11e881947c1906131fe90859085908590614892565b60405180910390a1505050565b600060028260405161321d9190614587565b90815260200160405180910390209050600060038360405161323f9190614587565b9081526040519081900360200190208054909150806000805b828110156133355784818154811061327257613272614490565b60009182526020808320909101546001600160a01b03168083529088905260409091205490925060ff16156132b357806132ab816144a6565b915050613258565b826132bd8161492a565b9350508483815481106132d2576132d2614490565b9060005260206000200160009054906101000a90046001600160a01b031685828154811061330257613302614490565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613258565b50815b838110156133845784805480613350576133506144c1565b600082815260209020810160001990810180546001600160a01b03191690550190558061337c816144a6565b915050613338565b50505050505050565b3360009081526009602052604090205460ff166133bc5760405162461bcd60e51b8152600401610c649061441d565b600d55565b6001600160a01b038216600090815260208190526040812080546133e4906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054613410906144d7565b801561345d5780601f106134325761010080835404028352916020019161345d565b820191906000526020600020905b81548152906001019060200180831161344057829003601f168201915b5050505050905060006001826040516134769190614587565b90815260405190819003602001902080549091506001600160a01b039081169085161480156134ad57506001600160a01b03841615155b6134c95760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b03163314806134ee575060018101546001600160a01b031633145b61350a5760405162461bcd60e51b8152600401610c649061482c565b611f0c8284600061360e565b6060600a80548060200260200160405190810160405280929190818152602001828054801561356e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613550575b5050505050905090565b6001600160a01b038116600090815260106020526040812080543492906135a0908490614522565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b60006003826040516135f89190614587565b9081526040519081900360200190205492915050565b60006002846040516136209190614587565b9081526020016040518091039020905060006003856040516136429190614587565b90815260405190819003602001902090506000805b85518110156133845785818151811061367257613672614490565b6020908102919091018101516001600160a01b03811660009081529186905260409091205490925060ff16151585151514156136ad5761373e565b84156136df5782546001810184556000848152602090200180546001600160a01b0319166001600160a01b0384161790555b6001600160a01b03821660008181526020869052604090819020805460ff1916881515179055517f5059f2158bd5a3ba277fdb58bf30871e09bae3987abede6055be2e87bbf7f79690613735908a908990614941565b60405180910390a25b80613748816144a6565b915050613657565b6000806006856040516137639190614587565b9081526040805160209281900383018120600088815290845282902081830190925281548082526001909201549281018390529250906137a38787612d79565b156137c6576137b281866147bb565b6137bc9083614522565b9350505050612796565b60008681526005602090815260408083208151808301909252805480835260019091015492820183905290929091908286116138025782613804565b855b905060008286116138155782613817565b855b9050613823818b6147bb565b61382d9083614522565b9c9b505050505050505050505050565b803410156138815760405162461bcd60e51b81526020600482015260116024820152706e6f20656e6f756768207372632066656560781b6044820152606401610c64565b80156138e957600b546040516000916001600160a01b03169083908381818185875af1925050503d80600081146138d4576040519150601f19603f3d011682016040523d82523d6000602084013e6138d9565b606091505b50509050806138e757600080fd5b505b80341115613906576000336138fe8334614479565b6040516112ae565b50565b828054613915906144d7565b90600052602060002090601f016020900481019282613937576000855561397d565b82601f106139505782800160ff1982351617855561397d565b8280016001018555821561397d579182015b8281111561397d578235825591602001919060010190613962565b50613989929150613a01565b5090565b828054613999906144d7565b90600052602060002090601f0160209004810192826139bb576000855561397d565b82601f106139d457805160ff191683800117855561397d565b8280016001018555821561397d579182015b8281111561397d5782518255916020019190600101906139e6565b5b808211156139895760008155600101613a02565b634e487b7160e01b600052604160045260246000fd5b60a081018181106001600160401b0382111715613a4b57613a4b613a16565b60405250565b601f8201601f191681016001600160401b0381118282101715613a7657613a76613a16565b6040525050565b60006001600160401b03821115613a9657613a96613a16565b50601f01601f191660200190565b6000613aaf83613a7d565b604051613abc8282613a51565b809250848152858585011115613ad157600080fd5b8484602083013760006020868301015250509392505050565b600082601f830112613afb57600080fd5b61279683833560208501613aa4565b600060208284031215613b1c57600080fd5b81356001600160401b03811115613b3257600080fd5b612de784828501613aea565b600060208284031215613b5057600080fd5b5035919050565b801515811461390657600080fd5b600060208284031215613b7757600080fd5b813561279681613b57565b80356001600160a01b0381168114613b9957600080fd5b919050565b600060208284031215613bb057600080fd5b61279682613b82565b60005b83811015613bd4578181015183820152602001613bbc565b83811115611f0c5750506000910152565b60008151808452613bfd816020860160208601613bb9565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090613c3590830184613be5565b949350505050565b60008083601f840112613c4f57600080fd5b5081356001600160401b03811115613c6657600080fd5b602083019150836020828501011115613c7e57600080fd5b9250929050565b60008083601f840112613c9757600080fd5b5081356001600160401b03811115613cae57600080fd5b6020830191508360208260051b8501011115613c7e57600080fd5b600080600080600080600060a0888a031215613ce457600080fd5b87356001600160401b0380821115613cfb57600080fd5b613d078b838c01613c3d565b9099509750879150613d1b60208b01613b82565b9650613d2960408b01613b82565b955060608a0135945060808a0135915080821115613d4657600080fd5b50613d538a828b01613c85565b989b979a50959850939692959293505050565b600060208284031215613d7857600080fd5b81356001600160801b038116811461279657600080fd5b6000806000806000858703610120811215613da957600080fd5b613db287613b82565b955060208701356001600160401b0380821115613dce57600080fd5b818901915089601f830112613de257600080fd5b613df18a833560208501613aa4565b9650613dff60408a01613b82565b95506060890135915080821115613e1557600080fd5b50613e2289828a01613aea565b93505060a0607f1982011215613e3757600080fd5b50604051613e4481613a2c565b60808701358152613e5760a08801613b82565b602082015260c0870135604082015260e087013560608201526101009096013560808701525092959194509290565b60008060008060808587031215613e9c57600080fd5b84359350613eac60208601613b82565b93969395505050506040820135916060013590565b60008060408385031215613ed457600080fd5b613edd83613b82565b9150613eeb60208401613b82565b90509250929050565b60008060008060608587031215613f0a57600080fd5b84356001600160401b03811115613f2057600080fd5b613f2c87828801613c3d565b90989097506020870135966040013595509350505050565b60008060408385031215613f5757600080fd5b82356001600160401b03811115613f6d57600080fd5b613f7985828601613aea565b95602094909401359450505050565b60008060408385031215613f9b57600080fd5b613fa483613b82565b91506020808401356001600160401b0380821115613fc157600080fd5b818601915086601f830112613fd557600080fd5b813581811115613fe757613fe7613a16565b8060051b9150604051613ffc85840182613a51565b8181529183018401918481018984111561401557600080fd5b938501935b838510156140385761402b85613b82565b815293850193850161401a565b5080955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b818110156140895783516001600160a01b031683529284019291840191600101614064565b50909695505050505050565b6000806000604084860312156140aa57600080fd5b83356001600160401b038111156140c057600080fd5b6140cc86828701613c85565b90945092505060208401356140e081613b57565b809150509250925092565b6000806000806000806060878903121561410457600080fd5b86356001600160401b038082111561411b57600080fd5b6141278a838b01613c85565b9098509650602089013591508082111561414057600080fd5b61414c8a838b01613c85565b9096509450604089013591508082111561416557600080fd5b5061417289828a01613c85565b979a9699509497509295939492505050565b6000806000806000806080878903121561419d57600080fd5b6141a687613b82565b95506020870135945060408701356001600160401b03808211156141c957600080fd5b6141d58a838b01613c85565b9096509450606089013591508082111561416557600080fd5b6000806040838503121561420157600080fd5b82356001600160401b0381111561421757600080fd5b61422385828601613aea565b925050613eeb60208401613b82565b60008060006060848603121561424757600080fd5b61425084613b82565b95602085013595506040909401359392505050565b60008060008060006080868803121561427d57600080fd5b61428686613b82565b945061429460208701613b82565b93506040860135925060608601356001600160401b038111156142b657600080fd5b6142c288828901613c85565b969995985093965092949392505050565b60008060008060008060006080888a0312156142ee57600080fd5b6142f788613b82565b965060208801356001600160401b038082111561431357600080fd5b61431f8b838c01613c85565b909850965060408a013591508082111561433857600080fd5b6143448b838c01613c85565b909650945060608a0135915080821115613d4657600080fd5b6020815260006127966020830184613be5565b60008060008060008060a0878903121561438957600080fd5b61439287613b82565b955060208701356001600160401b038111156143ad57600080fd5b6143b989828a01613c3d565b90965094506143cc905060408801613b82565b925060608701359150608087013590509295509295509295565b6000806000604084860312156143fb57600080fd5b83356001600160401b0381111561441157600080fd5b6140cc86828701613c3d565b6020808252600a908201526937b7363c9030b236b4b760b11b604082015260600190565b6020808252600890820152676f6e6c79204d504360c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561448b5761448b614463565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156144ba576144ba614463565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181811c908216806144eb57607f821691505b6020821081141561450c57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6000821982111561453557614535614463565b500190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061457760408301858761453a565b9050826020830152949350505050565b60008251614599818460208701613bb9565b9190910192915050565b600060018060a01b03808816835260a060208401526145c560a0840188613be5565b9516604083015250606081019290925260809091015292915050565b600080604083850312156145f457600080fd5b82516145ff81613b57565b60208401519092506001600160401b0381111561461b57600080fd5b8301601f8101851361462c57600080fd5b805161463781613a7d565b6040516146448282613a51565b82815287602084860101111561465957600080fd5b61466a836020830160208701613bb9565b809450505050509250929050565b600060033d11156146915760046000803e5060005160e01c5b90565b600060443d10156146a25790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156146d157505050505090565b82850191508151818111156146e95750505050505090565b843d87010160208285010111156147035750505050505090565b61471260208286010187613a51565b509095945050505050565b84815283602082015282151560408201526080606082015260006147446080830184613be5565b9695505050505050565b838152826020820152606060408201526000611dae6060830184613be5565b60a08152600061478060a0830188613be5565b6001600160a01b03871660208401526040830186905282810360608401526147a88186613be5565b9150508260808301529695505050505050565b60008160001904831182151516156147d5576147d5614463565b500290565b60006001600160801b038083168185168083038211156147fc576147fc614463565b01949350505050565b6020808252600d908201526c185c1c081b9bdd08195e1a5cdd609a1b604082015260600190565b602080825260069082015265199bdc989a5960d21b604082015260600190565b6000808335601e1984360301811261486357600080fd5b8301803591506001600160401b0382111561487d57600080fd5b602001915036819003821315613c7e57600080fd5b6040815260006148a660408301858761453a565b90508215156020830152949350505050565b6040815260006148cb6040830185613be5565b90508260208301529392505050565b60a0815260006148ee60a08301888a61453a565b6001600160a01b03871660208401526040830186905282810360608401526149168186613be5565b915050826080830152979650505050505050565b60008161493957614939614463565b506000190190565b6040815260006149546040830185613be5565b90508215156020830152939250505056fea26469706673582212204e1b96aa8e938dce9d9038624fb950883d1b48c45135400861d92998f26661f864736f6c634300080a0033608060405234801561001057600080fd5b50600380546001600160a01b031916331790556104a0806100326000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806302d05d3f146100465780639788023914610076578063d0496d6a14610097575b600080fd5b600354610059906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610089610084366004610221565b6100d7565b60405161006d9291906102f7565b6000546001546002546100b2926001600160a01b0316919083565b604080516001600160a01b03909416845260208401929092529082015260600161006d565b6003546000906060906001600160a01b031633146101135760006040518060600160405280602a8152602001610441602a9139915091506101fa565b604080516060810182526001600160a01b0380881680835260208301889052918301869052600080546001600160a01b031916909217909155600186905560028590559051639abaf47960e01b815290891690639abaf4799061017c908a908a90600401610333565b6000604051808303816000875af115801561019b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101c39190810190610378565b60408051606081018252600080825260208201819052910181905280546001600160a01b0319168155600181905560025590925090505b965096945050505050565b80356001600160a01b038116811461021c57600080fd5b919050565b60008060008060008060a0878903121561023a57600080fd5b61024387610205565b9550602087013567ffffffffffffffff8082111561026057600080fd5b818901915089601f83011261027457600080fd5b81358181111561028357600080fd5b8a602082850101111561029557600080fd5b6020830197508096505050506102ad60408801610205565b925060608701359150608087013590509295509295509295565b60005b838110156102e25781810151838201526020016102ca565b838111156102f1576000848401525b50505050565b8215158152604060208201526000825180604084015261031e8160608501602087016102c7565b601f01601f1916919091016060019392505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561038b57600080fd5b8251801515811461039b57600080fd5b602084015190925067ffffffffffffffff808211156103b957600080fd5b818501915085601f8301126103cd57600080fd5b8151818111156103df576103df610362565b604051601f8201601f19908116603f0116810190838211818310171561040757610407610362565b8160405282815288602084870101111561042057600080fd5b6104318360208301602088016102c7565b8095505050505050925092905056fe416e7943616c6c4578656375746f723a2063616c6c6572206973206e6f74207468652063726561746f72a2646970667358221220ba584322a3bbbe0ff4a3893e9de722b0475cfd58467a20f7d12e2d9998b0f81764736f6c634300080a0033c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000e2eaa2d2497798c0f9ec76120841de3131fbde6600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

Deployed ByteCode Sourcemap

1928:25875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3753:43;;;;;;;;;;-1:-1:-1;3753:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1967:14:1;;1960:22;1942:41;;1930:2;1915:18;3753:43:0;;;;;;;;4140:23;;;;;;;;;;-1:-1:-1;4140:23:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2343:32:1;;;2325:51;;2313:2;2298:18;4140:23:0;2179:203:1;8383:87:0;;;;;;;;;;-1:-1:-1;8383:87:0;;;;;:::i;:::-;;:::i;:::-;;17901:421;;;;;;;;;;-1:-1:-1;17901:421:0;;;;;:::i;:::-;;:::i;4513:54::-;;;;;;;;;;-1:-1:-1;4513:54:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4094:39::-;;;;;;;;;;-1:-1:-1;4094:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18500:908;;;;;;;;;;-1:-1:-1;18500:908:0;;;;;:::i;:::-;;:::i;16456:116::-;;;;;;;;;;-1:-1:-1;16456:116:0;;;;;:::i;:::-;;:::i;4231:19::-;;;;;;;;;;;;;;;;;;;6301:25:1;;;6289:2;6274:18;4231:19:0;6155:177:1;15013:237:0;;;;;;;;;;-1:-1:-1;15013:237:0;;;;;:::i;:::-;;:::i;3565:45::-;;;;;;;;;;-1:-1:-1;3565:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3565:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;6595:15:1;;;6577:34;;6647:15;;;;6642:2;6627:18;;6620:43;6679:18;;;6672:34;6527:2;6512:18;3565:45:0;6337:375:1;2898:53:0;;;;;;;;;;;;2948:3;2898:53;;16161:160;;;;;;;;;;-1:-1:-1;16161:160:0;;;;;:::i;:::-;;:::i;11354:1998::-;;;;;;;;;;-1:-1:-1;11354:1998:0;;;;;:::i;:::-;;:::i;13538:205::-;;;;;;;;;;-1:-1:-1;13538:205:0;;;;;:::i;:::-;;:::i;4284:31::-;;;;;;;;;;;;;;;;16724:139;;;;;;;;;;-1:-1:-1;16724:139:0;;;;;:::i;:::-;;:::i;4257:18::-;;;;;;;;;;-1:-1:-1;4257:18:0;;;;;;;;3803:54;;;;;;;;;;-1:-1:-1;3803:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;8852:25:1;;;8908:2;8893:18;;8886:34;;;;8825:18;3803:54:0;8678:248:1;20452:516:0;;;;;;;;;;-1:-1:-1;20452:516:0;;;;;:::i;:::-;;:::i;26184:223::-;;;;;;;;;;-1:-1:-1;26184:223:0;;;;;:::i;:::-;;:::i;17233:100::-;;;;;;;;;;-1:-1:-1;17305:8:0;:20;-1:-1:-1;;;;;17305:20:0;17233:100;;;-1:-1:-1;;;;;9912:47:1;;;9894:66;;9882:2;9867:18;17233:100:0;9748:218:1;4017:68:0;;;;;;;;;;-1:-1:-1;4017:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4017:68:0;;;;;;;;;21007:404;;;;;;;;;;-1:-1:-1;21007:404:0;;;;;:::i;:::-;;:::i;17673:190::-;;;;;;;;;;-1:-1:-1;17673:190:0;;;;;:::i;:::-;;:::i;3961:49::-;;;;;;;;;;-1:-1:-1;3961:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4322:50;;;;;;;;;;-1:-1:-1;4322:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;22777:148;;;;;;;;;;-1:-1:-1;22777:148:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15840:207::-;;;;;;;;;;-1:-1:-1;15840:207:0;;;;;:::i;:::-;;:::i;13793:764::-;;;;;;;;;;-1:-1:-1;13793:764:0;;;;;:::i;:::-;;:::i;23803:460::-;;;;;;;;;;-1:-1:-1;23803:460:0;;;;;:::i;:::-;;:::i;3882:72::-;;;;;;;;;;-1:-1:-1;3882:72:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3882:72:0;;;;;;;;;;;;;;;3691:55;;;;;;;;;;-1:-1:-1;3691:55:0;;;;;:::i;:::-;;:::i;25176:672::-;;;;;;;;;;-1:-1:-1;25176:672:0;;;;;:::i;:::-;;:::i;3617:67::-;;;;;;;;;;-1:-1:-1;3617:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3617:67:0;;;;;;;;;;;25883:266;;;;;;;;;;-1:-1:-1;25883:266:0;;;;;:::i;:::-;;:::i;2958:54::-;;;;;;;;;;;;3004:8;2958:54;;15368:210;;;;;;;;;;;;;:::i;19557:719::-;;;;;;;;;;-1:-1:-1;19557:719:0;;;;;:::i;:::-;;:::i;24308:829::-;;;;;;;;;;-1:-1:-1;24308:829:0;;;;;:::i;:::-;;:::i;3450:47::-;;;;;;;;;;-1:-1:-1;3450:47:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16898:200::-;;;;;;;;;;;;;:::i;26455:376::-;;;;;;;;;;-1:-1:-1;26455:376:0;;;;;:::i;:::-;;:::i;9461:1429::-;;;;;;:::i;:::-;;:::i;15621:167::-;;;;;;;;;;-1:-1:-1;15621:167:0;;;;;:::i;:::-;;:::i;23006:751::-;;;;;;;;;;-1:-1:-1;23006:751:0;;;;;:::i;:::-;;:::i;4473:31::-;;;;;;;;;;-1:-1:-1;4473:31:0;;;;-1:-1:-1;;;;;4473:31:0;;;16606:82;;;;;;;;;;-1:-1:-1;16606:82:0;;;;;:::i;:::-;;:::i;21453:408::-;;;;;;;;;;-1:-1:-1;21453:408:0;;;;;:::i;:::-;;:::i;4576:45::-;;;;;;;;;;-1:-1:-1;4576:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17546:92;;;;;;;;;;-1:-1:-1;17614:8:0;:16;-1:-1:-1;;;17614:16:0;;-1:-1:-1;;;;;17614:16:0;17546:92;;18362:97;;;;;;;;;;;;;:::i;14724:153::-;;;;;;:::i;:::-;;:::i;4172:18::-;;;;;;;;;;-1:-1:-1;4172:18:0;;;;-1:-1:-1;;;;;4172:18:0;;;4197:25;;;;;;;;;;-1:-1:-1;4197:25:0;;;;-1:-1:-1;;;;;4197:25:0;;;22577:149;;;;;;;;;;-1:-1:-1;22577:149:0;;;;;:::i;:::-;;:::i;4140:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4140:23:0;;-1:-1:-1;4140:23:0;:::o;8383:87::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;;;;;;;;;8446:6:::1;:16:::0;;-1:-1:-1;;8446:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8383:87::o;17901:421::-;7040:3;;-1:-1:-1;;;;;7040:3:0;7026:10;:17;7018:38;;;;-1:-1:-1;;;7018:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17974:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;17966:24;;;::::0;::::1;;-1:-1:-1::0;;;;;18001:15:0;::::1;18019:5;18001:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;18001:23:0::1;::::0;;18052:6:::1;:13:::0;;18076:181:::1;18100:10;18109:1;18100:6:::0;:10:::1;:::i;:::-;18096:1;:14;18076:181;;;18149:6;-1:-1:-1::0;;;;;18136:19:0::1;:6;18143:1;18136:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18136:9:0::1;:19;18132:114;;;18188:6;18195:10;18204:1;18195:6:::0;:10:::1;:::i;:::-;18188:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18176:6:::1;:9:::0;;-1:-1:-1;;;;;18188:18:0;;::::1;::::0;18183:1;;18176:9;::::1;;;;;:::i;:::-;;;;;;;;;:30;;;;;-1:-1:-1::0;;;;;18176:30:0::1;;;;;-1:-1:-1::0;;;;;18176:30:0::1;;;;;;18225:5;;18132:114;18112:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18076:181;;;;18267:6;:12;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18267:12:0;;;;;;;-1:-1:-1;;;;;;18267:12:0::1;::::0;;;;;;;;18295:19:::1;::::0;-1:-1:-1;;;;;2343:32:1;;2325:51;;18295:19:0::1;::::0;2298:18:1;18295:19:0::1;;;;;;;17955:367;17901:421:::0;:::o;4513:54::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4513:54:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18500:908::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;18714:24;18706:48:::1;;;::::0;-1:-1:-1;;;18706:48:0;;20882:2:1;18706:48:0::1;::::0;::::1;20864:21:1::0;20921:2;20901:18;;;20894:30;-1:-1:-1;;;20940:18:1;;;20933:41;20991:18;;18706:48:0::1;20680:335:1::0;18706:48:0::1;-1:-1:-1::0;;;;;18773:18:0;::::1;18765:47;;;::::0;-1:-1:-1;;;18765:47:0;;21222:2:1;18765:47:0::1;::::0;::::1;21204:21:1::0;21261:2;21241:18;;;21234:30;-1:-1:-1;;;21280:18:1;;;21273:46;21336:18;;18765:47:0::1;21020:340:1::0;18765:47:0::1;18825:24;18852:9;18862:6;;18852:17;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;18888:10;;18852:17;;-1:-1:-1;;;;;;18888:10:0::1;:24:::0;18880:46:::1;;;::::0;-1:-1:-1;;;18880:46:0;;21845:2:1;18880:46:0::1;::::0;::::1;21827:21:1::0;21884:1;21864:18;;;21857:29;-1:-1:-1;;;21902:18:1;;;21895:39;21951:18;;18880:46:0::1;21643:332:1::0;18880:46:0::1;-1:-1:-1::0;;;;;18939:19:0;::::1;:13;:19:::0;;;::::1;::::0;;;;;;:28:::1;::::0;18961:6;;18939:28:::1;:::i;:::-;-1:-1:-1::0;18980:17:0;;-1:-1:-1;;;;;18980:17:0;;::::1;-1:-1:-1::0;;;;;;18980:17:0;;::::1;;::::0;;;19008:15;;::::1;:24:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;19043:15:::1;::::0;::::1;:24:::0;;;18980:10:::1;::::0;19123:19:::1;::::0;19125:10;;19123:19:::1;:::i;:::-;-1:-1:-1::0;;;;;19109:34:0::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;19109:34:0::1;;19080:63;;19169:4;19154:9;19164:1;19154:12;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1::0;;;;;19154:19:0::1;;;-1:-1:-1::0;;;;;19154:19:0::1;;;::::0;::::1;19189:9;19184:105;19204:21:::0;;::::1;19184:105;;;19264:10;;19275:1;19264:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19247:9:::0;19257:3:::1;:1:::0;19259::::1;19257:3;:::i;:::-;19247:14;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19247:30:0;;::::1;:14;::::0;;::::1;::::0;;;;;;;:30;19227:3;::::1;::::0;::::1;:::i;:::-;;;;19184:105;;;;19299:41;19316:6;;19299:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;19324:9:0;;-1:-1:-1;19335:4:0::1;::::0;-1:-1:-1;19299:16:0::1;::::0;-1:-1:-1;19299:41:0:i:1;:::-;19385:6;-1:-1:-1::0;;;;;19358:42:0::1;19379:4;-1:-1:-1::0;;;;;19358:42:0::1;;19371:6;;19393;19358:42;;;;;;;;:::i;:::-;;;;;;;;18695:713;;18500:908:::0;;;;;;;:::o;16456:116::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16535:29:0::1;:16;:29:::0;16456:116::o;15013:237::-;15084:10;15068:27;;;;:15;:27;;;;;:38;;15099:7;;15068:27;:38;;15099:7;;15068:38;:::i;:::-;;;;-1:-1:-1;;15122:29:0;;6301:25:1;;;15131:10:0;;15122:29;;6289:2:1;6274:18;15122:29:0;;;;;;;15163:12;15180:10;-1:-1:-1;;;;;15180:15:0;15203:7;15180:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15162:53;;;15234:7;15226:16;;;;;;15057:193;15013:237;:::o;16161:160::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;16248:8:::1;:16:::0;16234:41:::1;::::0;;-1:-1:-1;;;16248:16:0;;::::1;-1:-1:-1::0;;;;;16248:16:0;;::::1;23145:34:1::0;;23215:15;;23210:2;23195:18;;23188:43;16234:41:0::1;::::0;23065:18:1;16234:41:0::1;;;;;;;16286:8;:27:::0;;-1:-1:-1;;;;;16286:27:0;;::::1;-1:-1:-1::0;;;16286:27:0::1;::::0;::::1;::::0;;;::::1;::::0;;16161:160::o;11354:1998::-;4717:8;;4729:1;4717:13;4709:22;;;;;;4753:1;4742:8;:12;7309:6:::1;::::0;::::1;;7308:7;7300:26;;;::::0;-1:-1:-1;;;7300:26:0;;23444:2:1;7300:26:0::1;::::0;::::1;23426:21:1::0;23483:1;23463:18;;;23456:29;-1:-1:-1;;;23501:18:1;;;23494:36;23547:18;;7300:26:0::1;23242:329:1::0;7300:26:0::1;11560:4:::2;:9;;;11571:4;:10;;;7542:15;7631:23;7638:4;;3229:8;13459:18:::0;;;13458:33;;13360:139;7631:23:::2;7626:267;;3004:8;13459:18:::0;;;13458:33;7671:211:::2;;7766:16;::::0;-1:-1:-1;;;;;7740:22:0;::::2;;::::0;;;:15:::2;:22;::::0;;;;;:42:::2;;7732:75;;;::::0;-1:-1:-1;;;7732:75:0;;23778:2:1;7732:75:0::2;::::0;::::2;23760:21:1::0;23817:2;23797:18;;;23790:30;-1:-1:-1;;;23836:18:1;;;23829:50;23896:18;;7732:75:0::2;23576:344:1::0;7732:75:0::2;3408:6;7836:9;:30;;;;:::i;:::-;7826:40;;7671:211;7040:3:::3;::::0;-1:-1:-1;;;;;7040:3:0::3;7026:10;:17;7018:38;;;;-1:-1:-1::0;;;7018:38:0::3;;;;;;;:::i;:::-;11618:9:::4;::::0;::::4;::::0;-1:-1:-1;;;;;11648:23:0;::::4;::::0;;:45:::4;;;11688:5;-1:-1:-1::0;;;;;11675:18:0::4;:9;-1:-1:-1::0;;;;;11675:18:0::4;;11648:45;11640:72;;;::::0;-1:-1:-1;;;11640:72:0;;24127:2:1;11640:72:0::4;::::0;::::4;24109:21:1::0;24166:2;24146:18;;;24139:30;-1:-1:-1;;;24185:18:1;;;24178:44;24239:18;;11640:72:0::4;23925:338:1::0;11640:72:0::4;11734:12;11747:6;11734:20;;;;;;:::i;:::-;::::0;;;::::4;::::0;;;;;::::4;::::0;;;;::::4;;11733:21;11725:43;;;::::0;-1:-1:-1;;;11725:43:0;;24751:2:1;11725:43:0::4;::::0;::::4;24733:21:1::0;24790:1;24770:18;;;24763:29;-1:-1:-1;;;24808:18:1;;;24801:39;24857:18;;11725:43:0::4;24549:332:1::0;11725:43:0::4;11793:4;::::0;3183:3:::4;13459:18:::0;;;13458:33;11781:122:::4;;11844:16;11861:6;11844:24;;;;;;:::i;:::-;::::0;;;::::4;::::0;;::::4;::::0;;;;;;;;-1:-1:-1;;;;;11844:29:0;::::4;;::::0;;;;;;;;::::4;;11836:55;;;::::0;-1:-1:-1;;;11836:55:0;;25088:2:1;11836:55:0::4;::::0;::::4;25070:21:1::0;25127:2;25107:18;;;25100:30;-1:-1:-1;;;25146:18:1;;;25139:43;25199:18;;11836:55:0::4;24886:337:1::0;11836:55:0::4;11915:14;11932:60;11943:4;:11;;;11956:5;11963:4;:16;;;11981:4;:10;;;11932;:60::i;:::-;12012:21;::::0;;;:13:::4;:21;::::0;;;;;11915:77;;-1:-1:-1;12012:21:0::4;;12011:22;12003:49;;;::::0;-1:-1:-1;;;12003:49:0;;25430:2:1;12003:49:0::4;::::0;::::4;25412:21:1::0;25469:2;25449:18;;;25442:30;-1:-1:-1;;;25488:18:1;;;25481:44;25542:18;;12003:49:0::4;25228:338:1::0;12003:49:0::4;12065:12;12103:19;12141:8;;;;;;;;;-1:-1:-1::0;;;;;12141:8:0::4;-1:-1:-1::0;;;;;12141:16:0::4;;12158:3;12163:5;12170;12177:4;:16;;;12195:4;:10;;;12141:65;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;-1:-1:-1::0;;12141:65:0::4;::::0;::::4;;::::0;::::4;::::0;;;::::4;::::0;::::4;:::i;:::-;;;12137:345;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;12380:6:::0;-1:-1:-1;12137:345:0::4;;;;;;::::0;;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12460:6:0;-1:-1:-1;12137:345:0::4;;;12285:4:::0;;-1:-1:-1;12291:3:0;-1:-1:-1;12137:345:0::4;12532:3;-1:-1:-1::0;;;;;12501:82:0::4;12525:5;-1:-1:-1::0;;;;;12501:82:0::4;12512:4;:11;;;12501:82;12537:4;:16;;;12555:4;:10;;;12567:7;12576:6;12501:82;;;;;;;;;:::i;:::-;;;;;;;;12088:507;12611:7;12607:738;;;12635:21;::::0;;;:13:::4;:21;::::0;;;;:28;;-1:-1:-1;;12635:28:0::4;12659:4;12635:28;::::0;;12607:738:::4;;;-1:-1:-1::0;;;;;12685:23:0;::::4;12681:664;;12752:22;::::0;;;;::::4;::::0;;-1:-1:-1;;;;;12752:22:0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;-1:-1:-1;12725:24:0;;;:16:::4;:24:::0;;;;;;:49;;;;-1:-1:-1;;;;;;12725:49:0::4;::::0;::::4;::::0;;;::::4;::::0;;;;;;12752:22;;12725:24;;:49:::4;::::0;-1:-1:-1;12725:49:0;::::4;::::0;::::4;::::0;::::4;:::i;:::-;;;;;12835:3;-1:-1:-1::0;;;;;12794:82:0::4;12828:5;-1:-1:-1::0;;;;;12794:82:0::4;12815:4;:11;;;12794:82;12840:4;:16;;;12858:4;:10;;;12870:5;12794:82;;;;;;;;:::i;:::-;;;;;;;;12681:664;;;13005:5;:7:::0;;;:5:::4;:7;::::0;::::4;:::i;:::-;;;;;;13222:4;:16;;;13085:9;-1:-1:-1::0;;;;;13032:301:0::4;13061:5;-1:-1:-1::0;;;;;13032:301:0::4;;13136:25;;;13163:3;13168:5;13113:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1::0;;;;;13113:61:0::4;;;;;;;-1:-1:-1::0;;;;;13113:61:0::4;;;;;;;;;;;13201:1;13257::::0;13302:6:::4;13327:5;;13032:301;;;;;;;;;;:::i;:::-;;;;;;;;12681:664;-1:-1:-1::0;;7964:11:0;;;-1:-1:-1;7960:351:0::2;;8051:8;:16:::0;7992:17:::2;::::0;8037:30:::2;::::0;-1:-1:-1;;;8051:16:0;::::2;-1:-1:-1::0;;;;;8051:16:0::2;8037:11;:30;:::i;:::-;8023:9;8013:19;::::0;:7;:19:::2;:::i;:::-;8012:56;;;;:::i;:::-;-1:-1:-1::0;;;;;8100:22:0;::::2;8083:14;8100:22:::0;;;:15:::2;:22;::::0;;;;;7992:76;;-1:-1:-1;8145:18:0;;::::2;8137:47;;;::::0;-1:-1:-1;;;8137:47:0;;29633:2:1;8137:47:0::2;::::0;::::2;29615:21:1::0;29672:2;29652:18;;;29645:30;-1:-1:-1;;;29691:18:1;;;29684:46;29747:18;;8137:47:0::2;29431:340:1::0;8137:47:0::2;8224:18;8233:9:::0;8224:6;:18:::2;:::i;:::-;-1:-1:-1::0;;;;;8199:22:0;::::2;;::::0;;;:15:::2;:22;::::0;;;;:43;;;;8257:8:::2;:42:::0;;8289:9;;8199:22;8257:42:::2;::::0;8289:9;;-1:-1:-1;;;;;8257:42:0::2;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;8257:42:0::2;;;;;-1:-1:-1::0;;;;;8257:42:0::2;;;;;;7977:334;;7960:351;-1:-1:-1::0;;4788:1:0;4777:8;:12;-1:-1:-1;;;;;;11354:1998:0:o;13538:205::-;13686:48;;;;;;;30265:25:1;;;;-1:-1:-1;;;;;30326:32:1;;;;30306:18;;;30299:60;30375:18;;;30368:34;;;;30418:18;;;;30411:34;;;;13686:48:0;;;;;;;;;;30237:19:1;;;;13686:48:0;;13676:59;;;;;;13538:205::o;16724:139::-;7040:3;;-1:-1:-1;;;;;7040:3:0;7026:10;:17;7018:38;;;;-1:-1:-1;;;7018:38:0;;;;;;;:::i;:::-;16785:10:::1;:17:::0;;-1:-1:-1;;;;;;16785:17:0::1;-1:-1:-1::0;;;;;16785:17:0;;::::1;::::0;;::::1;::::0;;;16828:3:::1;::::0;16818:37:::1;::::0;16839:15:::1;6301:25:1::0;;16785:17:0;;16828:3:::1;::::0;16818:37:::1;::::0;6289:2:1;6274:18;16818:37:0::1;;;;;;;16724:139:::0;:::o;20452:516::-;-1:-1:-1;;;;;20549:22:0;;20526:20;20549:22;;;;;;;;;;20526:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20582:24;20609:9;20619:6;20609:17;;;;;;:::i;:::-;;;;;;;;;;;;;;20647:10;;20609:17;;-1:-1:-1;;;;;;20647:10:0;;;:21;;;;:46;;;;-1:-1:-1;;;;;;20672:21:0;;;;20647:46;20639:72;;;;-1:-1:-1;;;20639:72:0;;;;;;;:::i;:::-;20744:3;;-1:-1:-1;;;;;20744:3:0;20730:10;:17;;:50;;-1:-1:-1;20765:15:0;;;;-1:-1:-1;;;;;20765:15:0;20751:10;:29;20730:50;20722:69;;;;-1:-1:-1;;;20722:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20816:22:0;;:13;:22;;;;;;;;;;20810:36;;;;;:::i;:::-;:41;;-1:-1:-1;20802:71:0;;;;-1:-1:-1;;;20802:71:0;;31334:2:1;20802:71:0;;;31316:21:1;31373:2;31353:18;;;31346:30;-1:-1:-1;;;31392:18:1;;;31385:47;31449:18;;20802:71:0;31132:341:1;20802:71:0;20886:20;;-1:-1:-1;;;;;;20886:20:0;-1:-1:-1;;;;;20886:20:0;;;;;;;;20924:36;;;;;;;;;;20935:6;;20924:36;:::i;:::-;;;;;;;;20515:453;;20452:516;;:::o;26184:223::-;26327:7;26354:45;26367:6;;26354:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26375:10:0;;-1:-1:-1;26387:11:0;;-1:-1:-1;26354:12:0;;-1:-1:-1;26354:45:0:i;:::-;26347:52;26184:223;-1:-1:-1;;;;;26184:223:0:o;21007:404::-;-1:-1:-1;;;;;21115:19:0;;21092:20;21115:19;;;;;;;;;;21092:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21145:24;21172:9;21182:6;21172:17;;;;;;:::i;:::-;;;;;;;;;;;;;;21210:10;;21172:17;;-1:-1:-1;;;;;;21210:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;21232:18:0;;;;21210:40;21202:66;;;;-1:-1:-1;;;21202:66:0;;;;;;;:::i;:::-;21301:3;;-1:-1:-1;;;;;21301:3:0;21287:10;:17;;:50;;-1:-1:-1;21322:15:0;;;;-1:-1:-1;;;;;21322:15:0;21308:10;:29;21287:50;21279:69;;;;-1:-1:-1;;;21279:69:0;;;;;;;:::i;:::-;21361:42;21378:6;21386:10;21398:4;21361:16;:42::i;:::-;21081:330;;21007:404;;:::o;17673:190::-;7040:3;;-1:-1:-1;;;;;7040:3:0;7026:10;:17;7018:38;;;;-1:-1:-1;;;7018:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17744:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;17743:16;17735:25;;;::::0;::::1;;-1:-1:-1::0;;;;;17771:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;17771:22:0::1;17789:4;17771:22:::0;;::::1;::::0;;;17804:6:::1;:19:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;17804:19:0::1;::::0;::::1;::::0;;17839:16;;2325:51:1;;;17839:16:0::1;::::0;2298:18:1;17839:16:0::1;;;;;;;17673:190:::0;:::o;22777:148::-;22854:16;22890:19;22910:6;22890:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22883:34;;;;;;;;;;;;;;;22890:27;22883:34;;;22890:27;22883:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22883:34:0;;;;;;;;;;;;;;;;;;;;;;;22777:148;;;:::o;15840:207::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;15937:9:::1;15932:108;15952:18:::0;;::::1;15932:108;;;15992:4;:17;16010:7:::0;;16018:1;16010:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;16022:5;15992:36;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15972:3;;;;;:::i;:::-;;;;15932:108;;13793:764:::0;13902:14;13919:48;13930:7;13939:5;13946:12;13960:6;13919:10;:48::i;:::-;13987:21;;;;:13;:21;;;;;;13902:65;;-1:-1:-1;13987:21:0;;13986:22;13978:49;;;;-1:-1:-1;;;13978:49:0;;25430:2:1;13978:49:0;;;25412:21:1;25469:2;25449:18;;;25442:30;-1:-1:-1;;;25488:18:1;;;25481:44;25542:18;;13978:49:0;25228:338:1;13978:49:0;14040:25;14068:24;;;:16;:24;;;;;14111:9;;-1:-1:-1;;;;;14111:9:0;14103:51;;;;-1:-1:-1;;;14103:51:0;;32540:2:1;14103:51:0;;;32522:21:1;32579:2;32559:18;;;32552:30;-1:-1:-1;;;32598:18:1;;;32591:45;32653:18;;14103:51:0;32338:339:1;14103:51:0;14181:9;;;14222:11;;14201:32;;-1:-1:-1;;;;;14181:9:0;;;;14167:11;;14222;14201:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14271:22:0;;-1:-1:-1;;;;;;14271:22:0;;;-1:-1:-1;;14304:16:0;;;;;;;;;;14291:1;14304:16;;;;14201:32;;-1:-1:-1;14304:16:0;;14271:22;14304:11;;;-1:-1:-1;14304:16:0;:::i;:::-;-1:-1:-1;14351:8:0;;:57;;-1:-1:-1;;;14351:57:0;;14334:12;;-1:-1:-1;;;;;14351:8:0;;:16;;:57;;14368:3;;14373:5;;14380;;14387:12;;14401:6;;14351:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14351:57:0;;;;;;;;;;;;:::i;:::-;14333:75;;;14427:7;14419:16;;;;;;14448:21;;;;:13;:21;;;;;;;:28;;-1:-1:-1;;14448:28:0;14472:4;14448:28;;;14492:57;-1:-1:-1;;;;;14492:57:0;;;14512:7;;14492:57;;;;14528:12;;14542:6;;8852:25:1;;;8908:2;8893:18;;8886:34;8840:2;8825:18;;8678:248;23803:460:0;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;24006:11;24043:26;;::::1;:59:::0;::::1;;;-1:-1:-1::0;24073:29:0;;::::1;24043:59;24035:68;;;::::0;::::1;;24121:9;24116:140;24140:6;24136:1;:10;24116:140;;;24201:43;;;;;;;;24214:9;;24224:1;24214:12;;;;;;;:::i;:::-;;;;;;;24201:43;;;;24228:12;;24241:1;24228:15;;;;;;;:::i;:::-;;;;;;;24201:43;;::::0;24168:14:::1;:30;24183:11;;24195:1;24183:14;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;24168:30:::0;;-1:-1:-1;24168:30:0;;::::1;::::0;;;;;;-1:-1:-1;24168:30:0;:76;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;24148:3;::::1;::::0;::::1;:::i;:::-;;;;24116:140;;;;23978:285;23803:460:::0;;;;;;:::o;3691:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3691:55:0;;-1:-1:-1;3691:55:0;;-1:-1:-1;3691:55:0:o;25176:672::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25400:19:0;::::1;25377:20;25400:19:::0;;;::::1;::::0;;;;;;25377:42;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25430:24;25457:9;25467:6;25457:17;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;25493:10;;25457:17;;-1:-1:-1;;;;;;25493:10:0;;::::1;:18:::0;;::::1;;:40:::0;::::1;;;-1:-1:-1::0;;;;;;25515:18:0;::::1;::::0;::::1;25493:40;25485:66;;;;-1:-1:-1::0;;;25485:66:0::1;;;;;;;:::i;:::-;25581:11:::0;25618:32;;::::1;25610:41;;;::::0;::::1;;25690:15;25664;25680:6;25664:23;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:41;25723:9:::1;25718:123;25742:6;25738:1;:10;25718:123;;;25811:15;;25827:1;25811:18;;;;;;;:::i;:::-;;;;;;;25770:14;25785:6;25770:22;;;;;;:::i;:::-;;;;;;;;;;;;;:38;25793:11;;25805:1;25793:14;;;;;;;:::i;:::-;;;;;;;25770:38;;;;;;;;;;;:59;;;;25750:3;;;;;:::i;:::-;;;;25718:123;;;;25366:482;;;25176:672:::0;;;;;;:::o;25883:266::-;-1:-1:-1;;;;;26059:19:0;;26016:7;26059:19;;;;;;;;;;26036:42;;26016:7;;26059:19;26036:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26096:45;26109:6;26117:10;26129:11;26096:12;:45::i;:::-;26089:52;;;25883:266;;;;;;:::o;15368:210::-;15434:8;:20;;-1:-1:-1;;15465:24:0;;;;;15518:3;;:25;;-1:-1:-1;;;;;15434:20:0;;;;15419:12;;-1:-1:-1;;;;;15518:3:0;;15434:20;;15518:25;22708:205:1;19557:719:0;-1:-1:-1;;;;;19745:19:0;;19722:20;19745:19;;;;;;;;;;19722:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19775:24;19802:9;19812:6;19802:17;;;;;;:::i;:::-;;;;;;;;;;;;;;19840:10;;19802:17;;-1:-1:-1;;;;;;19840:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;19862:18:0;;;;19840:40;19832:66;;;;-1:-1:-1;;;19832:66:0;;;;;;;:::i;:::-;19931:3;;-1:-1:-1;;;;;19931:3:0;19917:10;:17;;:50;;-1:-1:-1;19952:15:0;;;;-1:-1:-1;;;;;19952:15:0;19938:10;:29;19917:50;19909:69;;;;-1:-1:-1;;;19909:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19995:20:0;;;19991:77;;20032:15;;;:24;;-1:-1:-1;;;;;;20032:24:0;-1:-1:-1;;;;;20032:24:0;;;;;19991:77;20078:15;;;:24;;;20117:21;;20113:96;;20155:42;20172:6;20180:10;;20155:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20192:4:0;;-1:-1:-1;20155:16:0;;-1:-1:-1;;20155:42:0:i;:::-;20253:6;-1:-1:-1;;;;;20226:42:0;20247:4;-1:-1:-1;;;;;20226:42:0;;20239:6;20261;20226:42;;;;;;;:::i;:::-;;;;;;;;19711:565;;19557:719;;;;;:::o;24308:829::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24539:19:0;::::1;24516:20;24539:19:::0;;;::::1;::::0;;;;;;24516:42;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24569:24;24596:9;24606:6;24596:17;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;24634:10;;24596:17;;-1:-1:-1;;;;;;24634:10:0;;::::1;:18:::0;;::::1;;:40:::0;::::1;;;-1:-1:-1::0;;;;;;24656:18:0;::::1;::::0;::::1;24634:40;24626:66;;;;-1:-1:-1::0;;;24626:66:0::1;;;;;;;:::i;:::-;24718:15;::::0;;::::1;::::0;13459:18;;13458:33;24703:69:::1;;;::::0;-1:-1:-1;;;24703:69:0;;33179:2:1;24703:69:0::1;::::0;::::1;33161:21:1::0;33218:2;33198:18;;;33191:30;-1:-1:-1;;;33237:18:1;;;33230:42;33289:18;;24703:69:0::1;32977:336:1::0;24703:69:0::1;24802:11:::0;24839:26;;::::1;:59:::0;::::1;;;-1:-1:-1::0;24869:29:0;;::::1;24839:59;24831:68;;;::::0;::::1;;24912:49;24964:13;24978:6;24964:21;;;;;;:::i;:::-;;;;;;;;;;;;;24912:73;;25001:9;24996:134;25020:6;25016:1;:10;24996:134;;;25075:43;;;;;;;;25088:9;;25098:1;25088:12;;;;;;;:::i;:::-;;;;;;;25075:43;;;;25102:12;;25115:1;25102:15;;;;;;;:::i;:::-;;;;;;;25075:43;;::::0;25048:8:::1;:24;25057:11;;25069:1;25057:14;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;25048:24:::0;;-1:-1:-1;25048:24:0;;::::1;::::0;;;;;;-1:-1:-1;25048:24:0;:70;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;25028:3;::::1;::::0;::::1;:::i;:::-;;;;24996:134;;;;24505:632;;;;24308:829:::0;;;;;;;:::o;3450:47::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16898:200::-;16960:10;;-1:-1:-1;;;;;16960:10:0;16946;:24;16938:33;;;;;;17001:10;;16996:3;;16987:42;;17013:15;6301:25:1;;-1:-1:-1;;;;;17001:10:0;;;;16996:3;;;;16987:42;;6289:2:1;6274:18;16987:42:0;;;;;;;17046:10;;;17040:3;:16;;-1:-1:-1;;;;;;17040:16:0;;;-1:-1:-1;;;;;17046:10:0;;17040:16;;;;17067:23;;;16898:200::o;26455:376::-;26546:4;26563:16;26582:14;26597:6;26582:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:34;;;;;;;;;;-1:-1:-1;3102:3:0;13459:18;;;13458:33;26627:89;;;26700:4;26693:11;;;;;26627:89;26737:15;26753:6;26737:23;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;3102:3:0;13459:18;;;13458:33;26778:45;26771:52;;;26455:376;;;;;:::o;9461:1429::-;4717:8;;4729:1;4717:13;4709:22;;;;;;4753:1;4742:8;:12;7309:6:::1;::::0;::::1;;7308:7;7300:26;;;::::0;-1:-1:-1;;;7300:26:0;;23444:2:1;7300:26:0::1;::::0;::::1;23426:21:1::0;23483:1;23463:18;;;23456:29;-1:-1:-1;;;23501:18:1;;;23494:36;23547:18;;7300:26:0::1;23242:329:1::0;7300:26:0::1;-1:-1:-1::0;;;;;9675:23:0;::::2;::::0;;:50:::2;;-1:-1:-1::0;;;;;;9702:23:0;::::2;9715:10;9702:23;9675:50;9667:77;;;::::0;-1:-1:-1;;;9667:77:0;;24127:2:1;9667:77:0::2;::::0;::::2;24109:21:1::0;24166:2;24146:18;;;24139:30;-1:-1:-1;;;24185:18:1;;;24178:44;24239:18;;9667:77:0::2;23925:338:1::0;9667:77:0::2;9792:10;9755:20;9778:25:::0;;;::::2;::::0;;;;;;9755:48;;::::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9825:12;9838:6;9825:20;;;;;;:::i;:::-;::::0;;;::::2;::::0;;;;;::::2;::::0;;;;::::2;;9824:21;9816:43;;;::::0;-1:-1:-1;;;9816:43:0;;24751:2:1;9816:43:0::2;::::0;::::2;24733:21:1::0;24790:1;24770:18;;;24763:29;-1:-1:-1;;;24808:18:1;;;24801:39;24857:18;;9816:43:0::2;24549:332:1::0;9816:43:0::2;9872:24;9899:33;9906:4;;3183:3;13459:18:::0;;;13458:33;;13360:139;9899:33:::2;9872:60;;9948:19;9943:115;;9992:16;10009:6;9992:24;;;;;;:::i;:::-;::::0;;;::::2;::::0;;::::2;::::0;;;;;;;;10017:10:::2;9992:36;::::0;;;;;;;;::::2;;9984:62;;;::::0;-1:-1:-1;;;9984:62:0;;25088:2:1;9984:62:0::2;::::0;::::2;25070:21:1::0;25127:2;25107:18;;;25100:30;-1:-1:-1;;;25146:18:1;;;25139:43;25199:18;;9984:62:0::2;24886:337:1::0;9984:62:0::2;10082:4;::::0;3229:8:::2;13459:18:::0;;;13458:33;10070:697:::2;;10115:24;10142:9;10152:6;10142:17;;;;;;:::i;:::-;;;;;;;;;;;;;10115:44;;10201:19;:47;;;;-1:-1:-1::0;10224:10:0;;-1:-1:-1;;;;;10224:10:0::2;:24:::0;10201:47:::2;10200:94;;;-1:-1:-1::0;10284:10:0;;-1:-1:-1;;;;;10284:10:0::2;10270;:24;10200:94;10174:169;;;;-1:-1:-1::0;;;10174:169:0::2;;;;;;;:::i;:::-;2948:3;13459:18:::0;;;13458:33;10364:67:::2;;;;-1:-1:-1::0;10407:10:0;;-1:-1:-1;;;;;10407:10:0::2;10421;10407:24;10364:67;10360:133;;;10462:6;:15;;;10452:25;;;;10360:133;3004:8;13459:18:::0;;;13458:33;10509:247:::2;;;10569:12;10584:46;10597:6:::0;10605:10;10617:5;10584:12:::2;:46::i;:::-;10569:61;;10649:17;10661:4;10649:11;:17::i;:::-;10550:132;10509:247;;;10692:9;:13:::0;10688:68:::2;;10726:14;10738:1;10726:11;:14::i;:::-;10100:667;10070:697;10779:5;:7:::0;;;:5:::2;:7;::::0;::::2;:::i;:::-;;;;;;10848:10;10825:3;-1:-1:-1::0;;;;;10802:80:0::2;10813:10;-1:-1:-1::0;;;;;10802:80:0::2;;10830:5;;10837:9;10860:6;10868;10876:5;;10802:80;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;4788:1:0;4777:8;:12;-1:-1:-1;;;;;;9461:1429:0:o;15621:167::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;15732:5:::1;15709:12;15722:6;;15709:20;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:28;;;::::1;;-1:-1:-1::0;;15709:28:0;;::::1;::::0;;;::::1;::::0;;;15753:27:::1;::::0;::::1;::::0;15766:6;;;;15774:5;;15753:27:::1;:::i;:::-;;;;;;;;15621:167:::0;;;:::o;23006:751::-;23078:48;23129:16;23146:6;23129:24;;;;;;:::i;:::-;;;;;;;;;;;;;23078:75;;23164:34;23201:19;23221:6;23201:27;;;;;;:::i;:::-;;;;;;;;;;;;;;23260:23;;23201:27;;-1:-1:-1;23260:23:0;23239:18;;23357:286;23381:8;23377:1;:12;23357:286;;;23415:16;23432:1;23415:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23415:19:0;23453:21;;;;;;;;;;;;23415:19;;-1:-1:-1;23453:21:0;;23449:183;;;23495:3;;;;:::i;:::-;;;;23357:286;;23449:183;23539:10;;;;:::i;:::-;;;;23590:16;23607:8;23590:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23590:26:0;23568:16;23585:1;23568:19;;;;;;;;:::i;:::-;;;;;;;;;:48;;;;;-1:-1:-1;;;;;23568:48:0;;;;;-1:-1:-1;;;;;23568:48:0;;;;;;23357:286;;;-1:-1:-1;23670:8:0;23653:97;23684:10;23680:1;:14;23653:97;;;23716:16;:22;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;23716:22:0;;;;;-1:-1:-1;;;;;;23716:22:0;;;;;;23696:3;;;;:::i;:::-;;;;23653:97;;;;23067:690;;;;;23006:751;:::o;16606:82::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;16668:4:::1;:12:::0;16606:82::o;21453:408::-;-1:-1:-1;;;;;21564:19:0;;21541:20;21564:19;;;;;;;;;;21541:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21594:24;21621:9;21631:6;21621:17;;;;;;:::i;:::-;;;;;;;;;;;;;;21659:10;;21621:17;;-1:-1:-1;;;;;;21659:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;21681:18:0;;;;21659:40;21651:66;;;;-1:-1:-1;;;21651:66:0;;;;;;;:::i;:::-;21750:3;;-1:-1:-1;;;;;21750:3:0;21736:10;:17;;:50;;-1:-1:-1;21771:15:0;;;;-1:-1:-1;;;;;21771:15:0;21757:10;:29;21736:50;21728:69;;;;-1:-1:-1;;;21728:69:0;;;;;;;:::i;:::-;21810:43;21827:6;21835:10;21847:5;21810:16;:43::i;18362:97::-;18409:16;18445:6;18438:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18438:13:0;;;;;;;;;;;;;;;;;;;;;;;18362:97;:::o;14724:153::-;-1:-1:-1;;;;;14787:25:0;;;;;;:15;:25;;;;;:38;;14816:9;;14787:25;:38;;14816:9;;14787:38;:::i;:::-;;;;-1:-1:-1;;14841:28:0;;14859:9;6301:25:1;;-1:-1:-1;;;;;14841:28:0;;;;;6289:2:1;6274:18;14841:28:0;;;;;;;14724:153;:::o;22577:149::-;22657:7;22684:19;22704:6;22684:27;;;;;;:::i;:::-;;;;;;;;;;;;;;:34;;22577:149;-1:-1:-1;;22577:149:0:o;21869:654::-;21978:42;22023:16;22040:6;22023:24;;;;;;:::i;:::-;;;;;;;;;;;;;21978:69;;22058:34;22095:19;22115:6;22095:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;22133:12:0;;22156:360;22180:10;:17;22176:1;:21;22156:360;;;22226:10;22237:1;22226:13;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;22258:15:0;;;;;;;;;;;;;;;22226:13;;-1:-1:-1;22258:15:0;;:24;;;;;;22254:73;;;22303:8;;22254:73;22345:5;22341:73;;;22371:27;;;;;;;-1:-1:-1;22371:27:0;;;;;;;;;-1:-1:-1;;;;;;22371:27:0;-1:-1:-1;;;;;22371:27:0;;;;;22341:73;-1:-1:-1;;;;;22428:15:0;;;;;;;;;;;;;;;:23;;-1:-1:-1;;22428:23:0;;;;;;;22471:33;;;;;22484:6;;22428:23;;22471:33;:::i;:::-;;;;;;;;22156:360;22199:3;;;;:::i;:::-;;;;22156:360;;26839:961;26981:7;27001:30;27034:13;27048:6;27034:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:33;;;;;;;;;;27001:66;;;;;;;;;;;;;;;;;;;;;;27034:21;-1:-1:-1;27001:66:0;27201:38;27220:6;27034:33;27201:18;:38::i;:::-;27197:127;;;27280:32;27294:18;27280:11;:32;:::i;:::-;27263:49;;:14;:49;:::i;:::-;27256:56;;;;;;;27197:127;27336:31;27370:26;;;:14;:26;;;;;;;;27336:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27550:32;;;27549:69;;27603:15;27549:69;;;27586:14;27549:69;27530:88;;27629:19;27673;27652:18;:40;27651:85;;27717:19;27651:85;;;27696:18;27651:85;27629:107;-1:-1:-1;27767:25:0;27629:107;27767:11;:25;:::i;:::-;27756:36;;:8;:36;:::i;:::-;27749:43;26839:961;-1:-1:-1;;;;;;;;;;;;26839:961:0:o;8478:426::-;8554:4;8541:9;:17;;8533:47;;;;-1:-1:-1;;;8533:47:0;;34620:2:1;8533:47:0;;;34602:21:1;34659:2;34639:18;;;34632:30;-1:-1:-1;;;34678:18:1;;;34671:47;34735:18;;8533:47:0;34418:341:1;8533:47:0;8595:8;;8591:127;;8650:3;;:25;;8633:12;;-1:-1:-1;;;;;8650:3:0;;8666:4;;8633:12;8650:25;8633:12;8650:25;8666:4;8650:3;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8632:43;;;8698:7;8690:16;;;;;;8605:113;8591:127;8744:4;8732:9;:16;8728:169;;;8793:12;8810:10;8833:16;8845:4;8833:9;:16;:::i;:::-;8810:44;;;22708:205:1;8728:169:0;8478:426;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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:225;232:4;224:6;220:17;303:6;291:10;288:22;-1:-1:-1;;;;;255:10:1;252:34;249:62;246:88;;;314:18;;:::i;:::-;350:2;343:22;-1:-1:-1;146:225:1:o;376:249::-;486:2;467:13;;-1:-1:-1;;463:27:1;451:40;;-1:-1:-1;;;;;506:34:1;;542:22;;;503:62;500:88;;;568:18;;:::i;:::-;604:2;597:22;-1:-1:-1;;376:249:1:o;630:187::-;679:4;-1:-1:-1;;;;;704:6:1;701:30;698:56;;;734:18;;:::i;:::-;-1:-1:-1;800:2:1;779:15;-1:-1:-1;;775:29:1;806:4;771:40;;630:187::o;822:421::-;887:5;917:36;946:6;917:36;:::i;:::-;982:2;976:9;994:31;1022:2;1014:6;994:31;:::i;:::-;1043:6;1034:15;;1073:6;1065;1058:22;1113:3;1104:6;1099:3;1095:16;1092:25;1089:45;;;1130:1;1127;1120:12;1089:45;1180:6;1175:3;1168:4;1160:6;1156:17;1143:44;1235:1;1228:4;1219:6;1211;1207:19;1203:30;1196:41;;;822:421;;;;;:::o;1248:222::-;1291:5;1344:3;1337:4;1329:6;1325:17;1321:27;1311:55;;1362:1;1359;1352:12;1311:55;1384:80;1460:3;1451:6;1438:20;1431:4;1423:6;1419:17;1384:80;:::i;1475:322::-;1544:6;1597:2;1585:9;1576:7;1572:23;1568:32;1565:52;;;1613:1;1610;1603:12;1565:52;1653:9;1640:23;-1:-1:-1;;;;;1678:6:1;1675:30;1672:50;;;1718:1;1715;1708:12;1672:50;1741;1783:7;1774:6;1763:9;1759:22;1741:50;:::i;1994:180::-;2053:6;2106:2;2094:9;2085:7;2081:23;2077:32;2074:52;;;2122:1;2119;2112:12;2074:52;-1:-1:-1;2145:23:1;;1994:180;-1:-1:-1;1994:180:1:o;2387:118::-;2473:5;2466:13;2459:21;2452:5;2449:32;2439:60;;2495:1;2492;2485:12;2510:241;2566:6;2619:2;2607:9;2598:7;2594:23;2590:32;2587:52;;;2635:1;2632;2625:12;2587:52;2674:9;2661:23;2693:28;2715:5;2693:28;:::i;2756:173::-;2824:20;;-1:-1:-1;;;;;2873:31:1;;2863:42;;2853:70;;2919:1;2916;2909:12;2853:70;2756:173;;;:::o;2934:186::-;2993:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3085:29;3104:9;3085:29;:::i;3310:258::-;3382:1;3392:113;3406:6;3403:1;3400:13;3392:113;;;3482:11;;;3476:18;3463:11;;;3456:39;3428:2;3421:10;3392:113;;;3523:6;3520:1;3517:13;3514:48;;;-1:-1:-1;;3558:1:1;3540:16;;3533:27;3310:258::o;3573:257::-;3614:3;3652:5;3646:12;3679:6;3674:3;3667:19;3695:63;3751:6;3744:4;3739:3;3735:14;3728:4;3721:5;3717:16;3695:63;:::i;:::-;3812:2;3791:15;-1:-1:-1;;3787:29:1;3778:39;;;;3819:4;3774:50;;3573:257;-1:-1:-1;;3573:257:1:o;3835:314::-;-1:-1:-1;;;;;4010:32:1;;3992:51;;4079:2;4074;4059:18;;4052:30;;;-1:-1:-1;;4099:44:1;;4124:18;;4116:6;4099:44;:::i;:::-;4091:52;3835:314;-1:-1:-1;;;;3835:314:1:o;4154:348::-;4206:8;4216:6;4270:3;4263:4;4255:6;4251:17;4247:27;4237:55;;4288:1;4285;4278:12;4237:55;-1:-1:-1;4311:20:1;;-1:-1:-1;;;;;4343:30:1;;4340:50;;;4386:1;4383;4376:12;4340:50;4423:4;4415:6;4411:17;4399:29;;4475:3;4468:4;4459:6;4451;4447:19;4443:30;4440:39;4437:59;;;4492:1;4489;4482:12;4437:59;4154:348;;;;;:::o;4507:367::-;4570:8;4580:6;4634:3;4627:4;4619:6;4615:17;4611:27;4601:55;;4652:1;4649;4642:12;4601:55;-1:-1:-1;4675:20:1;;-1:-1:-1;;;;;4707:30:1;;4704:50;;;4750:1;4747;4740:12;4704:50;4787:4;4779:6;4775:17;4763:29;;4847:3;4840:4;4830:6;4827:1;4823:14;4815:6;4811:27;4807:38;4804:47;4801:67;;;4864:1;4861;4854:12;4879:965;5013:6;5021;5029;5037;5045;5053;5061;5114:3;5102:9;5093:7;5089:23;5085:33;5082:53;;;5131:1;5128;5121:12;5082:53;5171:9;5158:23;-1:-1:-1;;;;;5241:2:1;5233:6;5230:14;5227:34;;;5257:1;5254;5247:12;5227:34;5296:59;5347:7;5338:6;5327:9;5323:22;5296:59;:::i;:::-;5374:8;;-1:-1:-1;5270:85:1;-1:-1:-1;5270:85:1;;-1:-1:-1;5428:38:1;5462:2;5447:18;;5428:38;:::i;:::-;5418:48;;5485:38;5519:2;5508:9;5504:18;5485:38;:::i;:::-;5475:48;;5570:2;5559:9;5555:18;5542:32;5532:42;;5627:3;5616:9;5612:19;5599:33;5583:49;;5657:2;5647:8;5644:16;5641:36;;;5673:1;5670;5663:12;5641:36;;5712:72;5776:7;5765:8;5754:9;5750:24;5712:72;:::i;:::-;4879:965;;;;-1:-1:-1;4879:965:1;;-1:-1:-1;4879:965:1;;;;5686:98;;-1:-1:-1;;;4879:965:1:o;5849:301::-;5908:6;5961:2;5949:9;5940:7;5936:23;5932:32;5929:52;;;5977:1;5974;5967:12;5929:52;6016:9;6003:23;-1:-1:-1;;;;;6059:5:1;6055:46;6048:5;6045:57;6035:85;;6116:1;6113;6106:12;6717:1378;6862:6;6870;6878;6886;6894;6938:9;6929:7;6925:23;6968:3;6964:2;6960:12;6957:32;;;6985:1;6982;6975:12;6957:32;7008:29;7027:9;7008:29;:::i;:::-;6998:39;;7088:2;7077:9;7073:18;7060:32;-1:-1:-1;;;;;7152:2:1;7144:6;7141:14;7138:34;;;7168:1;7165;7158:12;7138:34;7206:6;7195:9;7191:22;7181:32;;7251:7;7244:4;7240:2;7236:13;7232:27;7222:55;;7273:1;7270;7263:12;7222:55;7296:74;7362:7;7357:2;7344:16;7339:2;7335;7331:11;7296:74;:::i;:::-;7286:84;;7389:38;7423:2;7412:9;7408:18;7389:38;:::i;:::-;7379:48;;7480:2;7469:9;7465:18;7452:32;7436:48;;7509:2;7499:8;7496:16;7493:36;;;7525:1;7522;7515:12;7493:36;;7548:52;7592:7;7581:8;7570:9;7566:24;7548:52;:::i;:::-;7538:62;-1:-1:-1;;7635:4:1;-1:-1:-1;;7616:17:1;;7612:28;7609:48;;;7653:1;7650;7643:12;7609:48;;7686:2;7680:9;7698:32;7723:6;7698:32;:::i;:::-;7782:3;7771:9;7767:19;7754:33;7746:6;7739:49;7821:40;7855:4;7844:9;7840:20;7821:40;:::i;:::-;7816:2;7804:15;;7797:65;7923:3;7908:19;;7895:33;7890:2;7878:15;;7871:58;7990:3;7975:19;;7962:33;7957:2;7945:15;;7938:58;8058:3;8043:19;;;8030:33;8024:3;8012:16;;8005:59;-1:-1:-1;6717:1378:1;;;;-1:-1:-1;6717:1378:1;7808:6;6717:1378::o;8100:391::-;8186:6;8194;8202;8210;8263:3;8251:9;8242:7;8238:23;8234:33;8231:53;;;8280:1;8277;8270:12;8231:53;8316:9;8303:23;8293:33;;8345:38;8379:2;8368:9;8364:18;8345:38;:::i;:::-;8100:391;;8335:48;;-1:-1:-1;;;;8430:2:1;8415:18;;8402:32;;8481:2;8466:18;8453:32;;8100:391::o;8931:260::-;8999:6;9007;9060:2;9048:9;9039:7;9035:23;9031:32;9028:52;;;9076:1;9073;9066:12;9028:52;9099:29;9118:9;9099:29;:::i;:::-;9089:39;;9147:38;9181:2;9170:9;9166:18;9147:38;:::i;:::-;9137:48;;8931:260;;;;;:::o;9196:547::-;9285:6;9293;9301;9309;9362:2;9350:9;9341:7;9337:23;9333:32;9330:52;;;9378:1;9375;9368:12;9330:52;9418:9;9405:23;-1:-1:-1;;;;;9443:6:1;9440:30;9437:50;;;9483:1;9480;9473:12;9437:50;9522:59;9573:7;9564:6;9553:9;9549:22;9522:59;:::i;:::-;9600:8;;9496:85;;-1:-1:-1;9682:2:1;9667:18;;9654:32;;9733:2;9718:18;9705:32;;-1:-1:-1;9196:547:1;-1:-1:-1;;;;9196:547:1:o;9971:390::-;10049:6;10057;10110:2;10098:9;10089:7;10085:23;10081:32;10078:52;;;10126:1;10123;10116:12;10078:52;10166:9;10153:23;-1:-1:-1;;;;;10191:6:1;10188:30;10185:50;;;10231:1;10228;10221:12;10185:50;10254;10296:7;10287:6;10276:9;10272:22;10254:50;:::i;:::-;10244:60;10351:2;10336:18;;;;10323:32;;-1:-1:-1;;;;9971:390:1:o;10366:1067::-;10459:6;10467;10520:2;10508:9;10499:7;10495:23;10491:32;10488:52;;;10536:1;10533;10526:12;10488:52;10559:29;10578:9;10559:29;:::i;:::-;10549:39;;10607:2;10660;10649:9;10645:18;10632:32;-1:-1:-1;;;;;10724:2:1;10716:6;10713:14;10710:34;;;10740:1;10737;10730:12;10710:34;10778:6;10767:9;10763:22;10753:32;;10823:7;10816:4;10812:2;10808:13;10804:27;10794:55;;10845:1;10842;10835:12;10794:55;10881:2;10868:16;10903:2;10899;10896:10;10893:36;;;10909:18;;:::i;:::-;10955:2;10952:1;10948:10;10938:20;;10987:2;10981:9;10999:40;11035:2;11031;11027:11;11019:6;10999:40;:::i;:::-;11074:18;;;11150:11;;;11146:20;;;11108:15;;;11178:19;;;11175:39;;;11210:1;11207;11200:12;11175:39;11234:11;;;;11254:148;11270:6;11265:3;11262:15;11254:148;;;11336:23;11355:3;11336:23;:::i;:::-;11324:36;;11287:12;;;;11380;;11254:148;;;11258:3;11421:6;11411:16;;;;;;;10366:1067;;;;;:::o;11438:658::-;11609:2;11661:21;;;11731:13;;11634:18;;;11753:22;;;11580:4;;11609:2;11832:15;;;;11806:2;11791:18;;;11580:4;11875:195;11889:6;11886:1;11883:13;11875:195;;;11954:13;;-1:-1:-1;;;;;11950:39:1;11938:52;;12045:15;;;;12010:12;;;;11986:1;11904:9;11875:195;;;-1:-1:-1;12087:3:1;;11438:658;-1:-1:-1;;;;;;11438:658:1:o;12101:578::-;12205:6;12213;12221;12274:2;12262:9;12253:7;12249:23;12245:32;12242:52;;;12290:1;12287;12280:12;12242:52;12330:9;12317:23;-1:-1:-1;;;;;12355:6:1;12352:30;12349:50;;;12395:1;12392;12385:12;12349:50;12434:70;12496:7;12487:6;12476:9;12472:22;12434:70;:::i;:::-;12523:8;;-1:-1:-1;12408:96:1;-1:-1:-1;;12608:2:1;12593:18;;12580:32;12621:28;12580:32;12621:28;:::i;:::-;12668:5;12658:15;;;12101:578;;;;;:::o;12684:1088::-;12842:6;12850;12858;12866;12874;12882;12935:2;12923:9;12914:7;12910:23;12906:32;12903:52;;;12951:1;12948;12941:12;12903:52;12991:9;12978:23;-1:-1:-1;;;;;13061:2:1;13053:6;13050:14;13047:34;;;13077:1;13074;13067:12;13047:34;13116:70;13178:7;13169:6;13158:9;13154:22;13116:70;:::i;:::-;13205:8;;-1:-1:-1;13090:96:1;-1:-1:-1;13293:2:1;13278:18;;13265:32;;-1:-1:-1;13309:16:1;;;13306:36;;;13338:1;13335;13328:12;13306:36;13377:72;13441:7;13430:8;13419:9;13415:24;13377:72;:::i;:::-;13468:8;;-1:-1:-1;13351:98:1;-1:-1:-1;13556:2:1;13541:18;;13528:32;;-1:-1:-1;13572:16:1;;;13569:36;;;13601:1;13598;13591:12;13569:36;;13640:72;13704:7;13693:8;13682:9;13678:24;13640:72;:::i;:::-;12684:1088;;;;-1:-1:-1;12684:1088:1;;-1:-1:-1;12684:1088:1;;13731:8;;12684:1088;-1:-1:-1;;;12684:1088:1:o;13777:916::-;13917:6;13925;13933;13941;13949;13957;14010:3;13998:9;13989:7;13985:23;13981:33;13978:53;;;14027:1;14024;14017:12;13978:53;14050:29;14069:9;14050:29;:::i;:::-;14040:39;;14126:2;14115:9;14111:18;14098:32;14088:42;;14181:2;14170:9;14166:18;14153:32;-1:-1:-1;;;;;14245:2:1;14237:6;14234:14;14231:34;;;14261:1;14258;14251:12;14231:34;14300:70;14362:7;14353:6;14342:9;14338:22;14300:70;:::i;:::-;14389:8;;-1:-1:-1;14274:96:1;-1:-1:-1;14477:2:1;14462:18;;14449:32;;-1:-1:-1;14493:16:1;;;14490:36;;;14522:1;14519;14512:12;14698:396;14776:6;14784;14837:2;14825:9;14816:7;14812:23;14808:32;14805:52;;;14853:1;14850;14843:12;14805:52;14893:9;14880:23;-1:-1:-1;;;;;14918:6:1;14915:30;14912:50;;;14958:1;14955;14948:12;14912:50;14981;15023:7;15014:6;15003:9;14999:22;14981:50;:::i;:::-;14971:60;;;15050:38;15084:2;15073:9;15069:18;15050:38;:::i;15099:322::-;15176:6;15184;15192;15245:2;15233:9;15224:7;15220:23;15216:32;15213:52;;;15261:1;15258;15251:12;15213:52;15284:29;15303:9;15284:29;:::i;:::-;15274:39;15360:2;15345:18;;15332:32;;-1:-1:-1;15411:2:1;15396:18;;;15383:32;;15099:322;-1:-1:-1;;;15099:322:1:o;15426:654::-;15539:6;15547;15555;15563;15571;15624:3;15612:9;15603:7;15599:23;15595:33;15592:53;;;15641:1;15638;15631:12;15592:53;15664:29;15683:9;15664:29;:::i;:::-;15654:39;;15712:38;15746:2;15735:9;15731:18;15712:38;:::i;:::-;15702:48;;15797:2;15786:9;15782:18;15769:32;15759:42;;15852:2;15841:9;15837:18;15824:32;-1:-1:-1;;;;;15871:6:1;15868:30;15865:50;;;15911:1;15908;15901:12;15865:50;15950:70;16012:7;16003:6;15992:9;15988:22;15950:70;:::i;:::-;15426:654;;;;-1:-1:-1;15426:654:1;;-1:-1:-1;16039:8:1;;15924:96;15426:654;-1:-1:-1;;;15426:654:1:o;16085:1163::-;16252:6;16260;16268;16276;16284;16292;16300;16353:3;16341:9;16332:7;16328:23;16324:33;16321:53;;;16370:1;16367;16360:12;16321:53;16393:29;16412:9;16393:29;:::i;:::-;16383:39;;16473:2;16462:9;16458:18;16445:32;-1:-1:-1;;;;;16537:2:1;16529:6;16526:14;16523:34;;;16553:1;16550;16543:12;16523:34;16592:70;16654:7;16645:6;16634:9;16630:22;16592:70;:::i;:::-;16681:8;;-1:-1:-1;16566:96:1;-1:-1:-1;16769:2:1;16754:18;;16741:32;;-1:-1:-1;16785:16:1;;;16782:36;;;16814:1;16811;16804:12;16782:36;16853:72;16917:7;16906:8;16895:9;16891:24;16853:72;:::i;:::-;16944:8;;-1:-1:-1;16827:98:1;-1:-1:-1;17032:2:1;17017:18;;17004:32;;-1:-1:-1;17048:16:1;;;17045:36;;;17077:1;17074;17067:12;17253:219;17402:2;17391:9;17384:21;17365:4;17422:44;17462:2;17451:9;17447:18;17439:6;17422:44;:::i;17477:696::-;17583:6;17591;17599;17607;17615;17623;17676:3;17664:9;17655:7;17651:23;17647:33;17644:53;;;17693:1;17690;17683:12;17644:53;17716:29;17735:9;17716:29;:::i;:::-;17706:39;;17796:2;17785:9;17781:18;17768:32;-1:-1:-1;;;;;17815:6:1;17812:30;17809:50;;;17855:1;17852;17845:12;17809:50;17894:59;17945:7;17936:6;17925:9;17921:22;17894:59;:::i;:::-;17972:8;;-1:-1:-1;17868:85:1;-1:-1:-1;18026:38:1;;-1:-1:-1;18060:2:1;18045:18;;18026:38;:::i;:::-;18016:48;;18111:2;18100:9;18096:18;18083:32;18073:42;;18162:3;18151:9;18147:19;18134:33;18124:43;;17477:696;;;;;;;;:::o;18178:540::-;18255:6;18263;18271;18324:2;18312:9;18303:7;18299:23;18295:32;18292:52;;;18340:1;18337;18330:12;18292:52;18380:9;18367:23;-1:-1:-1;;;;;18405:6:1;18402:30;18399:50;;;18445:1;18442;18435:12;18399:50;18484:59;18535:7;18526:6;18515:9;18511:22;18484:59;:::i;18954:334::-;19156:2;19138:21;;;19195:2;19175:18;;;19168:30;-1:-1:-1;;;19229:2:1;19214:18;;19207:40;19279:2;19264:18;;18954:334::o;19293:331::-;19495:2;19477:21;;;19534:1;19514:18;;;19507:29;-1:-1:-1;;;19567:2:1;19552:18;;19545:38;19615:2;19600:18;;19293:331::o;19629:127::-;19690:10;19685:3;19681:20;19678:1;19671:31;19721:4;19718:1;19711:15;19745:4;19742:1;19735:15;19761:125;19801:4;19829:1;19826;19823:8;19820:34;;;19834:18;;:::i;:::-;-1:-1:-1;19871:9:1;;19761:125::o;19891:127::-;19952:10;19947:3;19943:20;19940:1;19933:31;19983:4;19980:1;19973:15;20007:4;20004:1;19997:15;20023:135;20062:3;-1:-1:-1;;20083:17:1;;20080:43;;;20103:18;;:::i;:::-;-1:-1:-1;20150:1:1;20139:13;;20023:135::o;20163:127::-;20224:10;20219:3;20215:20;20212:1;20205:31;20255:4;20252:1;20245:15;20279:4;20276:1;20269:15;20295:380;20374:1;20370:12;;;;20417;;;20438:61;;20492:4;20484:6;20480:17;20470:27;;20438:61;20545:2;20537:6;20534:14;20514:18;20511:38;20508:161;;;20591:10;20586:3;20582:20;20579:1;20572:31;20626:4;20623:1;20616:15;20654:4;20651:1;20644:15;20508:161;;20295:380;;;:::o;21365:273::-;21550:6;21542;21537:3;21524:33;21506:3;21576:16;;21601:13;;;21576:16;21365:273;-1:-1:-1;21365:273:1:o;21980:128::-;22020:3;22051:1;22047:6;22044:1;22041:13;22038:39;;;22057:18;;:::i;:::-;-1:-1:-1;22093:9:1;;21980:128::o;22113:267::-;22202:6;22197:3;22190:19;22254:6;22247:5;22240:4;22235:3;22231:14;22218:43;-1:-1:-1;22306:1:1;22281:16;;;22299:4;22277:27;;;22270:38;;;;22362:2;22341:15;;;-1:-1:-1;;22337:29:1;22328:39;;;22324:50;;22113:267::o;22385:318::-;22572:2;22561:9;22554:21;22535:4;22592:62;22650:2;22639:9;22635:18;22627:6;22619;22592:62;:::i;:::-;22584:70;;22690:6;22685:2;22674:9;22670:18;22663:34;22385:318;;;;;;:::o;24268:276::-;24399:3;24437:6;24431:13;24453:53;24499:6;24494:3;24487:4;24479:6;24475:17;24453:53;:::i;:::-;24522:16;;;;;24268:276;-1:-1:-1;;24268:276:1:o;25571:560::-;25793:4;25839:1;25835;25830:3;25826:11;25822:19;25880:2;25872:6;25868:15;25857:9;25850:34;25920:3;25915:2;25904:9;25900:18;25893:31;25941:45;25981:3;25970:9;25966:19;25958:6;25941:45;:::i;:::-;26022:15;;26017:2;26002:18;;25995:43;-1:-1:-1;26069:2:1;26054:18;;26047:34;;;;26112:3;26097:19;;;26090:35;25933:53;25571:560;-1:-1:-1;;25571:560:1:o;26136:812::-;26221:6;26229;26282:2;26270:9;26261:7;26257:23;26253:32;26250:52;;;26298:1;26295;26288:12;26250:52;26330:9;26324:16;26349:28;26371:5;26349:28;:::i;:::-;26445:2;26430:18;;26424:25;26396:5;;-1:-1:-1;;;;;;26461:30:1;;26458:50;;;26504:1;26501;26494:12;26458:50;26527:22;;26580:4;26572:13;;26568:27;-1:-1:-1;26558:55:1;;26609:1;26606;26599:12;26558:55;26638:2;26632:9;26660:32;26689:2;26660:32;:::i;:::-;26721:2;26715:9;26733:31;26761:2;26753:6;26733:31;:::i;:::-;26788:2;26780:6;26773:18;26828:7;26823:2;26818;26814;26810:11;26806:20;26803:33;26800:53;;;26849:1;26846;26839:12;26800:53;26862:55;26914:2;26909;26901:6;26897:15;26892:2;26888;26884:11;26862:55;:::i;:::-;26936:6;26926:16;;;;;;26136:812;;;;;:::o;26953:179::-;26988:3;27030:1;27012:16;27009:23;27006:120;;;27076:1;27073;27070;27055:23;-1:-1:-1;27113:1:1;27107:8;27102:3;27098:18;27006:120;26953:179;:::o;27137:671::-;27176:3;27218:4;27200:16;27197:26;27194:39;;;27137:671;:::o;27194:39::-;27260:2;27254:9;-1:-1:-1;;27325:16:1;27321:25;;27318:1;27254:9;27297:50;27376:4;27370:11;27400:16;-1:-1:-1;;;;;27506:2:1;27499:4;27491:6;27487:17;27484:25;27479:2;27471:6;27468:14;27465:45;27462:58;;;27513:5;;;;;27137:671;:::o;27462:58::-;27550:6;27544:4;27540:17;27529:28;;27586:3;27580:10;27613:2;27605:6;27602:14;27599:27;;;27619:5;;;;;;27137:671;:::o;27599:27::-;27703:2;27684:16;27678:4;27674:27;27670:36;27663:4;27654:6;27649:3;27645:16;27641:27;27638:69;27635:82;;;27710:5;;;;;;27137:671;:::o;27635:82::-;27726:57;27777:4;27768:6;27760;27756:19;27752:30;27746:4;27726:57;:::i;:::-;-1:-1:-1;27799:3:1;;27137:671;-1:-1:-1;;;;;27137:671:1:o;27813:442::-;28038:6;28027:9;28020:25;28081:6;28076:2;28065:9;28061:18;28054:34;28138:6;28131:14;28124:22;28119:2;28108:9;28104:18;28097:50;28183:3;28178:2;28167:9;28163:18;28156:31;28001:4;28204:45;28244:3;28233:9;28229:19;28221:6;28204:45;:::i;:::-;28196:53;27813:442;-1:-1:-1;;;;;;27813:442:1:o;28260:359::-;28463:6;28452:9;28445:25;28506:6;28501:2;28490:9;28486:18;28479:34;28549:2;28544;28533:9;28529:18;28522:30;28426:4;28569:44;28609:2;28598:9;28594:18;28586:6;28569:44;:::i;28624:629::-;28911:3;28900:9;28893:22;28874:4;28938:45;28978:3;28967:9;28963:19;28955:6;28938:45;:::i;:::-;-1:-1:-1;;;;;29019:32:1;;29014:2;28999:18;;28992:60;29083:2;29068:18;;29061:34;;;29131:22;;;29126:2;29111:18;;29104:50;29171:32;29135:6;29188;29171:32;:::i;:::-;29163:40;;;29240:6;29234:3;29223:9;29219:19;29212:35;28624:629;;;;;;;;:::o;29258:168::-;29298:7;29364:1;29360;29356:6;29352:14;29349:1;29346:21;29341:1;29334:9;29327:17;29323:45;29320:71;;;29371:18;;:::i;:::-;-1:-1:-1;29411:9:1;;29258:168::o;29776:253::-;29816:3;-1:-1:-1;;;;;29905:2:1;29902:1;29898:10;29935:2;29932:1;29928:10;29966:3;29962:2;29958:12;29953:3;29950:21;29947:47;;;29974:18;;:::i;:::-;30010:13;;29776:253;-1:-1:-1;;;;29776:253:1:o;30456:337::-;30658:2;30640:21;;;30697:2;30677:18;;;30670:30;-1:-1:-1;;;30731:2:1;30716:18;;30709:43;30784:2;30769:18;;30456:337::o;30798:329::-;31000:2;30982:21;;;31039:1;31019:18;;;31012:29;-1:-1:-1;;;31072:2:1;31057:18;;31050:36;31118:2;31103:18;;30798:329::o;31478:522::-;31556:4;31562:6;31622:11;31609:25;31716:2;31712:7;31701:8;31685:14;31681:29;31677:43;31657:18;31653:68;31643:96;;31735:1;31732;31725:12;31643:96;31762:33;;31814:20;;;-1:-1:-1;;;;;;31846:30:1;;31843:50;;;31889:1;31886;31879:12;31843:50;31922:4;31910:17;;-1:-1:-1;31953:14:1;31949:27;;;31939:38;;31936:58;;;31990:1;31987;31980:12;32005:328;32186:2;32175:9;32168:21;32149:4;32206:62;32264:2;32253:9;32249:18;32241:6;32233;32206:62;:::i;:::-;32198:70;;32318:6;32311:14;32304:22;32299:2;32288:9;32284:18;32277:50;32005:328;;;;;;:::o;32682:290::-;32859:2;32848:9;32841:21;32822:4;32879:44;32919:2;32908:9;32904:18;32896:6;32879:44;:::i;:::-;32871:52;;32959:6;32954:2;32943:9;32939:18;32932:34;32682:290;;;;;:::o;33318:649::-;33607:3;33596:9;33589:22;33570:4;33634:63;33692:3;33681:9;33677:19;33669:6;33661;33634:63;:::i;:::-;-1:-1:-1;;;;;33733:32:1;;33728:2;33713:18;;33706:60;33797:2;33782:18;;33775:34;;;33845:22;;;33840:2;33825:18;;33818:50;33885:32;33849:6;33902;33885:32;:::i;:::-;33877:40;;;33954:6;33948:3;33937:9;33933:19;33926:35;33318:649;;;;;;;;;:::o;33972:136::-;34011:3;34039:5;34029:39;;34048:18;;:::i;:::-;-1:-1:-1;;;34084:18:1;;33972:136::o;34113:300::-;34284:2;34273:9;34266:21;34247:4;34304:44;34344:2;34333:9;34329:18;34321:6;34304:44;:::i;:::-;34296:52;;34398:6;34391:14;34384:22;34379:2;34368:9;34364:18;34357:50;34113:300;;;;;:::o

Swarm Source

ipfs://ba584322a3bbbe0ff4a3893e9de722b0475cfd58467a20f7d12e2d9998b0f817
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.